@wirecat/cli-memo 0.131.24 → 0.131.25
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/README.md +9 -12
- package/dist/app.d.ts +1 -1
- package/dist/bin/memo.js +2 -2
- package/dist/bundle/{all-profiles-ZCJTYGOL.js → all-profiles-L2T7PQ7S.js} +9 -9
- package/dist/bundle/{anthropic-7WVLAKTX.js → anthropic-KWI2B4O2.js} +6 -6
- package/dist/bundle/{app-server-6G3SXEHO.js → app-server-GLDIS3HE.js} +42 -42
- package/dist/bundle/auto-QFG57LR6.js +86 -0
- package/dist/bundle/{bun-JVBDJKBB.js → bun-SMKYTOGI.js} +2 -2
- package/dist/bundle/{bun-sqlite-P4I7NVMQ.js → bun-sqlite-PKY3JXMR.js} +5 -5
- package/dist/bundle/{chunk-IC2TL7RW.js → chunk-47EZNSMD.js} +2 -2
- package/dist/bundle/{chunk-LNXFM4FD.js → chunk-4AONXXP2.js} +45 -26
- package/dist/bundle/{chunk-UY2VH3QK.js → chunk-5ANNUWNM.js} +2 -2
- package/dist/bundle/{chunk-3U7OUQV2.js → chunk-5GMOYTJQ.js} +1 -1
- package/dist/bundle/{chunk-EKTZEF3Q.js → chunk-5JYB6QKS.js} +3 -15
- package/dist/bundle/{chunk-GQOXFZBX.js → chunk-5SKYUS4U.js} +278 -279
- package/dist/bundle/{chunk-ALGIPJ6L.js → chunk-6OP743NB.js} +2 -2
- package/dist/bundle/{chunk-VVEFQEWP.js → chunk-7Y6O4UQB.js} +22 -22
- package/dist/bundle/{chunk-Q6MFBH6Q.js → chunk-BNF2ZUNS.js} +9 -9
- package/dist/bundle/{chunk-AIVUS6WA.js → chunk-BX7DVBWD.js} +15 -12
- package/dist/bundle/{chunk-LWIMGWKB.js → chunk-D5ZV7PRP.js} +3 -3
- package/dist/bundle/{chunk-OQK2IKPB.js → chunk-E2WPSRCI.js} +1 -1
- package/dist/bundle/{chunk-CCHHEMPM.js → chunk-EB2IULWB.js} +3 -2
- package/dist/bundle/{chunk-ND3GBFEY.js → chunk-EEVUVWHW.js} +2 -2
- package/dist/bundle/{chunk-UVR6U55E.js → chunk-EFTJ4RTT.js} +6 -6
- package/dist/bundle/{chunk-ZOYGY2PN.js → chunk-ENU2556X.js} +3 -3
- package/dist/bundle/{chunk-EB7LKK4K.js → chunk-ERQHZZNF.js} +1 -1
- package/dist/bundle/{chunk-AWGV4VOA.js → chunk-FS3ABWVX.js} +12 -12
- package/dist/bundle/{chunk-JY4LVWGZ.js → chunk-G2BB5WY5.js} +15 -8
- package/dist/bundle/{chunk-ZLZE5P6M.js → chunk-H5QHU5LZ.js} +8 -8
- package/dist/bundle/{chunk-CM2H7NRC.js → chunk-I5LIEFQR.js} +4 -4
- package/dist/bundle/{chunk-JCCL7RGH.js → chunk-I7PL5WX2.js} +4 -4
- package/dist/bundle/{chunk-JDDVGGUV.js → chunk-IE27DJP3.js} +10 -10
- package/dist/bundle/{chunk-AIGMYGEL.js → chunk-ILUTSRU3.js} +1 -1
- package/dist/bundle/{chunk-UXCDBNAY.js → chunk-INA5WGY7.js} +2 -2
- package/dist/bundle/{chunk-RTESJ5O2.js → chunk-J7T6RSR5.js} +4 -4
- package/dist/bundle/{chunk-F2ED6KG6.js → chunk-JDDLDKC7.js} +3 -3
- package/dist/bundle/{chunk-EACY2ULS.js → chunk-JLBKAIVT.js} +306 -187
- package/dist/bundle/{chunk-5YCNCXL5.js → chunk-JVNSHN2J.js} +1 -1
- package/dist/bundle/{chunk-NAH473ZR.js → chunk-KFZGI7BU.js} +1 -1
- package/dist/bundle/{chunk-ILHTNOIV.js → chunk-KV4267S4.js} +1 -1
- package/dist/bundle/{chunk-MPVW7BQZ.js → chunk-LFNJ6CG6.js} +6 -6
- package/dist/bundle/chunk-MAUKGKRA.js +428 -0
- package/dist/bundle/{chunk-ZDOVR4PA.js → chunk-MWX7UJCL.js} +7 -7
- package/dist/bundle/{chunk-3KNXQZMO.js → chunk-MZS3LIMW.js} +29 -29
- package/dist/bundle/{chunk-UA2C4BCH.js → chunk-NFTWNCEL.js} +9 -9
- package/dist/bundle/{chunk-R2LJDDZP.js → chunk-OGMTUMB7.js} +4 -4
- package/dist/bundle/{chunk-CPJEQK4V.js → chunk-ON5SHKHB.js} +46 -46
- package/dist/bundle/{chunk-DIMX5AEE.js → chunk-PCT2CIYR.js} +5 -5
- package/dist/bundle/{chunk-GSEDSGJF.js → chunk-POXCMAM7.js} +403 -503
- package/dist/bundle/{chunk-GRXVN2X7.js → chunk-QA674BMY.js} +1 -1
- package/dist/bundle/{chunk-ITQBXFMC.js → chunk-QJJSMLBR.js} +3 -3
- package/dist/bundle/{chunk-BTQSFPIM.js → chunk-QOWGFGG3.js} +5 -5
- package/dist/bundle/{chunk-N5H6I7WQ.js → chunk-QYDCVWD4.js} +6 -6
- package/dist/bundle/{chunk-INTF3YPV.js → chunk-RKLZQVKL.js} +2 -2
- package/dist/bundle/{chunk-XF3LZ32F.js → chunk-RTII6JWI.js} +3 -3
- package/dist/bundle/{chunk-M43DAAZ7.js → chunk-SBMBBVXF.js} +1 -1
- package/dist/bundle/{chunk-SKTGBVYC.js → chunk-SW5YJCHC.js} +4 -4
- package/dist/bundle/{chunk-EGG3PGCM.js → chunk-T3R6QHD2.js} +2 -2
- package/dist/bundle/{chunk-T4LW6UYQ.js → chunk-TZ7WDQPD.js} +40 -34
- package/dist/bundle/{chunk-3MER7NE6.js → chunk-UQS6Y2A7.js} +4 -4
- package/dist/bundle/{chunk-ELKYINWL.js → chunk-UWUP3A5H.js} +13 -13
- package/dist/bundle/{chunk-KQSHIQSV.js → chunk-VGYXKQJE.js} +73 -74
- package/dist/bundle/{chunk-FXHN2UZW.js → chunk-VZ3K7IYC.js} +30 -17
- package/dist/bundle/{chunk-IJC6MFLP.js → chunk-WGHQXJHL.js} +10 -10
- package/dist/bundle/{chunk-R3LNQ3I4.js → chunk-WHVH72AD.js} +2 -2
- package/dist/bundle/{chunk-EW3XTUPB.js → chunk-XBIPSSKI.js} +4 -4
- package/dist/bundle/{chunk-2IRCJT4O.js → chunk-XFDE6AL4.js} +8 -8
- package/dist/bundle/{chunk-J6D34BFP.js → chunk-YMAS7U5X.js} +260 -262
- package/dist/bundle/{chunk-PQLBPYJR.js → chunk-YPF6OS37.js} +1 -1
- package/dist/bundle/{chunk-XSI5NYGB.js → chunk-ZKZT6PCF.js} +8 -8
- package/dist/bundle/{chunk-UPXUE27A.js → chunk-ZLB2CM7Z.js} +6 -6
- package/dist/bundle/{chunk-MROFZXAB.js → chunk-ZUV337F2.js} +22 -22
- package/dist/bundle/{chunk-VLPMB3UU.js → chunk-ZVEGLXYB.js} +4 -4
- package/dist/bundle/command-contract-47EKA67S.js +32 -0
- package/dist/bundle/{decode-YHX3DQG2.js → decode-EEDEXCHR.js} +5 -5
- package/dist/bundle/{dispatch-MELZFYOS.js → dispatch-CU5KGRQL.js} +8 -8
- package/dist/bundle/{echarts-FBVAP7BR.js → echarts-36MD3UZF.js} +2 -2
- package/dist/bundle/{embed-CQJ42S5C.js → embed-R6JZ4CDW.js} +6 -6
- package/dist/bundle/{embedder-EDXLEJ27.js → embedder-XUIOKCH6.js} +9 -9
- package/dist/bundle/{entry-HZEA7QFK.js → entry-WOAZRQ5F.js} +7 -7
- package/dist/bundle/failure-BHRE5S75.js +66 -0
- package/dist/bundle/{failure-RBNZBCZJ.js → failure-TUXXI6JT.js} +2 -2
- package/dist/bundle/{first-run-JZQN7R6M.js → first-run-3ZUSIFQJ.js} +11 -11
- package/dist/bundle/first-screen-WQ2IDXDP.js +30 -0
- package/dist/bundle/{instructions-NYVYNWVU.js → instructions-7VMPJMUM.js} +1 -1
- package/dist/bundle/mcp-I7LL7AJG.js +90 -0
- package/dist/bundle/{mcp-MNI62HHE.js → mcp-PPVOM4SE.js} +2 -2
- package/dist/bundle/memo.js +16 -16
- package/dist/bundle/{node-2QE6UPGS.js → node-SBHCG4ZC.js} +2 -2
- package/dist/bundle/{node-sqlite-SDHZJNY7.js → node-sqlite-EMKROM5U.js} +6 -6
- package/dist/bundle/{oauth-FFUJREKS.js → oauth-OJPTUA5K.js} +7 -7
- package/dist/bundle/{open-NT2GYX6N.js → open-XI2AVS5B.js} +5 -5
- package/dist/bundle/{openai-IQA2XR6Z.js → openai-NCYTRZB6.js} +10 -10
- package/dist/bundle/{process-HIEJXYW6.js → process-373B2EBA.js} +1 -1
- package/dist/bundle/{chunk-DMQ3342A.js → program-VW7IJ755.js} +9892 -2082
- package/dist/bundle/{prompt-IOZAME2R.js → prompt-L3KQBPNH.js} +5 -5
- package/dist/bundle/{recognize-2XOAZJ5N.js → recognize-GFWZX4F6.js} +4 -4
- package/dist/bundle/{remote-2LE7OTDA.js → remote-5IGAYQBB.js} +7 -7
- package/dist/bundle/{rerank-UKOVVZM6.js → rerank-6HWHGDFX.js} +7 -7
- package/dist/bundle/{serve-S2UHPEBP.js → serve-AA7RKEOM.js} +9 -9
- package/dist/bundle/server-MWUCYBJF.js +61 -0
- package/dist/bundle/server-XEY5AKKG.js +48 -0
- package/dist/bundle/{server-BG4WWQHY.js → server-Z6L4U6HO.js} +57 -57
- package/dist/bundle/{state-F5KT3CBD.js → state-3WTPOBXR.js} +6 -6
- package/dist/bundle/{store-WBUUS7FO.js → store-LNP5BXUL.js} +13 -13
- package/dist/bundle/store-maintenance-command-6HEGTKPL.js +48 -0
- package/dist/bundle/update-6GWVILUX.js +69 -0
- package/dist/config.d.ts +2 -28
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -35
- package/dist/config.js.map +1 -1
- package/dist/doctor/command.d.ts +0 -12
- package/dist/doctor/command.d.ts.map +1 -1
- package/dist/doctor/command.js +19 -24
- package/dist/doctor/command.js.map +1 -1
- package/dist/examples.d.ts.map +1 -1
- package/dist/examples.js +1 -8
- package/dist/examples.js.map +1 -1
- package/dist/failure.d.ts +2 -2
- package/dist/mail/command.d.ts.map +1 -1
- package/dist/mail/command.js +2 -87
- package/dist/mail/command.js.map +1 -1
- package/dist/mail/findings-command.d.ts.map +1 -1
- package/dist/mail/findings-command.js +1 -1
- package/dist/mail/findings-command.js.map +1 -1
- package/dist/mail/moved.d.ts +1 -1
- package/dist/mail/moved.d.ts.map +1 -1
- package/dist/mail/moved.js +3 -0
- package/dist/mail/moved.js.map +1 -1
- package/dist/mail/review-command.d.ts +1 -1
- package/dist/mail/review-command.d.ts.map +1 -1
- package/dist/program.js +1 -1
- package/dist/program.js.map +1 -1
- package/dist/read-only.d.ts +1 -1
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +1 -13
- package/dist/reasons.js.map +1 -1
- package/dist/run/auto.js +3 -3
- package/dist/run/auto.js.map +1 -1
- package/dist/run/import.d.ts +2 -2
- package/dist/run/import.d.ts.map +1 -1
- package/dist/run/import.js +24 -121
- package/dist/run/import.js.map +1 -1
- package/dist/search/command.js +1 -1
- package/dist/store/source-list.d.ts +1 -6
- package/dist/store/source-list.d.ts.map +1 -1
- package/dist/store/source-list.js +11 -46
- package/dist/store/source-list.js.map +1 -1
- package/dist/tasks/command.js +1 -1
- package/dist/tasks/command.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/scenarios/set-up.md +3 -3
- package/skills/cli-memo/SKILL.md +13 -21
- package/skills/mail-triage/SKILL.md +9 -5
- package/dist/bundle/auto-JWPM5654.js +0 -86
- package/dist/bundle/chunk-MLMSQK76.js +0 -103
- package/dist/bundle/command-contract-543RRFNU.js +0 -32
- package/dist/bundle/failure-62G7QSPX.js +0 -66
- package/dist/bundle/first-screen-56V3UOQE.js +0 -30
- package/dist/bundle/mcp-Y6IPYDS2.js +0 -90
- package/dist/bundle/program-DEMRKCZY.js +0 -10972
- package/dist/bundle/server-3YNOEPWU.js +0 -61
- package/dist/bundle/server-EZWQ5KP4.js +0 -48
- package/dist/bundle/setup-2X7ADKFH.js +0 -973
- package/dist/bundle/store-maintenance-command-KLST56XF.js +0 -48
- package/dist/bundle/update-WH4CGJGP.js +0 -69
- package/dist/mail/accounts.d.ts +0 -7
- package/dist/mail/accounts.d.ts.map +0 -1
- package/dist/mail/accounts.js +0 -28
- package/dist/mail/accounts.js.map +0 -1
- package/dist/mail/backfill-headers.d.ts +0 -11
- package/dist/mail/backfill-headers.d.ts.map +0 -1
- package/dist/mail/backfill-headers.js +0 -84
- package/dist/mail/backfill-headers.js.map +0 -1
- package/dist/mail/domain-age.d.ts +0 -26
- package/dist/mail/domain-age.d.ts.map +0 -1
- package/dist/mail/domain-age.js +0 -151
- package/dist/mail/domain-age.js.map +0 -1
- package/dist/mail/gmail.d.ts +0 -39
- package/dist/mail/gmail.d.ts.map +0 -1
- package/dist/mail/gmail.js +0 -325
- package/dist/mail/gmail.js.map +0 -1
- package/dist/mail/himalaya.d.ts +0 -22
- package/dist/mail/himalaya.d.ts.map +0 -1
- package/dist/mail/himalaya.js +0 -113
- package/dist/mail/himalaya.js.map +0 -1
- package/dist/mail/mbox.d.ts +0 -9
- package/dist/mail/mbox.d.ts.map +0 -1
- package/dist/mail/mbox.js +0 -230
- package/dist/mail/mbox.js.map +0 -1
- package/dist/mail/repair.d.ts +0 -7
- package/dist/mail/repair.d.ts.map +0 -1
- package/dist/mail/repair.js +0 -54
- package/dist/mail/repair.js.map +0 -1
- package/dist/mail/rule-store.d.ts +0 -12
- package/dist/mail/rule-store.d.ts.map +0 -1
- package/dist/mail/rule-store.js +0 -83
- package/dist/mail/rule-store.js.map +0 -1
- package/dist/mail/setup-command.d.ts +0 -4
- package/dist/mail/setup-command.d.ts.map +0 -1
- package/dist/mail/setup-command.js +0 -41
- package/dist/mail/setup-command.js.map +0 -1
- package/dist/mail/setup.d.ts +0 -19
- package/dist/mail/setup.d.ts.map +0 -1
- package/dist/mail/setup.js +0 -95
- package/dist/mail/setup.js.map +0 -1
- package/dist/mail/slices.d.ts +0 -6
- package/dist/mail/slices.d.ts.map +0 -1
- package/dist/mail/slices.js +0 -7
- package/dist/mail/slices.js.map +0 -1
- package/dist/mail/source.d.ts +0 -7
- package/dist/mail/source.d.ts.map +0 -1
- package/dist/mail/source.js +0 -119
- package/dist/mail/source.js.map +0 -1
- package/dist/mail/sync.d.ts +0 -21
- package/dist/mail/sync.d.ts.map +0 -1
- package/dist/mail/sync.js +0 -24
- package/dist/mail/sync.js.map +0 -1
- /package/dist/bundle/{chunk-CWOKGEL3.js → chunk-LU3WKZBA.js} +0 -0
- /package/dist/bundle/{chunk-NUN6OGOV.js → chunk-MNDLWYNQ.js} +0 -0
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { createRequire as __bundleRequire } from "node:module";
|
|
2
|
-
const require = __bundleRequire(import.meta.url);
|
|
3
|
-
import {
|
|
4
|
-
buildStems,
|
|
5
|
-
storeMaintenanceCommands,
|
|
6
|
-
storeSummary
|
|
7
|
-
} from "./chunk-CPJEQK4V.js";
|
|
8
|
-
import "./chunk-VVEFQEWP.js";
|
|
9
|
-
import "./chunk-J6D34BFP.js";
|
|
10
|
-
import "./chunk-ELKYINWL.js";
|
|
11
|
-
import "./chunk-HTQTIKWP.js";
|
|
12
|
-
import "./chunk-EACY2ULS.js";
|
|
13
|
-
import "./chunk-UA2C4BCH.js";
|
|
14
|
-
import "./chunk-JCCL7RGH.js";
|
|
15
|
-
import "./chunk-PQLBPYJR.js";
|
|
16
|
-
import "./chunk-CM2H7NRC.js";
|
|
17
|
-
import "./chunk-R3LNQ3I4.js";
|
|
18
|
-
import "./chunk-LWIMGWKB.js";
|
|
19
|
-
import "./chunk-5YCNCXL5.js";
|
|
20
|
-
import "./chunk-GQOXFZBX.js";
|
|
21
|
-
import "./chunk-KQSHIQSV.js";
|
|
22
|
-
import "./chunk-GRXVN2X7.js";
|
|
23
|
-
import "./chunk-2IRCJT4O.js";
|
|
24
|
-
import "./chunk-UPXUE27A.js";
|
|
25
|
-
import "./chunk-XF3LZ32F.js";
|
|
26
|
-
import "./chunk-ND3GBFEY.js";
|
|
27
|
-
import "./chunk-ZOYGY2PN.js";
|
|
28
|
-
import "./chunk-ALGIPJ6L.js";
|
|
29
|
-
import "./chunk-ITQBXFMC.js";
|
|
30
|
-
import "./chunk-MPVW7BQZ.js";
|
|
31
|
-
import "./chunk-RTESJ5O2.js";
|
|
32
|
-
import "./chunk-UXCDBNAY.js";
|
|
33
|
-
import "./chunk-ILHTNOIV.js";
|
|
34
|
-
import "./chunk-NUN6OGOV.js";
|
|
35
|
-
import "./chunk-D72URWJE.js";
|
|
36
|
-
import "./chunk-UVR6U55E.js";
|
|
37
|
-
import "./chunk-AIGMYGEL.js";
|
|
38
|
-
import "./chunk-T4LW6UYQ.js";
|
|
39
|
-
import "./chunk-JY4LVWGZ.js";
|
|
40
|
-
import "./chunk-Y5E2WNWB.js";
|
|
41
|
-
import "./chunk-CCHHEMPM.js";
|
|
42
|
-
import "./chunk-OQK2IKPB.js";
|
|
43
|
-
import "./chunk-ZVVMGPBJ.js";
|
|
44
|
-
export {
|
|
45
|
-
buildStems,
|
|
46
|
-
storeMaintenanceCommands,
|
|
47
|
-
storeSummary
|
|
48
|
-
};
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { createRequire as __bundleRequire } from "node:module";
|
|
2
|
-
const require = __bundleRequire(import.meta.url);
|
|
3
|
-
import {
|
|
4
|
-
PACKAGE,
|
|
5
|
-
installer,
|
|
6
|
-
latest,
|
|
7
|
-
runUpdate,
|
|
8
|
-
updateNotice,
|
|
9
|
-
upgradeCommand
|
|
10
|
-
} from "./chunk-ZLZE5P6M.js";
|
|
11
|
-
import "./chunk-DMQ3342A.js";
|
|
12
|
-
import "./chunk-QP3KNC5D.js";
|
|
13
|
-
import "./chunk-GSEDSGJF.js";
|
|
14
|
-
import "./chunk-M43DAAZ7.js";
|
|
15
|
-
import "./chunk-3U7OUQV2.js";
|
|
16
|
-
import "./chunk-MROFZXAB.js";
|
|
17
|
-
import "./chunk-EGG3PGCM.js";
|
|
18
|
-
import "./chunk-FXHN2UZW.js";
|
|
19
|
-
import "./chunk-CPJEQK4V.js";
|
|
20
|
-
import "./chunk-VVEFQEWP.js";
|
|
21
|
-
import "./chunk-J6D34BFP.js";
|
|
22
|
-
import "./chunk-ELKYINWL.js";
|
|
23
|
-
import "./chunk-XSI5NYGB.js";
|
|
24
|
-
import "./chunk-HTQTIKWP.js";
|
|
25
|
-
import "./chunk-3MER7NE6.js";
|
|
26
|
-
import "./chunk-EACY2ULS.js";
|
|
27
|
-
import "./chunk-UA2C4BCH.js";
|
|
28
|
-
import "./chunk-AWGV4VOA.js";
|
|
29
|
-
import "./chunk-JCCL7RGH.js";
|
|
30
|
-
import "./chunk-PQLBPYJR.js";
|
|
31
|
-
import "./chunk-CM2H7NRC.js";
|
|
32
|
-
import "./chunk-AIVUS6WA.js";
|
|
33
|
-
import "./chunk-R3LNQ3I4.js";
|
|
34
|
-
import "./chunk-VLPMB3UU.js";
|
|
35
|
-
import "./chunk-LWIMGWKB.js";
|
|
36
|
-
import "./chunk-5YCNCXL5.js";
|
|
37
|
-
import "./chunk-GQOXFZBX.js";
|
|
38
|
-
import "./chunk-KQSHIQSV.js";
|
|
39
|
-
import "./chunk-GRXVN2X7.js";
|
|
40
|
-
import "./chunk-2IRCJT4O.js";
|
|
41
|
-
import "./chunk-UPXUE27A.js";
|
|
42
|
-
import "./chunk-XF3LZ32F.js";
|
|
43
|
-
import "./chunk-ND3GBFEY.js";
|
|
44
|
-
import "./chunk-ZOYGY2PN.js";
|
|
45
|
-
import "./chunk-ALGIPJ6L.js";
|
|
46
|
-
import "./chunk-ITQBXFMC.js";
|
|
47
|
-
import "./chunk-MPVW7BQZ.js";
|
|
48
|
-
import "./chunk-RTESJ5O2.js";
|
|
49
|
-
import "./chunk-UXCDBNAY.js";
|
|
50
|
-
import "./chunk-EKTZEF3Q.js";
|
|
51
|
-
import "./chunk-ILHTNOIV.js";
|
|
52
|
-
import "./chunk-NUN6OGOV.js";
|
|
53
|
-
import "./chunk-D72URWJE.js";
|
|
54
|
-
import "./chunk-UVR6U55E.js";
|
|
55
|
-
import "./chunk-AIGMYGEL.js";
|
|
56
|
-
import "./chunk-T4LW6UYQ.js";
|
|
57
|
-
import "./chunk-JY4LVWGZ.js";
|
|
58
|
-
import "./chunk-Y5E2WNWB.js";
|
|
59
|
-
import "./chunk-CCHHEMPM.js";
|
|
60
|
-
import "./chunk-OQK2IKPB.js";
|
|
61
|
-
import "./chunk-ZVVMGPBJ.js";
|
|
62
|
-
export {
|
|
63
|
-
PACKAGE,
|
|
64
|
-
installer,
|
|
65
|
-
latest,
|
|
66
|
-
runUpdate,
|
|
67
|
-
updateNotice,
|
|
68
|
-
upgradeCommand
|
|
69
|
-
};
|
package/dist/mail/accounts.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { MailSource } from "@wirecat/cli-core/mail";
|
|
2
|
-
import type { Config } from "../config.js";
|
|
3
|
-
export type MailAccountConfig = NonNullable<Config["mail"]>["accounts"][number];
|
|
4
|
-
/** The accounts named, by name or address; none named means every account. */
|
|
5
|
-
export declare const mailAccounts: (accounts: MailAccountConfig[], names: string[] | undefined) => MailAccountConfig[];
|
|
6
|
-
export declare const mailSource: (account: MailAccountConfig, env: NodeJS.ProcessEnv, signal?: AbortSignal) => MailSource;
|
|
7
|
-
//# sourceMappingURL=accounts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/mail/accounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAK1C,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/E,8EAA8E;AAC9E,eAAO,MAAM,YAAY,aAAc,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,KAAG,iBAAiB,EAa1G,CAAA;AAED,eAAO,MAAM,UAAU,YAAa,iBAAiB,OAAO,MAAM,CAAC,UAAU,WAAW,WAAW,KAAG,UAKrG,CAAA"}
|
package/dist/mail/accounts.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { homedir } from "node:os";
|
|
2
|
-
import { CliError } from "@wirecat/cli-base";
|
|
3
|
-
import { himalaya } from "./himalaya.js";
|
|
4
|
-
import { mboxSource } from "./mbox.js";
|
|
5
|
-
import { himalayaSource } from "./source.js";
|
|
6
|
-
/** The accounts named, by name or address; none named means every account. */
|
|
7
|
-
export const mailAccounts = (accounts, names) => {
|
|
8
|
-
if (names === undefined)
|
|
9
|
-
return accounts;
|
|
10
|
-
return names.map((name) => {
|
|
11
|
-
const found = accounts.find((account) => account.name === name || account.address.toLowerCase() === name.toLowerCase());
|
|
12
|
-
if (found)
|
|
13
|
-
return found;
|
|
14
|
-
const choices = accounts.map((account) => account.name).join(", ") || "none";
|
|
15
|
-
throw new CliError("not_found", `no mail account "${name}" in mail.accounts — it holds ${choices}`, {
|
|
16
|
-
reason: "mail.account-unknown",
|
|
17
|
-
account: name,
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
export const mailSource = (account, env, signal) => {
|
|
22
|
-
if (account.mode !== "mbox")
|
|
23
|
-
return himalayaSource(himalaya(env, signal), account);
|
|
24
|
-
if (account.path === undefined)
|
|
25
|
-
throw new CliError("validation_error", `mail account "${account.name}" is mode mbox but names no path`);
|
|
26
|
-
return mboxSource(account.path.replace(/^~(?=\/|$)/, env.HOME ?? homedir()));
|
|
27
|
-
};
|
|
28
|
-
//# sourceMappingURL=accounts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/mail/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAI5C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAA6B,EAAE,KAA2B,EAAuB,EAAE;IAC9G,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CACzB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAC3F,CAAA;QACD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;QACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAA;QAC5E,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,oBAAoB,IAAI,iCAAiC,OAAO,EAAE,EAAE;YAClG,MAAM,EAAE,sBAAsB;YAC9B,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAA0B,EAAE,GAAsB,EAAE,MAAoB,EAAc,EAAE;IACjH,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;IAClF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAC5B,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,OAAO,CAAC,IAAI,kCAAkC,CAAC,CAAA;IACzG,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAA;AAC9E,CAAC,CAAA"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { MailSource } from "@wirecat/cli-core/mail";
|
|
2
|
-
import type { MessageStore } from "@wirecat/cli-core/store";
|
|
3
|
-
/** Emails read per sync: about 4 MB of headers, so a timer run stays short and the backlog clears in hours. */
|
|
4
|
-
export declare const HEADERS_PER_RUN = 2000;
|
|
5
|
-
/**
|
|
6
|
-
* Mail stored in full before memo kept Reply-To and Gmail's SPF, DKIM and DMARC verdicts (October 2026) gets them
|
|
7
|
-
* from Gmail, header lines only, newest first and HEADERS_PER_RUN per sync, so the sender score can use them.
|
|
8
|
-
* Answers how many emails got headers, or undefined when there is nothing left to do.
|
|
9
|
-
*/
|
|
10
|
-
export declare const backfillHeaders: (store: MessageStore, source: MailSource, address: string, now?: number) => Promise<number | undefined>;
|
|
11
|
-
//# sourceMappingURL=backfill-headers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-headers.d.ts","sourceRoot":"","sources":["../../src/mail/backfill-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAErE,OAAO,KAAK,EAAc,YAAY,EAAc,MAAM,yBAAyB,CAAA;AAInF,+GAA+G;AAC/G,eAAO,MAAM,eAAe,OAAO,CAAA;AAcnC;;;;GAIG;AACH,eAAO,MAAM,eAAe,UACnB,YAAY,UACX,UAAU,WACT,MAAM,mBAEd,OAAO,CAAC,MAAM,GAAG,SAAS,CAsE5B,CAAA"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { ENVELOPE, GMAIL_ALL_MAIL } from "@wirecat/cli-core/mail";
|
|
2
|
-
import { pause, slicesOf } from "./slices.js";
|
|
3
|
-
const STATE = "mail_headers_backfill";
|
|
4
|
-
/** Emails read per sync: about 4 MB of headers, so a timer run stays short and the backlog clears in hours. */
|
|
5
|
-
export const HEADERS_PER_RUN = 2000;
|
|
6
|
-
const storedOf = (headers) => ({
|
|
7
|
-
...(headers.listId ? { "list-id": headers.listId } : {}),
|
|
8
|
-
...(headers.replyTo === undefined ? {} : { "reply-to": headers.replyTo }),
|
|
9
|
-
...headers.auth,
|
|
10
|
-
});
|
|
11
|
-
/**
|
|
12
|
-
* Mail stored in full before memo kept Reply-To and Gmail's SPF, DKIM and DMARC verdicts (October 2026) gets them
|
|
13
|
-
* from Gmail, header lines only, newest first and HEADERS_PER_RUN per sync, so the sender score can use them.
|
|
14
|
-
* Answers how many emails got headers, or undefined when there is nothing left to do.
|
|
15
|
-
*/
|
|
16
|
-
export const backfillHeaders = async (store, source, address, now = Date.now()) => {
|
|
17
|
-
if (source.find === undefined)
|
|
18
|
-
return undefined;
|
|
19
|
-
const key = { provider: "email", account: address.toLowerCase() };
|
|
20
|
-
const saved = (await store.sync.syncState(key, STATE))?.value;
|
|
21
|
-
const progress = saved === undefined ? { done: false } : JSON.parse(saved);
|
|
22
|
-
if (progress.done)
|
|
23
|
-
return undefined;
|
|
24
|
-
const stored = await store.accounts.storedAccount(key).catch(() => null);
|
|
25
|
-
if (stored === null)
|
|
26
|
-
return undefined;
|
|
27
|
-
const before = progress.before ?? Number.POSITIVE_INFINITY;
|
|
28
|
-
const batch = (await store.mail.emailFacts({ accountId: stored.id }))
|
|
29
|
-
.filter((email) => email.dkim === null &&
|
|
30
|
-
email.dmarc === null &&
|
|
31
|
-
email.replyTo === null &&
|
|
32
|
-
(email.receivedAt ?? 0) < before &&
|
|
33
|
-
!email.mailboxes.some(({ kind }) => kind === ENVELOPE))
|
|
34
|
-
.sort((a, b) => (b.receivedAt ?? 0) - (a.receivedAt ?? 0))
|
|
35
|
-
.slice(0, HEADERS_PER_RUN);
|
|
36
|
-
if (batch.length === 0) {
|
|
37
|
-
await store.sync.setSyncState(key, STATE, JSON.stringify({ ...progress, done: true }));
|
|
38
|
-
return undefined;
|
|
39
|
-
}
|
|
40
|
-
const all = (await source.folders?.().catch(() => undefined))?.all ?? GMAIL_ALL_MAIL;
|
|
41
|
-
const found = new Map((await source.find(batch.map(({ externalId }) => externalId), all, { headers: true })).map((item) => [item.messageId, item]));
|
|
42
|
-
let filled = 0;
|
|
43
|
-
const slices = slicesOf(batch);
|
|
44
|
-
for (const [at, slice] of slices.entries()) {
|
|
45
|
-
const inputs = [];
|
|
46
|
-
for (const { externalId } of slice) {
|
|
47
|
-
const headers = found.get(externalId)?.headers;
|
|
48
|
-
if (headers === undefined)
|
|
49
|
-
continue;
|
|
50
|
-
const record = storedOf(headers);
|
|
51
|
-
const email = await store.mail.email(stored.id, externalId);
|
|
52
|
-
// Headers already kept, even without a verdict, stay as the import wrote them.
|
|
53
|
-
if (email === null || email.bodyText === null || Object.keys(email.headers ?? {}).length)
|
|
54
|
-
continue;
|
|
55
|
-
if (Object.keys(record).length === 0)
|
|
56
|
-
continue;
|
|
57
|
-
const [placed] = await store.mail.inThreads(stored.id, [externalId]);
|
|
58
|
-
if (placed === undefined)
|
|
59
|
-
continue;
|
|
60
|
-
inputs.push({
|
|
61
|
-
accountId: stored.id,
|
|
62
|
-
externalId: placed.threadExternalId,
|
|
63
|
-
now,
|
|
64
|
-
emails: [
|
|
65
|
-
{
|
|
66
|
-
externalId,
|
|
67
|
-
subject: email.subject,
|
|
68
|
-
from: email.fromAddress === null ? null : { address: email.fromAddress, name: email.fromName },
|
|
69
|
-
sentAt: email.sentAt,
|
|
70
|
-
bodyText: email.bodyText,
|
|
71
|
-
headers: record,
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
const value = JSON.stringify({ done: false, before: slice.at(-1)?.receivedAt ?? 0 });
|
|
77
|
-
await store.mail.saveThreads(inputs, [{ accountId: stored.id, name: STATE, value }]);
|
|
78
|
-
filled += inputs.length;
|
|
79
|
-
if (at < slices.length - 1)
|
|
80
|
-
await pause();
|
|
81
|
-
}
|
|
82
|
-
return filled;
|
|
83
|
-
};
|
|
84
|
-
//# sourceMappingURL=backfill-headers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"backfill-headers.js","sourceRoot":"","sources":["../../src/mail/backfill-headers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { DomainAge } from "@wirecat/cli-core/mail";
|
|
2
|
-
/** IANA's list of which registry answers RDAP for which top-level domain (RFC 9224). */
|
|
3
|
-
export declare const BOOTSTRAP_URL = "https://data.iana.org/rdap/dns.json";
|
|
4
|
-
/** The ages already looked up; reads no network. */
|
|
5
|
-
export declare const knownAges: (env: NodeJS.ProcessEnv) => Map<string, DomainAge>;
|
|
6
|
-
export interface LookupDeps {
|
|
7
|
-
fetch: typeof fetch;
|
|
8
|
-
sleep: (ms: number) => Promise<void>;
|
|
9
|
-
now: () => Date;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* The registry's own `errorCode` from an RDAP error body (RFC 9083 §6), as `rdap.<code>`; never its title or
|
|
13
|
-
* description. A body over 4 KB, or one that is not JSON, gives none. Reads a clone, so the body stays readable.
|
|
14
|
-
*/
|
|
15
|
-
export declare const rdapErrorName: (response: Response) => Promise<string | undefined>;
|
|
16
|
-
export interface LookupResult {
|
|
17
|
-
looked: number;
|
|
18
|
-
failed: number;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Asks each domain's own registry when it was registered, straight from IANA's list, never through a relay: each
|
|
22
|
-
* question tells that registry, and only it, the domain's name. One question a second; answers are kept for good.
|
|
23
|
-
* A domain whose registry has no RDAP (most country domains: .ru, .de, .es, .io) is marked unsupported, not guessed.
|
|
24
|
-
*/
|
|
25
|
-
export declare const lookUpAges: (env: NodeJS.ProcessEnv, domains: readonly string[], deps?: LookupDeps) => Promise<LookupResult>;
|
|
26
|
-
//# sourceMappingURL=domain-age.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domain-age.d.ts","sourceRoot":"","sources":["../../src/mail/domain-age.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGvD,wFAAwF;AACxF,eAAO,MAAM,aAAa,wCAAwC,CAAA;AA8BlE,oDAAoD;AACpD,eAAO,MAAM,SAAS,QAAS,MAAM,CAAC,UAAU,KAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CACvB,CAAA;AAEjD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,GAAG,EAAE,MAAM,IAAI,CAAA;CAChB;AAUD;;;GAGG;AACH,eAAO,MAAM,aAAa,aAAoB,QAAQ,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAoBlF,CAAA;AAqCD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAChB,MAAM,CAAC,UAAU,WACb,SAAS,MAAM,EAAE,SACpB,UAAU,KACf,OAAO,CAAC,YAAY,CA4CtB,CAAA"}
|
package/dist/mail/domain-age.js
DELETED
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { resolvePaths } from "@wirecat/cli-base";
|
|
4
|
-
import { providerRequest } from "@wirecat/cli-core/cli";
|
|
5
|
-
import { VERSION } from "../version.js";
|
|
6
|
-
/** IANA's list of which registry answers RDAP for which top-level domain (RFC 9224). */
|
|
7
|
-
export const BOOTSTRAP_URL = "https://data.iana.org/rdap/dns.json";
|
|
8
|
-
const BOOTSTRAP_MAX_AGE_MS = 30 * 24 * 60 * 60 * 1000;
|
|
9
|
-
const REQUEST_GAP_MS = 1000;
|
|
10
|
-
const TIMEOUT_MS = 10_000;
|
|
11
|
-
const USER_AGENT = `cli-memo/${VERSION} (+https://github.com/WireCatLabs/cli-memo)`;
|
|
12
|
-
const fileOf = (env) => join(resolvePaths({ appName: "cli-memo", prefix: "MEMO", env }).state, "domain-ages.json");
|
|
13
|
-
// A registration date never changes, so the cache is kept on this computer for good and asked again never.
|
|
14
|
-
const loadCache = (env) => {
|
|
15
|
-
try {
|
|
16
|
-
return { domains: {}, ...JSON.parse(readFileSync(fileOf(env), "utf8")) };
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return { domains: {} };
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
const saveCache = (env, cache) => {
|
|
23
|
-
const file = fileOf(env);
|
|
24
|
-
mkdirSync(join(file, ".."), { recursive: true });
|
|
25
|
-
writeFileSync(`${file}.tmp`, JSON.stringify(cache));
|
|
26
|
-
renameSync(`${file}.tmp`, file);
|
|
27
|
-
};
|
|
28
|
-
/** The ages already looked up; reads no network. */
|
|
29
|
-
export const knownAges = (env) => new Map(Object.entries(loadCache(env).domains));
|
|
30
|
-
const realDeps = {
|
|
31
|
-
fetch: (input, init) => fetch(input, init),
|
|
32
|
-
sleep: (ms) => new Promise((done) => setTimeout(done, ms)),
|
|
33
|
-
now: () => new Date(),
|
|
34
|
-
};
|
|
35
|
-
const ERROR_BODY_BYTES = 4096;
|
|
36
|
-
/**
|
|
37
|
-
* The registry's own `errorCode` from an RDAP error body (RFC 9083 §6), as `rdap.<code>`; never its title or
|
|
38
|
-
* description. A body over 4 KB, or one that is not JSON, gives none. Reads a clone, so the body stays readable.
|
|
39
|
-
*/
|
|
40
|
-
export const rdapErrorName = async (response) => {
|
|
41
|
-
const reader = response.clone().body?.getReader();
|
|
42
|
-
if (!reader)
|
|
43
|
-
return undefined;
|
|
44
|
-
const chunks = [];
|
|
45
|
-
let size = 0;
|
|
46
|
-
try {
|
|
47
|
-
for (;;) {
|
|
48
|
-
const { done, value } = await reader.read();
|
|
49
|
-
if (done)
|
|
50
|
-
break;
|
|
51
|
-
size += value.byteLength;
|
|
52
|
-
if (size > ERROR_BODY_BYTES)
|
|
53
|
-
return undefined;
|
|
54
|
-
chunks.push(value);
|
|
55
|
-
}
|
|
56
|
-
const { errorCode } = JSON.parse(Buffer.concat(chunks).toString("utf8"));
|
|
57
|
-
return Number.isInteger(errorCode) ? `rdap.${errorCode}` : undefined;
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
finally {
|
|
63
|
-
reader.cancel().catch(() => { });
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
const getJson = async (deps, url, operation) => {
|
|
67
|
-
const answered = providerRequest(operation, undefined, {
|
|
68
|
-
method: "GET",
|
|
69
|
-
endpointTemplate: operation === "rdap.bootstrap" ? "/rdap/dns.json" : "/domain/:id",
|
|
70
|
-
transport: "http",
|
|
71
|
-
attempt: 1,
|
|
72
|
-
});
|
|
73
|
-
let response;
|
|
74
|
-
try {
|
|
75
|
-
response = await deps.fetch(url, {
|
|
76
|
-
headers: { accept: "application/rdap+json, application/json", "user-agent": USER_AGENT },
|
|
77
|
-
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
answered({ error });
|
|
82
|
-
throw error;
|
|
83
|
-
}
|
|
84
|
-
// A domain the registry does not know is an answer, not a failure.
|
|
85
|
-
if (response.ok || response.status === 404)
|
|
86
|
-
answered({ status: response.status });
|
|
87
|
-
else {
|
|
88
|
-
const providerError = await rdapErrorName(response);
|
|
89
|
-
answered({ status: response.status, error: true, ...(providerError ? { providerError } : {}) });
|
|
90
|
-
}
|
|
91
|
-
return { status: response.status, body: response.ok ? await response.json() : undefined };
|
|
92
|
-
};
|
|
93
|
-
const registrationOf = (body) => (body?.events ?? []).find((event) => event.eventAction === "registration")?.eventDate;
|
|
94
|
-
/**
|
|
95
|
-
* Asks each domain's own registry when it was registered, straight from IANA's list, never through a relay: each
|
|
96
|
-
* question tells that registry, and only it, the domain's name. One question a second; answers are kept for good.
|
|
97
|
-
* A domain whose registry has no RDAP (most country domains: .ru, .de, .es, .io) is marked unsupported, not guessed.
|
|
98
|
-
*/
|
|
99
|
-
export const lookUpAges = async (env, domains, deps = realDeps) => {
|
|
100
|
-
const cache = loadCache(env);
|
|
101
|
-
const wanted = [...new Set(domains.map((domain) => domain.toLowerCase()))].filter((domain) => cache.domains[domain] === undefined);
|
|
102
|
-
if (wanted.length === 0)
|
|
103
|
-
return { looked: 0, failed: 0 };
|
|
104
|
-
const fetchedAt = cache.bootstrap?.fetchedAt;
|
|
105
|
-
if (fetchedAt === undefined || deps.now().getTime() - Date.parse(fetchedAt) > BOOTSTRAP_MAX_AGE_MS) {
|
|
106
|
-
const { body } = await getJson(deps, BOOTSTRAP_URL, "rdap.bootstrap");
|
|
107
|
-
const services = body?.services;
|
|
108
|
-
if (!Array.isArray(services))
|
|
109
|
-
throw new Error("IANA's RDAP list did not answer");
|
|
110
|
-
cache.bootstrap = { fetchedAt: deps.now().toISOString(), services };
|
|
111
|
-
}
|
|
112
|
-
const servers = new Map();
|
|
113
|
-
for (const [tlds, urls] of cache.bootstrap?.services ?? []) {
|
|
114
|
-
const url = urls.find((candidate) => candidate.startsWith("https://")) ?? urls[0];
|
|
115
|
-
if (url !== undefined)
|
|
116
|
-
for (const tld of tlds)
|
|
117
|
-
servers.set(tld.toLowerCase(), url.endsWith("/") ? url : `${url}/`);
|
|
118
|
-
}
|
|
119
|
-
let looked = 0;
|
|
120
|
-
let failed = 0;
|
|
121
|
-
for (const domain of wanted) {
|
|
122
|
-
const server = servers.get(domain.slice(domain.lastIndexOf(".") + 1));
|
|
123
|
-
const checkedAt = deps.now().toISOString();
|
|
124
|
-
if (server === undefined) {
|
|
125
|
-
cache.domains[domain] = { unsupported: true, checkedAt };
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
if (looked > 0)
|
|
129
|
-
await deps.sleep(REQUEST_GAP_MS);
|
|
130
|
-
looked++;
|
|
131
|
-
try {
|
|
132
|
-
const { status, body } = await getJson(deps, `${server}domain/${encodeURIComponent(domain)}`, "rdap.domain");
|
|
133
|
-
// Not found is an answer worth keeping; anything else may work another day, so it is not kept.
|
|
134
|
-
if (status === 404)
|
|
135
|
-
cache.domains[domain] = { checkedAt };
|
|
136
|
-
else if (status >= 200 && status < 300) {
|
|
137
|
-
const created = registrationOf(body);
|
|
138
|
-
cache.domains[domain] = { ...(created === undefined ? {} : { created }), checkedAt };
|
|
139
|
-
}
|
|
140
|
-
else
|
|
141
|
-
failed++;
|
|
142
|
-
}
|
|
143
|
-
catch {
|
|
144
|
-
failed++;
|
|
145
|
-
}
|
|
146
|
-
saveCache(env, cache);
|
|
147
|
-
}
|
|
148
|
-
saveCache(env, cache);
|
|
149
|
-
return { looked, failed };
|
|
150
|
-
};
|
|
151
|
-
//# sourceMappingURL=domain-age.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domain-age.js","sourceRoot":"","sources":["../../src/mail/domain-age.ts"],"names":[],"mappings":"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"}
|
package/dist/mail/gmail.d.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { type Listed, type Searched } from "@wirecat/cli-core/mail";
|
|
2
|
-
import { type Himalaya } from "./himalaya.js";
|
|
3
|
-
/**
|
|
4
|
-
* All Mail and Trash found by their roles (RFC 6154 `\\All`, `\\Trash`): Gmail names them in the account's
|
|
5
|
-
* language, so Trash is `[Gmail]/Bin` in UK English.
|
|
6
|
-
*/
|
|
7
|
-
export declare const specialFolders: (run: Himalaya, account: string) => Promise<{
|
|
8
|
-
all: string;
|
|
9
|
-
trash: string;
|
|
10
|
-
}>;
|
|
11
|
-
/** One cheap call: the UIDs a listing would fetch, so a rerun can fetch only those not done before. */
|
|
12
|
-
export declare const searchMail: (run: Himalaya, account: string, since: Date, folder: string) => Promise<Searched>;
|
|
13
|
-
/**
|
|
14
|
-
* The UIDs of messages known by their Gmail id, through Gmail's `X-GM-MSGID` search (Gmail IMAP extensions); a
|
|
15
|
-
* message gone from `folder` has none, so it is simply not in the answer.
|
|
16
|
-
*/
|
|
17
|
-
export declare const uidsOfMessages: (run: Himalaya, account: string, messageIds: readonly string[], folder?: string) => Promise<string[]>;
|
|
18
|
-
/**
|
|
19
|
-
* Moves the messages with these Gmail ids from `from` to `to` with `UID MOVE` (RFC 6851, which Gmail lists in its
|
|
20
|
-
* CAPABILITY). On Gmail a move to `[Gmail]/Trash` takes a message out of All Mail and drops `\Inbox`, keeping its
|
|
21
|
-
* other labels; a move back to `INBOX` or `[Gmail]/All Mail` returns it (checked on a test account, 2026-10-16).
|
|
22
|
-
*/
|
|
23
|
-
export declare const moveMessages: (run: Himalaya, account: string, messageIds: readonly string[], from: string, to: string, known?: ReadonlyMap<string, string>) => Promise<{
|
|
24
|
-
moved: string[];
|
|
25
|
-
missing: string[];
|
|
26
|
-
}>;
|
|
27
|
-
/** Which of these UIDs `folder` still holds: one `UID SEARCH`, where looking each message up by Gmail id is one per. */
|
|
28
|
-
export declare const uidsPresent: (run: Himalaya, account: string, uids: readonly string[], folder: string) => Promise<string[]>;
|
|
29
|
-
/** Puts Gmail labels back on messages in `folder`; a label a message already has is left as it is. */
|
|
30
|
-
export declare const addLabels: (run: Himalaya, account: string, messageIds: readonly string[], folder: string, labels: readonly string[]) => Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Every message in All Mail received since `since`, read with EXAMINE so nothing can change a flag.
|
|
33
|
-
* All Mail rather than INBOX: an archived message leaves INBOX but is not deleted.
|
|
34
|
-
* `searched` limits it to those UIDs, from `searchMail`, so mail done in an earlier run is not fetched again.
|
|
35
|
-
*/
|
|
36
|
-
export declare const listAllMail: (run: Himalaya, account: string, since: Date, folder?: string, headers?: boolean, searched?: Searched) => Promise<Listed[]>;
|
|
37
|
-
/** Message-ID is stable across folders; absent headers fall back to a UIDVALIDITY-scoped identity. */
|
|
38
|
-
export declare const listImapMail: (run: Himalaya, account: string, since: Date, folder: string, searched?: Searched) => Promise<Listed[]>;
|
|
39
|
-
//# sourceMappingURL=gmail.d.ts.map
|
package/dist/mail/gmail.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gmail.d.ts","sourceRoot":"","sources":["../../src/mail/gmail.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,MAAM,EAAsB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjH,OAAO,EAAE,KAAK,QAAQ,EAA+B,MAAM,eAAe,CAAA;AA2F1E;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAe,QAAQ,WAAW,MAAM,KAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgB3G,CAAA;AAED,uGAAuG;AACvG,eAAO,MAAM,UAAU,QAAe,QAAQ,WAAW,MAAM,SAAS,IAAI,UAAU,MAAM,KAAG,OAAO,CAAC,QAAQ,CAW9G,CAAA;AAKD;;;GAGG;AACH,eAAO,MAAM,cAAc,QACpB,QAAQ,WACJ,MAAM,cACH,SAAS,MAAM,EAAE,sBAE5B,OAAO,CAAC,MAAM,EAAE,CAmBlB,CAAA;AAuCD;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAClB,QAAQ,WACJ,MAAM,cACH,SAAS,MAAM,EAAE,QACvB,MAAM,MACR,MAAM,UACF,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,KAClC,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAUhD,CAAA;AAED,wHAAwH;AACxH,eAAO,MAAM,WAAW,QACjB,QAAQ,WACJ,MAAM,QACT,SAAS,MAAM,EAAE,UACf,MAAM,KACb,OAAO,CAAC,MAAM,EAAE,CAUlB,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,SAAS,QACf,QAAQ,WACJ,MAAM,cACH,SAAS,MAAM,EAAE,UACrB,MAAM,UACN,SAAS,MAAM,EAAE,KACxB,OAAO,CAAC,IAAI,CAUd,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,QACjB,QAAQ,WACJ,MAAM,SACR,IAAI,iDAGA,QAAQ,KAClB,OAAO,CAAC,MAAM,EAAE,CA0ElB,CAAA;AAED,sGAAsG;AACtG,eAAO,MAAM,YAAY,QAClB,QAAQ,WACJ,MAAM,SACR,IAAI,UACH,MAAM,aACH,QAAQ,KAClB,OAAO,CAAC,MAAM,EAAE,CAoDlB,CAAA"}
|