@bobfrankston/mailx-types 0.1.86 → 0.1.88

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 (2) hide show
  1. package/package.json +1 -1
  2. package/trust.js +14 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/mailx-types",
3
- "version": "0.1.86",
3
+ "version": "0.1.88",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
package/trust.js CHANGED
@@ -631,6 +631,18 @@ function provedSenderDomain(input) {
631
631
  *
632
632
  * 1. The redirector and the destination are the same organisation. A site
633
633
  * bouncing through its own hostnames is routing, not hiding.
634
+ * 4. The link ENDS at the proved sender (2026-09-08). Microsoft 365's
635
+ * Message center mail, dmarc=pass header.from=microsoft.com with
636
+ * policy reject, links through its click-tracker
637
+ * `nam.safelink.emails.azure.net` to `admin.microsoft.com`: two
638
+ * organisations by hostname, nobody signed for azure.net, and the
639
+ * sender is not the redirector — rules 1 to 3 all miss (Bob: "another
640
+ * safe message flagged"). But the reader lands on the site of the party
641
+ * that provably sent the mail, which is exactly where a plain link
642
+ * would have taken them; the hop hides nothing from the reader. The
643
+ * redirector's reputation may be borrowed, but that is the
644
+ * redirector's problem, not this reader's — and the sender who chose
645
+ * the route is the proved sender, who could have linked openly.
634
646
  * 2. The redirector IS the proved sender. Google's account-security notice
635
647
  * (2026-09-02, Bob: "this is valid") links through
636
648
  * `accounts.google.com/AccountChooser?continue=https://myaccount.google.com/…`
@@ -682,6 +694,8 @@ function redirectorLink(input) {
682
694
  continue;
683
695
  if (sameOrg(target.hostname, url.hostname))
684
696
  continue; // same site, not laundering
697
+ if (senderDomain && sameOrg(target.hostname, senderDomain))
698
+ continue; // ends at the proved sender (rule 4)
685
699
  // Name the signer behind this redirector, if there is one, so the
686
700
  // viewer can offer "trust google.com as an intermediary" — and
687
701
  // only then: a redirector nobody signed for has no party to vouch