@wirecat/mail-cli 0.5.0 → 0.6.0
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/CHANGELOG.md +107 -0
- package/README.md +41 -10
- package/dist/bin/mail.js +2 -2
- package/dist/bundle/{all-profiles-GR5JXYEQ.js → all-profiles-GBFTKUHA.js} +9 -9
- package/dist/bundle/{anthropic-REBXE65F.js → anthropic-PTSCWUG6.js} +6 -6
- package/dist/bundle/{app-server-QJ7ICQXZ.js → app-server-5VJ2WCKJ.js} +46 -46
- package/dist/bundle/{bun-WAX4QHW5.js → bun-2KRUBPIN.js} +2 -2
- package/dist/bundle/{bun-sqlite-5S7TQ4SG.js → bun-sqlite-ELSRSJBM.js} +5 -5
- package/dist/bundle/{chunk-5CXAH4Y6.js → chunk-3KY7DA5A.js} +428 -434
- package/dist/bundle/{chunk-7JCRQX56.js → chunk-4PKHZQIM.js} +8 -8
- package/dist/bundle/{chunk-QXOSGGKS.js → chunk-56PI2BRH.js} +1 -1
- package/dist/bundle/{chunk-LFRHIXCF.js → chunk-5AQKM47C.js} +3 -3
- package/dist/bundle/{chunk-S677WGOQ.js → chunk-5KHJUYHQ.js} +8 -8
- package/dist/bundle/{chunk-IBYTYIYO.js → chunk-6MV2TBDB.js} +57 -54
- package/dist/bundle/{chunk-M6BDHZON.js → chunk-AGX7NR3S.js} +26 -13
- package/dist/bundle/{chunk-ZD3WUGR2.js → chunk-B337KHJ5.js} +4 -4
- package/dist/bundle/{chunk-5BVIWP3S.js → chunk-BM445GYF.js} +2 -2
- package/dist/bundle/{chunk-WNI5BZFB.js → chunk-BVIHT7KR.js} +9 -9
- package/dist/bundle/{chunk-6EO7GVYJ.js → chunk-DA46WQEA.js} +1 -1
- package/dist/bundle/{chunk-2MRECWJZ.js → chunk-DV4RSEAH.js} +6 -6
- package/dist/bundle/{chunk-ESNNQA7D.js → chunk-ES4PWHBJ.js} +28 -28
- package/dist/bundle/{chunk-KIDF77MA.js → chunk-FIQOBLHS.js} +1 -1
- package/dist/bundle/{chunk-TI6VBZKJ.js → chunk-FUB3X25H.js} +4 -4
- package/dist/bundle/{chunk-EL554DV2.js → chunk-H4VFIH5W.js} +3 -3
- package/dist/bundle/{chunk-7A7BHABA.js → chunk-J4C32YKH.js} +1 -1
- package/dist/bundle/{chunk-MMDCL42A.js → chunk-J5MYH4L5.js} +12 -6
- package/dist/bundle/{chunk-FSUNGHRI.js → chunk-JFJTDL22.js} +47 -46
- package/dist/bundle/{chunk-SWJAG5IE.js → chunk-JIQAFFPV.js} +2 -2
- package/dist/bundle/{chunk-2U4IANVV.js → chunk-JKA2AICL.js} +2 -2
- package/dist/bundle/{dist-KJOAJ6NF.js → chunk-JKLQHPED.js} +16 -116
- package/dist/bundle/{chunk-J3QXTBD2.js → chunk-JLRMSNPX.js} +18 -18
- package/dist/bundle/{chunk-4BMNP2FT.js → chunk-K5JUROGN.js} +1 -1
- package/dist/bundle/{chunk-7F3NDIYL.js → chunk-KUQYWIVR.js} +6 -6
- package/dist/bundle/{chunk-DXDQOZ2P.js → chunk-LWTG5UOF.js} +2 -2
- package/dist/bundle/{chunk-YKPBC3NL.js → chunk-M7V3GSJQ.js} +1 -1
- package/dist/bundle/chunk-MD2J3POF.js +52 -0
- package/dist/bundle/{chunk-MQUJEQTU.js → chunk-NCWO2FNC.js} +2 -2
- package/dist/bundle/{chunk-BLS5YG77.js → chunk-NOU6MWEM.js} +2 -2
- package/dist/bundle/{chunk-LQ37ALDJ.js → chunk-NXJLC2WK.js} +8 -8
- package/dist/bundle/{chunk-F3NYA4KN.js → chunk-NZB4WGQS.js} +6 -6
- package/dist/bundle/{chunk-2FXVBCA3.js → chunk-O555ZEQR.js} +4 -4
- package/dist/bundle/{chunk-7XNPSIWD.js → chunk-O7VK7CJX.js} +2 -2
- package/dist/bundle/{chunk-JJBQPA7D.js → chunk-OHV5RDFE.js} +4 -4
- package/dist/bundle/{chunk-BFJV4FWJ.js → chunk-P5B7IFOG.js} +2 -2
- package/dist/bundle/{chunk-5INWLYBD.js → chunk-PBYDT3CG.js} +13 -3
- package/dist/bundle/{chunk-AFCGOZR7.js → chunk-PHPC72DP.js} +7 -7
- package/dist/bundle/{chunk-B5WSIWY5.js → chunk-PKU6V4EQ.js} +17 -17
- package/dist/bundle/{chunk-P7P5MNAU.js → chunk-QZBT6BOU.js} +1 -1
- package/dist/bundle/{chunk-EB3R2PV3.js → chunk-RAZOSYEO.js} +23 -23
- package/dist/bundle/{chunk-IWDOGGMY.js → chunk-RDSAI6DC.js} +398 -293
- package/dist/bundle/{chunk-PJCTWPJB.js → chunk-SAZJDKEI.js} +8 -8
- package/dist/bundle/{chunk-QX7RCLRS.js → chunk-SQLCCKEL.js} +1 -1
- package/dist/bundle/{chunk-VXAZZGXE.js → chunk-TKJDGAHT.js} +23 -23
- package/dist/bundle/{chunk-6TY3DGCC.js → chunk-TPNC5VCJ.js} +4 -4
- package/dist/bundle/{chunk-6GE3EADU.js → chunk-UAXBLHZK.js} +2 -2
- package/dist/bundle/{chunk-SQ7KOBRA.js → chunk-VEAP5RVI.js} +10 -8
- package/dist/bundle/{chunk-2YQNBIDQ.js → chunk-VF24ZAPX.js} +4 -4
- package/dist/bundle/{chunk-LNS27BTB.js → chunk-WCL3WBH5.js} +3 -3
- package/dist/bundle/{chunk-4XJ4AM3K.js → chunk-WGK4AIRL.js} +12 -12
- package/dist/bundle/{chunk-VDAIJM5L.js → chunk-XERTHQ6D.js} +88 -34
- package/dist/bundle/{chunk-YRGBZZUW.js → chunk-XZGLY2LU.js} +14 -14
- package/dist/bundle/{chunk-WNCCYHRV.js → chunk-Y7JKWQC2.js} +96 -94
- package/dist/bundle/{chunk-LOA4X6JW.js → chunk-YBJMBPL7.js} +6 -6
- package/dist/bundle/{chunk-5FK6RD4M.js → chunk-ZMMIIBTM.js} +73 -57
- package/dist/bundle/{chunk-HCMUGUAG.js → chunk-ZPGLWMNH.js} +3 -3
- package/dist/bundle/{chunk-CEAANMJ2.js → chunk-ZRYFEEXZ.js} +3 -3
- package/dist/bundle/command-contract-NZF4B5OR.js +34 -0
- package/dist/bundle/{decode-D7BDVIVB.js → decode-HVXDCQ63.js} +5 -5
- package/dist/bundle/{dispatch-EUKKT3PD.js → dispatch-GDAH4JHS.js} +8 -8
- package/dist/bundle/dist-43DZXMBL.js +134 -0
- package/dist/bundle/{echarts-IVRX7XHP.js → echarts-LZ74IXHG.js} +2 -2
- package/dist/bundle/{embed-X527RBTG.js → embed-OQF5U2C6.js} +6 -6
- package/dist/bundle/{embedder-F4PSJS6S.js → embedder-OCWQAWKO.js} +9 -9
- package/dist/bundle/{failure-OAIC5VAP.js → failure-6COJAO7T.js} +2 -2
- package/dist/bundle/{first-run-M5CIX6NA.js → first-run-MTZPUPGA.js} +11 -11
- package/dist/bundle/first-screen-4PBS6QK5.js +32 -0
- package/dist/bundle/{instructions-UX36BT5F.js → instructions-M6F4FP7U.js} +1 -1
- package/dist/bundle/mail.js +12 -11
- package/dist/bundle/{mcp-L7SRVDRN.js → mcp-GAPDLFWA.js} +2 -2
- package/dist/bundle/{node-OXT7WE2T.js → node-NYBBFHGN.js} +2 -2
- package/dist/bundle/{node-sqlite-X2PSEHA4.js → node-sqlite-CWCNWO75.js} +5 -5
- package/dist/bundle/{oauth-MYK4BSYN.js → oauth-DVX45EME.js} +7 -7
- package/dist/bundle/{open-GONIP2DH.js → open-M7EQWWHL.js} +4 -4
- package/dist/bundle/{openai-YJFNUOQT.js → openai-63KRU5H2.js} +14 -14
- package/dist/bundle/{process-7IEUUSRK.js → process-DV5GQIGM.js} +1 -1
- package/dist/bundle/{program-Q73TTG3E.js → program-EPR3QCMX.js} +20562 -7617
- package/dist/bundle/{prompt-SKQ72KN7.js → prompt-EPWPWTB3.js} +5 -5
- package/dist/bundle/{recognize-GC7CU2DB.js → recognize-R46KDXK4.js} +4 -4
- package/dist/bundle/{remote-UEXFZP2I.js → remote-RENCYB5X.js} +7 -7
- package/dist/bundle/{rerank-2U2NDEZP.js → rerank-VHPC5O73.js} +7 -7
- package/dist/bundle/{serve-OOGKFEWL.js → serve-KCH3ORYO.js} +9 -9
- package/dist/bundle/server-FMCPE2ZK.js +63 -0
- package/dist/bundle/{server-FZ3LFQTF.js → server-HZVXSK7B.js} +38 -38
- package/dist/bundle/{sqlite-runtime-GIQSW6LJ.js → sqlite-runtime-XP7ZJCKJ.js} +5 -5
- package/dist/bundle/{state-EMFXPQVZ.js → state-GQ4MEQJ5.js} +6 -6
- package/dist/bundle/{store-LDI62AUG.js → store-CQNLNINW.js} +13 -13
- package/dist/bundle/{store-BDU4UPNK.js → store-WT7YTR3Y.js} +15 -15
- package/dist/bundle/store-maintenance-command-YYR42IT4.js +52 -0
- package/dist/commands/attachments.d.ts +3 -0
- package/dist/commands/attachments.d.ts.map +1 -0
- package/dist/commands/attachments.js +97 -0
- package/dist/commands/attachments.js.map +1 -0
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +11 -1
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/drafts-send.d.ts +7 -0
- package/dist/commands/drafts-send.d.ts.map +1 -0
- package/dist/commands/drafts-send.js +58 -0
- package/dist/commands/drafts-send.js.map +1 -0
- package/dist/commands/drafts.d.ts +3 -0
- package/dist/commands/drafts.d.ts.map +1 -0
- package/dist/commands/drafts.js +239 -0
- package/dist/commands/drafts.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +275 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/folders.d.ts.map +1 -1
- package/dist/commands/folders.js +120 -2
- package/dist/commands/folders.js.map +1 -1
- package/dist/commands/messages.d.ts +25 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +502 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/read.d.ts +4 -1
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +12 -2
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/rules.d.ts +3 -0
- package/dist/commands/rules.d.ts.map +1 -0
- package/dist/commands/rules.js +292 -0
- package/dist/commands/rules.js.map +1 -0
- package/dist/commands/send.d.ts +39 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +309 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/server-search.d.ts +8 -0
- package/dist/commands/server-search.d.ts.map +1 -0
- package/dist/commands/server-search.js +38 -0
- package/dist/commands/server-search.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +90 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sync.d.ts +7 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +22 -7
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/tags.d.ts +3 -0
- package/dist/commands/tags.d.ts.map +1 -0
- package/dist/commands/tags.js +144 -0
- package/dist/commands/tags.js.map +1 -0
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +47 -1
- package/dist/config.js.map +1 -1
- package/dist/export/format.d.ts +19 -0
- package/dist/export/format.d.ts.map +1 -0
- package/dist/export/format.js +40 -0
- package/dist/export/format.js.map +1 -0
- package/dist/export/journal.d.ts +32 -0
- package/dist/export/journal.d.ts.map +1 -0
- package/dist/export/journal.js +84 -0
- package/dist/export/journal.js.map +1 -0
- package/dist/export/write.d.ts +14 -0
- package/dist/export/write.d.ts.map +1 -0
- package/dist/export/write.js +42 -0
- package/dist/export/write.js.map +1 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +3 -0
- package/dist/identity.js.map +1 -1
- package/dist/mail/backend.d.ts +81 -1
- package/dist/mail/backend.d.ts.map +1 -1
- package/dist/mail/changes.d.ts +91 -0
- package/dist/mail/changes.d.ts.map +1 -0
- package/dist/mail/changes.js +198 -0
- package/dist/mail/changes.js.map +1 -0
- package/dist/mail/cleanup.d.ts +41 -0
- package/dist/mail/cleanup.d.ts.map +1 -0
- package/dist/mail/cleanup.js +119 -0
- package/dist/mail/cleanup.js.map +1 -0
- package/dist/mail/compose.d.ts +73 -0
- package/dist/mail/compose.d.ts.map +1 -0
- package/dist/mail/compose.js +122 -0
- package/dist/mail/compose.js.map +1 -0
- package/dist/mail/doctor.d.ts +25 -0
- package/dist/mail/doctor.d.ts.map +1 -0
- package/dist/mail/doctor.js +39 -0
- package/dist/mail/doctor.js.map +1 -0
- package/dist/mail/drafts.d.ts +54 -0
- package/dist/mail/drafts.d.ts.map +1 -0
- package/dist/mail/drafts.js +104 -0
- package/dist/mail/drafts.js.map +1 -0
- package/dist/mail/imap/connection.d.ts +7 -0
- package/dist/mail/imap/connection.d.ts.map +1 -1
- package/dist/mail/imap/connection.js +24 -2
- package/dist/mail/imap/connection.js.map +1 -1
- package/dist/mail/imap/index.d.ts +1 -1
- package/dist/mail/imap/index.d.ts.map +1 -1
- package/dist/mail/imap/index.js +12 -2
- package/dist/mail/imap/index.js.map +1 -1
- package/dist/mail/imap/messages.d.ts +5 -6
- package/dist/mail/imap/messages.d.ts.map +1 -1
- package/dist/mail/imap/messages.js +14 -28
- package/dist/mail/imap/messages.js.map +1 -1
- package/dist/mail/imap/read.d.ts.map +1 -1
- package/dist/mail/imap/read.js +27 -13
- package/dist/mail/imap/read.js.map +1 -1
- package/dist/mail/imap/search.d.ts +14 -0
- package/dist/mail/imap/search.d.ts.map +1 -0
- package/dist/mail/imap/search.js +49 -0
- package/dist/mail/imap/search.js.map +1 -0
- package/dist/mail/imap/write.d.ts +5 -0
- package/dist/mail/imap/write.d.ts.map +1 -0
- package/dist/mail/imap/write.js +93 -0
- package/dist/mail/imap/write.js.map +1 -0
- package/dist/mail/organise.d.ts +116 -0
- package/dist/mail/organise.d.ts.map +1 -0
- package/dist/mail/organise.js +531 -0
- package/dist/mail/organise.js.map +1 -0
- package/dist/mail/rethread.d.ts +1 -2
- package/dist/mail/rethread.d.ts.map +1 -1
- package/dist/mail/rethread.js +8 -3
- package/dist/mail/rethread.js.map +1 -1
- package/dist/mail/rules/apply.d.ts +40 -0
- package/dist/mail/rules/apply.d.ts.map +1 -0
- package/dist/mail/rules/apply.js +114 -0
- package/dist/mail/rules/apply.js.map +1 -0
- package/dist/mail/rules/file.d.ts +9 -0
- package/dist/mail/rules/file.d.ts.map +1 -0
- package/dist/mail/rules/file.js +51 -0
- package/dist/mail/rules/file.js.map +1 -0
- package/dist/mail/rules/filters.d.ts +11 -0
- package/dist/mail/rules/filters.d.ts.map +1 -0
- package/dist/mail/rules/filters.js +150 -0
- package/dist/mail/rules/filters.js.map +1 -0
- package/dist/mail/rules/folders.d.ts +11 -0
- package/dist/mail/rules/folders.d.ts.map +1 -0
- package/dist/mail/rules/folders.js +17 -0
- package/dist/mail/rules/folders.js.map +1 -0
- package/dist/mail/rules/query.d.ts +15 -0
- package/dist/mail/rules/query.d.ts.map +1 -0
- package/dist/mail/rules/query.js +103 -0
- package/dist/mail/rules/query.js.map +1 -0
- package/dist/mail/rules/store.d.ts +9 -0
- package/dist/mail/rules/store.d.ts.map +1 -0
- package/dist/mail/rules/store.js +17 -0
- package/dist/mail/rules/store.js.map +1 -0
- package/dist/mail/save.d.ts +12 -0
- package/dist/mail/save.d.ts.map +1 -0
- package/dist/mail/save.js +71 -0
- package/dist/mail/save.js.map +1 -0
- package/dist/mail/send.d.ts +67 -0
- package/dist/mail/send.d.ts.map +1 -0
- package/dist/mail/send.js +172 -0
- package/dist/mail/send.js.map +1 -0
- package/dist/mail/smtp.d.ts +4 -0
- package/dist/mail/smtp.d.ts.map +1 -0
- package/dist/mail/smtp.js +97 -0
- package/dist/mail/smtp.js.map +1 -0
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +26 -4
- package/dist/program.js.map +1 -1
- package/dist/providers.d.ts +71 -6
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +38 -9
- package/dist/providers.js.map +1 -1
- package/dist/reasons.d.ts +9 -0
- package/dist/reasons.d.ts.map +1 -0
- package/dist/reasons.js +21 -0
- package/dist/reasons.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +8 -5
- package/skills/mail-cli/SKILL.md +30 -3
- package/dist/bundle/chunk-YD5WV757.js +0 -27
- package/dist/bundle/command-contract-GPUED3GT.js +0 -34
- package/dist/bundle/first-screen-M7MT776O.js +0 -32
- package/dist/bundle/server-4JMHDHZ7.js +0 -63
- package/dist/bundle/store-maintenance-command-OFRPORN2.js +0 -52
- /package/dist/bundle/{chunk-NPGVOZVK.js → chunk-WJWLHLQ7.js} +0 -0
package/dist/mail/imap/index.js
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
|
+
import { smtpSubmit } from "../smtp.js";
|
|
1
2
|
import { imapAccount } from "./account.js";
|
|
2
3
|
import { imapConnections } from "./connection.js";
|
|
3
4
|
import { imapReads } from "./read.js";
|
|
5
|
+
import { imapQuery } from "./search.js";
|
|
6
|
+
import { imapWrites } from "./write.js";
|
|
4
7
|
export { IMAP_DEFAULTS } from "./connection.js";
|
|
5
8
|
export { mapImapError } from "./errors.js";
|
|
6
|
-
/** The IMAP adapter of the mail backend
|
|
9
|
+
/** The IMAP adapter of the mail backend, its connections opened on first use and closed by `close`. */
|
|
7
10
|
export const imapBackend = (endpoint, password, tuning = {}) => {
|
|
8
11
|
const pool = imapConnections(endpoint, password, tuning);
|
|
9
|
-
return {
|
|
12
|
+
return {
|
|
13
|
+
...imapReads(pool, tuning),
|
|
14
|
+
...imapAccount(pool, endpoint.login),
|
|
15
|
+
serverQuery: imapQuery(pool),
|
|
16
|
+
writes: imapWrites(pool),
|
|
17
|
+
...(endpoint.smtp ? { submit: smtpSubmit({ ...endpoint.smtp, login: endpoint.login }, password, tuning) } : {}),
|
|
18
|
+
close: pool.close,
|
|
19
|
+
};
|
|
10
20
|
};
|
|
11
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mail/imap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAmB,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mail/imap/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAmB,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,EAAE,aAAa,EAAmB,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,uGAAuG;AACvG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAsB,EAAE,QAAgB,EAAE,MAAM,GAAe,EAAE,EAAe,EAAE;IAC5G,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IACxD,OAAO;QACL,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;QAC1B,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC;QAC5B,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;QACxB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -3,16 +3,15 @@ import type { FetchMessageObject, ListResponse } from "imapflow";
|
|
|
3
3
|
/** cli-core's fields for the owner's rules and the probe, and the two that tie a reply to its thread. */
|
|
4
4
|
export declare const HEADER_FIELDS: string[];
|
|
5
5
|
export declare const quickOf: (message: FetchMessageObject, folder: string) => Quick;
|
|
6
|
-
/** Without a stable id the Message-ID is the identity; without that, the UID, which means nothing without UIDVALIDITY. */
|
|
7
|
-
export declare const idsOf: (messageId: string | undefined, folder: string, validity: string, uid: string, root?: string) => {
|
|
8
|
-
messageId: string;
|
|
9
|
-
threadId: string;
|
|
10
|
-
};
|
|
11
6
|
/** The ids of a message read as bytes, worked out as `listedOf` works them out from a listing. */
|
|
12
7
|
export declare const rawIdsOf: (raw: Uint8Array, folder: string, validity: string, uid: string) => {
|
|
13
8
|
messageId: string;
|
|
14
9
|
threadId: string;
|
|
15
10
|
};
|
|
16
|
-
|
|
11
|
+
/**
|
|
12
|
+
* `gmail`: the connection is Gmail's, so imapflow's emailId and threadId are X-GM-MSGID and X-GM-THRID, which stored
|
|
13
|
+
* Gmail mail is keyed on. Anywhere else the Message-ID is the id, as memo makes it.
|
|
14
|
+
*/
|
|
15
|
+
export declare const listedOf: (message: FetchMessageObject, folder: string, validity: string, gmail: boolean) => Listed;
|
|
17
16
|
export declare const roleOf: (entry: ListResponse) => string | null;
|
|
18
17
|
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/messages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,MAAM,EAGX,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEhE,yGAAyG;AACzG,eAAO,MAAM,aAAa,UAAkE,CAAA;AAoB5F,eAAO,MAAM,OAAO,YAAa,kBAAkB,UAAU,MAAM,KAAG,KAYrE,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,QAAQ,QAAS,UAAU,UAAU,MAAM,YAAY,MAAM,OAAO,MAAM;;;CAC5B,CAAA;AAE3D;;;GAGG;AACH,eAAO,MAAM,QAAQ,YAAa,kBAAkB,UAAU,MAAM,YAAY,MAAM,SAAS,OAAO,KAAG,MAOxG,CAAA;AAED,eAAO,MAAM,MAAM,UAAW,YAAY,KAAG,MAAM,GAAG,IAGrD,CAAA"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { headersOf, labelName, HEADER_FIELDS as MAIL_HEADER_FIELDS, } from "@wirecat/cli-core/mail";
|
|
1
|
+
import { decodedLabelName, headersOf, HEADER_FIELDS as MAIL_HEADER_FIELDS, mailIds, } from "@wirecat/cli-core/mail";
|
|
3
2
|
/** cli-core's fields for the owner's rules and the probe, and the two that tie a reply to its thread. */
|
|
4
3
|
export const HEADER_FIELDS = [...MAIL_HEADER_FIELDS.split(" "), "IN-REPLY-TO", "REFERENCES"];
|
|
5
|
-
const digest = (id) => `imap:${createHash("sha256").update(id).digest("hex")}`;
|
|
6
4
|
const headTextOf = (raw) => {
|
|
7
5
|
const bytes = Buffer.from(raw.buffer, raw.byteOffset, raw.byteLength);
|
|
8
6
|
const end = [bytes.indexOf("\r\n\r\n"), bytes.indexOf("\n\n")]
|
|
@@ -10,16 +8,12 @@ const headTextOf = (raw) => {
|
|
|
10
8
|
.reduce((first, at) => Math.min(first, at), bytes.length);
|
|
11
9
|
return bytes.subarray(0, end).toString("utf8");
|
|
12
10
|
};
|
|
13
|
-
const fieldOf = (head, name) => new RegExp(`^${name}:[ \\t]*(.*)$`, "im").exec(head.replace(/\r?\n[ \t]+/g, " "))?.[1]?.trim();
|
|
14
11
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
12
|
+
* As memo names them, so the store's `label:Inbox` mailboxes keep matching; a flagged message is Starred anywhere.
|
|
13
|
+
* imapflow has decoded them already.
|
|
17
14
|
*/
|
|
18
|
-
const threadRootOf = (head) => /<[^<>\s]+>/.exec(fieldOf(head, "references") ?? "")?.[0] ??
|
|
19
|
-
/<[^<>\s]+>/.exec(fieldOf(head, "in-reply-to") ?? "")?.[0];
|
|
20
|
-
/** As memo names them, so the store's `label:Inbox` mailboxes keep matching; a flagged message is Starred anywhere. */
|
|
21
15
|
const labelsOf = (raw, flagged) => {
|
|
22
|
-
const names = new Set([...(raw ?? [])].map(
|
|
16
|
+
const names = new Set([...(raw ?? [])].map(decodedLabelName));
|
|
23
17
|
if (flagged)
|
|
24
18
|
names.add("Starred");
|
|
25
19
|
return [...names].sort();
|
|
@@ -37,26 +31,18 @@ export const quickOf = (message, folder) => {
|
|
|
37
31
|
labels: labelsOf(message.labels, flags.has("\\Flagged")),
|
|
38
32
|
};
|
|
39
33
|
};
|
|
40
|
-
/** Without a stable id the Message-ID is the identity; without that, the UID, which means nothing without UIDVALIDITY. */
|
|
41
|
-
export const idsOf = (messageId, folder, validity, uid, root) => {
|
|
42
|
-
const identity = messageId ?? `uid:${folder}:${validity}:${uid}`;
|
|
43
|
-
return { messageId: digest(identity), threadId: digest(root ?? identity) };
|
|
44
|
-
};
|
|
45
34
|
/** The ids of a message read as bytes, worked out as `listedOf` works them out from a listing. */
|
|
46
|
-
export const rawIdsOf = (raw, folder, validity, uid) => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
35
|
+
export const rawIdsOf = (raw, folder, validity, uid) => mailIds({ head: headTextOf(raw), folder, validity, uid });
|
|
36
|
+
/**
|
|
37
|
+
* `gmail`: the connection is Gmail's, so imapflow's emailId and threadId are X-GM-MSGID and X-GM-THRID, which stored
|
|
38
|
+
* Gmail mail is keyed on. Anywhere else the Message-ID is the id, as memo makes it.
|
|
39
|
+
*/
|
|
40
|
+
export const listedOf = (message, folder, validity, gmail) => {
|
|
51
41
|
const head = message.headers ? message.headers.toString("utf8") : "";
|
|
52
|
-
const ids =
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
...(message.emailId ? { messageId: String(message.emailId) } : { messageId: ids.messageId }),
|
|
57
|
-
threadId: message.threadId ? String(message.threadId) : ids.threadId,
|
|
58
|
-
headers: headersOf(head),
|
|
59
|
-
};
|
|
42
|
+
const ids = gmail && message.emailId && message.threadId
|
|
43
|
+
? { messageId: String(message.emailId), threadId: String(message.threadId) }
|
|
44
|
+
: mailIds({ messageId: message.envelope?.messageId, head, folder, validity, uid: String(message.uid) });
|
|
45
|
+
return { ...quickOf(message, folder), ...ids, headers: headersOf(head) };
|
|
60
46
|
};
|
|
61
47
|
export const roleOf = (entry) => {
|
|
62
48
|
if (entry.path.toUpperCase() === "INBOX")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/mail/imap/messages.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/mail/imap/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,UAAU,EAAmB,MAAM,wBAAwB,CAAA;AAEjF,OAAO,EAAE,KAAK,WAAW,EAAiB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAsDlF,KAAK,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC,GAC/G,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAC,CAAA;AAEvC,0FAA0F;AAC1F,eAAO,MAAM,SAAS,SAAU,WAAW,WAAU,UAAU,KAAQ,KA0JtE,CAAA"}
|
package/dist/mail/imap/read.js
CHANGED
|
@@ -39,6 +39,16 @@ const groupByFolder = (items) => {
|
|
|
39
39
|
}
|
|
40
40
|
return byFolder;
|
|
41
41
|
};
|
|
42
|
+
/** imapflow asks a server with OBJECTID for EMAILID, not X-GM-MSGID: Gmail's stored mail would get new ids. */
|
|
43
|
+
const gmailOf = (open) => {
|
|
44
|
+
if (!open.capabilities.has("X-GM-EXT-1"))
|
|
45
|
+
return false;
|
|
46
|
+
if (open.capabilities.has("OBJECTID"))
|
|
47
|
+
throw new CliError("provider_error", "Gmail now announces OBJECTID; this mail build cannot read its X-GM-MSGID ids", {
|
|
48
|
+
reason: "mail.gmail-objectid",
|
|
49
|
+
});
|
|
50
|
+
return true;
|
|
51
|
+
};
|
|
42
52
|
/** The calls cli-core's sync makes to read a folder; none of them changes the mailbox. */
|
|
43
53
|
export const imapReads = (pool, tuning = {}) => {
|
|
44
54
|
const { listSize, quickSize, fetchSize, fetchBytes } = { ...IMAP_DEFAULTS, ...tuning };
|
|
@@ -46,8 +56,8 @@ export const imapReads = (pool, tuning = {}) => {
|
|
|
46
56
|
const search = async (since, folder) => {
|
|
47
57
|
const found = await inFolder(folder, async (open, validity) => {
|
|
48
58
|
const uids = await open.search({ since }, { uid: true });
|
|
49
|
-
//
|
|
50
|
-
const quick = !open.capabilities.has("
|
|
59
|
+
// Only Gmail's ids come free; elsewhere the id is the Message-ID, and the envelope costs a read per message.
|
|
60
|
+
const quick = !open.capabilities.has("X-GM-EXT-1");
|
|
51
61
|
return { ...(validity ? { validity } : {}), uids: (uids || []).map(String), ...(quick ? { quick } : {}) };
|
|
52
62
|
});
|
|
53
63
|
if (found.validity)
|
|
@@ -74,16 +84,20 @@ export const imapReads = (pool, tuning = {}) => {
|
|
|
74
84
|
const searched = options?.searched ?? (await search(since, folder));
|
|
75
85
|
const validity = validityOf(searched, folder);
|
|
76
86
|
// A message the server answers with `NO [UNAVAILABLE]` is simply absent here; the sync asks for it again later.
|
|
77
|
-
const listing = (batches) => spread(folder, batches, (open, batch) =>
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
const listing = (batches) => spread(folder, batches, async (open, batch) => {
|
|
88
|
+
const gmail = gmailOf(open);
|
|
89
|
+
const fetched = await open.fetchAll(batch.join(","), {
|
|
90
|
+
uid: true,
|
|
91
|
+
flags: true,
|
|
92
|
+
internalDate: true,
|
|
93
|
+
size: true,
|
|
94
|
+
envelope: true,
|
|
95
|
+
threadId: true,
|
|
96
|
+
labels: true,
|
|
97
|
+
headers: HEADER_FIELDS,
|
|
98
|
+
}, { uid: true });
|
|
99
|
+
return fetched.map((message) => listedOf(message, folder, validity, gmail));
|
|
100
|
+
}, validity, (error) => {
|
|
87
101
|
const mapped = mapImapError(error);
|
|
88
102
|
if (mapped.code !== "provider_unavailable")
|
|
89
103
|
throw mapped;
|
|
@@ -103,7 +117,7 @@ export const imapReads = (pool, tuning = {}) => {
|
|
|
103
117
|
for (const message of single)
|
|
104
118
|
messages.push(message);
|
|
105
119
|
}
|
|
106
|
-
return messages
|
|
120
|
+
return messages;
|
|
107
121
|
},
|
|
108
122
|
quick: async (_since, folder, { searched }) => {
|
|
109
123
|
const validity = validityOf(searched, folder);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/mail/imap/read.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/mail/imap/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MailCriteria, Searched } from "@wirecat/cli-core/mail";
|
|
2
|
+
import type { SearchObject } from "imapflow";
|
|
3
|
+
import type { Connections } from "./connection.js";
|
|
4
|
+
/** How a provider's server is searched: Gmail's own syntax as X-GM-RAW, or RFC 3501 SEARCH keys. */
|
|
5
|
+
export type SearchSyntax = "gmail" | "imap";
|
|
6
|
+
/**
|
|
7
|
+
* Gmail's search operators (https://support.google.com/mail/answer/7190). Gmail has no body-only operator, so a
|
|
8
|
+
* `body:` value is a plain word; `after:` and `before:` take days, which the criteria already widened.
|
|
9
|
+
*/
|
|
10
|
+
export declare const gmailRawOf: (criteria: MailCriteria) => string;
|
|
11
|
+
export declare const imapSearchOf: (criteria: MailCriteria) => SearchObject;
|
|
12
|
+
/** The server's own search of one folder; nothing is marked read, since the folder opens read only. */
|
|
13
|
+
export declare const imapQuery: ({ inFolder, validities }: Connections) => (criteria: MailCriteria, folder: string, syntax: SearchSyntax) => Promise<Searched>;
|
|
14
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,oGAAoG;AACpG,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAA;AAS3C;;;GAGG;AACH,eAAO,MAAM,UAAU,aAAc,YAAY,KAAG,MAWvC,CAAA;AASb,eAAO,MAAM,YAAY,aAAc,YAAY,KAAG,YAYlD,CAAA;AAEJ,uGAAuG;AACvG,eAAO,MAAM,SAAS,6BACO,WAAW,gBACrB,YAAY,UAAU,MAAM,UAAU,YAAY,KAAG,OAAO,CAAC,QAAQ,CAQrF,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const quoted = (value) => (/[\s"()]/.test(value) ? `"${value.replace(/"/g, " ").trim()}"` : value);
|
|
2
|
+
const gmailDay = (ms) => {
|
|
3
|
+
const at = new Date(ms);
|
|
4
|
+
return `${at.getUTCFullYear()}/${at.getUTCMonth() + 1}/${at.getUTCDate()}`;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Gmail's search operators (https://support.google.com/mail/answer/7190). Gmail has no body-only operator, so a
|
|
8
|
+
* `body:` value is a plain word; `after:` and `before:` take days, which the criteria already widened.
|
|
9
|
+
*/
|
|
10
|
+
export const gmailRawOf = (criteria) => [
|
|
11
|
+
...[...criteria.words, ...criteria.body].map(quoted),
|
|
12
|
+
...criteria.from.map((value) => `from:${quoted(value)}`),
|
|
13
|
+
...criteria.to.map((value) => `to:${quoted(value)}`),
|
|
14
|
+
...criteria.cc.map((value) => `cc:${quoted(value)}`),
|
|
15
|
+
...criteria.subject.map((value) => `subject:${quoted(value)}`),
|
|
16
|
+
...(criteria.since === undefined ? [] : [`after:${gmailDay(criteria.since)}`]),
|
|
17
|
+
...(criteria.before === undefined ? [] : [`before:${gmailDay(criteria.before)}`]),
|
|
18
|
+
...(criteria.seen === undefined ? [] : [criteria.seen ? "is:read" : "is:unread"]),
|
|
19
|
+
...(criteria.flagged ? ["is:starred"] : []),
|
|
20
|
+
].join(" ");
|
|
21
|
+
/**
|
|
22
|
+
* One AND of every key. imapflow's query object holds each key once, so a second word or sender is nested in a
|
|
23
|
+
* one-branch `or`, which imapflow sends as a parenthesised list: RFC 3501's AND of search keys.
|
|
24
|
+
*/
|
|
25
|
+
const allOf = ([first, ...rest]) => rest.length ? { ...first, or: [allOf(rest)] } : (first ?? {});
|
|
26
|
+
export const imapSearchOf = (criteria) => allOf([
|
|
27
|
+
...criteria.words.map((text) => ({ text })),
|
|
28
|
+
...criteria.from.map((from) => ({ from })),
|
|
29
|
+
...criteria.to.map((to) => ({ to })),
|
|
30
|
+
...criteria.cc.map((cc) => ({ cc })),
|
|
31
|
+
...criteria.subject.map((subject) => ({ subject })),
|
|
32
|
+
...criteria.body.map((body) => ({ body })),
|
|
33
|
+
...(criteria.since === undefined ? [] : [{ since: new Date(criteria.since) }]),
|
|
34
|
+
...(criteria.before === undefined ? [] : [{ before: new Date(criteria.before) }]),
|
|
35
|
+
...(criteria.seen === undefined ? [] : [{ seen: criteria.seen }]),
|
|
36
|
+
...(criteria.flagged === undefined ? [] : [{ flagged: criteria.flagged }]),
|
|
37
|
+
]);
|
|
38
|
+
/** The server's own search of one folder; nothing is marked read, since the folder opens read only. */
|
|
39
|
+
export const imapQuery = ({ inFolder, validities }) => async (criteria, folder, syntax) => {
|
|
40
|
+
const query = syntax === "gmail" ? { gmraw: gmailRawOf(criteria) } : imapSearchOf(criteria);
|
|
41
|
+
const found = await inFolder(folder, async (open, validity) => ({
|
|
42
|
+
...(validity ? { validity } : {}),
|
|
43
|
+
uids: ((await open.search(query, { uid: true })) || []).map(String),
|
|
44
|
+
}));
|
|
45
|
+
if (found.validity)
|
|
46
|
+
validities.set(folder, found.validity);
|
|
47
|
+
return found;
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/mail/imap/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MailWrites } from "../backend.js";
|
|
2
|
+
import type { Connections } from "./connection.js";
|
|
3
|
+
/** Every change the mail commands make, over imapflow. Each is one command per folder, never repeated. */
|
|
4
|
+
export declare const imapWrites: (pool: Connections) => MailWrites;
|
|
5
|
+
//# sourceMappingURL=write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../../src/mail/imap/write.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAsB,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAclD,0GAA0G;AAC1G,eAAO,MAAM,UAAU,SAAU,WAAW,KAAG,UAyI9C,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
const SEARCH_IDS = 100;
|
|
3
|
+
const range = (uids) => uids.join(",");
|
|
4
|
+
const movedOf = (answer) => answer === false
|
|
5
|
+
? { uids: new Map() }
|
|
6
|
+
: {
|
|
7
|
+
uids: new Map(answer.uidMap ?? []),
|
|
8
|
+
...(answer.uidValidity === undefined ? {} : { validity: String(answer.uidValidity) }),
|
|
9
|
+
};
|
|
10
|
+
/** Every change the mail commands make, over imapflow. Each is one command per folder, never repeated. */
|
|
11
|
+
export const imapWrites = (pool) => {
|
|
12
|
+
const changed = async (done, what) => {
|
|
13
|
+
if (!(await done))
|
|
14
|
+
throw new CliError("provider_unavailable", `the server refused to ${what}`);
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
locate: (folder, { emailIds = [], messageIds = [] }) => pool.inFolder(folder, async (open, validity) => {
|
|
18
|
+
const uids = new Map();
|
|
19
|
+
const found = async (queries, keyOf) => {
|
|
20
|
+
for (let at = 0; at < queries.length; at += SEARCH_IDS) {
|
|
21
|
+
const part = queries.slice(at, at + SEARCH_IDS);
|
|
22
|
+
const hits = (await open.search(part.length === 1 ? part[0] : { or: part }, { uid: true })) || [];
|
|
23
|
+
if (hits.length === 0)
|
|
24
|
+
continue;
|
|
25
|
+
for (const message of await open.fetchAll(hits, { uid: true, emailId: true, envelope: true }, { uid: true })) {
|
|
26
|
+
const key = keyOf(message);
|
|
27
|
+
if (key !== undefined)
|
|
28
|
+
uids.set(key, message.uid);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const wantedEmails = new Set(emailIds);
|
|
33
|
+
await found(emailIds.map((emailId) => ({ emailId })), (message) => message.emailId && wantedEmails.has(String(message.emailId)) ? String(message.emailId) : undefined);
|
|
34
|
+
const wantedMessages = new Set(messageIds);
|
|
35
|
+
await found(messageIds.map((messageId) => ({ header: { "message-id": messageId } })), (message) => {
|
|
36
|
+
const id = message.envelope?.messageId;
|
|
37
|
+
return id && wantedMessages.has(id) ? id : undefined;
|
|
38
|
+
});
|
|
39
|
+
return { validity, uids };
|
|
40
|
+
}),
|
|
41
|
+
state: (folder, validity, uids) => pool.inFolder(folder, async (open) => {
|
|
42
|
+
const states = new Map();
|
|
43
|
+
if (uids.length === 0)
|
|
44
|
+
return states;
|
|
45
|
+
const fetched = await open.fetchAll(range(uids), { uid: true, flags: true, labels: true, envelope: true }, { uid: true });
|
|
46
|
+
for (const message of fetched)
|
|
47
|
+
states.set(message.uid, {
|
|
48
|
+
flags: [...(message.flags ?? [])].sort(),
|
|
49
|
+
...(message.labels ? { labels: [...message.labels].sort() } : {}),
|
|
50
|
+
...(message.envelope?.messageId ? { messageId: message.envelope.messageId } : {}),
|
|
51
|
+
});
|
|
52
|
+
return states;
|
|
53
|
+
}, validity),
|
|
54
|
+
flag: (folder, validity, uids, { add = [], remove = [] }) => pool.writeIn(folder, async (open) => {
|
|
55
|
+
if (add.length)
|
|
56
|
+
await changed(open.messageFlagsAdd(range(uids), add, { uid: true }), "add the flags");
|
|
57
|
+
if (remove.length)
|
|
58
|
+
await changed(open.messageFlagsRemove(range(uids), remove, { uid: true }), "remove the flags");
|
|
59
|
+
}, validity),
|
|
60
|
+
label: (folder, validity, uids, { add = [], remove = [] }) => pool.writeIn(folder, async (open) => {
|
|
61
|
+
if (add.length)
|
|
62
|
+
await changed(open.messageFlagsAdd(range(uids), add, { uid: true, useLabels: true }), "add the labels");
|
|
63
|
+
if (remove.length)
|
|
64
|
+
await changed(open.messageFlagsRemove(range(uids), remove, { uid: true, useLabels: true }), "remove the labels");
|
|
65
|
+
}, validity),
|
|
66
|
+
move: (folder, validity, uids, to) => pool.writeIn(folder, async (open) => movedOf(await open.messageMove(range(uids), to, { uid: true })), validity),
|
|
67
|
+
copy: (folder, validity, uids, to) => pool.writeIn(folder, async (open) => movedOf(await open.messageCopy(range(uids), to, { uid: true })), validity),
|
|
68
|
+
expunge: (folder, validity, uids) => pool.writeIn(folder, async (open) => {
|
|
69
|
+
if (!open.capabilities.has("UIDPLUS"))
|
|
70
|
+
throw new CliError("provider_unavailable", "the server cannot expunge single messages (no UIDPLUS), so a copy cannot be taken back alone", { reason: "mail.no-uidplus" });
|
|
71
|
+
await changed(open.messageDelete(range(uids), { uid: true }), "remove the copies");
|
|
72
|
+
}, validity),
|
|
73
|
+
append: (folder, raw, flags) => pool.writeOnServer(async (open) => {
|
|
74
|
+
const stored = await open.append(folder, Buffer.from(raw), [...flags]);
|
|
75
|
+
if (stored === false)
|
|
76
|
+
throw new CliError("provider_unavailable", `the server refused to store the message in ${folder}`);
|
|
77
|
+
return {
|
|
78
|
+
...(stored.uid === undefined ? {} : { uid: stored.uid }),
|
|
79
|
+
...(stored.uidValidity === undefined ? {} : { validity: String(stored.uidValidity) }),
|
|
80
|
+
};
|
|
81
|
+
}),
|
|
82
|
+
createFolder: (path) => pool.writeOnServer(async (open) => {
|
|
83
|
+
await open.mailboxCreate(path);
|
|
84
|
+
}),
|
|
85
|
+
renameFolder: (path, to) => pool.writeOnServer(async (open) => {
|
|
86
|
+
await open.mailboxRename(path, to);
|
|
87
|
+
}),
|
|
88
|
+
deleteFolder: (path) => pool.writeOnServer(async (open) => {
|
|
89
|
+
await open.mailboxDelete(path);
|
|
90
|
+
}),
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/mail/imap/write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { AppIdentity } from "@wirecat/cli-core/cli";
|
|
2
|
+
import { type SendGuard } from "@wirecat/cli-core/sends";
|
|
3
|
+
import type { AccountKey, MessageStore } from "@wirecat/cli-core/store";
|
|
4
|
+
import type { Organise } from "../providers.js";
|
|
5
|
+
import type { FolderInfo, MailWrites, ServerState } from "./backend.js";
|
|
6
|
+
import { type ChangedItem, type ChangeLog, type ChangeRun, type StepLine } from "./changes.js";
|
|
7
|
+
/** One mailbox as the write commands see it: its stored mail, its server and where its provider differs. */
|
|
8
|
+
export interface Mailbox {
|
|
9
|
+
app: AppIdentity;
|
|
10
|
+
store: MessageStore;
|
|
11
|
+
key: AccountKey;
|
|
12
|
+
accountId: number;
|
|
13
|
+
writes: MailWrites;
|
|
14
|
+
folders: () => Promise<FolderInfo[]>;
|
|
15
|
+
organise: Organise;
|
|
16
|
+
now: () => number;
|
|
17
|
+
}
|
|
18
|
+
export declare const FILTER_LIMIT = 500;
|
|
19
|
+
export declare const MAX_LIMIT = 5000;
|
|
20
|
+
/** More messages than this at once is a bulk change: previewed first and checked as `messages.bulk` too. */
|
|
21
|
+
export declare const BULK = 20;
|
|
22
|
+
/** A flag as the owner types it, `read` or `$Junk`, in IMAP's spelling; `\Deleted` is refused, it is how mail is expunged. */
|
|
23
|
+
export declare const flagOf: (given: string) => string;
|
|
24
|
+
/** Stored mail by reference or by the shared query, at most `limit`; `more` says the query matched more. */
|
|
25
|
+
export declare const selectIds: (mailbox: Mailbox, { refs, filter, limit }: {
|
|
26
|
+
refs?: string[];
|
|
27
|
+
filter?: string;
|
|
28
|
+
limit?: number;
|
|
29
|
+
}) => Promise<{
|
|
30
|
+
ids: string[];
|
|
31
|
+
more: boolean;
|
|
32
|
+
}>;
|
|
33
|
+
interface Located {
|
|
34
|
+
folder: string;
|
|
35
|
+
validity: string;
|
|
36
|
+
items: ChangedItem[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Where each email is on the server now, folder by folder. `everywhere` keeps every place an email is in (a flag is
|
|
40
|
+
* set on each copy); otherwise only its first, so one email is moved once. Trash counts only when `trash` is given.
|
|
41
|
+
*/
|
|
42
|
+
export declare const locate: (mailbox: Mailbox, ids: readonly string[], { everywhere, trash }?: {
|
|
43
|
+
everywhere?: boolean;
|
|
44
|
+
trash?: string;
|
|
45
|
+
}) => Promise<{
|
|
46
|
+
located: Located[];
|
|
47
|
+
missing: string[];
|
|
48
|
+
deleted: string[];
|
|
49
|
+
inTrash: string[];
|
|
50
|
+
}>;
|
|
51
|
+
/** The folder a name or a role names: its path, a role (`archive`, `trash`), then a name in any case. */
|
|
52
|
+
export declare const folderNamed: (folders: readonly FolderInfo[], given: string) => FolderInfo | undefined;
|
|
53
|
+
export declare const trashOf: (mailbox: Mailbox) => Promise<string>;
|
|
54
|
+
/** On Gmail a folder is a label: what a move or copy to `given` adds and takes away, or a real folder to move to. */
|
|
55
|
+
type Target = {
|
|
56
|
+
kind: "folder";
|
|
57
|
+
path: string;
|
|
58
|
+
} | {
|
|
59
|
+
kind: "labels";
|
|
60
|
+
add: string[];
|
|
61
|
+
remove: string[];
|
|
62
|
+
name: string;
|
|
63
|
+
};
|
|
64
|
+
export declare const targetOf: (mailbox: Mailbox, given: string, copy: boolean) => Promise<Target>;
|
|
65
|
+
/** Runs one step against the server under the guard, recording it before it goes and once it is done. */
|
|
66
|
+
export declare class Changer {
|
|
67
|
+
readonly mailbox: Mailbox;
|
|
68
|
+
readonly guard: SendGuard;
|
|
69
|
+
readonly log: ChangeLog;
|
|
70
|
+
readonly key: string;
|
|
71
|
+
readonly action: "message-flag" | "message-move" | "message-copy" | "message-delete" | "message-restore";
|
|
72
|
+
constructor(mailbox: Mailbox, guard: SendGuard, log: ChangeLog, key: string, action: "message-flag" | "message-move" | "message-copy" | "message-delete" | "message-restore");
|
|
73
|
+
step<T>(line: Omit<StepLine, "type" | "step">, act: () => Promise<T>, moved?: (done: T) => {
|
|
74
|
+
uids: Map<string, number>;
|
|
75
|
+
validity?: string;
|
|
76
|
+
}): Promise<T>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Adds and removes flags, or with `replace` makes `add` each message's whole set. On Gmail the flags of All Mail are
|
|
80
|
+
* the message's own. The store takes read and flagged once the server said yes.
|
|
81
|
+
*/
|
|
82
|
+
export declare const changeFlags: (changer: Changer, located: Located[], change: {
|
|
83
|
+
add: string[];
|
|
84
|
+
remove: string[];
|
|
85
|
+
replace?: boolean;
|
|
86
|
+
}) => Promise<string[]>;
|
|
87
|
+
export declare const moveMessages: (changer: Changer, located: Located[], target: Target, op: "move" | "copy") => Promise<string[]>;
|
|
88
|
+
/**
|
|
89
|
+
* Moves the messages to Trash, which the provider empties in its own time; until then `messages restore` brings them
|
|
90
|
+
* back. On Gmail each message's labels are kept in the record first. The store marks them deleted, as a sync would.
|
|
91
|
+
*/
|
|
92
|
+
export declare const trashMessages: (changer: Changer, located: Located[], trash: string, keep?: (id: string, state: ServerState) => string | undefined) => Promise<{
|
|
93
|
+
changed: string[];
|
|
94
|
+
kept: Record<string, number>;
|
|
95
|
+
}>;
|
|
96
|
+
export interface RestorePlan {
|
|
97
|
+
run: string;
|
|
98
|
+
command: string;
|
|
99
|
+
started_at: string;
|
|
100
|
+
restorable_until: string | null;
|
|
101
|
+
expired: boolean;
|
|
102
|
+
/** Messages the run changed. */
|
|
103
|
+
logged: number;
|
|
104
|
+
/** Messages a restore puts back: still where the run left them. */
|
|
105
|
+
restorable: number;
|
|
106
|
+
/** Changed by the run, and no longer where it left them: restored already, moved by hand, or gone for good. */
|
|
107
|
+
missing: number;
|
|
108
|
+
restored: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Undoes a run, last step first, for the messages still where it left them. Without `apply` it only counts. Trash
|
|
112
|
+
* brings mail back to where it was (on Gmail: to the Inbox if it was there, else All Mail, labels put back).
|
|
113
|
+
*/
|
|
114
|
+
export declare const restoreRun: (changer: Changer, { run, steps, restored: before }: ChangeRun, path: string, apply: boolean) => Promise<RestorePlan>;
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=organise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organise.d.ts","sourceRoot":"","sources":["../../src/mail/organise.ts"],"names":[],"mappings":"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"}
|