@rndmjoker/proton-mcp 0.4.7 → 0.4.12

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.
Files changed (105) hide show
  1. package/README.md +69 -21
  2. package/dist/bridge/certificate.d.ts +33 -1
  3. package/dist/bridge/certificate.js +82 -9
  4. package/dist/bridge/certificate.js.map +1 -1
  5. package/dist/bridge/connection.js +31 -6
  6. package/dist/bridge/connection.js.map +1 -1
  7. package/dist/bridge/errors.d.ts +8 -0
  8. package/dist/bridge/errors.js +28 -3
  9. package/dist/bridge/errors.js.map +1 -1
  10. package/dist/config.d.ts +6 -0
  11. package/dist/config.js +1 -0
  12. package/dist/config.js.map +1 -1
  13. package/dist/credentials/availability.d.ts +5 -0
  14. package/dist/credentials/availability.js +7 -0
  15. package/dist/credentials/availability.js.map +1 -1
  16. package/dist/credentials/encrypted-file.js +7 -2
  17. package/dist/credentials/encrypted-file.js.map +1 -1
  18. package/dist/credentials/keyring.d.ts +12 -2
  19. package/dist/credentials/keyring.js +44 -6
  20. package/dist/credentials/keyring.js.map +1 -1
  21. package/dist/credentials/plain-file.js +8 -2
  22. package/dist/credentials/plain-file.js.map +1 -1
  23. package/dist/credentials/session-bus.d.ts +38 -0
  24. package/dist/credentials/session-bus.js +68 -0
  25. package/dist/credentials/session-bus.js.map +1 -0
  26. package/dist/credentials/store.d.ts +5 -1
  27. package/dist/credentials/store.js.map +1 -1
  28. package/dist/in-flight.d.ts +6 -3
  29. package/dist/in-flight.js +6 -3
  30. package/dist/in-flight.js.map +1 -1
  31. package/dist/mail/actions.d.ts +0 -2
  32. package/dist/mail/actions.js +8 -7
  33. package/dist/mail/actions.js.map +1 -1
  34. package/dist/mail/attachments.d.ts +12 -2
  35. package/dist/mail/attachments.js +19 -11
  36. package/dist/mail/attachments.js.map +1 -1
  37. package/dist/mail/compose.d.ts +70 -15
  38. package/dist/mail/compose.js +147 -11
  39. package/dist/mail/compose.js.map +1 -1
  40. package/dist/mail/drafts.d.ts +28 -2
  41. package/dist/mail/drafts.js +91 -21
  42. package/dist/mail/drafts.js.map +1 -1
  43. package/dist/mail/ids.d.ts +10 -0
  44. package/dist/mail/ids.js +16 -4
  45. package/dist/mail/ids.js.map +1 -1
  46. package/dist/mail/labels.js +9 -4
  47. package/dist/mail/labels.js.map +1 -1
  48. package/dist/mail/messages.d.ts +50 -10
  49. package/dist/mail/messages.js +94 -6
  50. package/dist/mail/messages.js.map +1 -1
  51. package/dist/mail/saved-attachments.d.ts +128 -0
  52. package/dist/mail/saved-attachments.js +448 -0
  53. package/dist/mail/saved-attachments.js.map +1 -0
  54. package/dist/mail/search.d.ts +73 -5
  55. package/dist/mail/search.js +150 -27
  56. package/dist/mail/search.js.map +1 -1
  57. package/dist/mail/send.js +24 -9
  58. package/dist/mail/send.js.map +1 -1
  59. package/dist/mail/uid-search.d.ts +17 -0
  60. package/dist/mail/uid-search.js +25 -0
  61. package/dist/mail/uid-search.js.map +1 -0
  62. package/dist/mime/filenames.d.ts +24 -0
  63. package/dist/mime/filenames.js +58 -0
  64. package/dist/mime/filenames.js.map +1 -0
  65. package/dist/mime/parts.d.ts +34 -0
  66. package/dist/mime/parts.js +92 -0
  67. package/dist/mime/parts.js.map +1 -0
  68. package/dist/server.js +39 -8
  69. package/dist/server.js.map +1 -1
  70. package/dist/session.d.ts +15 -3
  71. package/dist/session.js +35 -8
  72. package/dist/session.js.map +1 -1
  73. package/dist/tools/actions.js +2 -1
  74. package/dist/tools/actions.js.map +1 -1
  75. package/dist/tools/confirm.js +47 -11
  76. package/dist/tools/confirm.js.map +1 -1
  77. package/dist/tools/drafts.d.ts +3 -0
  78. package/dist/tools/drafts.js +31 -10
  79. package/dist/tools/drafts.js.map +1 -1
  80. package/dist/tools/format.d.ts +8 -0
  81. package/dist/tools/format.js +44 -6
  82. package/dist/tools/format.js.map +1 -1
  83. package/dist/tools/guidance.js +27 -3
  84. package/dist/tools/guidance.js.map +1 -1
  85. package/dist/tools/messages.js +41 -13
  86. package/dist/tools/messages.js.map +1 -1
  87. package/dist/tools/pending-view.d.ts +7 -0
  88. package/dist/tools/pending-view.js +4 -1
  89. package/dist/tools/pending-view.js.map +1 -1
  90. package/dist/tools/saved.d.ts +15 -0
  91. package/dist/tools/saved.js +107 -0
  92. package/dist/tools/saved.js.map +1 -0
  93. package/dist/tools/send.js +12 -4
  94. package/dist/tools/send.js.map +1 -1
  95. package/dist/web/layout.js +2 -0
  96. package/dist/web/layout.js.map +1 -1
  97. package/dist/web/pages.js +1 -0
  98. package/dist/web/pages.js.map +1 -1
  99. package/dist/web/pending.d.ts +4 -0
  100. package/dist/web/pending.js +32 -4
  101. package/dist/web/pending.js.map +1 -1
  102. package/dist/web/server.d.ts +16 -5
  103. package/dist/web/server.js +12 -8
  104. package/dist/web/server.js.map +1 -1
  105. package/package.json +21 -18
@@ -30,7 +30,7 @@
30
30
  * keeps it in "All Mail", which the measurement confirmed.
31
31
  */
32
32
  import { BridgeError } from '../bridge/errors.js';
33
- import { normaliseMessageId, ALL_MAIL } from './ids.js';
33
+ import { normaliseMessageId, findByMessageId, ALL_MAIL, TRASH } from './ids.js';
34
34
  import { LABEL_PREFIX } from './labels.js';
35
35
  /**
36
36
  * How many messages one call may touch.
@@ -104,10 +104,13 @@ export async function findHomeFolder(connection, rawId, hint) {
104
104
  // The Bridge answers a fetch on an empty mailbox with BAD.
105
105
  if (status.messages === 0)
106
106
  return undefined;
107
- const hits = await client.search({ header: { 'message-id': messageId } }, { uid: true });
108
- if (!Array.isArray(hits) || hits.length === 0)
109
- return undefined;
110
- return Math.max(...hits);
107
+ // findByMessageId rather than a search written out here. It makes the
108
+ // second attempt without the angle brackets and verifies every hit of
109
+ // it, which real mail needs: an identifier is not always bracketed, and
110
+ // the incident behind that fallback was "marking 67 messages left that
111
+ // one behind" - marking goes through setFlags to this function, so the
112
+ // path the incident happened in was the one without the fallback.
113
+ return findByMessageId(client, messageId);
111
114
  })
112
115
  .catch(() => undefined);
113
116
  return found;
@@ -250,8 +253,6 @@ export async function setFlags(connection, readOnly, messageIds, changes, hint)
250
253
  }
251
254
  return summarise(outcomes);
252
255
  }
253
- /** The mailbox Proton puts discarded messages in. Nothing here empties it. */
254
- export const TRASH = 'Trash';
255
256
  /**
256
257
  * Moves messages to the trash.
257
258
  *
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/mail/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAA;AAE3B,6EAA6E;AAC7E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;AAE9C,2DAA2D;AAC3D,SAAS,cAAc,CAAC,QAAiB,EAAE,IAAY;IACrD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,WAAW,CACnB,uCAAuC,IAAI,eAAe;YACxD,2FAA2F,CAC9F,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,SAAoB;IACnE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAC1B,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,WAAW,CAAC,wDAAwD,CAAC,CAAA;IAE1F,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,IAAI,WAAW,CACnB,IAAI,IAAI,mFAAmF;YACzF,uFAAuF;YACvF,mEAAmE,CACtE,CAAA;IACH,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,WAAW,CACnB,IAAI,IAAI,uEAAuE;YAC7E,CAAC,IAAI,KAAK,SAAS;gBACjB,CAAC,CAAC,+CAA+C;gBACjD,CAAC,CAAC,IAAI,QAAQ,0DAA0D,CAAC,CAC9E,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,WAAW,CACnB,wBAAwB,IAAI,+DAA+D;YACzF,wFAAwF;YACxF,yFAAyF,CAC5F,CAAA;IACH,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,IAAI,WAAW,CACnB,IAAI,IAAI,8EAA8E;YACpF,6CAA6C,CAChD,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAsB,EACtB,KAAa,EACb,IAAa;IAEb,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAE3C,MAAM,MAAM,GAAG,KAAK,EAAE,IAAY,EAA+B,EAAE;QACjE,MAAM,KAAK,GAAG,MAAM,UAAU;aAC3B,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC1C,2DAA2D;YAC3D,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAA;YAC3C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;YACxF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAA;YAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;QAC1B,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACzB,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IAED,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;IAC9D,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAA;IAClD,0EAA0E;IAC1E,8EAA8E;IAC9E,MAAM,UAAU,GAAG,SAAS;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SACzE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACnB,wDAAwD;SACvD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAEpC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,IAAI;YAAE,SAAQ;QAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;IACxD,CAAC;IAED,MAAM,IAAI,WAAW,CACnB,yCAAyC,SAAS,4CAA4C;QAC5F,uFAAuF;QACvF,sBAAsB,CACzB,CAAA;AACH,CAAC;AAED,oEAAoE;AACpE,SAAS,IAAI,CAAC,IAAY;IACxB,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAC5B,iDAAiD;IACjD,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9C,CAAC;AAkBD,SAAS,SAAS,CAAC,QAA0B;IAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAA;IACrD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,CAAA;AACrE,CAAC;AAED,SAAS,WAAW,CAAC,GAAa;IAChC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,WAAW,CAAC,qDAAqD,CAAC,CAAA;IAClG,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,WAAW,CACnB,GAAG,GAAG,CAAC,MAAM,qCAAqC,SAAS,6BAA6B;YACtF,kFAAkF,CACrF,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAsB,EACtB,QAAiB,EACjB,UAAoB,EACpB,MAAc,EACd,IAAa;IAEb,cAAc,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAA;IAC3C,WAAW,CAAC,UAAU,CAAC,CAAA;IAEvB,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAA;IAClD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEhD,MAAM,QAAQ,GAAqB,EAAE,CAAA;IACrC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YACxD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,sCAAsC;iBAC/C,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CACxE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAC1D,CAAA;YACD,wEAAwE;YACxE,0EAA0E;YAC1E,4BAA4B;YAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,qCAAqC,IAAI,CAAC,IAAI,SAAS,IAAI,2BAA2B;iBAC/F,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,GAAG;gBACd,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACrE,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACjD,CAAC;AAUD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,UAAsB,EACtB,QAAiB,EACjB,UAAoB,EACpB,OAAoB,EACpB,IAAa;IAEb,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAA;IAC/D,WAAW,CAAC,UAAU,CAAC,CAAA;IAEvB,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChE,MAAM,IAAI,WAAW,CACnB,+EAA+E,CAChF,CAAA;IACH,CAAC;IAED,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC5E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAErF,MAAM,QAAQ,GAAqB,EAAE,CAAA;IACrC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,yEAAyE;YACzE,uEAAuE;YACvE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;YACxD,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACvD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC5B,IAAI,GAAG,CAAC,MAAM;oBAAE,MAAM,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;gBACrE,IAAI,MAAM,CAAC,MAAM;oBAAE,MAAM,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;YAChF,CAAC,CAAC,CAAA;YACF,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,GAAG;gBACd,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aACrE,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAA;AAC5B,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAE5B;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAsB,EACtB,QAAiB,EACjB,UAAoB,EACpB,IAAa;IAEb,OAAO,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;AACpE,CAAC"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/mail/actions.ts"],"names":[],"mappings":"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"}
@@ -27,12 +27,22 @@ export interface AttachmentContent {
27
27
  /** Set when the content cannot be handed over as text. */
28
28
  unsupportedReason?: string;
29
29
  }
30
+ /** One attachment of a message, picked by index, with its bytes. */
31
+ export interface PickedAttachment {
32
+ filename: string;
33
+ contentType: string;
34
+ size: number;
35
+ content: Buffer;
36
+ }
30
37
  /**
31
- * Reads one attachment of a message by index.
38
+ * Picks one attachment of a message by index.
32
39
  *
33
40
  * The index refers to the list from get_message, which already excludes
34
- * Proton's own public key. The same filter runs here so both stay aligned.
41
+ * Proton's own public key. The same filter runs here so both stay aligned, and
42
+ * reading an attachment as text and saving it as a file pick the same one.
35
43
  */
44
+ export declare function pickAttachment(connection: Connection, messageId: string, index: number, hint?: string): Promise<PickedAttachment>;
45
+ /** Reads one attachment of a message by index, as text where it is text. */
36
46
  export declare function getAttachment(connection: Connection, messageId: string, index: number, options?: {
37
47
  hint?: string;
38
48
  offset?: number;
@@ -30,16 +30,17 @@ export function isTextual(contentType) {
30
30
  return TEXTUAL.some((p) => p.test(contentType));
31
31
  }
32
32
  /**
33
- * Reads one attachment of a message by index.
33
+ * Picks one attachment of a message by index.
34
34
  *
35
35
  * The index refers to the list from get_message, which already excludes
36
- * Proton's own public key. The same filter runs here so both stay aligned.
36
+ * Proton's own public key. The same filter runs here so both stay aligned, and
37
+ * reading an attachment as text and saving it as a file pick the same one.
37
38
  */
38
- export async function getAttachment(connection, messageId, index, options = {}) {
39
+ export async function pickAttachment(connection, messageId, index, hint) {
39
40
  if (!Number.isInteger(index) || index < 0) {
40
41
  throw new BridgeError(`"${index}" is not a valid attachment index. Expected 0 or higher.`);
41
42
  }
42
- const resolved = await resolveMessageId(connection, messageId, options.hint);
43
+ const resolved = await resolveMessageId(connection, messageId, hint);
43
44
  const source = await connection.withMailbox(resolved.path, async (client) => {
44
45
  const message = await client.fetchOne(String(resolved.uid), { source: true }, { uid: true });
45
46
  return message && message.source ? message.source : undefined;
@@ -56,20 +57,27 @@ export async function getAttachment(connection, messageId, index, options = {})
56
57
  ? `The message ${resolved.messageId} has no attachments.`
57
58
  : `Attachment index ${index} does not exist. The message has ${available}, so valid indices are 0 to ${available - 1}.`);
58
59
  }
59
- const contentType = wanted.contentType ?? 'application/octet-stream';
60
- const filename = wanted.filename ?? `attachment-${index}`;
61
- const size = wanted.size ?? wanted.content?.length ?? 0;
60
+ return {
61
+ contentType: wanted.contentType ?? 'application/octet-stream',
62
+ filename: wanted.filename ?? `attachment-${index}`,
63
+ size: wanted.size ?? wanted.content?.length ?? 0,
64
+ content: wanted.content ?? Buffer.alloc(0),
65
+ };
66
+ }
67
+ /** Reads one attachment of a message by index, as text where it is text. */
68
+ export async function getAttachment(connection, messageId, index, options = {}) {
69
+ const { filename, contentType, size, content } = await pickAttachment(connection, messageId, index, options.hint);
62
70
  if (!isTextual(contentType)) {
63
71
  return {
64
72
  filename,
65
73
  contentType,
66
74
  size,
67
- unsupportedReason: `This attachment is ${contentType} and cannot be returned as text. ` +
68
- 'Binary attachments are not supported yet, because handing them over would mean either ' +
69
- 'base64 in the context or writing decrypted content to disk. Open the message in a mail client instead.',
75
+ unsupportedReason: `This attachment is ${contentType} and cannot be returned as text, because that would mean ` +
76
+ 'base64 in the context. save_attachment saves it as a file on this machine where the user ' +
77
+ 'has set that up; otherwise open the message in a mail client.',
70
78
  };
71
79
  }
72
- const raw = wanted.content?.toString('utf8') ?? '';
80
+ const raw = content.toString('utf8');
73
81
  const excerpt = truncate(raw, MAX_ATTACHMENT_CHARS, options.offset ?? 0);
74
82
  const result = {
75
83
  filename,
@@ -1 +1 @@
1
- {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/mail/attachments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/mail/attachments.ts"],"names":[],"mappings":"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"}
@@ -5,13 +5,14 @@
5
5
  * same thing and must not drift: the recipients a confirmation shows have to
6
6
  * be the recipients that are written or sent, or the confirmation is theatre.
7
7
  *
8
- * No attachment can be read from disk here, and that is deliberate rather than
9
- * unfinished. An attachment taken from a path would mean the model names a
10
- * file, the server reads it, and the next confirmation the user waves through
11
- * carries it outside. Which paths may be reached is its own decision, not a
12
- * side effect of being able to write a draft.
8
+ * No attachment can be read from disk here, and that is deliberate. An
9
+ * attachment taken from a path would mean the model names a file, the server
10
+ * reads it, and the next confirmation the user waves through carries it
11
+ * outside. Which paths may be reached is its own decision, made in #17 rather
12
+ * than as a side effect of being able to write a draft.
13
13
  */
14
14
  import { type MarkupUrl, type MarkupLevel, type StyleNote } from './markup.js';
15
+ import type { CarriedFile } from '../mime/parts.js';
15
16
  /** An address, optionally with a display name. */
16
17
  export interface Recipient {
17
18
  name?: string;
@@ -36,18 +37,23 @@ export interface Draft {
36
37
  * Part of the draft rather than a parameter beside it, because it decides
37
38
  * what the message is allowed to contain.
38
39
  *
39
- * Note what the digest does and does not bind: it covers `html` as source
40
- * text, so the markup itself cannot be swapped after the answer, but it does
41
- * not carry the level. That holds today only because a wider level merely
42
- * permits more of the same string. Anything that makes the level change what
43
- * goes out, rather than what is allowed in, has to be added to `digestOf`
44
- * first.
40
+ * Covered by the digest, alongside the markup itself. The level does not
41
+ * change the bytes that go out, but it changes what the question says: at
42
+ * `extended` the confirmation warns and the preview lists every property
43
+ * used. Binding it means a yes given to the warned version cannot be
44
+ * replayed for the unwarned one.
45
45
  */
46
46
  markupLevel?: MarkupLevel;
47
- /** A whole message carried along, used when forwarding. */
47
+ /**
48
+ * A whole message carried along, used when forwarding.
49
+ *
50
+ * `carries` names the attachments travelling inside it. Only for telling the
51
+ * assistant what the original held; the bytes are in `raw`.
52
+ */
48
53
  attachedMessage?: {
49
54
  filename: string;
50
55
  raw: Buffer;
56
+ carries?: string[];
51
57
  };
52
58
  /**
53
59
  * The message as markup, when it has any.
@@ -77,6 +83,21 @@ export interface Draft {
77
83
  quotedHtml?: string;
78
84
  /** Files referenced from the markup by content id. */
79
85
  inlineParts?: InlinePart[];
86
+ /**
87
+ * The markup body of a stored draft, read back to be sent or kept, and kept
88
+ * apart from `html` on purpose.
89
+ *
90
+ * It is not held to the permitted set again. It was held to it when it was
91
+ * written through this server, or a person wrote it in Proton. Once stored,
92
+ * the composed part and a quote can no longer be told apart, and the level
93
+ * it was written at is recorded nowhere, so a second check refused every
94
+ * formatted reply on the <style> of its quote. It is read the way a quote
95
+ * is instead: the confirmation counts and the preview names everything in
96
+ * it, and anything beyond `standard` carries the same warning as `extended`.
97
+ */
98
+ storedHtml?: string;
99
+ /** Files read back from a stored draft, carried along as they were stored. */
100
+ carriedFiles?: CarriedFile[];
80
101
  }
81
102
  /** A file carried inside the message and referenced from the markup. */
82
103
  export interface InlinePart {
@@ -86,14 +107,25 @@ export interface InlinePart {
86
107
  contentType: string;
87
108
  content: Buffer;
88
109
  }
110
+ /**
111
+ * Refuses a recipient that reads one way in the confirmation and goes somewhere
112
+ * else, or nowhere, once the message is sent.
113
+ *
114
+ * Applied to every recipient a message can carry, whether a caller typed it or
115
+ * it was read back from a stored draft. The confirmation is only worth
116
+ * something if what it shows is what the envelope carries.
117
+ */
118
+ export declare function assertDeliverable(recipient: Recipient): void;
89
119
  /**
90
120
  * Checks an address well enough to catch the mistakes that matter.
91
121
  *
92
122
  * Not a full RFC 5322 parser, and not trying to be: the point is to refuse a
93
123
  * string that would end up somewhere unintended, not to adjudicate exotic but
94
- * legal forms. A newline is the one that has to be caught, because a header
95
- * injected through an address field would let the sender of a mail the model
96
- * just read add a recipient the confirmation never showed.
124
+ * legal forms. A newline is the one that has to be caught first, because a
125
+ * header injected through an address field would let the sender of a mail the
126
+ * model just read add a recipient the confirmation never showed. Everything
127
+ * else that would make the confirmation and the envelope disagree is
128
+ * assertDeliverable's.
97
129
  */
98
130
  export declare function parseRecipient(input: string): Recipient;
99
131
  export declare function parseRecipients(list: string[] | undefined): Recipient[];
@@ -264,6 +296,20 @@ export interface QuoteSummary {
264
296
  * is visible as the recipient will see it.
265
297
  */
266
298
  export declare function summariseQuote(draft: Draft): QuoteSummary | undefined;
299
+ /** The line this server writes above every forwarded message, in text and in markup. */
300
+ export declare const FORWARD_HEADER = "---------- Forwarded message ----------";
301
+ /**
302
+ * Whether the message carries a quoted one, for the count line of the
303
+ * confirmation.
304
+ *
305
+ * summariseQuote only sees a quote that is still held apart from the body,
306
+ * which is the case while a reply or a forward is composed with markup. Once a
307
+ * draft is stored, and in a plain text reply, the quote is part of the body,
308
+ * and up to 0.4.11 the confirmation said nothing about it. It is recognised
309
+ * there by what quotes it: the forward header this server writes, the "wrote:"
310
+ * line followed by quoted lines, or a blockquote, which is how Proton quotes.
311
+ */
312
+ export declare function carriesQuote(draft: Draft): boolean;
267
313
  /**
268
314
  * Everything the message points at or carries, for the confirmation.
269
315
  *
@@ -288,3 +334,12 @@ export declare function fingerprintPart(content: Buffer): string;
288
334
  * "what did it use" is a list rather than a promise.
289
335
  */
290
336
  export declare function styleNotesOf(draft: Draft): StyleNote[];
337
+ /**
338
+ * What a stored body carries that no composed message may: style blocks,
339
+ * scripts, event handlers, data: addresses, comments.
340
+ *
341
+ * Empty for anything that is not a stored draft, because composed markup with
342
+ * such a thing never gets this far. For a stored draft it is part of what the
343
+ * confirmation warns about, since it was not checked again on the way out.
344
+ */
345
+ export declare function storedBeyondOf(draft: Draft): string[];
@@ -5,26 +5,82 @@
5
5
  * same thing and must not drift: the recipients a confirmation shows have to
6
6
  * be the recipients that are written or sent, or the confirmation is theatre.
7
7
  *
8
- * No attachment can be read from disk here, and that is deliberate rather than
9
- * unfinished. An attachment taken from a path would mean the model names a
10
- * file, the server reads it, and the next confirmation the user waves through
11
- * carries it outside. Which paths may be reached is its own decision, not a
12
- * side effect of being able to write a draft.
8
+ * No attachment can be read from disk here, and that is deliberate. An
9
+ * attachment taken from a path would mean the model names a file, the server
10
+ * reads it, and the next confirmation the user waves through carries it
11
+ * outside. Which paths may be reached is its own decision, made in #17 rather
12
+ * than as a side effect of being able to write a draft.
13
13
  */
14
14
  import MailComposer from 'nodemailer/lib/mail-composer/index.js';
15
+ import MimeNode from 'nodemailer/lib/mime-node';
15
16
  import { createHash, randomUUID } from 'node:crypto';
16
17
  import { BridgeError } from '../bridge/errors.js';
17
18
  import { assertSendableMarkup, readMarkup, } from './markup.js';
18
19
  import { prepareQuotedMarkup } from './quote.js';
19
20
  import { htmlToText } from '../mime/parse.js';
21
+ /**
22
+ * Control characters, and the formatting ones that reorder text or take up no
23
+ * space. In a display name they change how a recipient reads in the
24
+ * confirmation without changing where the message goes: U+202E reverses
25
+ * everything after it.
26
+ */
27
+ const INVISIBLE = /[\p{Cc}\p{Cf}]/u;
28
+ /** Names each invisible character by its code point, so a refusal can show it. */
29
+ function showInvisible(value) {
30
+ return value.replace(/[\p{Cc}\p{Cf}]/gu, (c) => `U+${c.codePointAt(0).toString(16).toUpperCase().padStart(4, '0')}`);
31
+ }
32
+ /**
33
+ * Refuses a recipient that reads one way in the confirmation and goes somewhere
34
+ * else, or nowhere, once the message is sent.
35
+ *
36
+ * Applied to every recipient a message can carry, whether a caller typed it or
37
+ * it was read back from a stored draft. The confirmation is only worth
38
+ * something if what it shows is what the envelope carries.
39
+ */
40
+ export function assertDeliverable(recipient) {
41
+ const { name, address } = recipient;
42
+ if (name !== undefined && INVISIBLE.test(name)) {
43
+ throw new BridgeError(`The display name "${showInvisible(name)}" contains a control or formatting character. Such ` +
44
+ 'a character can change how a recipient reads in the confirmation, for example by reversing ' +
45
+ 'the text after it, so it is refused rather than removed.');
46
+ }
47
+ // Letters from another script can spell a familiar domain, and the envelope
48
+ // then carries its punycode form, which is a different domain anyone can
49
+ // register. Measured with nodemailer 10.1.7: ceo@\u0430\u0440\u0440\u04cf\u0435.com, all Cyrillic,
50
+ // reads as apple.com and goes to ceo@xn--80ak6aa92e.com.
51
+ if (/[^\x21-\x7e]/.test(address)) {
52
+ throw new BridgeError(`"${showInvisible(address)}" contains a character outside ASCII. Letters from another script ` +
53
+ 'can spell a familiar domain while the message goes to a different one, so such an address ' +
54
+ 'is refused. A domain that really is written with such letters can be given in its ASCII ' +
55
+ 'form, which starts with xn--, and that is then exactly what the confirmation shows.');
56
+ }
57
+ // nodemailer reads the address again, with its own parser, when it builds the
58
+ // envelope, and the two readings disagree. Measured with 10.1.7:
59
+ // "x@example.com:y" leaves the envelope empty, "a:b@example.com" goes to
60
+ // b@example.com. So the address has to come back out of the very code that
61
+ // builds the envelope as itself. Only the domain may change, to lower case.
62
+ const at = address.lastIndexOf('@');
63
+ const expected = address.slice(0, at) + address.slice(at).toLowerCase();
64
+ const envelope = new MimeNode()
65
+ .setEnvelope({ from: 'check@example.invalid', to: [address] })
66
+ .getEnvelope().to;
67
+ if (envelope.length !== 1 || envelope[0] !== expected) {
68
+ const outcome = envelope.length === 0 ? 'names no recipient at all' : `goes to ${envelope.join(', ')}`;
69
+ throw new BridgeError(`"${showInvisible(address)}" would not reach that address: read the way the message is sent, ` +
70
+ `it ${outcome}. Give the address on its own, without a comment in parentheses, a group ` +
71
+ 'name or a colon.');
72
+ }
73
+ }
20
74
  /**
21
75
  * Checks an address well enough to catch the mistakes that matter.
22
76
  *
23
77
  * Not a full RFC 5322 parser, and not trying to be: the point is to refuse a
24
78
  * string that would end up somewhere unintended, not to adjudicate exotic but
25
- * legal forms. A newline is the one that has to be caught, because a header
26
- * injected through an address field would let the sender of a mail the model
27
- * just read add a recipient the confirmation never showed.
79
+ * legal forms. A newline is the one that has to be caught first, because a
80
+ * header injected through an address field would let the sender of a mail the
81
+ * model just read add a recipient the confirmation never showed. Everything
82
+ * else that would make the confirmation and the envelope disagree is
83
+ * assertDeliverable's.
28
84
  */
29
85
  export function parseRecipient(input) {
30
86
  const raw = input.trim();
@@ -42,7 +98,9 @@ export function parseRecipient(input) {
42
98
  throw new BridgeError(`"${address}" is not a usable email address. Expected something of the form name@example.com, ` +
43
99
  'optionally as "Display Name <name@example.com>".');
44
100
  }
45
- return name ? { name, address } : { address };
101
+ const recipient = name ? { name, address } : { address };
102
+ assertDeliverable(recipient);
103
+ return recipient;
46
104
  }
47
105
  export function parseRecipients(list) {
48
106
  return (list ?? []).map(parseRecipient);
@@ -93,7 +151,26 @@ export async function buildMessage(draft, options = {}) {
93
151
  messageId: draft.messageId,
94
152
  date: new Date(),
95
153
  };
96
- if (draft.html === undefined) {
154
+ if (draft.html !== undefined && draft.storedHtml !== undefined) {
155
+ // One body or the other. Both would mean the composed part had been checked
156
+ // and the stored part would go out beside it unread.
157
+ throw new BridgeError('A message cannot carry composed markup and a stored body at once.');
158
+ }
159
+ if (draft.storedHtml !== undefined) {
160
+ // Not checked against the permitted set, see Draft.storedHtml. What is
161
+ // still checked is that every picture it shows arrived with it.
162
+ const provided = new Set([
163
+ ...(draft.inlineParts ?? []).map((part) => part.contentId),
164
+ ...(draft.carriedFiles ?? []).flatMap((file) => (file.contentId ? [file.contentId] : [])),
165
+ ]);
166
+ const missing = readMarkup(draft.storedHtml, 'extended').contentIds.filter((id) => !provided.has(id));
167
+ if (missing.length) {
168
+ throw new BridgeError(`The stored draft refers to ${missing.map((id) => `"cid:${id}"`).join(', ')}, but no such ` +
169
+ 'file is stored with it. Open the draft in Proton and attach the picture again.');
170
+ }
171
+ fields.html = draft.storedHtml;
172
+ }
173
+ else if (draft.html === undefined) {
97
174
  fields.text = draft.text;
98
175
  }
99
176
  else {
@@ -103,7 +180,10 @@ export async function buildMessage(draft, options = {}) {
103
180
  // Every content id the markup points at has to have arrived with it. A
104
181
  // reference to a part that is not there shows the recipient a broken image
105
182
  // where the sender saw a picture, and neither of them finds out why.
106
- const provided = new Set((draft.inlineParts ?? []).map((part) => part.contentId));
183
+ const provided = new Set([
184
+ ...(draft.inlineParts ?? []).map((part) => part.contentId),
185
+ ...(draft.carriedFiles ?? []).flatMap((file) => (file.contentId ? [file.contentId] : [])),
186
+ ]);
107
187
  const missing = reading.contentIds.filter((id) => !provided.has(id));
108
188
  if (missing.length) {
109
189
  throw new BridgeError(`The markup refers to ${missing.map((id) => `"cid:${id}"`).join(', ')}, but no such file ` +
@@ -137,6 +217,14 @@ export async function buildMessage(draft, options = {}) {
137
217
  cid: part.contentId,
138
218
  });
139
219
  }
220
+ for (const file of draft.carriedFiles ?? []) {
221
+ attachments.push({
222
+ filename: file.filename,
223
+ content: file.content,
224
+ contentType: file.contentType,
225
+ ...(file.contentId ? { cid: file.contentId } : {}),
226
+ });
227
+ }
140
228
  if (attachments.length)
141
229
  fields.attachments = attachments;
142
230
  // keepBcc is not an option MailComposer understands. It lives on the MimeNode
@@ -335,6 +423,8 @@ export const PLAIN_TEXT_NOTE = 'The body is plain text and markup is not interpr
335
423
  * to, and that is exactly the difference a person confirming a send has to see.
336
424
  */
337
425
  export function readableBody(draft) {
426
+ if (draft.storedHtml !== undefined)
427
+ return htmlToText(draft.storedHtml);
338
428
  return draft.html === undefined
339
429
  ? draft.text
340
430
  : htmlToText(draft.html + (draft.quotedHtml ?? ''));
@@ -348,6 +438,8 @@ export function readableBody(draft) {
348
438
  * before their own words appear.
349
439
  */
350
440
  export function composedBody(draft) {
441
+ if (draft.storedHtml !== undefined)
442
+ return htmlToText(draft.storedHtml);
351
443
  return draft.html === undefined ? draft.text : htmlToText(draft.html);
352
444
  }
353
445
  /**
@@ -376,6 +468,27 @@ export function summariseQuote(draft) {
376
468
  hiddenText: reading.hiddenText,
377
469
  };
378
470
  }
471
+ /** The line this server writes above every forwarded message, in text and in markup. */
472
+ export const FORWARD_HEADER = '---------- Forwarded message ----------';
473
+ /**
474
+ * Whether the message carries a quoted one, for the count line of the
475
+ * confirmation.
476
+ *
477
+ * summariseQuote only sees a quote that is still held apart from the body,
478
+ * which is the case while a reply or a forward is composed with markup. Once a
479
+ * draft is stored, and in a plain text reply, the quote is part of the body,
480
+ * and up to 0.4.11 the confirmation said nothing about it. It is recognised
481
+ * there by what quotes it: the forward header this server writes, the "wrote:"
482
+ * line followed by quoted lines, or a blockquote, which is how Proton quotes.
483
+ */
484
+ export function carriesQuote(draft) {
485
+ if (draft.quotedHtml)
486
+ return true;
487
+ if (draft.storedHtml !== undefined) {
488
+ return /<blockquote\b/i.test(draft.storedHtml) || draft.storedHtml.includes(FORWARD_HEADER);
489
+ }
490
+ return draft.text.includes(FORWARD_HEADER) || /^On .+ wrote:\n>/m.test(draft.text);
491
+ }
379
492
  /**
380
493
  * Everything the message points at or carries, for the confirmation.
381
494
  *
@@ -392,16 +505,24 @@ export function describeAttachments(draft) {
392
505
  for (const part of draft.inlineParts ?? []) {
393
506
  lines.push(`${part.filename} (${part.contentType}, ${part.content.length} bytes, in the message body)`);
394
507
  }
508
+ for (const file of draft.carriedFiles ?? []) {
509
+ const where = file.contentId ? ', in the message body' : '';
510
+ lines.push(`${file.filename} (${file.contentType}, ${file.content.length} bytes, stored with the draft${where})`);
511
+ }
395
512
  return lines;
396
513
  }
397
514
  /** The addresses in a message's markup, with the text they are shown as. */
398
515
  export function describeUrls(draft) {
516
+ if (draft.storedHtml !== undefined)
517
+ return readMarkup(draft.storedHtml, 'extended').urls;
399
518
  return draft.html === undefined
400
519
  ? []
401
520
  : assertSendableMarkup(draft.html, draft.markupLevel ?? 'standard').urls;
402
521
  }
403
522
  /** Text a recipient can read that the readable body leaves out. */
404
523
  export function hiddenTextOf(draft) {
524
+ if (draft.storedHtml !== undefined)
525
+ return readMarkup(draft.storedHtml, 'extended').hiddenText;
405
526
  return draft.html === undefined
406
527
  ? []
407
528
  : assertSendableMarkup(draft.html, draft.markupLevel ?? 'standard').hiddenText;
@@ -419,8 +540,23 @@ export function fingerprintPart(content) {
419
540
  * "what did it use" is a list rather than a promise.
420
541
  */
421
542
  export function styleNotesOf(draft) {
543
+ if (draft.storedHtml !== undefined)
544
+ return readMarkup(draft.storedHtml, 'extended').styleNotes;
422
545
  if (draft.html === undefined)
423
546
  return [];
424
547
  return assertSendableMarkup(draft.html, draft.markupLevel ?? 'standard').styleNotes;
425
548
  }
549
+ /**
550
+ * What a stored body carries that no composed message may: style blocks,
551
+ * scripts, event handlers, data: addresses, comments.
552
+ *
553
+ * Empty for anything that is not a stored draft, because composed markup with
554
+ * such a thing never gets this far. For a stored draft it is part of what the
555
+ * confirmation warns about, since it was not checked again on the way out.
556
+ */
557
+ export function storedBeyondOf(draft) {
558
+ if (draft.storedHtml === undefined)
559
+ return [];
560
+ return readMarkup(draft.storedHtml, 'extended').problems.map((problem) => problem.found);
561
+ }
426
562
  //# sourceMappingURL=compose.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/mail/compose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/mail/compose.ts"],"names":[],"mappings":"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"}