Highlights
Grace-period feature flag for automatic historical sync on provider connect
A HISTORICAL_SYNC_ON_CONNECT flag has been added, which is set to True by default and ensures that historical data is synchronised when pairing devices with Open Wearables (as was the case prior to version 0.4.2). In about two months’ time, we will remove it, and from then on, syncing historical data will require pressing a separate button by default in our UI portal or by accessing separate endpoint /api/v1/providers/{provider}/users/{user_id}/sync/historical when you integrate your backend. You can switch to this functionality now by setting this variable in .env to False, which we recommend.
Open Wearables Health Scores (Sleep & Resilience)
Warning
Our scores are still in beta, so there may be bugs & the algorithms may change
We are officially introducing our own proprietary scores! This release brings the new Sleep Score and Resilience Score, calculated directly by Open Wearables. To support this, we've added background Celery tasks that automatically calculate daily sleep scores for your users. Huge thanks to @anjazych, @FBegiello and @czajkub for driving these new composite metrics.
Outgoing Webhooks
Warning
This is also beta functionality, so bugs may still occur.
By popular demand, we've added support for outgoing (external) webhooks. Your application can now listen to events and data streams from Open Wearables in real-time, greatly improving sync architecture and reducing the need for polling. Full documentation for this feature is now available here: https://openwearables.io/docs/api-reference/guides/webhooks
Dashboard & Observability Upgrades
We've made several quality-of-life improvements for developers. You'll find a new SDK logs endpoint to help with sync observability, and a handy "seed data generator" built straight into the dashboard settings to speed up your testing and development workflows.
What's Changed
Integrations
- feat: Save health scores from Garmin and Whoop by @czajkub in #818
- fix: resolve source name correctly for workouts/sleep by @czajkub in #815
API & Backend
- feat: introduce Sleep Score by Open Wearables by @FBegiello in #787
- feat: introduce Resilience Score by Open Wearables by @FBegiello in #803
- feat: add celery tasks for calculating daily sleep scores by @czajkub in #826
- feat(backend): outgoing (external) webhooks by @KaliszS in #821
- feat: add SDK logs endpoint for sync observability by @bartmichalak in #819
- feat(backend): grace-period feature flag for automatic historical sync by @KaliszS in #850
Frontend & Dashboard
- feat: add Health Scores tab to user detail page by @bartmichalak in #828
- feat: add seed data generator to dashboard settings by @bartmichalak in #806
- fix: make save button a floating bar in provider settings by @bartmichalak in #833
- fix: hide sync buttons for SDK-based providers by @bartmichalak in #825
- fix(frontend): set NODE_ENV=production in Docker build by @bartmichalak in #820
Docs & SEO
- feat(docs): outgoing webhooks by @KaliszS in #846
- feat(seo): trigger LP sitemap sync on docs change by @piotrpasierbek in #823
- docs: add SEO frontmatter to OW documentation pages by @blackbudda in #822
- fix(docs): add missing sidebarTitle to docs pages with SEO titles by @bartmichalak in #832
- docs: hide vendor workout endpoints from public docs by @bartmichalak in #834
- docs: rename Authorize Provider to Get Provider Authorization URL by @bartmichalak in #836
- docs: fix localhost links in API reference by @bartmichalak in #837
- docs: clarify that icon_url is a relative URL by @bartmichalak in #838
Chores
- chore: add prettier format check to pre-commit hooks by @bartmichalak in #829
- chore: remove stale github workflow by @bartmichalak in #848
- chore: regenerate routeTree.gen.ts with current router plugin by @bartmichalak in #849
New Contributors
- @piotrpasierbek made their first contribution in #823
- @blackbudda made their first contribution in #822
Full Changelog: 0.4.2...0.4.3