From bf22aba9dde59065f46467f921b81917ac4a385c Mon Sep 17 00:00:00 2001 From: nmemmert <67961292+nmemmert@users.noreply.github.com> Date: Thu, 22 Oct 2026 13:50:17 -0400 Subject: [PATCH] Maintenance: mail libraries to latest patch versions, badge polling only while the app is visible Co-Authored-By: Claude Sonnet 5.5 --- package-lock.json | 84 ++++++++++++++--------------------------------- public/boot.js | 7 ++-- 2 files changed, 30 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4b930f0..cd69ce4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -309,13 +309,13 @@ } }, "node_modules/@zone-eu/mailsplit": { - "version": "5.4.27", - "resolved": "https://registry.npmjs.org/@zone-eu/mailsplit/-/mailsplit-5.4.27.tgz", - "integrity": "sha512-9008ddFqqKk7lMF2S1sLU7ExfJZP9zPw5tkZy24EVt45Ryme2x85f/5vJZZqQ+vCJkKcCY78dJ5yuEVG3ZrVZA==", + "version": "5.4.29", + "resolved": "https://registry.npmjs.org/@zone-eu/mailsplit/-/mailsplit-5.4.29.tgz", + "integrity": "sha512-CCUNycmUjrV5M0wNf23waWAt9eOHczhjLbUQS7k0FNJvR0py9VSqHFt+tSl/D0+XI73VLG0U+PwYtq9R0zsm9Q==", "license": "(MIT OR EUPL-1.1+)", "dependencies": { "libbase64": "1.4.1", - "libmime": "5.5.2", + "libmime": "5.6.3", "libqp": "3.0.1" }, "engines": { @@ -650,16 +650,16 @@ } }, "node_modules/imapflow": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/imapflow/-/imapflow-2.9.0.tgz", - "integrity": "sha512-8drBcDmYhDNkMHzoXVd46/XnZg3krcZyLsyOyVuAxTQPPKUc0u/bpb3ocl36u2b9ZD/8J6rz2YdUbzHyaj1Pmw==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/imapflow/-/imapflow-2.9.1.tgz", + "integrity": "sha512-hOq2/+T+WnQzRy7D40gYlio25nG+c9bhtrxowokOQM57SwZFqRbqAtxFQcIpx82lhYBPQEEVVjmkYpd9Fplj7g==", "license": "MIT", "dependencies": { - "@zone-eu/mailsplit": "5.4.27", + "@zone-eu/mailsplit": "5.4.29", "encoding-japanese": "2.4.0", "iconv-lite": "0.7.3", "libbase64": "1.4.1", - "libmime": "5.5.2", + "libmime": "5.6.3", "libqp": "3.0.1", "pino": "10.3.1", "socks": "2.8.10" @@ -730,9 +730,9 @@ } }, "node_modules/libmime": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.5.2.tgz", - "integrity": "sha512-Byw3CchK4eSqbgzpttsUoC4hx2VPP+hnveAuYAYZNipEc+0WlDFjVb1ISNscjq/idvyDP/Xjg8mnBcdgbsgvzg==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.6.3.tgz", + "integrity": "sha512-cuTUW/Jybvh5O4/U9p61gyutHOjDtZyGQYuY99+bfnaFwqcDf2Nb+R6hMHY6DDen2H9wLKQSMpofWUgn2TI5JQ==", "license": "MIT", "dependencies": { "encoding-japanese": "2.4.0", @@ -773,17 +773,17 @@ } }, "node_modules/mailparser": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-3.12.2.tgz", - "integrity": "sha512-JbOt+AjJIr7+bhMp8g7ILevleoDAD0bXVlAJmikrz0sbQqmt88YELKDwYQL5JNugkV9lcN+DFv32dyhPsvqpHQ==", + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-3.12.4.tgz", + "integrity": "sha512-FdoMF+S89/AQaJHY7StwTfABPHZ8Vey+CDyUno5j+TO0jF0UxM+la4Pe9MeqKqBO4Y9ZMB2eomdyg5i+jzpfZw==", "license": "MIT", "dependencies": { - "@zone-eu/mailsplit": "5.4.27", + "@zone-eu/mailsplit": "5.4.29", "he": "1.2.0", "html-to-text": "10.0.1", - "libmime": "5.6.0", + "libmime": "5.6.3", "linkify-it": "5.0.2", - "nodemailer": "10.1.7", + "nodemailer": "10.2.1", "punycode.js": "2.3.1", "tlds": "1.261.0" }, @@ -791,30 +791,6 @@ "node": ">=20.0.0" } }, - "node_modules/mailparser/node_modules/libmime": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.6.0.tgz", - "integrity": "sha512-b5HR41QUt1whlvLnY3AhAYwba56DDiNv1xVTH5viVq86/m+wvW+HeooLx6x+MdNapho9ki7Lo/fTxuqwhEs/sQ==", - "license": "MIT", - "dependencies": { - "encoding-japanese": "2.4.0", - "iconv-lite": "0.7.3", - "libbase64": "1.4.1", - "libqp": "3.0.1" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/mailparser/node_modules/nodemailer": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-10.1.7.tgz", - "integrity": "sha512-OQa6FDln5fLttmqSbjDiRYvFDOFNrBqfiOwHPlEbURil3b+vPB1v8xpi+Sp46drzNDlsTnNsS502vthmz56r4w==", - "license": "MIT-0", - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -837,9 +813,9 @@ "license": "MIT" }, "node_modules/nodemailer": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-10.2.0.tgz", - "integrity": "sha512-/XyGw6kX2stMdKGUJdAQmYAeY1FscWfdRydfd2NtK3A3KDfUUXCqZzExSNAt2xhh90X2qLCR+o2Gd48YPJcJwA==", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-10.2.1.tgz", + "integrity": "sha512-ZrDNsPFoDMwefNs7sJwrYiEJ/CG4ClJWDZv05iNJsEBWa8GRDry1QJHTJxsuTAY9eDDKjX4k+q3SxslXJOao7w==", "license": "MIT-0", "engines": { "node": ">=20.0.0" @@ -1035,30 +1011,20 @@ } }, "node_modules/smtp-server": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/smtp-server/-/smtp-server-3.21.0.tgz", - "integrity": "sha512-vhJTg1JR6+mM5vlCD/TzUvFcQ5JQiCqP0FY3TgMJ0u3MPuvxawKD/6PA+TacPYEFVAgZIjLaCOSf87L4jcN0+w==", + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/smtp-server/-/smtp-server-3.21.1.tgz", + "integrity": "sha512-gj95f6YhcL0uu3m3FvRnQ6LSotursugAuVjK5V4f0f2C/4OSVpn/+h28F4pPJFob/myli9V+F7/Hxx9DJVdwvg==", "dev": true, "license": "MIT-0", "dependencies": { "ipv6-normalize": "1.0.1", - "nodemailer": "10.1.7", + "nodemailer": "10.2.1", "punycode.js": "2.3.1" }, "engines": { "node": ">=20.0.0" } }, - "node_modules/smtp-server/node_modules/nodemailer": { - "version": "10.1.7", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-10.1.7.tgz", - "integrity": "sha512-OQa6FDln5fLttmqSbjDiRYvFDOFNrBqfiOwHPlEbURil3b+vPB1v8xpi+Sp46drzNDlsTnNsS502vthmz56r4w==", - "dev": true, - "license": "MIT-0", - "engines": { - "node": ">=20.0.0" - } - }, "node_modules/socks": { "version": "2.8.10", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.10.tgz", diff --git a/public/boot.js b/public/boot.js index ed07890..2842852 100644 --- a/public/boot.js +++ b/public/boot.js @@ -23,8 +23,11 @@ restorePlayer(); route(); shareCheck(); - mailPoll(); setInterval(mailPoll, 2 * 60e3); - taskPoll(); setInterval(taskPoll, 10 * 60e3); + // Unread mail and tasks due (the badge): checked on a timer only while the app is on screen, and again the moment you come back to it. + const badgePoll = () => { mailPoll(); taskPoll(); }; + let lastBadge = Date.now(); badgePoll(); + setInterval(() => { if (document.visibilityState === 'visible') { lastBadge = Date.now(); badgePoll(); } }, 2 * 60e3); + document.addEventListener('visibilitychange', () => { if (document.visibilityState === 'visible' && Date.now() - lastBadge > 30e3) { lastBadge = Date.now(); badgePoll(); } }); if ('serviceWorker' in navigator) navigator.serviceWorker.register('/sw.js').catch(() => {}); })();