Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
d00023a
fix: Update Ultrahuman API endpoints and scope based on official docu…
gudvin-byte Jan 14, 2026
ff809db
fix: Complete Ultrahuman API integration based on official documentation
gudvin-byte Jan 14, 2026
374e656
feat: Complete Ultrahuman provider implementation and integration
gudvin-byte Jan 14, 2026
9114362
feat: Update OAuth, factory, config for Ultrahuman provider
gudvin-byte Jan 14, 2026
13de409
fix(ultrahuman): correct API URLs and implementation bugs
gudvin-byte Jan 15, 2026
c750b78
fix(ultrahuman): update API endpoints and response parsing logic
gudvin-byte Jan 15, 2026
4406dff
test(ultrahuman): add verification script for end-to-end integration …
gudvin-byte Jan 15, 2026
64cb08d
Fix Ultrahuman provider config, data saving, and error handling
gudvin-byte Jan 15, 2026
d486be7
fix: correct Ultrahuman sleep stages and activity data parsing
gudvin-byte Jan 15, 2026
8ffe575
test: complete Ultrahuman integration test suite
gudvin-byte Jan 17, 2026
9c52b6e
fix(ultrahuman): correct line length and test fixture bugs
gudvin-byte Jan 17, 2026
09d2982
fix code quality
gudvin-byte Jan 17, 2026
9b4eded
fix: correct test_normalize_activity_samples input format
gudvin-byte Jan 18, 2026
c5cc14f
fix(ultrahuman): improve error handling and test reliability
gudvin-byte Jan 18, 2026
07f18a9
fix(ultrahuman): correct date range in test_sync_respects_date_range
gudvin-byte Jan 18, 2026
ca0f0e2
Replaced svg icon
gudvin-byte Jan 18, 2026
0665c2f
reverted modification of AGENTS.md and relocated ngrok documentation
gudvin-byte Jan 18, 2026
d16aa45
Delete ngrok_setup.md
gudvin-byte Jan 18, 2026
71ee810
Merge remote-tracking branch 'upstream/main' into feat/add-ultrahuman…
gudvin-byte Jan 24, 2026
bfe3fc2
Merge branch 'main' into feat/add-ultrahuman-provider
KaliszS Feb 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions backend/app/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ class Settings(BaseSettings):
whoop_redirect_uri: str = "http://localhost:8000/api/v1/oauth/whoop/callback"
whoop_default_scope: str = "offline read:cycles read:sleep read:recovery read:workout"

# ULTRAHUMAN OAUTH SETTINGS
ultrahuman_client_id: str | None = None
ultrahuman_client_secret: SecretStr | None = None
ultrahuman_redirect_uri: str = "http://localhost:8000/api/v1/oauth/ultrahuman/callback"
ultrahuman_default_scope: str = "ring_data cgm_data profile"
# STRAVA OAUTH SETTINGS
strava_client_id: str | None = None
strava_client_secret: SecretStr | None = None
Expand Down
1 change: 1 addition & 0 deletions backend/app/schemas/oauth.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class ProviderName(str, Enum):
GARMIN = "garmin"
POLAR = "polar"
SUUNTO = "suunto"
ULTRAHUMAN = "ultrahuman"
WHOOP = "whoop"
STRAVA = "strava"
OURA = "oura"
Expand Down
3 changes: 3 additions & 0 deletions backend/app/services/providers/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from app.services.providers.samsung.strategy import SamsungStrategy
from app.services.providers.strava.strategy import StravaStrategy
from app.services.providers.suunto.strategy import SuuntoStrategy
from app.services.providers.ultrahuman.strategy import UltrahumanStrategy
from app.services.providers.whoop.strategy import WhoopStrategy


Expand All @@ -26,6 +27,8 @@ def get_provider(self, provider_name: str) -> BaseProviderStrategy:
return PolarStrategy()
case ProviderName.WHOOP.value:
return WhoopStrategy()
case "ultrahuman":
return UltrahumanStrategy()
case ProviderName.STRAVA.value:
return StravaStrategy()
case _:
Expand Down
7 changes: 7 additions & 0 deletions backend/app/services/providers/ultrahuman/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"""Ultrahuman Ring Air provider implementation."""

from app.services.providers.ultrahuman.data_247 import Ultrahuman247Data
from app.services.providers.ultrahuman.oauth import UltrahumanOAuth
from app.services.providers.ultrahuman.strategy import UltrahumanStrategy

__all__ = ["UltrahumanStrategy", "UltrahumanOAuth", "Ultrahuman247Data"]
Loading
Loading