Merge pull request 'Versie 1.0.0 in package.json en README-badge, no-store op de API' (#5) from update-1.0.0 into main
Reviewed-on: http://10.0.3.108:3000/Vibe/VibeFinance/pulls/5
This commit was merged in pull request #5.
This commit is contained in:
@@ -2,6 +2,19 @@
|
||||
|
||||
## [Niet vrijgegeven]
|
||||
|
||||
### Gewijzigd
|
||||
- Het label bij een beschikbare update in "Over VibeFinance" is "Nieuwe versie"
|
||||
(was "Nieuwste versie" in 1.0.0)
|
||||
|
||||
### Opgelost
|
||||
- API-antwoorden sturen nu `Cache-Control: no-store`. Ze hadden alleen een
|
||||
`ETag` en geen cache-beleid, waardoor de browser zelf mocht bepalen hoe lang
|
||||
hij ze hergebruikte — per browser en profiel verschillend. Gevolg: de
|
||||
update-melding bleef in Brave op een oud antwoord hangen (nog van vóór het
|
||||
werkende token) terwijl een verse Edge het goede kreeg
|
||||
|
||||
## [1.0.0] - 2026-09-09
|
||||
|
||||
### Gewijzigd
|
||||
- `BEHEER.md` heeft één centrale `## Tokens`-sectie met het tweetoken-model
|
||||
(werkstation `write:*`, Docker-host `read:*`) plus de betekenis van een 401,
|
||||
|
||||
@@ -10,7 +10,7 @@ Eigen vermogen · Schulden · Voortgang · Gebruikersbeheer
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
<img src="docs/screenshot-dashboard.png" alt="VibeFinance dashboard" width="820">
|
||||
|
||||
@@ -56,6 +56,17 @@ if (config.NODE_ENV !== "test") {
|
||||
app.use(pinoHttp({ logger }));
|
||||
}
|
||||
|
||||
// ── Geen browsercache op de API ───────────────────────────────────────────────
|
||||
// Zonder Cache-Control mag de browser zelf bepalen hoe lang hij een antwoord
|
||||
// hergebruikt (heuristische caching). Dat verschilt per browser en profiel: de
|
||||
// update-melding bleef in de ene browser op een oud antwoord hangen terwijl een
|
||||
// verse browser het goede kreeg. API-antwoorden zijn per gebruiker en per moment,
|
||||
// dus die horen nooit uit de cache te komen.
|
||||
app.use("/api", (_req, res, next) => {
|
||||
res.setHeader("Cache-Control", "no-store");
|
||||
next();
|
||||
});
|
||||
|
||||
// ── API-routes ────────────────────────────────────────────────────────────────
|
||||
app.use("/api/health", healthRouter);
|
||||
app.use("/api/update-check", updateRouter);
|
||||
|
||||
@@ -68,6 +68,15 @@ describe("API", () => {
|
||||
assert.equal(body.latest, null);
|
||||
assert.equal(body.disabled, true);
|
||||
});
|
||||
|
||||
// Zonder expliciete header bepaalt de browser zelf hoe lang hij een
|
||||
// API-antwoord hergebruikt, en dat verschilt per browser.
|
||||
it("API-antwoorden komen nooit uit de browsercache", async () => {
|
||||
for (const pad of ["/api/health", "/api/update-check", "/api/bestaat-niet"]) {
|
||||
const res = await fetch(`${basis}${pad}`);
|
||||
assert.match(res.headers.get("cache-control") ?? "", /no-store/, pad);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("Frontend serveren", () => {
|
||||
|
||||
@@ -165,7 +165,7 @@ function OverPopup({ onClose, nieuweVersie, T }) {
|
||||
|
||||
{nieuweVersie && (
|
||||
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 10 }}>
|
||||
<span style={{ fontSize: 13, color: T.muted }}>Nieuwste versie</span>
|
||||
<span style={{ fontSize: 13, color: T.muted }}>Nieuwe versie</span>
|
||||
<span style={{ fontSize: 12, fontWeight: 700, color: "#f97316", background: "rgba(249,115,22,0.12)", borderRadius: 6, padding: "3px 10px" }}>
|
||||
v{nieuweVersie.latest}
|
||||
</span>
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "vibefinance",
|
||||
"version": "0.1.9",
|
||||
"version": "1.0.0",
|
||||
"description": "VibeFinance — persoonlijk vermogensbeheer",
|
||||
"private": true,
|
||||
"repository": "https://vibehoogie.duckdns.org/vibe/VibeFinance",
|
||||
|
||||
Reference in New Issue
Block a user