mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 05:12:14 +00:00
chore(release): v1.38.21 — channel tests say why they failed, and Gotify gets its format
This commit is contained in:
1 parent
669058d37c
commit
8c8e03a6eb
4 files changed
+93
-3
No files matched your search
@@ -1,5 +1,95 @@
|
||||
# Changelog
|
||||
|
||||
## [1.38.21] — 2026-09-13
|
||||
|
||||
A channel test says why it failed, a Gotify server gets the message it
|
||||
expects, and Settings is back inside a profile you look after.
|
||||
|
||||
### Added
|
||||
|
||||
- **The webhook can send in Gotify's format.** Gotify expects the priority
|
||||
as a number and refused HealthLog's messages, which carry it as a word.
|
||||
Choose Gotify under Payload format on the webhook card and the message
|
||||
arrives the way Gotify wants it: routine events with sound, medication
|
||||
reminders as a banner on Gotify's Android app, urgent events at the top
|
||||
of the scale. Existing webhooks keep sending exactly what they sent
|
||||
before. The notifications guide now shows both message formats and how
|
||||
to set up Gotify, with the URL ending in `/message` and the token in the
|
||||
`X-Gotify-Key` header. Thanks to @sreeramachandramurthy for #947.
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Pressing Test on the webhook, ntfy or email card now tells you what
|
||||
went wrong.** When the other end refused the message, the card said
|
||||
"Test failed" and nothing else, although the server knew the answer; one
|
||||
self-hoster had to dig through the container log to learn that their
|
||||
relay had answered 400. The card now names the cause, such as a refused
|
||||
token, a wrong address, a relay that rejected the message or a mail
|
||||
server that did not answer in time, with the status code. For webhook
|
||||
and ntfy it also quotes the first part of the relay's own error message,
|
||||
unless it looks like a token or contains one of your saved secrets. Real
|
||||
deliveries were never affected; only the test button hid the reason.
|
||||
The notification test in the admin area shows the same cause for each
|
||||
channel, and a relay refusing a test no longer counts as a server error
|
||||
in the operator's log. Thanks to @sreeramachandramurthy for #947.
|
||||
- **The hint under the webhook address no longer says it must be public.**
|
||||
A target on your own network works when the server operator lists it in
|
||||
`NOTIFICATION_PRIVATE_ORIGINS`, which has been possible since 1.38.17.
|
||||
|
||||
- **Settings is back in the menu while you are inside a profile you look
|
||||
after.** Switching into a managed profile removed Settings from the menu
|
||||
entirely, on the desktop and on the phone, even though the profile's own
|
||||
settings page existed and worked: which modules it tracks, its targets and
|
||||
where its notifications go. The only way there was typing the address.
|
||||
The menu now offers Settings inside that profile and opens the profile's
|
||||
own page. If someone gave you manage access to their own account, Settings
|
||||
opens their medical history, the one settings page that access covers.
|
||||
Notifications stays out of the menu while you are inside someone else's
|
||||
record. Thanks to @sreeramachandramurthy for asking in #939.
|
||||
- **The note on a manage invitation says when a second factor is needed.**
|
||||
It said offering manage access always asks for your second factor. It
|
||||
asks only if you have one set up; that it works only in a browser is true
|
||||
either way.
|
||||
|
||||
- **A different app on the address where HealthLog used to run now loads
|
||||
normally.** If you stopped HealthLog and started something else on the
|
||||
same address and port, HealthLog's offline worker in your browser kept
|
||||
answering: the other app got HealthLog's cached files and your changes to
|
||||
it never showed up, until you removed the worker by hand in the browser's
|
||||
developer tools. The worker now checks whether the page still comes from
|
||||
HealthLog, and when it does not, it clears its cache and removes itself.
|
||||
When HealthLog is only down, or a reverse proxy in front of it answers
|
||||
with an error, nothing changes and the offline page still appears. If
|
||||
you had push notifications switched on in that browser, the worker stays
|
||||
registered and keeps them, and only stops serving its cached files. Thanks
|
||||
to @el-abcd for describing this in #847.
|
||||
- **If you ship logs to Loki, a Loki on your own network works now, and a
|
||||
failed push says so.** Only public addresses were allowed, so a Loki on
|
||||
the same Docker network or on your LAN was refused without a word, and
|
||||
events were dropped. `LOKI_ENDPOINT` comes from your server environment,
|
||||
so the address you set there is now trusted as it is; link-local and
|
||||
cloud metadata addresses stay refused. It also takes either the base URL
|
||||
or the full push URL ending in `/loki/api/v1/push`; pasting the full URL
|
||||
used to break shipping just as quietly. When a push fails, the container
|
||||
log gets one line with the Loki address, the reason and how many events
|
||||
were lost, at most every five minutes per reason, and never the password.
|
||||
Thanks to @sreeramachandramurthy for the empty Grafana in #947.
|
||||
|
||||
### Changed
|
||||
|
||||
- **If you write against the API, a failed channel test answers 502 with
|
||||
the cause.** `POST /api/settings/webhook/test`, `/ntfy/test` and
|
||||
`/email/test` used to answer 500 for every refusal from the other end.
|
||||
They answer 502 now, with `meta.errorCode` (one of
|
||||
`credentials_rejected`, `endpoint_not_found`, `rate_limited`,
|
||||
`upstream_error`, `upstream_rejected`, `redirected`, `timeout`,
|
||||
`connection_failed`), `meta.upstreamStatus`, and for webhook and ntfy
|
||||
`meta.upstreamBody` with at most 200 characters of the relay's reply;
|
||||
email carries `meta.smtpCode` instead. The 422 for a private address
|
||||
that is not allowed is unchanged, and 500 is left for failures the
|
||||
server cannot name. `GET /api/settings/webhook` gains `format`
|
||||
(`generic` or `gotify`); a `PUT` without it keeps the stored value.
|
||||
|
||||
## [1.38.20] — 2026-09-11
|
||||
|
||||
Signing in no longer tells anybody which addresses have an account here.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: HealthLog API
|
||||
version: 1.38.20
|
||||
version: 1.38.21
|
||||
description: >-
|
||||
Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest.
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "healthlog",
|
||||
"version": "1.38.20",
|
||||
"version": "1.38.21",
|
||||
"description": "Self-hosted personal-health-tracking PWA with Withings integration, AI insights, and doctor-report PDF export.",
|
||||
"license": "PolyForm-Noncommercial-1.0.0",
|
||||
"homepage": "https://healthlog.dev",
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ try {
|
||||
// v1.4.38.4 → v1.4.42. Do not hand-edit; bump `package.json` and rebuild.
|
||||
const CACHE_VERSION =
|
||||
(typeof self !== "undefined" && self.__APP_VERSION__) ||
|
||||
/* @sw-version-fallback */ "v1.38.20";
|
||||
/* @sw-version-fallback */ "v1.38.21";
|
||||
const STATIC_CACHE = `healthlog-static-${CACHE_VERSION}`;
|
||||
const PAGE_CACHE = `healthlog-pages-${CACHE_VERSION}`;
|
||||
// v1.18.6 — read-only data cache for a curated allowlist of safe GET `/api/*`
|
||||
|
||||
Reference in new issue
Block a user