You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: PRODUCTION.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -156,6 +156,17 @@ No CLI step needed. Enter your email, password, and API key directly in the Sett
156
156
157
157
> Re-authenticate any time tokens expire by clicking the button again.
158
158
159
+
#### Strava write-only enforcement (API TOS)
160
+
161
+
Strava's API terms require that Strava data is never used as a source of truth for other providers, and that all Strava data is deleted immediately when a user disconnects. TraceKit enforces this by setting `"write_only": True` on the Strava provider entry in `tracekit/appconfig.py`. The sync engine reads this flag and:
162
+
163
+
- never selects Strava as the authoritative provider when resolving name/equipment conflicts
164
+
- never propagates Strava-only activities outward to other providers
165
+
- excludes Strava activity records older than 7 days from correlation (per API TOS data freshness requirements)
166
+
- deletes all Strava activity data immediately on user disconnect (both via the Settings UI "Disconnect Strava" button and via the Strava deauthorization webhook)
167
+
168
+
If `"write_only"` is removed or set to `False` for the Strava provider in `tracekit/appconfig.py`, Strava will start behaving like any other provider (source-of-truth capable). Do not do this — it would violate the Strava API TOS.
169
+
159
170
### Garmin
160
171
161
172
Garmin uses garth for OAuth. Tokens are stored in the database and valid for roughly a year.
disconnectBtn.title='Disconnecting will immediately and permanently delete all Strava activity data from TraceKit (required by Strava API terms).';
241
+
disconnectBtn.addEventListener('click',async()=>{
242
+
if(!confirm('Disconnecting Strava will immediately and permanently delete ALL Strava activity data from TraceKit. This is required by Strava\'s API terms and cannot be undone.\n\nContinue?'))return;
0 commit comments