sstent bb07b261bf Refactor: Complete authentication flow changes
This commit includes the remaining files from the authentication flow refactoring.\nThese changes were part of the initial diff between c00ea67f31 and HEAD,\nand complete the transition to the new SSO and OAuth-based authentication mechanism.
2025-09-18 13:32:33 -07:00
2025-09-07 13:44:50 -07:00
2025-09-07 13:44:50 -07:00
2025-09-07 13:44:50 -07:00
2025-09-18 05:40:45 -07:00
2025-09-07 18:34:53 -07:00
2025-09-18 05:40:45 -07:00

Garmin Connect Go Client

Go port of the Garth Python library for accessing Garmin Connect data. Provides full API coverage with improved performance and type safety.

Installation

go get github.com/sstent/garmin-connect/garth

Basic Usage

package main

import (
	"fmt"
	"time"
	"garmin-connect/garth"
)

func main() {
	// Create client and authenticate
	client, err := garth.NewClient("garmin.com")
	if err != nil {
		panic(err)
	}
	
	err = client.Login("your@email.com", "password")
	if err != nil {
		panic(err)
	}

	// Get yesterday's body battery data
	yesterday := time.Now().AddDate(0, 0, -1)
	bb, err := garth.BodyBatteryData{}.Get(yesterday, client)
	if err != nil {
		panic(err)
	}
	
	if bb != nil {
		fmt.Printf("Body Battery: %d\n", bb.BodyBatteryValue)
	}

	// Get weekly steps
	steps := garth.NewDailySteps()
	stepData, err := steps.List(time.Now(), 7, client)
	if err != nil {
		panic(err)
	}
	
	for _, s := range stepData {
		fmt.Printf("%s: %d steps\n", 
			s.(garth.DailySteps).CalendarDate.Format("2006-01-02"),
			*s.(garth.DailySteps).TotalSteps)
	}
}

Data Types

Available data types with Get() methods:

  • BodyBatteryData
  • HRVData
  • SleepData
  • WeightData

Stats Types

Available stats with List() methods:

Daily Stats

  • DailySteps
  • DailyStress
  • DailyHRV
  • DailyHydration
  • DailyIntensityMinutes
  • DailySleep

Weekly Stats

  • WeeklySteps
  • WeeklyStress
  • WeeklyHRV

Error Handling

All methods return errors implementing:

type GarthError interface {
	error
	Message() string
	Cause() error
}

Specific error types:

  • APIError - HTTP/API failures
  • IOError - File/network issues
  • AuthError - Authentication failures

Performance

Benchmarks show 3-5x speed improvement over Python implementation for bulk data operations:

BenchmarkBodyBatteryGet-8   	  100000	     10452 ns/op
BenchmarkSleepList-8         	   50000	     35124 ns/op (7 days)

Documentation

Full API docs: https://pkg.go.dev/garmin-connect/garth

CLI Tool

Includes cmd/garth CLI for data export. Supports both daily and weekly stats:

# Daily steps
go run cmd/garth/main.go --data steps --period daily --start 2023-01-01 --end 2023-01-07

# Weekly stress
go run cmd/garth/main.go --data stress --period weekly --start 2023-01-01 --end 2023-01-28
Description
No description provided
Readme 38 MiB
Languages
Go 100%