From 556fe638c1e942ae447669831db6d4e54bdbf154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Wed, 26 Jun 2024 20:40:00 +0200 Subject: [PATCH] feat: email client prototype --- backend/backend/package.json | 4 +- backend/mail-plugin/app.js | 2 + backend/mail-plugin/package.json | 68 ++ backend/mail-plugin/src/cli.ts | 123 ++++ backend/mail-plugin/src/types.d.ts | 9 + backend/mail-plugin/tsconfig.json | 4 + frontend/app/.gitignore | 1 + frontend/app/package.json | 9 + frontend/app/package.json.orig | 214 ++++++ frontend/app/src/app/app.module.ts | 24 +- .../app/modules/mail/mail-adapter.service.ts | 237 +++++++ .../app/modules/mail/mail-detail.component.ts | 58 ++ .../app/src/app/modules/mail/mail-detail.html | 93 +++ .../app/src/app/modules/mail/mail-detail.scss | 97 +++ .../app/modules/mail/mail-login.component.ts | 65 ++ .../app/src/app/modules/mail/mail-login.html | 67 ++ .../app/src/app/modules/mail/mail-login.scss | 17 + .../app/modules/mail/mail-page.component.ts | 60 ++ .../app/src/app/modules/mail/mail-page.html | 45 ++ .../app/src/app/modules/mail/mail-page.scss | 26 + .../app/modules/mail/mail-storage.provider.ts | 243 +++++++ .../app/src/app/modules/mail/mail.module.ts | 60 ++ .../app/src/app/modules/mail/mail.pipe.ts | 17 + .../app/src/app/modules/mail/mail.service.ts | 84 +++ .../modules/mail/mailbox-page.component.ts | 54 ++ .../src/app/modules/mail/mailbox-page.html | 54 ++ .../src/app/modules/mail/mailbox-page.scss | 44 ++ frontend/app/src/app/modules/mail/schema.ts | 128 ++++ .../profile/page/profile-page-section.html | 5 + .../profile/page/profile-page-section.scss | 7 + frontend/app/src/app/util/data-size.pipe.ts | 25 + frontend/app/src/app/util/lazy-load.pipe.ts | 36 + frontend/app/src/app/util/lazy.component.ts | 46 ++ frontend/app/src/app/util/lazy.html | 3 + frontend/app/src/app/util/lazy.scss | 0 frontend/app/src/app/util/rxjs/from-cursor.ts | 22 + .../app/src/app/util/shadow-html.directive.ts | 18 + frontend/app/src/assets/i18n/de.json | 30 + frontend/app/src/assets/i18n/en.json | 30 + frontend/app/src/assets/icons.min.woff2 | Bin 110916 -> 122900 bytes .../app/src/config/profile-page-sections.ts | 13 + frontend/app/src/index.html | 2 +- packages/logger/package.json | 4 +- pnpm-lock.yaml | 644 +++++++++++++----- 44 files changed, 2596 insertions(+), 196 deletions(-) create mode 100644 backend/mail-plugin/app.js create mode 100644 backend/mail-plugin/package.json create mode 100644 backend/mail-plugin/src/cli.ts create mode 100644 backend/mail-plugin/src/types.d.ts create mode 100644 backend/mail-plugin/tsconfig.json create mode 100644 frontend/app/package.json.orig create mode 100644 frontend/app/src/app/modules/mail/mail-adapter.service.ts create mode 100644 frontend/app/src/app/modules/mail/mail-detail.component.ts create mode 100644 frontend/app/src/app/modules/mail/mail-detail.html create mode 100644 frontend/app/src/app/modules/mail/mail-detail.scss create mode 100644 frontend/app/src/app/modules/mail/mail-login.component.ts create mode 100644 frontend/app/src/app/modules/mail/mail-login.html create mode 100644 frontend/app/src/app/modules/mail/mail-login.scss create mode 100644 frontend/app/src/app/modules/mail/mail-page.component.ts create mode 100644 frontend/app/src/app/modules/mail/mail-page.html create mode 100644 frontend/app/src/app/modules/mail/mail-page.scss create mode 100644 frontend/app/src/app/modules/mail/mail-storage.provider.ts create mode 100644 frontend/app/src/app/modules/mail/mail.module.ts create mode 100644 frontend/app/src/app/modules/mail/mail.pipe.ts create mode 100644 frontend/app/src/app/modules/mail/mail.service.ts create mode 100644 frontend/app/src/app/modules/mail/mailbox-page.component.ts create mode 100644 frontend/app/src/app/modules/mail/mailbox-page.html create mode 100644 frontend/app/src/app/modules/mail/mailbox-page.scss create mode 100644 frontend/app/src/app/modules/mail/schema.ts create mode 100644 frontend/app/src/app/util/data-size.pipe.ts create mode 100644 frontend/app/src/app/util/lazy-load.pipe.ts create mode 100644 frontend/app/src/app/util/lazy.component.ts create mode 100644 frontend/app/src/app/util/lazy.html create mode 100644 frontend/app/src/app/util/lazy.scss create mode 100644 frontend/app/src/app/util/rxjs/from-cursor.ts create mode 100644 frontend/app/src/app/util/shadow-html.directive.ts diff --git a/backend/backend/package.json b/backend/backend/package.json index b4caf35d..116c3c76 100644 --- a/backend/backend/package.json +++ b/backend/backend/package.json @@ -53,7 +53,7 @@ "@types/geojson": "1.0.6", "@types/node": "18.15.3", "@types/node-cron": "3.0.7", - "@types/nodemailer": "6.4.7", + "@types/nodemailer": "6.4.15", "@types/promise-queue": "2.2.0", "@types/uuid": "8.3.4", "body-parser": "1.20.2", @@ -69,7 +69,7 @@ "nock": "13.3.1", "node-cache": "5.1.2", "node-cron": "3.0.2", - "nodemailer": "6.9.1", + "nodemailer": "6.9.14", "prom-client": "14.1.1", "promise-queue": "2.2.5", "uuid": "8.3.2" diff --git a/backend/mail-plugin/app.js b/backend/mail-plugin/app.js new file mode 100644 index 00000000..1bda7715 --- /dev/null +++ b/backend/mail-plugin/app.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +import './lib/cli.js'; diff --git a/backend/mail-plugin/package.json b/backend/mail-plugin/package.json new file mode 100644 index 00000000..641aa020 --- /dev/null +++ b/backend/mail-plugin/package.json @@ -0,0 +1,68 @@ +{ + "name": "@openstapps/mail-plugin", + "description": "Mail Plugin", + "version": "3.2.0", + "private": true, + "type": "module", + "license": "GPL-3.0-only", + "author": "Thea Schöbl", + "bin": "app.js", + "files": [ + "app.js", + "lib", + "README.md", + "CHANGELOG.md", + "Dockerfile" + ], + "scripts": { + "build": "tsup-node --dts", + "deploy": "pnpm --prod --filter=@openstapps/minimal-plugin deploy ../../.deploy/minimal-plugin", + "dev": "tsup-node --watch --onSuccess \"pnpm run start\"", + "format": "prettier . -c --ignore-path ../../.gitignore", + "format:fix": "prettier --write . --ignore-path ../../.gitignore", + "lint": "eslint --ext .ts src/", + "lint:fix": "eslint --fix --ext .ts src/", + "start": "node app.js" + }, + "dependencies": { + "@openstapps/core": "workspace:*", + "@openstapps/core-tools": "workspace:*", + "@openstapps/logger": "workspace:*", + "commander": "10.0.0", + "dotenv": "16.4.5", + "express": "4.18.2", + "imapflow": "1.0.162", + "mailparser": "3.7.1", + "node-forge": "1.3.1", + "nodemailer": "6.9.14", + "ts-node": "10.9.2" + }, + "devDependencies": { + "@openstapps/eslint-config": "workspace:*", + "@openstapps/prettier-config": "workspace:*", + "@openstapps/tsconfig": "workspace:*", + "@types/express": "4.17.17", + "@types/imapflow": "1.0.18", + "@types/mailparser": "3.4.4", + "@types/node": "18.15.3", + "@types/node-forge": "1.3.11", + "@types/nodemailer": "6.4.15", + "tsup": "6.7.0", + "typescript": "5.4.2" + }, + "tsup": { + "entry": [ + "src/cli.ts" + ], + "sourcemap": true, + "clean": true, + "format": "esm", + "outDir": "lib" + }, + "prettier": "@openstapps/prettier-config", + "eslintConfig": { + "extends": [ + "@openstapps" + ] + } +} diff --git a/backend/mail-plugin/src/cli.ts b/backend/mail-plugin/src/cli.ts new file mode 100644 index 00000000..16ddef18 --- /dev/null +++ b/backend/mail-plugin/src/cli.ts @@ -0,0 +1,123 @@ +import {config} from 'dotenv'; +import {ImapFlow} from 'imapflow'; +import express from 'express'; + +config({path: '.env.local'}); + +const app = express(); +const port = process.env.PORT || 4000; + +app.use(async (request, response, next) => { + try { + const [user, pass] = Buffer.from(request.headers['authorization']!.replace(/^Basic /, ''), 'base64') + .toString('utf8') + .split(':'); + + const client = new ImapFlow({ + host: 'imap.server.uni-frankfurt.de', + port: 993, + secure: true, + emitLogs: false, + auth: {user, pass}, + }); + response.locals.client = client; + + await client.connect(); + response.on('finish', async () => { + await client.logout(); + client.close(); + }); + + next(); + } catch { + response.status(401).send(); + } +}); + +app.get('/', async (_request, response) => { + const result = await response.locals.client.listTree(); + response.json(result); +}); + +app.get('/:mailbox', async (request, response) => { + try { + await response.locals.client.mailboxOpen(request.params.mailbox); + const since = Number(request.query.since) || undefined; + const preData = await response.locals.client.status(request.params.mailbox, {messages: true}); + if (preData.messages === 0) { + response.json([]); + return; + } + + const data = response.locals.client.fetch( + '1:*', + {}, + { + // caution, BigInt can throw + changedSince: typeof since === 'string' ? BigInt(since) : undefined, + }, + ); + + const messages = []; + for await (const message of data) { + messages.push(message.seq.toString()); + } + response.json(messages); + } catch (error) { + console.error(error); + response.status(404).send(); + } +}); + +app.get('/:mailbox/:id', async (request, response) => { + try { + await response.locals.client.mailboxOpen(request.params.mailbox); + const message = await response.locals.client.fetchOne(request.params.id, { + envelope: true, + labels: true, + flags: true, + bodyStructure: true, + }); + response.json({ + bodyStructure: message.bodyStructure, + labels: [...(message.labels ?? [])], + flags: [...(message.flags ?? [])], + envelope: message.envelope, + seq: message.seq, + }); + } catch (error) { + console.error(error); + response.status(404).send(); + } +}); + +app.get('/:mailbox/:id/:part', async (request, response) => { + try { + await response.locals.client.mailboxOpen(request.params.mailbox, {readOnly: true}); + if (request.query.raw) { + const message = await response.locals.client.fetchOne(request.params.id, { + bodyParts: [`${request.params.part}.mime`, request.params.part], + }); + + response.write(message.bodyParts.get(`${request.params.part}.mime`)); + response.write(message.bodyParts.get(request.params.part)); + + response.end(); + } else { + const message = await response.locals.client.download(request.params.id, request.params.part); + message.content.on('data', chunk => { + response.write(chunk); + }); + message.content.on('end', () => { + response.end(); + }); + } + } catch (error) { + console.error(error); + response.status(404).send(); + } +}); + +app.listen(port, () => { + console.log(`Server listening on port ${port}`); +}); diff --git a/backend/mail-plugin/src/types.d.ts b/backend/mail-plugin/src/types.d.ts new file mode 100644 index 00000000..6badff66 --- /dev/null +++ b/backend/mail-plugin/src/types.d.ts @@ -0,0 +1,9 @@ +import {ImapFlow} from 'imapflow'; + +declare global { + namespace Express { + interface Locals { + client: ImapFlow; + } + } +} diff --git a/backend/mail-plugin/tsconfig.json b/backend/mail-plugin/tsconfig.json new file mode 100644 index 00000000..988e304d --- /dev/null +++ b/backend/mail-plugin/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@openstapps/tsconfig", + "exclude": ["lib", "app.js"] +} diff --git a/frontend/app/.gitignore b/frontend/app/.gitignore index 47da5244..a140ba7c 100644 --- a/frontend/app/.gitignore +++ b/frontend/app/.gitignore @@ -32,6 +32,7 @@ platforms/ /plugins/ $RECYCLE.BIN/ dist/ +.nx/ # ignore generated resources resources/*/icon/ resources/*/splash/ diff --git a/frontend/app/package.json b/frontend/app/package.json index 15e20691..4dbe1037 100644 --- a/frontend/app/package.json +++ b/frontend/app/package.json @@ -90,6 +90,7 @@ "@openstapps/core": "workspace:*", "@transistorsoft/capacitor-background-fetch": "5.2.0", "@types/dom-view-transitions": "1.0.4", + "asn1js": "3.0.5", "capacitor-secure-storage-plugin": "0.9.0", "cordova-plugin-calendar": "5.1.6", "date-fns": "3.6.0", @@ -98,6 +99,8 @@ "geojson": "0.5.0", "ionic-appauth": "0.9.0", "jsonpath-plus": "10.0.6", + "libbase64": "1.3.0", + "libqp": "2.1.0", "maplibre-gl": "4.0.2", "material-symbols": "0.17.1", "moment": "2.30.1", @@ -106,11 +109,14 @@ "ngx-markdown": "17.1.1", "ngx-moment": "6.0.2", "opening_hours": "3.8.0", + "pkijs": "3.1.0", "pmtiles": "3.0.3", + "postal-mime": "2.2.5", "rxjs": "7.8.1", "semver": "7.6.0", "swiper": "8.4.5", "tslib": "2.6.2", + "zod": "3.23.8", "zone.js": "0.14.4" }, "devDependencies": { @@ -139,9 +145,11 @@ "@ionic/cli": "7.2.0", "@openstapps/prettier-config": "workspace:*", "@openstapps/tsconfig": "workspace:*", + "@types/dompurify": "3.0.5", "@types/fontkit": "2.0.7", "@types/geojson": "1.0.6", "@types/glob": "8.1.0", + "@types/imapflow": "1.0.18", "@types/jasmine": "5.1.4", "@types/jasminewd2": "2.0.13", "@types/jsonpath": "0.2.0", @@ -154,6 +162,7 @@ "@typescript-eslint/parser": "7.2.0", "cordova-res": "0.15.4", "cypress": "13.7.0", + "dompurify": "3.1.6", "eslint": "8.57.0", "eslint-plugin-jsdoc": "48.2.1", "eslint-plugin-prettier": "5.1.3", diff --git a/frontend/app/package.json.orig b/frontend/app/package.json.orig new file mode 100644 index 00000000..58b38432 --- /dev/null +++ b/frontend/app/package.json.orig @@ -0,0 +1,214 @@ +{ + "name": "@openstapps/app", + "description": "The generic app tailored to fulfill needs of German universities, written using Ionic Framework.", + "version": "3.3.2", + "private": true, + "license": "GPL-3.0-only", + "author": "Karl-Philipp Wulfert ", + "contributors": [ + "Frank Nagel ", + "Jovan Krunić ", + "Michel Jonathan Schmitz ", + "Rainer Killinger ", + "Sebastian Lange ", + "Thea Schöbl " + ], + "scripts": { + "analyze": "webpack-bundle-analyzer www/stats.json", + "build": "pnpm check-icons && ng build --configuration=production --stats-json && webpack-bundle-analyzer www/stats.json --mode static --report www/bundle-info.html --no-open", + "build:analyze": "npm run build:stats && npm run analyze", + "build:android": "ionic capacitor build android --no-open && cd android && ./gradlew clean assemble && cd ..", + "build:prod": "ng build --configuration=production", + "build:stats": "ng build --configuration=production --stats-json", + "changelog": "conventional-changelog -p angular -i src/assets/about/CHANGELOG.md -s -r 0", + "check-icons": "node scripts/check-icon-correctness.mjs", + "chromium:no-cors": "chromium --disable-web-security --user-data-dir=\".browser-data/chromium\"", + "chromium:virtual-host": "chromium --host-resolver-rules=\"MAP mobile.app.uni-frankfurt.de:* localhost:8100\" --ignore-certificate-errors", + "cypress:open": "cypress open", + "cypress:run": "cypress run", + "docker:build": "sudo docker run -p 8100:8100 -p 35729:35729 -p 53703:53703 -v $PWD:/app -it registry.gitlab.com/openstapps/app bash -c \"npm install && npm run build\"", + "docker:build:android": "sudo docker run -p 8100:8100 -p 35729:35729 -p 53703:53703 -v $PWD:/app -it registry.gitlab.com/openstapps/app bash -c \"npm run build:android\"", + "docker:enter": "sudo docker run -p 8100:8100 -p 35729:35729 -p 53703:53703 -v $PWD:/app -it registry.gitlab.com/openstapps/app bash", + "docker:pull": "sudo docker pull registry.gitlab.com/openstapps/app", + "docker:run:android": "sudo docker run -v $PWD:/app --privileged -v /dev/bus/usb:/dev/bus/usb --net=host -it registry.gitlab.com/openstapps/app bash -c \"npm run run:android\"", + "docker:serve": "sudo docker run -p 8100:8100 -p 35729:35729 -p 53703:53703 -v $PWD:/app -it registry.gitlab.com/openstapps/app bash -c \"npm run start:external\"", + "e2e": "ng e2e", + "format": "prettier . -c", + "format:fix": "prettier --write .", + "licenses": "license-checker --json > src/assets/about/licenses.json && node ./scripts/accumulate-licenses.mjs && git add src/assets/about/licenses.json", + "lint": "ng lint && stylelint \"**/*.scss\"", + "lint:fix": "eslint --fix -c .eslintrc.json --ignore-path .eslintignore --ext .ts,.html src/ && stylelint --fix \"**/*.scss\"", + "minify-icons": "node scripts/minify-icon-font.mjs", + "postinstall": "jetify && echo \"skipping jetify in production mode\"", + "preview": "http-server www --p 8101 -o", + "push": "git push && git push origin \"v$npm_package_version\"", + "resources:ios": "capacitor-assets generate --ios --iconBackgroundColor $(grep -oE \"^@include ion-color\\(primary, #[a-fA-F0-9]{3,6}\" src/theme/colors.scss | grep -oE \"#[a-fA-F0-9]{3,6}\") --splashBackgroundColor $(grep -oE \"^@include ion-color\\(primary, #[a-fA-F0-9]{3,6}\" src/theme/colors.scss | grep -oE \"#[a-fA-F0-9]{3,6}\")", + "run:android": "ionic capacitor run android --livereload --external", + "start": "ionic serve", + "start:external": "ionic serve --external", + "start:prod": "ionic serve --prod", + "start:virtual-host": "ionic serve --public-host=mobile.app.uni-frankfurt.de --ssl=true --open=false", + "test": "ng test --code-coverage", + "test:integration": "sh integration-test.sh" + }, + "dependencies": { + "@angular/animations": "17.3.0", + "@angular/cdk": "17.3.0", + "@angular/common": "17.3.0", + "@angular/core": "17.3.0", + "@angular/forms": "17.3.0", + "@angular/platform-browser": "17.3.0", + "@angular/router": "17.3.0", + "@awesome-cordova-plugins/calendar": "6.6.0", + "@awesome-cordova-plugins/core": "6.6.0", + "@capacitor-community/screen-brightness": "6.0.0", + "@capacitor/app": "6.0.0", + "@capacitor/browser": "6.0.1", + "@capacitor/clipboard": "6.0.0", + "@capacitor/core": "6.1.1", + "@capacitor/device": "6.0.0", + "@capacitor/dialog": "6.0.0", + "@capacitor/filesystem": "6.0.0", + "@capacitor/geolocation": "6.0.0", + "@capacitor/haptics": "6.0.0", + "@capacitor/keyboard": "6.0.1", + "@capacitor/local-notifications": "6.0.0", + "@capacitor/network": "6.0.1", + "@capacitor/preferences": "6.0.1", + "@capacitor/screen-orientation": "6.0.1", + "@capacitor/share": "6.0.1", + "@capacitor/splash-screen": "6.0.1", + "@ionic-native/core": "5.36.0", + "@ionic/angular": "7.8.0", + "@ionic/storage-angular": "4.0.0", + "@maplibre/ngx-maplibre-gl": "17.4.1", + "@ngx-translate/core": "15.0.0", + "@ngx-translate/http-loader": "8.0.0", + "@openid/appauth": "1.3.1", + "@openstapps/api": "workspace:*", + "@openstapps/collection-utils": "workspace:*", + "@openstapps/core": "workspace:*", + "@transistorsoft/capacitor-background-fetch": "5.2.0", + "@types/dom-view-transitions": "1.0.4", + "asn1js": "3.0.5", + "capacitor-secure-storage-plugin": "0.9.0", + "cordova-plugin-calendar": "5.1.6", + "date-fns": "3.6.0", + "deepmerge": "4.3.1", + "form-data": "4.0.0", + "geojson": "0.5.0", + "ionic-appauth": "0.9.0", +<<<<<<< HEAD + "jsonpath-plus": "10.0.6", + "libbase64": "1.3.0", + "libqp": "2.1.0", +||||||| parent of cff9b026 (fix: pipeline) + "jsonpath-plus": "6.0.1", + "libbase64": "^1.3.0", + "libqp": "^2.1.0", +======= + "jsonpath-plus": "6.0.1", + "libbase64": "1.3.0", + "libqp": "2.1.0", +>>>>>>> cff9b026 (fix: pipeline) + "maplibre-gl": "4.0.2", + "material-symbols": "0.17.1", + "moment": "2.30.1", + "ngx-date-fns": "11.0.0", + "ngx-logger": "5.0.12", + "ngx-markdown": "17.1.1", + "ngx-moment": "6.0.2", + "opening_hours": "3.8.0", + "pkijs": "3.1.0", + "pmtiles": "3.0.3", + "postal-mime": "2.2.5", + "rxjs": "7.8.1", + "semver": "7.6.0", + "swiper": "8.4.5", + "tslib": "2.6.2", + "zod": "3.23.8", + "zone.js": "0.14.4" + }, + "devDependencies": { + "@angular-devkit/architect": "0.1703.0", + "@angular-devkit/build-angular": "17.3.0", + "@angular-devkit/core": "17.3.0", + "@angular-devkit/schematics": "17.3.0", + "@angular-eslint/builder": "17.3.0", + "@angular-eslint/eslint-plugin": "17.3.0", + "@angular-eslint/eslint-plugin-template": "17.3.0", + "@angular-eslint/schematics": "17.3.0", + "@angular-eslint/template-parser": "17.3.0", + "@angular/cli": "17.3.0", + "@angular/compiler": "17.3.0", + "@angular/compiler-cli": "17.3.0", + "@angular/language-server": "17.3.0", + "@angular/language-service": "17.3.0", + "@angular/platform-browser-dynamic": "17.3.0", + "@capacitor/android": "6.1.1", + "@capacitor/assets": "3.0.4", + "@capacitor/cli": "6.1.1", + "@capacitor/ios": "6.1.1", + "@compodoc/compodoc": "1.1.23", + "@cypress/schematic": "2.5.1", + "@ionic/angular-toolkit": "11.0.1", + "@ionic/cli": "7.2.0", + "@openstapps/prettier-config": "workspace:*", + "@openstapps/tsconfig": "workspace:*", + "@types/dompurify": "3.0.5", + "@types/fontkit": "2.0.7", + "@types/geojson": "1.0.6", + "@types/glob": "8.1.0", + "@types/imapflow": "1.0.18", + "@types/jasmine": "5.1.4", + "@types/jasminewd2": "2.0.13", + "@types/jsonpath": "0.2.0", + "@types/karma": "6.3.8", + "@types/karma-coverage": "2.0.3", + "@types/karma-jasmine": "4.0.5", + "@types/node": "18.15.3", + "@types/semver": "7.5.8", + "@typescript-eslint/eslint-plugin": "7.2.0", + "@typescript-eslint/parser": "7.2.0", + "cordova-res": "0.15.4", + "cypress": "13.7.0", + "dompurify": "3.1.6", + "eslint": "8.57.0", + "eslint-plugin-jsdoc": "48.2.1", + "eslint-plugin-prettier": "5.1.3", + "eslint-plugin-unicorn": "51.0.1", + "fast-deep-equal": "3.1.3", + "fontkit": "2.0.2", + "glob": "10.3.10", + "http-server": "14.1.1", + "is-docker": "2.2.1", + "jasmine-core": "5.1.2", + "jasmine-spec-reporter": "7.0.0", + "jetifier": "2.0.0", + "junit-report-merger": "6.0.3", + "karma": "6.4.3", + "karma-chrome-launcher": "3.2.0", + "karma-coverage": "2.2.1", + "karma-jasmine": "5.1.0", + "karma-junit-reporter": "2.0.1", + "karma-mocha-reporter": "2.2.5", + "license-checker": "25.0.1", + "stylelint": "16.3.1", + "stylelint-config-clean-order": "5.4.1", + "stylelint-config-prettier-scss": "1.0.0", + "stylelint-config-recommended-scss": "14.0.0", + "stylelint-config-standard-scss": "13.0.0", + "surge": "0.23.1", + "ts-node": "10.9.2", + "typescript": "5.4.2", + "webpack-bundle-analyzer": "4.10.1" + }, + "cordova": { + "plugins": {}, + "platforms": [ + "ios", + "browser", + "android" + ] + } +} diff --git a/frontend/app/src/app/app.module.ts b/frontend/app/src/app/app.module.ts index 80c0fcd6..f6bba3ab 100644 --- a/frontend/app/src/app/app.module.ts +++ b/frontend/app/src/app/app.module.ts @@ -15,12 +15,11 @@ import {CommonModule, LocationStrategy, PathLocationStrategy, registerLocaleData} from '@angular/common'; import {HTTP_INTERCEPTORS, HttpClient, HttpClientModule} from '@angular/common/http'; import localeDe from '@angular/common/locales/de'; -import {APP_INITIALIZER, NgModule} from '@angular/core'; +import {APP_INITIALIZER, Injectable, NgModule} from '@angular/core'; import {BrowserModule} from '@angular/platform-browser'; import {RouteReuseStrategy} from '@angular/router'; import {IonicModule, IonicRouteStrategy, Platform} from '@ionic/angular'; import {TranslateLoader, TranslateModule, TranslateService} from '@ngx-translate/core'; -import {TranslateHttpLoader} from '@ngx-translate/http-loader'; import moment from 'moment'; import 'moment/min/locales'; import {LoggerModule, NGXLogger, NgxLoggerLevel} from 'ngx-logger'; @@ -71,6 +70,8 @@ import {Capacitor} from '@capacitor/core'; import {SplashScreen} from '@capacitor/splash-screen'; import maplibregl from 'maplibre-gl'; import {Protocol} from 'pmtiles'; +import {MailModule} from './modules/mail/mail.module'; +import {Observable, from} from 'rxjs'; registerLocaleData(localeDe); @@ -129,12 +130,16 @@ export function initializerFactory( }; } -/** - * TODO - * @param http TODO - */ -export function createTranslateLoader(http: HttpClient) { - return new TranslateHttpLoader(http, './assets/i18n/', '.json'); +@Injectable({providedIn: 'root'}) +export class ImportTranslateLoader { + static translations: Record Promise<{default: object}>> = { + de: () => import('../assets/i18n/de.json'), + en: () => import('../assets/i18n/en.json'), + }; + + getTranslation(lang: string): Observable { + return from(ImportTranslateLoader.translations[lang]().then(it => it.default)); + } } /** @@ -165,6 +170,7 @@ export function createTranslateLoader(http: HttpClient) { ProfilePageModule, FeedbackModule, MapModule, + MailModule, MenuModule, NavigationModule, NewsModule, @@ -177,7 +183,7 @@ export function createTranslateLoader(http: HttpClient) { loader: { deps: [HttpClient], provide: TranslateLoader, - useFactory: createTranslateLoader, + useClass: ImportTranslateLoader, }, }), UtilModule, diff --git a/frontend/app/src/app/modules/mail/mail-adapter.service.ts b/frontend/app/src/app/modules/mail/mail-adapter.service.ts new file mode 100644 index 00000000..359e525e --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-adapter.service.ts @@ -0,0 +1,237 @@ +import {HttpClient} from '@angular/common/http'; +import {Injectable, inject} from '@angular/core'; +import {Observable, map, catchError, tap, mergeMap, forkJoin, of} from 'rxjs'; +import {Email, MailboxTreeRoot, RawEmail, RawEmailBodyStructure, Signature, SignedValue} from './schema'; +import {ContentInfo, SignedData} from 'pkijs'; +import PostalMime from 'postal-mime'; +import {z} from 'zod'; + +function value(value: undefined): undefined; +function value(value: T): SignedValue; +/** + * + */ +function value(value: T | undefined): SignedValue | undefined { + return value === undefined ? undefined : {value}; +} + +@Injectable({providedIn: 'root'}) +export class MailAdapterService { + httpClient = inject(HttpClient); + + request(options: { + method?: string; + path?: string[]; + options?: Record; + responseType?: 'json' | 'arraybuffer'; + credentials?: string; + }): Observable { + return this.httpClient.request( + options.method ?? 'GET', + `http://localhost:4000/${options.path?.map(encodeURIComponent).join('/') ?? ''}${ + options.options + ? `?${Object.entries(options.options).map(item => item.map(encodeURIComponent).join('='))}` + : '' + }`, + { + responseType: options.responseType as 'json', + headers: options.credentials ? {authorization: `Basic ${options.credentials}`} : undefined, + }, + ); + } + + checkCredentials(credentials: string): Observable { + return this.request({ + path: [], + options: {}, + responseType: 'json', + credentials, + }).pipe( + map(() => true), + catchError(error => { + if (error.status === 401) { + return of(false); + } else { + throw error; + } + }), + ); + } + + listMailboxes(credentials: string): Observable { + return this.request({credentials}).pipe(mergeMap(it => MailboxTreeRoot.parseAsync(it))); + } + + listRawEmails(credentials: string, mailbox: string, since?: string): Observable { + return this.request({ + credentials, + path: [mailbox], + options: since === undefined ? undefined : {since}, + }).pipe( + mergeMap(it => z.array(z.string()).parseAsync(it)), + tap(console.log), + ); + } + + private getRawEmail(credentials: string, mailbox: string, id: string): Observable { + return this.request({ + credentials, + path: [mailbox, id], + options: {raw: 'true'}, + }).pipe(mergeMap(it => RawEmail.parseAsync(it))); + } + + private getPart(credentials: string, mailbox: string, id: string, part: string): Observable { + return this.request({path: [mailbox, id, part], credentials, responseType: 'arraybuffer'}); + } + + private getRawPart( + credentials: string, + mailbox: string, + id: string, + part: string, + ): Observable { + return this.request({ + path: [mailbox, id, part], + options: {raw: 'true'}, + responseType: 'arraybuffer', + credentials, + }); + } + + private resolveRawEmail(credentials: string, mailbox: string, email: RawEmail): Observable { + console.log(email); + + if ( + email.bodyStructure.type === 'application/x-pkcs7-mime' || + email.bodyStructure.type === 'application/pkcs7-mime' + ) { + return this.getRawPart(credentials, mailbox, email.seq, email.bodyStructure.part ?? 'TEXT').pipe( + mergeMap(async buffer => { + const info = ContentInfo.fromBER(buffer); + const signedData = new SignedData({schema: info.content}); + const valid = await signedData + .verify({signer: 0, data: signedData.encapContentInfo.eContent?.valueBeforeDecodeView}) + .catch(() => false); + const content = new TextDecoder().decode( + signedData.encapContentInfo.eContent?.valueBeforeDecodeView, + ); + const signedEmail = await PostalMime.parse(content); + + function signed(value: undefined): undefined; + function signed(value: T): SignedValue; + /** + * + */ + function signed(value: T | undefined): SignedValue | undefined { + return value === undefined + ? undefined + : { + value, + signature: { + type: 'pkcs7', + valid, + }, + }; + } + + const result: Email = { + id: email.seq, + mailbox, + subject: signedEmail.subject ? signed(signedEmail.subject) : value(email.envelope.subject), + flags: new Set(), //TODO + from: signed({ + name: signedEmail.from.name || undefined, + address: signedEmail.from.address || undefined, + }), + to: signedEmail.to?.map(({name, address}) => + signed({ + name, + address, + }), + ), + date: signedEmail.date ? signed(new Date(signedEmail.date)) : value(email.envelope.date), + html: signedEmail.html ? signed(signedEmail.html) : undefined, + text: signedEmail.text ? signed(signedEmail.text) : undefined, + attachments: [], + }; + + return result; + }), + ); + } + + const traverse = ( + item: RawEmailBodyStructure, + result: Pick, + signature?: Signature, + ): Observable> => { + // https://datatracker.ietf.org/doc/html/rfc1847#section-2.1 + if (item.type === 'multipart/signed' && item.parameters?.protocol === 'application/pkcs7-signature') { + return forkJoin({ + data: this.getPart(credentials, mailbox, email.seq, item.childNodes![0].part!), + signature: this.getRawPart(credentials, mailbox, email.seq, item.childNodes![1].part!), + }).pipe( + mergeMap(({data, signature}) => { + const info = ContentInfo.fromBER(signature); + const signedData = new SignedData({schema: info.content}); + return signedData.verify({signer: 0, data}); + }), + catchError(error => { + console.log(error); + return of(false); + }), + mergeMap(valid => traverse(item.childNodes![0], result, {type: 'pkcs7', valid})), + ); + } else if (item.type.startsWith('multipart/')) { + return forkJoin(item.childNodes!.map(child => traverse(child, result, signature))).pipe( + map(children => children[0]), + ); + } else if (item.type === 'text/plain') { + return this.getPart(credentials, mailbox, email.seq, item.part ?? 'TEXT').pipe( + map(text => { + result.html = {value: new TextDecoder().decode(text), signature}; + return result; + }), + ); + } else if (item.type === 'text/html') { + return this.getPart(credentials, mailbox, email.seq, item.part ?? 'TEXT').pipe( + map(html => { + result.html = {value: new TextDecoder().decode(html), signature}; + return result; + }), + ); + } else if (item.part === undefined) { + return of(result); + } else { + result.attachments.push({value: {part: item.part, size: item.size ?? Number.NaN, filename: ''}}); + return of(result); + } + }; + + return traverse(email.bodyStructure, {attachments: []}).pipe( + map( + partial => + ({ + ...partial, + id: email.seq, + mailbox, + flags: new Set(email.flags), + subject: value(email.envelope.subject), + from: value({ + name: email.envelope.from[0]?.name || undefined, + address: email.envelope.from[0]?.address || undefined, + }), + date: value(email.envelope.date), + }) satisfies Email, + ), + tap(console.log), + ); + } + + getEmail(credentials: string, mailbox: string, id: string): Observable { + return this.getRawEmail(credentials, mailbox, id).pipe( + mergeMap(it => this.resolveRawEmail(credentials, mailbox, it)), + ); + } +} diff --git a/frontend/app/src/app/modules/mail/mail-detail.component.ts b/frontend/app/src/app/modules/mail/mail-detail.component.ts new file mode 100644 index 00000000..0f97446c --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-detail.component.ts @@ -0,0 +1,58 @@ +import {ChangeDetectionStrategy, Component, inject, signal} from '@angular/core'; +import {AsyncPipe, TitleCasePipe} from '@angular/common'; +import {IonicModule} from '@ionic/angular'; +import {DataModule} from '../data/data.module'; +import {IonIconModule} from 'src/app/util/ion-icon/ion-icon.module'; +import {UtilModule} from 'src/app/util/util.module'; +import {FormatPurePipeModule, ParseIsoPipeModule} from 'ngx-date-fns'; +import {ActivatedRoute, RouterModule} from '@angular/router'; +import {map, mergeMap} from 'rxjs'; +import {DomSanitizer} from '@angular/platform-browser'; +import {materialFade} from 'src/app/animation/material-motion'; +import {TranslateModule} from '@ngx-translate/core'; +import {ShadowHtmlDirective} from 'src/app/util/shadow-html.directive'; +import {MailStorageProvider} from './mail-storage.provider'; + +@Component({ + selector: 'stapps-mail-detail', + templateUrl: 'mail-detail.html', + styleUrl: 'mail-detail.scss', + animations: [materialFade], + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + AsyncPipe, + IonicModule, + DataModule, + IonIconModule, + UtilModule, + FormatPurePipeModule, + ParseIsoPipeModule, + RouterModule, + ShadowHtmlDirective, + TranslateModule, + TitleCasePipe, + ], +}) +export class MailDetailComponent { + readonly activatedRoute = inject(ActivatedRoute); + + readonly mailStorage = inject(MailStorageProvider); + + readonly sanitizer = inject(DomSanitizer); + + parameters = this.activatedRoute.paramMap.pipe( + map(parameters => ({ + mailbox: parameters.get('mailbox')!, + id: parameters.get('id')!, + })), + ); + + mail = this.parameters.pipe(mergeMap(({mailbox, id}) => this.mailStorage.getEmail(mailbox, id))); + + collapse = signal(false); + + todo() { + alert('TODO'); + } +} diff --git a/frontend/app/src/app/modules/mail/mail-detail.html b/frontend/app/src/app/modules/mail/mail-detail.html new file mode 100644 index 00000000..079cc993 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-detail.html @@ -0,0 +1,93 @@ + + + + + + + @if (mail | async; as mail) { + {{ mail.subject?.value }} + } @else { + + } + + + + + + + + + + + + + + @if (mail | async; as mail) { +

{{ mail.subject?.value }}

+ + @if (mail.html) { +
+
+
+ } @else if (mail.text) { +
+
{{ mail.text.value }}
+
+ } + + @for (attachment of mail.attachments; track attachment) { + + + {{ attachment.value.filename }} + {{ attachment.value.size }} + + + + + + + + } + +
+
+ + @if (mail.date) { + + + + + } +
{{ 'mail.DATE' | translate | titlecase }} + +
+
+
+ } +
diff --git a/frontend/app/src/app/modules/mail/mail-detail.scss b/frontend/app/src/app/modules/mail/mail-detail.scss new file mode 100644 index 00000000..0f19be5d --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-detail.scss @@ -0,0 +1,97 @@ +@import '../../../theme/util/mixins'; + +ion-item { + margin-block-end: var(--spacing-xl); +} + +ion-title { + transition: + opacity 0.2s ease, + translate 0.2s ease; +} + +h1 { + margin: var(--spacing-sm) var(--spacing-md); + font-weight: var(--font-weight-bold); + color: var(--ion-color-primary-contrast); +} + +aside { + display: flex; + flex-direction: column; + margin: var(--spacing-xs) var(--spacing-md); + color: var(--ion-color-primary-contrast); +} + +.to { + display: flex; + gap: var(--spacing-xs); + align-items: center; + justify-content: flex-start; + + > span:has(+ span)::after { + content: ','; + } +} + +.from { + display: flex; + gap: var(--spacing-xs); + align-items: center; + justify-content: flex-start; +} + +main { + @include border-radius-in-parallax(var(--border-radius-default)); + + margin: var(--spacing-md); + padding: var(--spacing-md); + background: var(--ion-item-background); +} + +.html { + overflow-x: auto; +} + +pre { + font-family: inherit; + word-wrap: break-word; + white-space: pre-wrap; +} + +footer { + // css hack to make the element stick to the bottom of the scroll container even + // when the content is not filling it + position: sticky; + top: 100vh; + + > div { + margin: var(--spacing-lg); + opacity: 0.8; + } + + td { + padding-inline-start: var(--spacing-md); + word-break: break-word; + } + + code { + font-size: inherit; + } +} + +.attachment { + display: flex; + align-items: center; + justify-content: space-between; + + margin: var(--spacing-md) 0; + padding: var(--spacing-md); + + border: 1px solid var(--ion-border-color); + border-radius: var(--border-radius-default); +} + +ion-content::part(background) { + background: none; +} diff --git a/frontend/app/src/app/modules/mail/mail-login.component.ts b/frontend/app/src/app/modules/mail/mail-login.component.ts new file mode 100644 index 00000000..ecb5adc3 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-login.component.ts @@ -0,0 +1,65 @@ +import {AsyncPipe, TitleCasePipe} from '@angular/common'; +import {ChangeDetectionStrategy, Component, WritableSignal, computed, inject, signal} from '@angular/core'; +import {FormsModule} from '@angular/forms'; +import {IonicModule} from '@ionic/angular'; +import {TranslateModule} from '@ngx-translate/core'; +import {IonIconModule} from 'src/app/util/ion-icon/ion-icon.module'; +import {UtilModule} from 'src/app/util/util.module'; +import {MailService} from './mail.service'; +import {Observable, of, map, catchError, startWith, shareReplay, tap, take} from 'rxjs'; +import {ActivatedRoute, Router} from '@angular/router'; + +@Component({ + selector: 'stapps-mail-login', + templateUrl: 'mail-login.html', + styleUrl: 'mail-login.scss', + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [IonicModule, UtilModule, TranslateModule, TitleCasePipe, IonIconModule, FormsModule, AsyncPipe], +}) +export class MailLoginComponent { + showPassword = signal(false); + + email = signal(''); + + password = signal(''); + + // eslint-disable-next-line unicorn/no-useless-undefined + error: WritableSignal> = signal(of(undefined)); + + loading = computed(() => + this.error().pipe( + map(() => false), + startWith(true), + ), + ); + + mailService = inject(MailService); + + router = inject(Router); + + activatedRoute = inject(ActivatedRoute); + + submit(event: SubmitEvent) { + event.preventDefault(); + const form = event.target as HTMLFormElement; + if (form.checkValidity()) { + this.error.set( + this.mailService.login(this.email(), this.password()).pipe( + tap(success => { + if (success) { + this.activatedRoute.data.pipe(take(1)).subscribe(data => { + this.router.navigate(data.redirectTo); + }); + } + }), + map(success => (success ? undefined : 'mail.login.error.INVALID_CREDENTIALS')), + catchError(error => of(error.message)), + shareReplay(1), + ), + ); + } else { + form.reportValidity(); + } + } +} diff --git a/frontend/app/src/app/modules/mail/mail-login.html b/frontend/app/src/app/modules/mail/mail-login.html new file mode 100644 index 00000000..9541dffa --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-login.html @@ -0,0 +1,67 @@ + + + + + + + + + +

{{ 'mail.login.TITLE' | translate | titlecase }}

+
+ + + + + + + + + + @if (error() | async; as error) { + {{ error | translate | titlecase }} + } + + + {{ 'mail.login.LOGIN' | translate | titlecase }} + +
+
diff --git a/frontend/app/src/app/modules/mail/mail-login.scss b/frontend/app/src/app/modules/mail/mail-login.scss new file mode 100644 index 00000000..16b401e9 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-login.scss @@ -0,0 +1,17 @@ +h1 { + margin-inline: auto; + color: var(--ion-color-primary-contrast); +} + +form { + display: flex; + flex-direction: column; + align-items: flex-end; + + max-width: 30em; + margin: var(--spacing-xxl) auto; + padding: var(--spacing-xl); + + background: var(--ion-item-background); + border-radius: var(--border-radius-default); +} diff --git a/frontend/app/src/app/modules/mail/mail-page.component.ts b/frontend/app/src/app/modules/mail/mail-page.component.ts new file mode 100644 index 00000000..2e53b0e8 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-page.component.ts @@ -0,0 +1,60 @@ +import {ChangeDetectionStrategy, Component, inject} from '@angular/core'; +import {MailService} from './mail.service'; +import {AsyncPipe, TitleCasePipe} from '@angular/common'; +import {IonicModule} from '@ionic/angular'; +import {DataModule} from '../data/data.module'; +import {IonIconModule} from 'src/app/util/ion-icon/ion-icon.module'; +import {UtilModule} from 'src/app/util/util.module'; +import {FormatPurePipeModule, IsTodayPipeModule} from 'ngx-date-fns'; +import {ActivatedRoute, RouterModule} from '@angular/router'; +import {map, mergeMap} from 'rxjs'; +import {MailStorageProvider} from './mail-storage.provider'; +import {MailboxTreeItem} from './schema'; +import {SCIcon} from 'src/app/util/ion-icon/icon'; +import {TranslateModule} from '@ngx-translate/core'; + +@Component({ + selector: 'stapps-mail-page', + templateUrl: 'mail-page.html', + styleUrl: 'mail-page.scss', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + AsyncPipe, + IonicModule, + DataModule, + IonIconModule, + UtilModule, + FormatPurePipeModule, + IsTodayPipeModule, + RouterModule, + TranslateModule, + TitleCasePipe, + ], +}) +export class MailPageComponent { + readonly activatedRoute = inject(ActivatedRoute); + + readonly mailService = inject(MailService); + + readonly mailStorage = inject(MailStorageProvider); + + mailIcons: Record, keyof typeof SCIcon> = { + '\\Inbox': SCIcon.inbox, + '\\All': SCIcon.all_inbox, + '\\Archive': SCIcon.archive, + '\\Drafts': SCIcon.drafts, + '\\Flagged': SCIcon.flag, + '\\Junk': SCIcon.folder, + '\\Sent': SCIcon.send, + '\\Trash': SCIcon.delete, + }; + + mailbox = this.activatedRoute.paramMap.pipe( + mergeMap(parameters => + this.mailStorage.mailboxes.pipe( + map(mailboxes => mailboxes.folders.find(it => it.path === parameters.get('mailbox')!)!), + ), + ), + ); +} diff --git a/frontend/app/src/app/modules/mail/mail-page.html b/frontend/app/src/app/modules/mail/mail-page.html new file mode 100644 index 00000000..992fa438 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-page.html @@ -0,0 +1,45 @@ + + + + + + + + Mail + + + + + + + @if (mailStorage.mailboxes | async; as mailboxes) { + + @for (folder of mailboxes.folders; track folder) { + + @if (folder.specialUse) { + + {{ 'mail.mailboxes.' + folder.specialUse | translate | titlecase }} + } @else { + + {{ folder.name }} + } + + } + + } + + + + + diff --git a/frontend/app/src/app/modules/mail/mail-page.scss b/frontend/app/src/app/modules/mail/mail-page.scss new file mode 100644 index 00000000..8052908e --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-page.scss @@ -0,0 +1,26 @@ +ion-list { + margin: var(--spacing-md); + border-radius: var(--border-radius-default); +} + +ion-split-pane { + --border: none; +} + +ion-menu, +ion-menu::part(container), +ion-menu::part(backdrop) { + background: none; +} + +ion-menu:not(.menu-pane-visible) { + &::part(container) { + box-shadow: none; + } + + > ion-list { + height: 100%; + margin-inline-end: var(--spacing-xl); + box-shadow: rgba(0 0 0 / 18%) 4px 0 16px; + } +} diff --git a/frontend/app/src/app/modules/mail/mail-storage.provider.ts b/frontend/app/src/app/modules/mail/mail-storage.provider.ts new file mode 100644 index 00000000..896901c9 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail-storage.provider.ts @@ -0,0 +1,243 @@ +/* eslint-disable unicorn/no-useless-undefined */ +import {Injectable, inject} from '@angular/core'; +import {Capacitor} from '@capacitor/core'; +import {SecureStoragePlugin} from 'capacitor-secure-storage-plugin'; +import { + BehaviorSubject, + Observable, + catchError, + defer, + distinctUntilChanged, + filter, + from, + fromEvent, + map, + merge, + mergeMap, + of, + shareReplay, + startWith, + take, + firstValueFrom, + Subject, +} from 'rxjs'; +import {Email, EmailMeta, MailboxTreeRoot} from './schema'; +import equal from 'fast-deep-equal'; +import {MailAdapterService} from './mail-adapter.service'; +import {StorageProvider} from '../storage/storage.provider'; + +@Injectable({providedIn: 'root'}) +export class MailStorageProvider { + static readonly DB_NAME = 'mail'; + + static readonly MAILBOX_STORE_NAME = 'mailboxes'; + + static readonly EMAIL_STORE_NAME = 'emails'; + + static readonly CREDENTIALS_KEY = 'email-credentials'; + + static readonly EMAIL_MAILBOX_INDEX = 'email'; + + static readonly EMAIL_FLAGS_INDEX = 'flags'; + + static readonly EMAIL_DATE_INDEX = 'date'; + + storageProvider = inject(StorageProvider); + + mailAdapter = inject(MailAdapterService); + + database = defer(() => { + const request = indexedDB.open(MailStorageProvider.DB_NAME, 1); + return merge( + fromEvent(request, 'upgradeneeded').pipe( + map(event => { + const database = (event.target as IDBOpenDBRequest).result; + const mailStore = database.createObjectStore(MailStorageProvider.EMAIL_STORE_NAME, { + keyPath: ['id', 'mailbox'], + }); + mailStore.createIndex(MailStorageProvider.EMAIL_MAILBOX_INDEX, 'mailbox', {unique: false}); + mailStore.createIndex(MailStorageProvider.EMAIL_FLAGS_INDEX, 'flags', { + unique: false, + multiEntry: true, + }); + mailStore.createIndex(MailStorageProvider.EMAIL_DATE_INDEX, 'date', {unique: false}); + return database; + }), + ), + fromEvent(request, 'success').pipe( + take(1), + map(event => (event.target as IDBOpenDBRequest).result), + ), + fromEvent(request, 'error').pipe( + take(1), + map(event => { + throw (event.target as IDBOpenDBRequest).error; + }), + ), + fromEvent(request, 'blocked').pipe( + take(1), + map(() => { + throw new Error('Database blocked'); + }), + ), + ); + }).pipe(shareReplay(1)); + + private mailboxesChanged = new BehaviorSubject(undefined); + + mailboxes: Observable = this.mailboxesChanged.pipe( + mergeMap(() => + this.storageProvider + .get(MailStorageProvider.MAILBOX_STORE_NAME) + .catch(() => undefined!), + ), + filter(it => it !== undefined), + distinctUntilChanged((a, b) => equal(a, b)), + shareReplay(1), + ); + + async setMailboxes(root: MailboxTreeRoot | undefined): Promise { + await this.storageProvider.put(MailStorageProvider.MAILBOX_STORE_NAME, root); + this.mailboxesChanged.next(); + } + + private credentialsChanged = new BehaviorSubject(undefined); + + credentials: Observable = this.credentialsChanged.pipe( + mergeMap(() => { + return Capacitor.isNativePlatform() + ? from(SecureStoragePlugin.get({key: MailStorageProvider.CREDENTIALS_KEY})).pipe( + map(({value}) => value), + catchError(() => of(undefined)), + ) + : of(localStorage.getItem(MailStorageProvider.CREDENTIALS_KEY) ?? undefined); + }), + ); + + async setCredentials(credentials: string | undefined): Promise { + if (Capacitor.isNativePlatform()) { + await (credentials === undefined + ? SecureStoragePlugin.remove({key: MailStorageProvider.CREDENTIALS_KEY}) + : SecureStoragePlugin.set({key: MailStorageProvider.CREDENTIALS_KEY, value: credentials})); + } else { + if (credentials === undefined) { + localStorage.removeItem(MailStorageProvider.CREDENTIALS_KEY); + } else { + localStorage.setItem(MailStorageProvider.CREDENTIALS_KEY, credentials); + } + } + this.credentialsChanged.next(); + } + + private emailChanged = new Subject>(); + + private mailboxContentChanged = new Subject>(); + + getEmails(mailbox: string): Observable { + return this.mailboxContentChanged.pipe( + filter(it => it.has(mailbox)), + startWith(undefined), + mergeMap(() => this.database), + mergeMap(database => { + return defer(() => { + const transaction = database.transaction([MailStorageProvider.EMAIL_STORE_NAME], 'readonly'); + const store = transaction.objectStore(MailStorageProvider.EMAIL_STORE_NAME); + + const index = store.index(MailStorageProvider.EMAIL_MAILBOX_INDEX); + const request = index.getAll(IDBKeyRange.only(mailbox)); + + return merge( + fromEvent(request, 'success').pipe(map(() => request.result as Array)), + fromEvent(request, 'error').pipe( + map(event => { + throw (event.target as IDBRequest).error; + }), + ), + ).pipe(take(1)); + }); + }), + map, EmailMeta[]>(emails => + emails + .map(email => ({id: email.id, mailbox: email.mailbox, incomplete: true}) satisfies EmailMeta) + .sort((a, b) => Number(b.id) - Number(a.id)), + ), + shareReplay(1), + ); + } + + getEmail(mailbox: string, id: string): Observable { + return this.emailChanged.pipe( + filter(it => it.has(JSON.stringify([id, mailbox]))), + startWith(undefined), + mergeMap(() => this.database), + mergeMap(database => { + return defer(() => { + const transaction = database.transaction([MailStorageProvider.EMAIL_STORE_NAME], 'readonly'); + const store = transaction.objectStore(MailStorageProvider.EMAIL_STORE_NAME); + + const request = store.get([id, mailbox]); + + return merge( + fromEvent(request, 'success').pipe(map(() => request.result as EmailMeta | Email)), + fromEvent(request, 'error').pipe( + map(event => { + throw (event.target as IDBRequest).error; + }), + ), + ).pipe(take(1)); + }); + }), + mergeMap(email => + 'incomplete' in email + ? this.credentials.pipe( + filter(it => it !== undefined), + take(1), + mergeMap(credentials => + this.mailAdapter.getEmail(credentials!, mailbox, id).pipe( + mergeMap(async email => { + console.log('fetiching'); + await this.setEmail(email, true); + console.log('done'); + return email; + }), + ), + ), + ) + : of(email), + ), + shareReplay(1), + ); + } + + async setEmail(email: Email | EmailMeta | Array, quiet = false): Promise { + const database = await firstValueFrom(this.database); + const transaction = database.transaction([MailStorageProvider.EMAIL_STORE_NAME], 'readwrite'); + const store = transaction.objectStore(MailStorageProvider.EMAIL_STORE_NAME); + + const mailboxesAffected = new Set(); + const emailsAffected = new Set(); + + for (const it of Array.isArray(email) ? email : [email]) { + mailboxesAffected.add(it.mailbox); + emailsAffected.add(JSON.stringify([it.id, it.mailbox])); + store.put(it); + } + + await firstValueFrom( + merge( + fromEvent(transaction, 'complete').pipe( + map(() => { + if (!quiet) { + this.emailChanged.next(emailsAffected); + } + }), + ), + fromEvent(transaction, 'error').pipe( + map(event => { + throw (event.target as IDBRequest).error; + }), + ), + ), + ); + } +} diff --git a/frontend/app/src/app/modules/mail/mail.module.ts b/frontend/app/src/app/modules/mail/mail.module.ts new file mode 100644 index 00000000..9d9d991a --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail.module.ts @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2024 StApps + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ +import {Router, RouterModule} from '@angular/router'; +import {NgModule, inject} from '@angular/core'; +import {MailService} from './mail.service'; +import {map, take} from 'rxjs'; + +function mailLoginGuard() { + const router = inject(Router); + return inject(MailService).isLoggedIn.pipe( + map(isLoggedIn => (isLoggedIn ? true : router.createUrlTree(['/mail-login']))), + take(1), + ); +} + +@NgModule({ + imports: [ + RouterModule.forChild([ + { + path: 'mail-login', + data: {redirectTo: ['/mail']}, + loadComponent: () => import('./mail-login.component').then(m => m.MailLoginComponent), + }, + { + path: 'mail', + loadComponent: () => import('./mail-page.component').then(m => m.MailPageComponent), + canActivate: [mailLoginGuard], + canActivateChild: [mailLoginGuard], + children: [ + { + path: '', + redirectTo: 'INBOX', + pathMatch: 'full', + }, + { + path: ':mailbox', + loadComponent: () => import('./mailbox-page.component').then(m => m.MailboxPageComponent), + }, + { + path: ':mailbox/:id', + loadComponent: () => import('./mail-detail.component').then(m => m.MailDetailComponent), + }, + ], + }, + ]), + ], +}) +export class MailModule {} diff --git a/frontend/app/src/app/modules/mail/mail.pipe.ts b/frontend/app/src/app/modules/mail/mail.pipe.ts new file mode 100644 index 00000000..465bf766 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail.pipe.ts @@ -0,0 +1,17 @@ +import {Pipe, PipeTransform, inject} from '@angular/core'; +import {Observable} from 'rxjs'; +import {MailStorageProvider} from './mail-storage.provider'; +import {Email} from './schema'; + +@Pipe({ + name: 'mail', + pure: true, + standalone: true, +}) +export class MailPipe implements PipeTransform { + mailStorage = inject(MailStorageProvider); + + transform(value: {mailbox: string; id: string}): Observable { + return this.mailStorage.getEmail(value.mailbox, value.id); + } +} diff --git a/frontend/app/src/app/modules/mail/mail.service.ts b/frontend/app/src/app/modules/mail/mail.service.ts new file mode 100644 index 00000000..67c38f65 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mail.service.ts @@ -0,0 +1,84 @@ +import {Injectable} from '@angular/core'; +import { + Observable, + map, + mergeMap, + filter, + from, + combineLatest, + tap, + of, + catchError, + BehaviorSubject, +} from 'rxjs'; +import {MailStorageProvider} from './mail-storage.provider'; +import {MailAdapterService} from './mail-adapter.service'; +import {takeUntilDestroyed} from '@angular/core/rxjs-interop'; +import {EmailMeta} from './schema'; + +@Injectable({providedIn: 'root'}) +export class MailService { + isLoggedIn = this.mailStorage.credentials.pipe(map(it => it !== undefined)); + + manualSync = new BehaviorSubject(undefined); + + constructor( + private mailStorage: MailStorageProvider, + private mailAdapter: MailAdapterService, + ) { + this.mailStorage.credentials + .pipe( + takeUntilDestroyed(), + mergeMap(credentials => this.manualSync.pipe(map(() => credentials))), + mergeMap(credentials => { + return credentials === undefined + ? of() + : this.mailAdapter + .listMailboxes(credentials) + .pipe(mergeMap(mailboxes => this.mailStorage.setMailboxes(mailboxes))); + }), + ) + .subscribe(() => {}); + combineLatest([ + this.mailStorage.credentials.pipe(filter(it => it !== undefined)), + this.mailStorage.mailboxes, + ]) + .pipe( + takeUntilDestroyed(), + mergeMap(([credentials, mailboxes]) => + from(mailboxes.folders).pipe( + mergeMap(async mailbox => { + return this.mailAdapter.listRawEmails(credentials!, mailbox.path).pipe( + map(emails => + emails.map(it => ({id: it, mailbox: mailbox.path, incomplete: true}) satisfies EmailMeta), + ), + catchError(error => { + console.error(error); + return of(); + }), + ); + }), + mergeMap(emails => emails), + ), + ), + mergeMap(emails => this.mailStorage.setEmail(emails)), + ) + .subscribe(() => {}); + } + + login(username: string, password: string): Observable { + const credentials = btoa(`${username}:${password}`); + return this.mailAdapter.checkCredentials(credentials).pipe( + tap(success => { + if (success) { + this.mailStorage.setCredentials(credentials); + } + }), + ); + } + + logout() { + this.mailStorage.setCredentials(undefined); + this.mailStorage.setMailboxes(undefined); + } +} diff --git a/frontend/app/src/app/modules/mail/mailbox-page.component.ts b/frontend/app/src/app/modules/mail/mailbox-page.component.ts new file mode 100644 index 00000000..4c988066 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mailbox-page.component.ts @@ -0,0 +1,54 @@ +import {ChangeDetectionStrategy, Component, inject} from '@angular/core'; +import {ActivatedRoute, RouterModule} from '@angular/router'; +import {MailService} from './mail.service'; +import {MailStorageProvider} from './mail-storage.provider'; +import {mergeMap, map, filter} from 'rxjs'; +import {IonicModule} from '@ionic/angular'; +import {IonIconModule} from 'src/app/util/ion-icon/ion-icon.module'; +import {TranslateModule} from '@ngx-translate/core'; +import {AsyncPipe, TitleCasePipe} from '@angular/common'; +import {LazyComponent} from 'src/app/util/lazy.component'; +import {MailPipe} from './mail.pipe'; +import {FormatPurePipeModule, IsTodayPipeModule} from 'ngx-date-fns'; +import {LazyLoadPipe} from 'src/app/util/lazy-load.pipe'; + +@Component({ + selector: 'stapps-mailbox-page', + templateUrl: 'mailbox-page.html', + styleUrl: 'mailbox-page.scss', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [ + IonicModule, + IonIconModule, + TranslateModule, + AsyncPipe, + LazyComponent, + MailPipe, + IsTodayPipeModule, + FormatPurePipeModule, + RouterModule, + LazyLoadPipe, + TitleCasePipe, + ], +}) +export class MailboxPageComponent { + readonly activatedRoute = inject(ActivatedRoute); + + readonly mailService = inject(MailService); + + readonly mailStorage = inject(MailStorageProvider); + + mailbox = this.activatedRoute.paramMap.pipe( + mergeMap(parameters => + this.mailStorage.mailboxes.pipe( + map(mailboxes => mailboxes.folders.find(it => it.path === parameters.get('mailbox')!)!), + ), + ), + ); + + mails = this.mailbox.pipe( + filter(mailbox => mailbox !== undefined), + mergeMap(mailbox => this.mailStorage.getEmails(mailbox.path)), + ); +} diff --git a/frontend/app/src/app/modules/mail/mailbox-page.html b/frontend/app/src/app/modules/mail/mailbox-page.html new file mode 100644 index 00000000..726fbbcb --- /dev/null +++ b/frontend/app/src/app/modules/mail/mailbox-page.html @@ -0,0 +1,54 @@ + +

+ @if (mailbox | async; as mailbox) { + @if (mailbox.specialUse) { + {{ 'mail.mailboxes.' + mailbox.specialUse | translate | titlecase }} + } @else { + {{ mailbox.name }} + } + } @else { + + } +

+ + @if (mails | async; as mails) { + + @for (mail of mails; track mail.id) { + + @if (mail | mail | lazyLoad: item | async; as mail) { +
+ @if (mail.from; as from) { +
+ {{ (from.value.name || from.value.address)?.charAt(0)?.toUpperCase() }} +
+ } +
+ +

+ {{ mail.from.value.name || mail.from.value.address }} +

+ @if (mail.subject) { +

{{ mail.subject.value }}

+ } +
+ + @if (mail.date.value | dfnsIsToday) { + {{ mail.date.value | dfnsFormatPure: 'p' }} + } @else { + {{ mail.date.value | dfnsFormatPure: 'P' }} + } + + } @else { +
+ +
+ +

+

+
+ } +
+ } +
+ } +
diff --git a/frontend/app/src/app/modules/mail/mailbox-page.scss b/frontend/app/src/app/modules/mail/mailbox-page.scss new file mode 100644 index 00000000..f9513ac7 --- /dev/null +++ b/frontend/app/src/app/modules/mail/mailbox-page.scss @@ -0,0 +1,44 @@ +.avatar { + display: flex; + align-items: center; + justify-content: center; + + width: 2em; + height: 2em; + + color: var(--ion-color-light-contrast); + + background: var(--ion-color-light); + border-radius: 50%; +} + +h1 { + margin-inline: var(--spacing-md); + color: var(--ion-color-primary-contrast); +} + +h2 > ion-skeleton-text { + width: min(60%, 20em); +} + +p > ion-skeleton-text { + width: min(80%, 20em); +} + +.avatar > ion-skeleton-text { + border-radius: 50%; +} + +ion-item.unread h2 { + font-weight: bold; +} + +ion-item p { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +ion-content::part(background) { + background: none; +} diff --git a/frontend/app/src/app/modules/mail/schema.ts b/frontend/app/src/app/modules/mail/schema.ts new file mode 100644 index 00000000..93d9e714 --- /dev/null +++ b/frontend/app/src/app/modules/mail/schema.ts @@ -0,0 +1,128 @@ +import {z} from 'zod'; + +export const RawEmailAddress = z.object({ + name: z.optional(z.string()), + address: z.optional(z.string()), +}); + +export type RawEmailAddress = z.infer; + +export const RawEmailEnvelope = z.object({ + date: z.coerce.date(), + subject: z.string(), + messageId: z.string(), + inReplyTo: z.optional(z.string()), + from: z.array(RawEmailAddress), + sender: z.array(RawEmailAddress), + replyTo: z.array(RawEmailAddress), + to: z.array(RawEmailAddress), + cc: z.optional(z.array(RawEmailAddress)), + bcc: z.optional(z.array(RawEmailAddress)), +}); + +export type RawEmailEnvelope = z.infer; + +const RawEmailBodyStructureBase = z.object({ + part: z.optional(z.string()), + type: z.string(), + parameters: z.optional(z.record(z.string(), z.string())), + encoding: z.optional(z.enum(['7bit', '8bit', 'binary', 'base64', 'quoted-printable'])), + size: z.optional(z.number()), + envelope: z.optional(RawEmailEnvelope), + disposition: z.optional(z.string()), + dispositionParameters: z.optional(z.record(z.string(), z.string())), +}); + +export type RawEmailBodyStructure = z.infer & { + childNodes?: RawEmailBodyStructure[]; +}; + +export const RawEmailBodyStructure: z.ZodType = RawEmailBodyStructureBase.extend({ + childNodes: z.optional(z.lazy(() => z.array(RawEmailBodyStructure))), +}); + +export const RawEmail = z.object({ + bodyStructure: RawEmailBodyStructure, + labels: z.array(z.string()).transform(it => new Set(it)), + flags: z.array(z.string()).transform(it => new Set(it)), + envelope: RawEmailEnvelope, + seq: z.coerce.string(), +}); + +export type RawEmail = z.infer; + +const MailboxTreeItemBase = z.object({ + path: z.string(), + name: z.string(), + delimiter: z.string(), + flags: z.array(z.string()).or(z.object({})), + specialUse: z.optional( + z.enum(['\\All', '\\Archive', '\\Drafts', '\\Flagged', '\\Junk', '\\Sent', '\\Trash', '\\Inbox']), + ), + listed: z.boolean(), + subscribed: z.boolean(), + disabled: z.boolean().optional(), +}); + +export type MailboxTreeItem = z.infer & { + folders?: MailboxTreeItem[]; +}; + +export const MailboxTreeItem: z.ZodType = MailboxTreeItemBase.extend({ + folders: z.optional(z.lazy(() => z.array(MailboxTreeItem))), +}); + +export const MailboxTreeRoot = z.object({ + path: z.literal('').default(''), + root: z.literal(true), + folders: z.array(MailboxTreeItem), +}); + +export type MailboxTreeRoot = z.infer; + +export interface Signature { + type: 'pkcs7'; + valid: boolean; +} + +export interface SignedValue { + value: T; + signature?: Signature; +} + +export interface EmailAddress { + name?: string; + address?: string; +} + +export interface EmailAttachmentBase { + filename: string; + size: number; +} + +export interface EmailAttachmentRemote extends EmailAttachmentBase { + part: string; +} + +export interface EmailAttachmentLocal extends EmailAttachmentBase { + content: ArrayBuffer; +} + +export type EmailAttachment = EmailAttachmentRemote | EmailAttachmentLocal; + +export interface Email { + id: string; + mailbox: string; + flags: Set; + subject?: SignedValue; + date: SignedValue; + from: SignedValue; + to?: SignedValue[]; + cc?: SignedValue[]; + bcc?: SignedValue[]; + html?: SignedValue; + text?: SignedValue; + attachments: SignedValue[]; +} + +export type EmailMeta = Pick & {incomplete: true}; diff --git a/frontend/app/src/app/modules/profile/page/profile-page-section.html b/frontend/app/src/app/modules/profile/page/profile-page-section.html index 308b92ad..cff4822e 100644 --- a/frontend/app/src/app/modules/profile/page/profile-page-section.html +++ b/frontend/app/src/app/modules/profile/page/profile-page-section.html @@ -39,6 +39,11 @@ } {{ 'name' | translateSimple: link }} + @if (link.beta) { + + {{ 'beta' | translate }} + + } } diff --git a/frontend/app/src/app/modules/profile/page/profile-page-section.scss b/frontend/app/src/app/modules/profile/page/profile-page-section.scss index bde1c548..c8b85bc1 100644 --- a/frontend/app/src/app/modules/profile/page/profile-page-section.scss +++ b/frontend/app/src/app/modules/profile/page/profile-page-section.scss @@ -50,6 +50,13 @@ ion-item { } } +ion-note { + position: absolute; + top: 0; + right: 0; + padding: var(--spacing-xs); +} + simple-swiper { --swiper-slide-width: #{$width}; diff --git a/frontend/app/src/app/util/data-size.pipe.ts b/frontend/app/src/app/util/data-size.pipe.ts new file mode 100644 index 00000000..40e1df7b --- /dev/null +++ b/frontend/app/src/app/util/data-size.pipe.ts @@ -0,0 +1,25 @@ +import {Pipe, PipeTransform} from '@angular/core'; + +/** + * Format a data size in bytes to a human readable string + */ +export function formatDataSize(value: number, precision = 2): string { + const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + let unit = 0; + while (value >= 1024 && unit < units.length - 1) { + value /= 1024; + unit++; + } + return `${value.toFixed(precision)} ${units[unit]}`; +} + +@Pipe({ + name: 'dataSize', + pure: true, + standalone: true, +}) +export class DataSizePipe implements PipeTransform { + transform(value: number, precision = 2): string { + return formatDataSize(value, precision); + } +} diff --git a/frontend/app/src/app/util/lazy-load.pipe.ts b/frontend/app/src/app/util/lazy-load.pipe.ts new file mode 100644 index 00000000..11c67691 --- /dev/null +++ b/frontend/app/src/app/util/lazy-load.pipe.ts @@ -0,0 +1,36 @@ +import {OnDestroy, Pipe, PipeTransform} from '@angular/core'; +import {Observable, Subject, mergeMap} from 'rxjs'; + +@Pipe({ + name: 'lazyLoad', + pure: true, + standalone: true, +}) +export class LazyLoadPipe implements PipeTransform, OnDestroy { + intersectionObserver?: IntersectionObserver; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + transform(value: Observable, element: any): Observable { + if (element.el instanceof Element) { + const isInView = new Subject(); + this.intersectionObserver?.disconnect(); + this.intersectionObserver = new IntersectionObserver(entries => { + if (entries.some(it => it.isIntersecting)) { + this.intersectionObserver?.disconnect(); + delete this.intersectionObserver; + isInView.next(); + isInView.complete(); + } + }); + this.intersectionObserver.observe(element.el); + return isInView.pipe(mergeMap(() => value)); + } else { + console.error('LazyLoadPipe: not an element', element); + return value; + } + } + + ngOnDestroy() { + this.intersectionObserver?.disconnect(); + } +} diff --git a/frontend/app/src/app/util/lazy.component.ts b/frontend/app/src/app/util/lazy.component.ts new file mode 100644 index 00000000..27db65a4 --- /dev/null +++ b/frontend/app/src/app/util/lazy.component.ts @@ -0,0 +1,46 @@ +import {NgTemplateOutlet} from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, + ContentChild, + ElementRef, + OnDestroy, + OnInit, + Renderer2, + TemplateRef, + signal, +} from '@angular/core'; + +@Component({ + selector: 'stapps-lazy', + templateUrl: 'lazy.html', + styleUrl: 'lazy.scss', + standalone: true, + changeDetection: ChangeDetectionStrategy.OnPush, + imports: [NgTemplateOutlet], +}) +export class LazyComponent implements OnInit, OnDestroy { + @ContentChild(TemplateRef) template!: TemplateRef; + + isIntersecting = signal(false); + + intersectionObserver = new IntersectionObserver(entries => { + this.isIntersecting.set(this.isIntersecting() || entries.some(entry => entry.isIntersecting)); + if (this.isIntersecting()) { + this.intersectionObserver.disconnect(); + } + }); + + constructor( + readonly element: ElementRef, + readonly renderer: Renderer2, + ) {} + + ngOnInit() { + this.intersectionObserver.observe(this.element.nativeElement); + } + + ngOnDestroy() { + this.intersectionObserver.disconnect(); + } +} diff --git a/frontend/app/src/app/util/lazy.html b/frontend/app/src/app/util/lazy.html new file mode 100644 index 00000000..892ca534 --- /dev/null +++ b/frontend/app/src/app/util/lazy.html @@ -0,0 +1,3 @@ +@if (isIntersecting()) { + +} diff --git a/frontend/app/src/app/util/lazy.scss b/frontend/app/src/app/util/lazy.scss new file mode 100644 index 00000000..e69de29b diff --git a/frontend/app/src/app/util/rxjs/from-cursor.ts b/frontend/app/src/app/util/rxjs/from-cursor.ts new file mode 100644 index 00000000..8afef255 --- /dev/null +++ b/frontend/app/src/app/util/rxjs/from-cursor.ts @@ -0,0 +1,22 @@ +import {EMPTY, Observable, concat, defer, of} from 'rxjs'; + +/** + * Turns an IDBCursorWithValue into an Observable of values. + * + * Values are emitted lazily, i.e. the next value is only emitted when the + * previous one has been consumed. + * @example fromCursor(cursor).pipe(take(10)).subscribe(console.log); + */ +export function fromCursor(cursor: IDBCursorWithValue): Observable { + if (cursor.key === null) { + return EMPTY; + } + + const value = cursor.value as T; + cursor.continue(); + + return concat( + of(value), + defer(() => fromCursor(cursor)), + ); +} diff --git a/frontend/app/src/app/util/shadow-html.directive.ts b/frontend/app/src/app/util/shadow-html.directive.ts new file mode 100644 index 00000000..78a8e708 --- /dev/null +++ b/frontend/app/src/app/util/shadow-html.directive.ts @@ -0,0 +1,18 @@ +import {Directive, ElementRef, Host, Input} from '@angular/core'; +import {sanitize} from 'dompurify'; + +@Directive({ + selector: '[shadowHTML]', + standalone: true, +}) +export class ShadowHtmlDirective { + @Input({required: true}) + set shadowHTML(content: string) { + this.shadowRoot.innerHTML = ''; + this.shadowRoot.append(sanitize(content, {RETURN_DOM_FRAGMENT: true, USE_PROFILES: {html: true}})); + } + + shadowRoot = (this.elementRef.nativeElement as HTMLElement).attachShadow({mode: 'open'}); + + constructor(@Host() readonly elementRef: ElementRef) {} +} diff --git a/frontend/app/src/assets/i18n/de.json b/frontend/app/src/assets/i18n/de.json index 48a1a1c1..e6e8f03c 100644 --- a/frontend/app/src/assets/i18n/de.json +++ b/frontend/app/src/assets/i18n/de.json @@ -8,6 +8,7 @@ "export": "Exportieren", "share": "Teilen", "timeSuffix": "Uhr", + "beta": "Beta", "ratings": { "thank_you": "Vielen Dank für die Bewertung!" }, @@ -386,6 +387,35 @@ } } }, + "mail": { + "SIGNATURE_VALID": "Signatur gültig", + "SIGNATURE_INVALID": "Signatur ungültig", + "SIGNATURE_UNSUPPORTED": "Signatur nicht unterstützt", + "ID": "ID", + "FROM": "von", + "SENDER": "Absender", + "TO": "an", + "DATE": "Datum", + "login": { + "TITLE": "E-Mail Login", + "LOGIN": "Login", + "PLACEHOLDER_USERNAME": "Nutzername", + "PLACEHOLDER_PASSWORD": "Passwort", + "error": { + "INVALID_CREDENTIALS": "ungültige Zugangsdaten" + } + }, + "mailboxes": { + "\\Inbox": "Posteingang", + "\\All": "Alle", + "\\Archive": "Archiv", + "\\Drafts": "Entwürfe", + "\\Flagged": "Markiert", + "\\Junk": "Spam", + "\\Sent": "Gesendet", + "\\Trash": "Papierkorb" + } + }, "menu": { "context": { "title": "Kontext Menü", diff --git a/frontend/app/src/assets/i18n/en.json b/frontend/app/src/assets/i18n/en.json index 66af8a05..9d30bafb 100644 --- a/frontend/app/src/assets/i18n/en.json +++ b/frontend/app/src/assets/i18n/en.json @@ -7,6 +7,7 @@ "back": "back", "export": "Export", "share": "Share", + "beta": "beta", "timeSuffix": "", "ratings": { "thank_you": "Thank you for your feedback!" @@ -386,6 +387,35 @@ } } }, + "mail": { + "SIGNATURE_VALID": "signature valid", + "SIGNATURE_INVALID": "signature invalid", + "SIGNATURE_UNSUPPORTED": "signature unsupported", + "ID": "ID", + "FROM": "from", + "SENDER": "sender", + "TO": "to", + "DATE": "date", + "login": { + "TITLE": "email login", + "LOGIN": "login", + "PLACEHOLDER_USERNAME": "username", + "PLACEHOLDER_PASSWORD": "password", + "error": { + "INVALID_CREDENTIALS": "invalid credentials" + } + }, + "mailboxes": { + "\\Inbox": "inbox", + "\\All": "all inboxes", + "\\Archive": "archive", + "\\Drafts": "drafts", + "\\Flagged": "flagged", + "\\Junk": "spam", + "\\Sent": "sent", + "\\Trash": "trash" + } + }, "menu": { "context": { "title": "context menu", diff --git a/frontend/app/src/assets/icons.min.woff2 b/frontend/app/src/assets/icons.min.woff2 index 76cd6dc31484afe913534c010295ac722e192fca..270f1d296e00e6c4b77f195412bd1b162b839fed 100644 GIT binary patch literal 122900 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 literal 110916 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 diff --git a/frontend/app/src/config/profile-page-sections.ts b/frontend/app/src/config/profile-page-sections.ts index 6b5f9845..efba4fa8 100644 --- a/frontend/app/src/config/profile-page-sections.ts +++ b/frontend/app/src/config/profile-page-sections.ts @@ -49,6 +49,7 @@ export interface SCSectionLink extends SCThing { link: string[]; needsAuth?: true; icon?: string; + beta?: true; } export interface SCSection extends SCThing { @@ -150,6 +151,18 @@ export const profilePageSections: SCSection[] = [ }, ...SCSectionLinkConstantValues, }, + { + name: 'Mail', + icon: SCIcon.mail, + link: ['/mail'], + beta: true, + translations: { + de: { + name: 'Email', + }, + }, + ...SCSectionLinkConstantValues, + }, ], translations: { de: { diff --git a/frontend/app/src/index.html b/frontend/app/src/index.html index cf3ded06..15648190 100644 --- a/frontend/app/src/index.html +++ b/frontend/app/src/index.html @@ -18,7 +18,7 @@ - + diff --git a/packages/logger/package.json b/packages/logger/package.json index a845349f..14223e23 100644 --- a/packages/logger/package.json +++ b/packages/logger/package.json @@ -28,10 +28,10 @@ "test": "c8 mocha" }, "dependencies": { - "@types/nodemailer": "6.4.7", + "@types/nodemailer": "6.4.15", "chalk": "5.2.0", "flatted": "3.2.7", - "nodemailer": "6.9.1" + "nodemailer": "6.9.14" }, "devDependencies": { "@openstapps/eslint-config": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12b59703..87f103c6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ importers: specifier: 3.0.7 version: 3.0.7 '@types/nodemailer': - specifier: 6.4.7 - version: 6.4.7 + specifier: 6.4.15 + version: 6.4.15 '@types/promise-queue': specifier: 2.2.0 version: 2.2.0 @@ -132,8 +132,8 @@ importers: specifier: 3.0.2 version: 3.0.2 nodemailer: - specifier: 6.9.1 - version: 6.9.1 + specifier: 6.9.14 + version: 6.9.14 prom-client: specifier: 14.1.1 version: 14.1.1 @@ -246,6 +246,97 @@ importers: backend/database: {} + backend/mail-plugin: + dependencies: + '@openstapps/core': + specifier: workspace:* + version: link:../../packages/core + '@openstapps/core-tools': + specifier: workspace:* + version: link:../../packages/core-tools + '@openstapps/logger': + specifier: workspace:* + version: link:../../packages/logger + commander: + specifier: 10.0.0 + version: 10.0.0 + dotenv: + specifier: 16.4.5 + version: 16.4.5 + express: + specifier: 4.18.2 + version: 4.18.2 + imapflow: + specifier: 1.0.162 + version: 1.0.162 + mailparser: + specifier: 3.7.1 + version: 3.7.1 + node-forge: + specifier: 1.3.1 + version: 1.3.1 + nodemailer: + specifier: 6.9.14 + version: 6.9.14 + ts-node: + specifier: 10.9.2 + version: 10.9.2(@types/node@18.15.3)(typescript@5.4.2) + devDependencies: + '@openstapps/eslint-config': + specifier: workspace:* + version: link:../../configuration/eslint-config + '@openstapps/prettier-config': + specifier: workspace:* + version: link:../../configuration/prettier-config + '@openstapps/tsconfig': + specifier: workspace:* + version: link:../../configuration/tsconfig + '@types/express': + specifier: 4.17.17 + version: 4.17.17 + '@types/imapflow': + specifier: 1.0.18 + version: 1.0.18 + '@types/mailparser': + specifier: 3.4.4 + version: 3.4.4 + '@types/node': + specifier: 18.15.3 + version: 18.15.3 + '@types/node-forge': + specifier: 1.3.11 + version: 1.3.11 + '@types/nodemailer': + specifier: 6.4.15 + version: 6.4.15 + '@typescript-eslint/eslint-plugin': + specifier: 7.2.0 + version: 7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/parser': + specifier: 7.2.0 + version: 7.2.0(eslint@8.57.0)(typescript@5.4.2) + eslint: + specifier: 8.57.0 + version: 8.57.0 + eslint-config-prettier: + specifier: 9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-jsdoc: + specifier: 48.2.1 + version: 48.2.1(eslint@8.57.0) + eslint-plugin-unicorn: + specifier: 51.0.1 + version: 51.0.1(eslint@8.57.0) + prettier: + specifier: 3.1.1 + version: 3.1.1 + tsup: + specifier: 6.7.0 + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.2) + typescript: + specifier: 5.4.2 + version: 5.4.2 + backend/proxy: dependencies: '@openstapps/logger': @@ -815,6 +906,9 @@ importers: '@types/dom-view-transitions': specifier: 1.0.4 version: 1.0.4 + asn1js: + specifier: 3.0.5 + version: 3.0.5 capacitor-secure-storage-plugin: specifier: 0.9.0 version: 0.9.0(@capacitor/core@6.1.1) @@ -839,6 +933,12 @@ importers: jsonpath-plus: specifier: 10.0.6 version: 10.0.6 + libbase64: + specifier: 1.3.0 + version: 1.3.0 + libqp: + specifier: 2.1.0 + version: 2.1.0 maplibre-gl: specifier: 4.0.2 version: 4.0.2 @@ -863,9 +963,15 @@ importers: opening_hours: specifier: 3.8.0 version: 3.8.0 + pkijs: + specifier: 3.1.0 + version: 3.1.0 pmtiles: specifier: 3.0.3 version: 3.0.3 + postal-mime: + specifier: 2.2.5 + version: 2.2.5 rxjs: specifier: 7.8.1 version: 7.8.1 @@ -878,6 +984,9 @@ importers: tslib: specifier: 2.6.2 version: 2.6.2 + zod: + specifier: 3.23.8 + version: 3.23.8 zone.js: specifier: 0.14.4 version: 0.14.4 @@ -957,6 +1066,9 @@ importers: '@openstapps/tsconfig': specifier: workspace:* version: link:../../configuration/tsconfig + '@types/dompurify': + specifier: 3.0.5 + version: 3.0.5 '@types/fontkit': specifier: 2.0.7 version: 2.0.7 @@ -966,6 +1078,9 @@ importers: '@types/glob': specifier: 8.1.0 version: 8.1.0 + '@types/imapflow': + specifier: 1.0.18 + version: 1.0.18 '@types/jasmine': specifier: 5.1.4 version: 5.1.4 @@ -1002,6 +1117,9 @@ importers: cypress: specifier: 13.7.0 version: 13.7.0 + dompurify: + specifier: 3.1.6 + version: 3.1.6 eslint: specifier: 8.57.0 version: 8.57.0 @@ -1964,8 +2082,8 @@ importers: packages/logger: dependencies: '@types/nodemailer': - specifier: 6.4.7 - version: 6.4.7 + specifier: 6.4.15 + version: 6.4.15 chalk: specifier: 5.2.0 version: 5.2.0 @@ -1973,8 +2091,8 @@ importers: specifier: 3.2.7 version: 3.2.7 nodemailer: - specifier: 6.9.1 - version: 6.9.1 + specifier: 6.9.14 + version: 6.9.14 devDependencies: '@openstapps/eslint-config': specifier: workspace:* @@ -2144,7 +2262,7 @@ packages: css-loader: 6.10.0(webpack@5.90.3) esbuild-wasm: 0.20.1 fast-glob: 3.3.2 - http-proxy-middleware: 2.0.6(@types/express@4.17.21) + http-proxy-middleware: 2.0.6(@types/express@4.17.17) https-proxy-agent: 7.0.4 inquirer: 9.2.15 jsonc-parser: 3.2.1 @@ -5084,7 +5202,7 @@ packages: '@ionic/utils-subprocess': 2.1.14 '@ionic/utils-terminal': 2.3.5 commander: 9.5.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) env-paths: 2.2.1 kleur: 4.1.5 native-run: 2.0.1 @@ -5275,7 +5393,7 @@ packages: fs-extra: 7.0.1 lodash.startcase: 4.4.0 outdent: 0.5.0 - prettier: 2.8.6 + prettier: 2.8.8 resolve-from: 5.0.0 semver: 7.6.0 dev: true @@ -5443,7 +5561,7 @@ packages: '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 - prettier: 2.8.6 + prettier: 2.8.8 dev: true /@colors/colors@1.5.0: @@ -6619,7 +6737,7 @@ packages: resolution: {integrity: sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==} engines: {node: '>=16.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) tslib: 2.6.2 transitivePeerDependencies: - supports-color @@ -6642,7 +6760,7 @@ packages: engines: {node: '>=16.0.0'} dependencies: '@types/fs-extra': 8.1.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.6(supports-color@8.1.1) fs-extra: 9.1.0 tslib: 2.6.2 transitivePeerDependencies: @@ -7588,6 +7706,13 @@ packages: - chokidar dev: true + /@selderee/plugin-htmlparser2@0.11.0: + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + dev: false + /@sideway/address@4.1.4: resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} dependencies: @@ -7881,13 +8006,6 @@ packages: '@types/connect': 3.4.35 '@types/node': 18.15.3 - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 18.15.3 - dev: true - /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: @@ -7932,12 +8050,6 @@ packages: dependencies: '@types/node': 18.15.3 - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 18.15.3 - dev: true - /@types/cookie@0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} dev: true @@ -8008,6 +8120,12 @@ packages: resolution: {integrity: sha512-oDuagM6G+xPLrLU4KeCKlr1oalMF5mJqV5pDPMDVIEaa8AkUW00i6u+5P02XCjdEEUQJC9dpnxqSLsZeAciSLQ==} dev: false + /@types/dompurify@3.0.5: + resolution: {integrity: sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: true + /@types/eslint-scope@3.7.7: resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: @@ -8026,14 +8144,6 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/express-serve-static-core@4.17.35: - resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} - dependencies: - '@types/node': 18.15.3 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - '@types/send': 0.17.1 - /@types/express-serve-static-core@4.19.5: resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: @@ -8041,24 +8151,14 @@ packages: '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true /@types/express@4.17.17: resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.35 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.2 - - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 - dev: true /@types/fontkit@2.0.7: resolution: {integrity: sha512-f5BjGam6y3FrfEY2JxXwba66SYzqP+FREZh4UuBN1WDePl8EhTKjba3ZZQ2iORUufkrFt/c/UIugj0Uv/HEdRg==} @@ -8101,12 +8201,8 @@ packages: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} dev: false - /@types/http-errors@2.0.1: - resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==} - /@types/http-errors@2.0.4: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} @@ -8114,6 +8210,12 @@ packages: '@types/node': 18.15.3 dev: true + /@types/imapflow@1.0.18: + resolution: {integrity: sha512-BoWZUoMktji2YJmkRY8z0KsjvyDNpBzeC/rLVMFKcHkPxaKp+SHBFfx/kj7ltKh3l010Lc9RZqnJs8KUMNhf6Q==} + dependencies: + '@types/node': 18.15.3 + dev: true + /@types/is-ci@3.0.0: resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} dependencies: @@ -8201,6 +8303,13 @@ packages: '@types/geojson': 1.0.6 dev: false + /@types/mailparser@3.4.4: + resolution: {integrity: sha512-C6Znp2QVS25JqtuPyxj38Qh+QoFcLycdxsvcc6IZCGekhaMBzbdTXzwGzhGoYb3TfKu8IRCNV0sV1o3Od97cEQ==} + dependencies: + '@types/node': 18.15.3 + iconv-lite: 0.6.3 + dev: true + /@types/mapbox__point-geometry@0.1.4: resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} dev: false @@ -8221,15 +8330,8 @@ packages: dev: false optional: true - /@types/mime@1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true - - /@types/mime@3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -8278,11 +8380,10 @@ packages: /@types/node@18.15.3: resolution: {integrity: sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw==} - /@types/nodemailer@6.4.7: - resolution: {integrity: sha512-f5qCBGAn/f0qtRcd4SEn88c8Fp3Swct1731X4ryPKqS61/A3LmmzN8zaEz7hneJvpjFbUUgY7lru/B/7ODTazg==} + /@types/nodemailer@6.4.15: + resolution: {integrity: sha512-0EBJxawVNjPkng1zm2vopRctuWVCxk34JcIlRuXSf54habUWdz1FB7wHDqOqvDa8Mtpt0Q3LTXQkAs2LNyK5jQ==} dependencies: '@types/node': 18.15.3 - dev: false /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -8301,17 +8402,9 @@ packages: /@types/qs@6.9.15: resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: true - - /@types/qs@6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - - /@types/range-parser@1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -8330,39 +8423,24 @@ packages: /@types/semver@7.5.8: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - /@types/send@0.17.1: - resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} - dependencies: - '@types/mime': 1.3.2 - '@types/node': 18.15.3 - /@types/send@0.17.4: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 '@types/node': 18.15.3 - dev: true /@types/serve-index@1.9.4: resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} dependencies: - '@types/express': 4.17.21 + '@types/express': 4.17.17 dev: true - /@types/serve-static@1.15.2: - resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==} - dependencies: - '@types/http-errors': 2.0.1 - '@types/mime': 3.0.1 - '@types/node': 18.15.3 - /@types/serve-static@1.15.7: resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 '@types/node': 18.15.3 '@types/send': 0.17.4 - dev: true /@types/sha1@1.1.3: resolution: {integrity: sha512-bXfx/6xrPu1l6pLItGRMPX00lhnJavpj2qiQeLHflXvL2Ix97aC8FTF2/pQoqukRzcCwKyN3csZvOLzamIoaSA==} @@ -8444,6 +8522,10 @@ packages: resolution: {integrity: sha512-RBz2uRZVCXuMg93WD//aTS5B120QlT4lR/gL+935QtGsKHLS6sCtZBaKfWjIfk7ZXv/r8mtGbwjVIee6/3XTow==} dev: true + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + dev: true + /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} requiresBuild: true @@ -8886,6 +8968,13 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dev: true + /abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -8999,17 +9088,6 @@ packages: ajv: 8.12.0 dev: true - /ajv-formats@2.1.1(ajv@8.17.1): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.17.1 - dev: true - /ajv-keywords@3.5.2(ajv@6.12.6): resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -9018,12 +9096,12 @@ packages: ajv: 6.12.6 dev: true - /ajv-keywords@5.1.0(ajv@8.17.1): + /ajv-keywords@5.1.0(ajv@8.12.0): resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 dependencies: - ajv: 8.17.1 + ajv: 8.12.0 fast-deep-equal: 3.1.3 dev: true @@ -9268,6 +9346,15 @@ packages: dependencies: safer-buffer: 2.1.2 + /asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + dependencies: + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.6.2 + dev: false + /assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} @@ -9311,6 +9398,11 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + /atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + /autoprefixer@10.4.18(postcss@8.4.35): resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} engines: {node: ^10 || ^12 || >=14} @@ -9652,7 +9744,6 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: false /body-parser@1.20.2: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} @@ -9776,6 +9867,13 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /buildcheck@0.0.6: resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} engines: {node: '>=10.0.0'} @@ -9813,6 +9911,11 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + /bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + dev: false + /bytewise-core@1.2.3: resolution: {integrity: sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==} dependencies: @@ -10662,12 +10765,6 @@ packages: /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - dev: false - - /cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - dev: true /cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} @@ -11820,7 +11917,6 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true /dom7@4.0.6: resolution: {integrity: sha512-emjdpPLhpNubapLFdjNL9tP06Sr+GZkrIHEXLWvOGsytACUrkbeIdjO5g77m00BrHTznnlcNqgmn7pCN192TBA==} @@ -11830,7 +11926,6 @@ packages: /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true /domhandler@4.3.1: resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} @@ -11844,13 +11939,10 @@ packages: engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 - dev: true /dompurify@3.1.6: resolution: {integrity: sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==} requiresBuild: true - dev: false - optional: true /domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -11866,7 +11958,6 @@ packages: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} @@ -11884,7 +11975,7 @@ packages: hasBin: true dependencies: cross-spawn: 7.0.3 - dotenv: 16.3.1 + dotenv: 16.4.5 dotenv-expand: 10.0.0 minimist: 1.2.8 dev: true @@ -11894,16 +11985,15 @@ packages: engines: {node: '>=12'} dev: true - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: true - /dotenv@16.3.2: resolution: {integrity: sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==} engines: {node: '>=12'} dev: true + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: @@ -11989,6 +12079,16 @@ packages: engines: {node: '>= 0.8'} dev: true + /encoding-japanese@2.0.0: + resolution: {integrity: sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==} + engines: {node: '>=8.10.0'} + dev: false + + /encoding-japanese@2.1.0: + resolution: {integrity: sha512-58XySVxUgVlBikBTbQ8WdDxBDHIdXucB16LO5PBHR8t75D54wQrNo4cg+58+R1CtJfKnsVsvt9XlteRaR8xw1w==} + engines: {node: '>=8.10.0'} + dev: false + /encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} requiresBuild: true @@ -12580,6 +12680,11 @@ packages: through: 2.3.8 dev: true + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + /eventemitter2@6.4.7: resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} dev: true @@ -12594,7 +12699,6 @@ packages: /events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - dev: true /execa@4.1.0: resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} @@ -12706,46 +12810,6 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: false - - /express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.2 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.6.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: true /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} @@ -12850,6 +12914,11 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + dev: false + /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} dev: true @@ -13800,7 +13869,6 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - dev: true /hexoid@1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} @@ -13879,6 +13947,17 @@ packages: engines: {node: '>=8'} dev: true + /html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + dev: false + /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: @@ -13886,7 +13965,6 @@ packages: domhandler: 5.0.3 domutils: 3.1.0 entities: 4.5.0 - dev: true /http-auth-connect@1.0.6: resolution: {integrity: sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==} @@ -13955,7 +14033,7 @@ packages: - supports-color dev: true - /http-proxy-middleware@2.0.6(@types/express@4.17.21): + /http-proxy-middleware@2.0.6(@types/express@4.17.17): resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -13964,7 +14042,7 @@ packages: '@types/express': optional: true dependencies: - '@types/express': 4.17.21 + '@types/express': 4.17.17 '@types/http-proxy': 1.17.14 http-proxy: 1.18.1 is-glob: 4.0.3 @@ -14164,6 +14242,20 @@ packages: dev: true optional: true + /imapflow@1.0.162: + resolution: {integrity: sha512-pfx45n2gEIC9MeXAadcfehu5MboUzXqgQiZviKbnIxI6a/QkonOSAMXvBBkWbXQ5FXc9M5IpziJs6TP7jikBrg==} + dependencies: + encoding-japanese: 2.1.0 + iconv-lite: 0.6.3 + libbase64: 1.3.0 + libmime: 5.3.5 + libqp: 2.1.0 + mailsplit: 5.4.0 + nodemailer: 6.9.13 + pino: 9.0.0 + socks: 2.8.3 + dev: false + /immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} requiresBuild: true @@ -14355,7 +14447,6 @@ packages: dependencies: jsbn: 1.1.0 sprintf-js: 1.1.3 - dev: true /ip-regex@4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} @@ -14937,7 +15028,6 @@ packages: /jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true /jsdoc-type-pratt-parser@4.0.0: resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} @@ -15270,6 +15360,10 @@ packages: engines: {node: '> 0.8'} dev: true + /leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + dev: false + /leek@0.0.24: resolution: {integrity: sha512-6PVFIYXxlYF0o6hrAsHtGpTmi06otkwNrMcmQ0K96SeSRHPREPa9J3nJZ1frliVH7XT0XFswoJFQoXsDukzGNQ==} dependencies: @@ -15322,6 +15416,40 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 + /libbase64@1.2.1: + resolution: {integrity: sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew==} + dev: false + + /libbase64@1.3.0: + resolution: {integrity: sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==} + dev: false + + /libmime@5.2.0: + resolution: {integrity: sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw==} + dependencies: + encoding-japanese: 2.0.0 + iconv-lite: 0.6.3 + libbase64: 1.2.1 + libqp: 2.0.1 + dev: false + + /libmime@5.3.5: + resolution: {integrity: sha512-nSlR1yRZ43L3cZCiWEw7ali3jY29Hz9CQQ96Oy+sSspYnIP5N54ucOPHqooBsXzwrX1pwn13VUE05q4WmzfaLg==} + dependencies: + encoding-japanese: 2.1.0 + iconv-lite: 0.6.3 + libbase64: 1.3.0 + libqp: 2.1.0 + dev: false + + /libqp@2.0.1: + resolution: {integrity: sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==} + dev: false + + /libqp@2.1.0: + resolution: {integrity: sha512-O6O6/fsG5jiUVbvdgT7YX3xY3uIadR6wEZ7+vy9u7PKHAlSEB6blvC1o5pHBjgsi95Uo0aiBBdkyFecj6jtb7A==} + dev: false + /license-checker@25.0.1: resolution: {integrity: sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==} hasBin: true @@ -15372,6 +15500,12 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + dependencies: + uc.micro: 2.1.0 + dev: false + /listr2@3.14.0(enquirer@2.4.1): resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} engines: {node: '>=10.0.0'} @@ -15683,6 +15817,29 @@ packages: '@jridgewell/sourcemap-codec': 1.5.0 dev: true + /mailparser@3.7.1: + resolution: {integrity: sha512-RCnBhy5q8XtB3mXzxcAfT1huNqN93HTYYyL6XawlIKycfxM/rXPg9tXoZ7D46+SgCS1zxKzw+BayDQSvncSTTw==} + dependencies: + encoding-japanese: 2.1.0 + he: 1.2.0 + html-to-text: 9.0.5 + iconv-lite: 0.6.3 + libmime: 5.3.5 + linkify-it: 5.0.0 + mailsplit: 5.4.0 + nodemailer: 6.9.13 + punycode.js: 2.3.1 + tlds: 1.252.0 + dev: false + + /mailsplit@5.4.0: + resolution: {integrity: sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==} + dependencies: + libbase64: 1.2.1 + libmime: 5.2.0 + libqp: 2.0.1 + dev: false + /make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -16815,7 +16972,6 @@ packages: /node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - dev: true /node-gyp-build@4.8.1: resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} @@ -16877,8 +17033,13 @@ packages: /node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - /nodemailer@6.9.1: - resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==} + /nodemailer@6.9.13: + resolution: {integrity: sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==} + engines: {node: '>=6.0.0'} + dev: false + + /nodemailer@6.9.14: + resolution: {integrity: sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==} engines: {node: '>=6.0.0'} dev: false @@ -17182,6 +17343,11 @@ packages: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} dev: true + /on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + dev: false + /on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -17560,6 +17726,13 @@ packages: dependencies: entities: 4.5.0 + /parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 + dev: false + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -17665,6 +17838,10 @@ packages: xmldoc: 1.3.0 dev: true + /peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + dev: false + /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: true @@ -17701,6 +17878,34 @@ packages: requiresBuild: true dev: true + /pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + dev: false + + /pino-std-serializers@6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + dev: false + + /pino@9.0.0: + resolution: {integrity: sha512-uI1ThkzTShNSwvsUM6b4ND8ANzWURk9zTELMztFkmnCQeR/4wkomJ+echHee5GMWGovoSfjwdeu80DsFIt7mbA==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 6.2.2 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.8.1 + thread-stream: 2.7.0 + dev: false + /pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -17726,6 +17931,17 @@ packages: find-up: 6.3.0 dev: true + /pkijs@3.1.0: + resolution: {integrity: sha512-N+OCWUp6xrg7OkG+4DIiZUOsp3qMztjq8RGCc1hSY92dsUG8cTlAo7pEkfRGjcdyBv2c1Y9bjAzqdTJAlctuNg==} + engines: {node: '>=12.0.0'} + dependencies: + asn1js: 3.0.5 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.6.2 + dev: false + /plantuml-encoder@1.4.0: resolution: {integrity: sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==} dev: false @@ -17770,6 +17986,10 @@ packages: engines: {node: '>= 0.4'} dev: true + /postal-mime@2.2.5: + resolution: {integrity: sha512-6eTJf+B47JMdDuLF/4MBiGpTinxl0W8bA9CzrSoiQrNVRqK8Vhe59VrS6sXh2lG/lgo0bxpZFcWOF4Dv1FaSfg==} + dev: false + /postcss-load-config@3.1.4(ts-node@10.9.2): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -17958,12 +18178,6 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@2.8.6: - resolution: {integrity: sha512-mtuzdiBbHwPEgl7NxWlqOkithPyp4VN93V7VeHVWBF+ad3I5avc0RVDT4oImXQy9H/AqxA2NSQH8pSxHW6FYbQ==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true - /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -18009,10 +18223,13 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true + /process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + dev: false + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - dev: true /progress@1.1.8: resolution: {integrity: sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==} @@ -18134,6 +18351,11 @@ packages: end-of-stream: 1.4.4 once: 1.4.0 + /punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + dev: false + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true @@ -18151,6 +18373,17 @@ packages: resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} dev: true + /pvtsutils@1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + dependencies: + tslib: 2.6.2 + dev: false + + /pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + dev: false + /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -18204,6 +18437,10 @@ packages: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} dev: true + /quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} @@ -18240,7 +18477,6 @@ packages: http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: false /raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} @@ -18398,6 +18634,17 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + dev: false + /readdir-scoped-modules@1.1.0: resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} deprecated: This functionality has been moved to @npmcli/fs @@ -18415,6 +18662,11 @@ packages: picomatch: 2.3.1 dev: true + /real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + dev: false + /rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -18882,9 +19134,9 @@ packages: engines: {node: '>= 12.13.0'} dependencies: '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + ajv-keywords: 5.1.0(ajv@8.12.0) dev: true /secure-compare@3.0.1: @@ -18895,6 +19147,12 @@ packages: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} dev: false + /selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + dependencies: + parseley: 0.12.1 + dev: false + /select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} dev: true @@ -19386,7 +19644,12 @@ packages: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 - dev: true + + /sonic-boom@3.8.1: + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + dependencies: + atomic-sleep: 1.0.0 + dev: false /sort-asc@0.2.0: resolution: {integrity: sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==} @@ -19551,7 +19814,6 @@ packages: /split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - dev: true /split@0.3.1: resolution: {integrity: sha512-hCHXkQDs1HFKRsrT9EutGT1hmjS1FW1Aei8dk/CxrT7mslcMtAxbiv8LYA/AYDvjB6h9rSXgW8zAZwg20tKMTw==} @@ -19571,7 +19833,6 @@ packages: /sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true /ssh-config@1.1.6: resolution: {integrity: sha512-ZPO9rECxzs5JIQ6G/2EfL1I9ho/BVZkx9HRKn8+0af7QgwAmumQ7XBFP1ggMyPMo+/tUbmv0HFdv4qifdO/9JA==} @@ -20398,6 +20659,12 @@ packages: any-promise: 1.3.0 dev: true + /thread-stream@2.7.0: + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + dependencies: + real-require: 0.2.0 + dev: false + /throttleit@1.0.1: resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} dev: true @@ -20442,6 +20709,11 @@ packages: resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} dev: false + /tlds@1.252.0: + resolution: {integrity: sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ==} + hasBin: true + dev: false + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -21021,6 +21293,10 @@ packages: resolution: {integrity: sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==} dev: true + /uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + dev: false + /uglify-js@3.19.1: resolution: {integrity: sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==} engines: {node: '>=0.8.0'} @@ -21526,7 +21802,7 @@ packages: dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 + '@types/express': 4.17.17 '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 @@ -21538,10 +21814,10 @@ packages: compression: 1.7.4 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 - express: 4.19.2 + express: 4.18.2 graceful-fs: 4.2.11 html-entities: 2.5.2 - http-proxy-middleware: 2.0.6(@types/express@4.17.21) + http-proxy-middleware: 2.0.6(@types/express@4.17.17) ipaddr.js: 2.2.0 launch-editor: 2.8.0 open: 8.4.2 @@ -22050,6 +22326,10 @@ packages: resolution: {integrity: sha512-C1x6lfvBICFTQIMgbt3JqMOno3VOtkWat/xEakLTOurskYIHPmzJrzd1e8BnmtdDVJlGuk5D+FxyCA8MPmkIyA==} dev: true + /zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + dev: false + /zone.js@0.14.4: resolution: {integrity: sha512-NtTUvIlNELez7Q1DzKVIFZBzNb646boQMgpATo9z3Ftuu/gWvzxCW7jdjcUDoRGxRikrhVHB/zLXh1hxeJawvw==} dependencies: