From e3cfff10f216eb0b175701c281881e2317193e38 Mon Sep 17 00:00:00 2001 From: Matt Hill <9935159+MattDHill@users.noreply.github.com> Date: Mon, 19 Oct 2026 13:39:36 -0600 Subject: [PATCH 1/2] =?UTF-8?q?chore:=20bump=20start-sdk=20to=203.1.0;=201?= =?UTF-8?q?.163.0:1=20=E2=86=92=201.163.0:2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Picks up the Forward Email SMTP provider preset. Co-Authored-By: Claude Opus 5.5 --- package-lock.json | 39 ++++++++++--------------------------- package.json | 2 +- startos/versions/current.ts | 12 ++++++------ 3 files changed, 17 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index e933864..e67ec58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "synapse-startos", "dependencies": { - "@start9labs/start-sdk": "3.0.6" + "@start9labs/start-sdk": "3.1.0" } }, "node_modules/@eslint-community/eslint-utils": { @@ -250,9 +250,9 @@ "license": "MIT" }, "node_modules/@start9labs/start-sdk": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@start9labs/start-sdk/-/start-sdk-3.0.6.tgz", - "integrity": "sha512-gVLdb5d488yNDZv7e0/FReJfc3klHbwkyleOwnegSt61fCM/AFI9VZmFPagLcbysjGOMLWlfwWUaDI51VKuFLA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@start9labs/start-sdk/-/start-sdk-3.1.0.tgz", + "integrity": "sha512-JyTlm5S+eYg+hyh78N9buq9I091Wcp0Thg7Tm0CCfKJhCCz8KGVTa9OyS57YY/bsBNeEME4zTCQ5bybEpwyV6A==", "bundleDependencies": [ "@start9labs/start-core" ], @@ -275,8 +275,7 @@ "typescript": "^6.0.3", "typescript-eslint": "^8.61.0", "yaml": "^2.8.3", - "zod": "4.4.3", - "zod-deep-partial": "^1.2.0" + "zod": "4.6.7" } }, "node_modules/@start9labs/start-sdk/node_modules/@start9labs/start-core": { @@ -290,8 +289,7 @@ "isomorphic-fetch": "^3.0.0", "mime": "^4.1.0", "yaml": "^2.8.3", - "zod": "4.4.3", - "zod-deep-partial": "^1.4.4" + "zod": "4.6.7" } }, "node_modules/@start9labs/start-sdk/node_modules/@start9labs/start-core/node_modules/@iarna/toml": { @@ -421,21 +419,13 @@ } }, "node_modules/@start9labs/start-sdk/node_modules/@start9labs/start-core/node_modules/zod": { - "version": "4.4.3", + "version": "4.6.7", "inBundle": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@start9labs/start-sdk/node_modules/@start9labs/start-core/node_modules/zod-deep-partial": { - "version": "1.4.4", - "inBundle": true, - "license": "MIT", - "peerDependencies": { - "zod": "^4.1.13" - } - }, "node_modules/@types/estree": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", @@ -1866,22 +1856,13 @@ } }, "node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.7.tgz", + "integrity": "sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } - }, - "node_modules/zod-deep-partial": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/zod-deep-partial/-/zod-deep-partial-1.4.4.tgz", - "integrity": "sha512-aWkPl7hVStgE01WzbbSxCgX4O+sSpgt8JOjvFUtMTF75VgL6MhWQbiZi+AWGN85SfSTtI9gsOtL1vInoqfDVaA==", - "license": "MIT", - "peerDependencies": { - "zod": "^4.1.13" - } } } } diff --git a/package.json b/package.json index 4022f1c..be5562a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "synapse-startos", "dependencies": { - "@start9labs/start-sdk": "3.0.6" + "@start9labs/start-sdk": "3.1.0" }, "overrides": { "@start9labs/start-sdk": "$@start9labs/start-sdk" diff --git a/startos/versions/current.ts b/startos/versions/current.ts index b90425a..831a1ea 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -1,13 +1,13 @@ import { VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ - version: '1.163.0:1', + version: '1.163.0:2', releaseNotes: { - en_US: 'Performance improvement', - es_ES: 'Mejora de rendimiento', - de_DE: 'Leistungsverbesserung', - pl_PL: 'Poprawa wydajności', - fr_FR: 'Amélioration des performances', + en_US: `Adds Forward Email to the SMTP provider presets.`, + es_ES: `Añade Forward Email a los proveedores SMTP predefinidos.`, + de_DE: `Fügt Forward Email zu den vordefinierten SMTP-Anbietern hinzu.`, + pl_PL: `Dodaje Forward Email do predefiniowanych dostawców SMTP.`, + fr_FR: `Ajoute Forward Email aux fournisseurs SMTP prédéfinis.`, }, migrations: { up: async ({ effects }) => {}, From 7110b624f7795a2a923e3f4c6594800327f62d92 Mon Sep 17 00:00:00 2001 From: Matt Hill <9935159+MattDHill@users.noreply.github.com> Date: Mon, 19 Oct 2026 14:23:16 -0600 Subject: [PATCH 2/2] fix: honor the SMTP security mode with email.force_tls Synapse connects in plaintext and upgrades with STARTTLS unless force_tls is set, so a TLS-mode SMTP server (port 465) never received a TLS handshake. Map the selected security onto force_tls for custom and system SMTP. Co-Authored-By: Claude Opus 5.5 --- README.md | 2 +- instructions.md | 2 +- startos/fileModels/homeserver.yml.ts | 1 + startos/main.ts | 1 + startos/versions/current.ts | 10 +++++----- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 59a147d..9f81ca4 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ Seven forms over `homeserver.yaml`, all available whether or not the service is - **Registration** governs whether new accounts can be created, which rooms they land in, and whether guests may look around. - **Rate Limits** tunes Synapse's throttles, including `rc_profile` for profile lookups. Normal and Relaxed leave that limit to Synapse; Custom reads and writes its sustained rate and burst. Its Custom preset also carries `remote_media_download_per_second` and its burst — bytes rather than counts, and applied per requester, so they throttle one person's media fetching without touching anyone else's. - **Discoverability** controls how visible the server and its rooms are to the wider network. In Custom, **Only Share Profiles Within Shared Rooms** requires **Require Sign-in to View Profiles**; the action rejects the invalid combination before writing configuration. -- **Email/SMTP** takes StartOS's system SMTP, your own server, or disabled. Email notifications and transport security are enforced on where the rest of that block is yours. +- **Email/SMTP** takes StartOS's system SMTP, your own server, or disabled. Email notifications and transport security are enforced on where the rest of that block is yours. The selected connection security sets `email.force_tls`: TLS uses implicit TLS; STARTTLS upgrades the SMTP connection. ### App Services — Register Appservice, List Appservices, Delete Appservice diff --git a/instructions.md b/instructions.md index 9ed5cdf..590894a 100644 --- a/instructions.md +++ b/instructions.md @@ -107,7 +107,7 @@ The **Admin Dashboard** interface opens Ketesa. Log in with the admin credential - **Import Existing Homeserver** — adopt a homeserver you run elsewhere. See above; only available before the first start. - **Rate Limits** — how fast people may send messages, look up profiles, join rooms, invite others and sign in. Pick Normal or Relaxed; pick Custom if you want to set any of them yourself. - **Discoverability** — what someone without an account can find out about your server. Pick Private, Normal or Public; pick Custom to decide each setting. -- **Email/SMTP** — email notifications, using either your StartOS system SMTP settings or custom credentials. +- **Email/SMTP** — email notifications, using either your StartOS system SMTP settings or custom credentials. Match **Connection Security** to your provider: **TLS** uses port 465; **STARTTLS** upgrades the connection on the selected port. - **Get Access Token** — return a Matrix access token for a given username and password; useful for programmatic access. The service must be running. - **Force-Purge Room** — delete a room and its history from your server when deleting it from the Admin Dashboard fails. It removes everyone here from the room, even members Synapse cannot remove the normal way, and it cannot be undone. Sign in with an admin account; the service must be running. - **Register / List / Delete Appservice** — manage Matrix bridges (appservices). Create the user accounts a bridge needs from the **Users** tab of the Admin Dashboard. Leave **Appservice URL** empty for a bot that only sends messages and never needs to hear from the homeserver. diff --git a/startos/fileModels/homeserver.yml.ts b/startos/fileModels/homeserver.yml.ts index 65dbbd4..e6f2131 100644 --- a/startos/fileModels/homeserver.yml.ts +++ b/startos/fileModels/homeserver.yml.ts @@ -235,6 +235,7 @@ const shape = z.looseObject({ enable_notifs: z.literal(true), require_transport_security: z.literal(true), // set by SMTP config + force_tls: z.boolean().catch(false), notif_from: z.string(), smtp_host: z.string(), smtp_pass: z.string().optional(), diff --git a/startos/main.ts b/startos/main.ts index 300a7e8..e61dde1 100644 --- a/startos/main.ts +++ b/startos/main.ts @@ -139,6 +139,7 @@ export const main = sdk.setupMain(async ({ effects }) => { email: smtpCredentials && { enable_notifs: true, require_transport_security: true, + force_tls: smtpCredentials.security === 'tls', notif_from: smtpCredentials.from, smtp_host: smtpCredentials.host, smtp_port: smtpCredentials.port, diff --git a/startos/versions/current.ts b/startos/versions/current.ts index 831a1ea..07a3521 100644 --- a/startos/versions/current.ts +++ b/startos/versions/current.ts @@ -3,11 +3,11 @@ import { VersionInfo } from '@start9labs/start-sdk' export const current = VersionInfo.of({ version: '1.163.0:2', releaseNotes: { - en_US: `Adds Forward Email to the SMTP provider presets.`, - es_ES: `Añade Forward Email a los proveedores SMTP predefinidos.`, - de_DE: `Fügt Forward Email zu den vordefinierten SMTP-Anbietern hinzu.`, - pl_PL: `Dodaje Forward Email do predefiniowanych dostawców SMTP.`, - fr_FR: `Ajoute Forward Email aux fournisseurs SMTP prédéfinis.`, + en_US: `Fixes email notifications not sending through SMTP servers set to TLS security. Adds Forward Email to the SMTP provider presets.`, + es_ES: `Corrige las notificaciones por correo que no se enviaban a través de servidores SMTP con seguridad TLS. Añade Forward Email a los proveedores SMTP predefinidos.`, + de_DE: `Behebt, dass E-Mail-Benachrichtigungen über SMTP-Server mit TLS-Sicherheit nicht versendet wurden. Fügt Forward Email zu den vordefinierten SMTP-Anbietern hinzu.`, + pl_PL: `Naprawia niewysyłanie powiadomień e-mail przez serwery SMTP z zabezpieczeniem TLS. Dodaje Forward Email do predefiniowanych dostawców SMTP.`, + fr_FR: `Corrige les notifications par e-mail qui n'étaient pas envoyées via les serveurs SMTP configurés en sécurité TLS. Ajoute Forward Email aux fournisseurs SMTP prédéfinis.`, }, migrations: { up: async ({ effects }) => {},