From cc3aae9794ce6363b5fd85658328cbc9f171322a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sat, 16 May 2026 20:42:31 +0200 Subject: [PATCH] docs(changelog): note the Apple Health export.zip import for v1.4.34 User-visible Added line for the synchronous-upload + asynchronous- ingest path: POST /api/import/apple-health-export, polling at GET /api/import/apple-health-export/{jobId}/status, admin variant at POST /api/admin/import-apple-health-export. --- CHANGELOG.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 457e0d4f0..aff900daa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Changelog +## [1.4.34] — unreleased + +### Added + +- **Apple Health `export.zip` import.** New endpoint + `POST /api/import/apple-health-export` (synchronous multipart + upload, asynchronous ingest via a dedicated pg-boss + `apple-health-import` worker, per-`MeasurementType` ingestion + stats). Streams the upload straight to disk so a multi-gigabyte + export never lands in V8 heap, hashes the bytes inline for + content-based idempotency, and unpacks `apple_health_export/export.xml` + with a hand-rolled ZIP central-directory walker that handles Zip64 + for archives past the 4 GB barrier. The parser folds every + ``, ``, ``, and `` + into the existing `Measurement` and `Workout` row shapes — spot + rows keyed by `HKMetadataKeyExternalUUID` (or a deterministic + `sample:` fallback), cumulative HK types collapsed into + one `stats::` row per user-local day to match + the iOS daily-aggregation convention. Live per-phase progress + surfaces through `GET /api/import/apple-health-export/{jobId}/status`. + An admin variant at `POST /api/admin/import-apple-health-export` + imports on behalf of a target user (cookie-only `requireAdmin()` + gate; Bearer tokens never elevate). + ## [1.4.33] — 2026-05-17 — Polish and reliability Quality-leap release between two HealthKit milestones. The headline is