Files
wanderer/plugins/strava/plugin.json
slothful-vassal 485ec53f6d feat: add plugin system (#1034)
* feat: add plugin system

* fix db docker build

* fix hammerhead readme, add strava subscription news to docs

* fixes and sdk improvements

* fix: reduce Meilisearch load, debounce federation sync (#1012)

* optimize meili trail index

* several fixes

---------

Co-authored-by: Flomp <Flomp@users.noreply.github.com>

* Bump svelte from 5.55.5 to 5.56.0 in /docs (#1032)

Bumps [svelte](https://github.com/sveltejs/svelte/tree/HEAD/packages/svelte) from 5.55.5 to 5.56.0.
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/main/packages/svelte/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/commits/svelte@5.56.0/packages/svelte)

---
updated-dependencies:
- dependency-name: svelte
  dependency-version: 5.56.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Flomp <Flomp@users.noreply.github.com>

* Release v0.19.2 (#1035)

* chore: release v0.19.2

* add changelog

---------

Co-authored-by: Flomp <26000991+Flomp@users.noreply.github.com>
Co-authored-by: Christian Beutel <>

* speed up plugin sync and several small fixes

* concepts for security improvements and process stability

* improve concept

* security concept implemented

* remove insecure TLS

* worker concept implemented

* fixes and cleanup

* fixes

* docu

* mermaid, namings

* WASM plugin host improvements, plugin logging

* fix db migration

* Improve plugin config and category mapping UI

* fixes

* further fixes

* remove manual test sync

* fix db migration and strava mapping

* type added, UI improvements

* fix plugin card toggle clickable area

* optimize synch status card layout

* plugin type 'trails' instead of 'integration'

* session auth validation in UI

* fix komoot date and waypoints

* improve category mapping

* fix send to hammerhead: trail name

* plugin setup error handling improved

* fix review findings

* re-mapping added

* rename remote_category

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Flomp <Flomp@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Flomp <26000991+Flomp@users.noreply.github.com>
2026-06-22 15:00:44 +02:00

542 lines
16 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"manifestVersion": "1.0",
"id": "strava",
"type": "trails",
"name": "Strava",
"description": "Imports Strava routes, activities and photos into wanderer.",
"version": "0.1.0",
"runtime": {
"type": "wasm",
"entrypoint": "plugin.wasm"
},
"capabilities": [
{
"name": "list_routes",
"version": "v1",
"export": "list_routes_v1"
},
{
"name": "get_route_detail",
"version": "v1",
"export": "get_route_detail_v1"
},
{
"name": "list_activities",
"version": "v1",
"export": "list_activities_v1"
},
{
"name": "get_activity_detail",
"version": "v1",
"export": "get_activity_detail_v1"
}
],
"auth": {
"contexts": {
"oauth_access_token": {
"type": "oauth2",
"fields": [
"clientId",
"clientSecret"
],
"secretFields": [
"clientSecret",
"accessToken",
"refreshToken"
],
"authorizationUrl": "https://www.strava.com/oauth/authorize",
"tokenUrl": "https://www.strava.com/oauth/token",
"scopes": [
"read_all",
"activity:read_all"
],
"scopeSeparator": ",",
"tokenRequestFormat": "json",
"tokenAuth": "client_secret_post",
"authorizationParams": {
"approval_prompt": "auto"
},
"refresh": {
"mode": "host",
"grantType": "refresh_token"
}
}
}
},
"permissions": {
"network": {
"connectors": [
{
"name": "api",
"type": "public_api",
"fixedBaseURL": "https://www.strava.com/api/v3",
"allowedPathPrefixes": [
"/"
],
"auth": [
"oauth_access_token"
]
},
{
"name": "api_next",
"type": "public_api",
"fixedBaseURL": "https://www.api-v3.strava.com",
"allowedPathPrefixes": [
"/"
],
"auth": [
"oauth_access_token"
]
},
{
"name": "oauth",
"type": "public_api",
"fixedBaseURL": "https://www.strava.com/oauth",
"allowedPathPrefixes": [
"/"
]
}
]
},
"auth": [
"oauth_access_token"
],
"downloads": {
"maxBytes": 1048576,
"contentTypes": [
"application/json",
"application/gpx+xml",
"application/xml",
"text/xml",
"application/octet-stream"
]
}
},
"configSchema": [
{
"key": "after",
"type": "date",
"label": "Start date",
"labels": {
"de": "Startdatum",
"en": "Start date"
},
"description": "Ignore routes and activities before this date.",
"descriptions": {
"cs": "Pokud váš účet obsahuje velké množství aktivit, můžete narazit na limit API služby Strava, což znemožní synchronizaci všech aktivit najednou. Tomuto problému předejdete nastavením data \"Od\" a dále - synchronizují se tak pouze aktivity zaznamenané po tomto datu.",
"de": "Wenn Ihr Konto eine große Anzahl von Aktivitäten enthält, kann es vorkommen, dass Sie aufgrund der API-Restriktionen von Strava nicht alle Aktivitäten auf einmal synchronisieren können. Um dieses Problem zu umgehen, können Sie unten ein Startdatum festlegen, sodass nur Aktivitäten synchronisiert werden, die nach diesem Datum aufgezeichnet wurden.",
"en": "If your account has a large amount of acitivities you may run into Strava's API rate limit preventing you from syncing all activities at once. To mitigate this issue you can set an start date below so that only activities that were recorded after this date are synced.",
"es": "Si tu cuenta tiene una gran cantidad de actividades, es posible que alcances el límite de peticiones de la API de Strava, lo que impedirá la sincronización de todas las actividades a la vez. Para mitigar este problema, puedes establecer una fecha \"Posterior a\" a continuación, de modo que solo se sincronicen las actividades que se registraron después de esa fecha.",
"eu": "Zure kontuak ekintza esko baditu Stravaren APIaren mugekin topo egin dezakezu eta agian ezingo dituzu zure ekintza guztiak aldi berean inportatu. Horretarako data jakin batetik aurrerako ekintzak sinkronizatzeko aukera duzu.",
"fr": "Si votre compte a une grande quantité d'activités, vous pouvez rencontrer la limite d'utilisation de l'API de Strava vous empêchant de synchroniser toutes les activités en même temps. Pour atténuer ce problème, vous pouvez définir une date \"Après-\" ci-dessous afin que seules les activités qui ont été enregistrées après cette date soient synchronisées.",
"it": "If your account has a large amount of acitivities you may run into Strava's API rate limit preventing you from syncing all activities at once. To mitigate this issue you can set an \"After\" date below so that only activities that were recorded after this date are synced.",
"hu": "If your account has a large amount of acitivities you may run into Strava's API rate limit preventing you from syncing all activities at once. To mitigate this issue you can set an \"After\" date below so that only activities that were recorded after this date are synced.",
"nl": "Als uw account een grote hoeveelheid activiteiten heeft, kunt u op de API-limiet van Strava botsen voorkomend dat u alle activiteiten tegelijk synchroniseert. Om dit probleem te omzeilen kunt u een \"Later\" datum hieronder instellen, zodat alleen activiteiten die na deze datum werden opgenomen worden gesynchroniseerd.",
"no": "Hvis kontoen din har en stor mengde aktiviteter kan du støte på Stravas API-hastighetsgrense som hindrer deg i å synkronisere alle aktiviteter samtidig. For å redusere dette problemet kan du sette en \"Etter\" dato nedenfor slik at bare aktiviteter som ble registrert etter denne datoen blir synkronisert.",
"pl": "If your account has a large amount of acitivities you may run into Strava's API rate limit preventing you from syncing all activities at once. To mitigate this issue you can set an \"After\" date below so that only activities that were recorded after this date are synced.",
"pt": "If your account has a large amount of acitivities you may run into Strava's API rate limit preventing you from syncing all activities at once. To mitigate this issue you can set an \"After\" date below so that only activities that were recorded after this date are synced.",
"ru": "If your account has a large amount of acitivities you may run into Strava's API rate limit preventing you from syncing all activities at once. To mitigate this issue you can set an \"After\" date below so that only activities that were recorded after this date are synced.",
"zh": "If your account has a large amount of acitivities you may run into Strava's API rate limit preventing you from syncing all activities at once. To mitigate this issue you can set an \"After\" date below so that only activities that were recorded after this date are synced."
}
}
],
"hostConfig": {
"categoryMapping": {
"route:1": "Biking",
"route:2": "Walking",
"AlpineSki": "Skiing",
"BackcountrySki": "Skiing",
"Badminton": "Other",
"Canoeing": "Canoeing",
"Crossfit": "Workout",
"EBikeRide": "Biking",
"EMountainBikeRide": "Biking",
"Elliptical": "Workout",
"Golf": "Other",
"GravelRide": "Biking",
"Handcycle": "Biking",
"HighIntensityIntervalTraining": "Other",
"Hike": "Hiking",
"IceSkate": "Skiing",
"InlineSkate": "Walking",
"Kayaking": "Canoeing",
"Kitesurf": "Canoeing",
"MountainBikeRide": "Biking",
"NordicSki": "Skiing",
"Pickleball": "Other",
"Pilates": "Other",
"Racquetball": "Other",
"Ride": "Biking",
"RockClimbing": "Climbing",
"RollerSki": "Skiing",
"Rowing": "Canoeing",
"Run": "Walking",
"Sail": "Canoeing",
"Skateboard": "Walking",
"Snowboard": "Skiing",
"Snowshoe": "Hiking",
"Soccer": "Other",
"Squash": "Other",
"StairStepper": "Workout",
"StandUpPaddling": "Canoeing",
"Surfing": "Canoeing",
"Swim": "Other",
"TableTennis": "Other",
"Tennis": "Other",
"TrailRun": "Other",
"Training": "Other",
"Velomobile": "Biking",
"VirtualRide": "Biking",
"VirtualRow": "Other",
"VirtualRun": "Walking",
"Walk": "Walking",
"WeightTraining": "Workout",
"Wheelchair": "Walking",
"Windsurf": "Canoeing",
"Workout": "Workout",
"Yoga": "Workout"
}
},
"metadata": {
"descriptions": {
"cs": "Synchronizuje vaše trasy a aktivity z aplikace Strava s Wandererem v pravidelných intervalech.",
"de": "Importiert Strava-Routen, Aktivitäten und Fotos in wanderer.",
"en": "Imports Strava routes, activities and photos into wanderer.",
"es": "Sincroniza tus recorridos y actividades de Strava con Wanderer en intervalos regulares.",
"eu": "Zure stravako ibilbideak wandererekin sinkronizatzen ditu aldian behin.",
"fr": "Synchronisez vos itinéraires et vos activités Strava avec wanderer à intervalles réguliers.",
"it": "Syncs your strava routes & activities with wanderer in regular intervals.",
"hu": "Syncs your strava routes & activities with wanderer in regular intervals.",
"nl": "Synchroniseert je Strava-routes en -activiteiten met Wanderer op regelmatige tijdstippen.",
"no": "Synkroniserer dine Strava-ruter og aktiviteter med Wanderer med jevne mellomrom.",
"pl": "Synchronizuje trasy i aktywność z wanderer w równych odstępach.",
"pt": "Syncs your strava routes & activities with wanderer in regular intervals.",
"ru": "Синхронизирует ваши данные со Strava.",
"zh": "定期与strava同步您的wanderer路线和活动。"
},
"icons": {
"light": "icon.svg"
},
"providerCategories": {
"route:1": {
"labels": {
"de": "Strava-Route: Radfahren",
"en": "Strava route: cycling"
}
},
"route:2": {
"labels": {
"de": "Strava-Route: Laufen",
"en": "Strava route: running"
}
},
"AlpineSki": {
"labels": {
"de": "Ski alpin",
"en": "Alpine ski"
}
},
"BackcountrySki": {
"labels": {
"de": "Skitour",
"en": "Backcountry ski"
}
},
"Badminton": {
"labels": {
"de": "Badminton",
"en": "Badminton"
}
},
"Canoeing": {
"labels": {
"de": "Kanufahren",
"en": "Canoeing"
}
},
"Crossfit": {
"labels": {
"de": "Crossfit",
"en": "Crossfit"
}
},
"EBikeRide": {
"labels": {
"de": "E-Bike-Fahrt",
"en": "E-bike ride"
}
},
"EMountainBikeRide": {
"labels": {
"de": "E-Mountainbike-Fahrt",
"en": "E-mountain bike ride"
}
},
"Elliptical": {
"labels": {
"de": "Crosstrainer",
"en": "Elliptical"
}
},
"Golf": {
"labels": {
"de": "Golf",
"en": "Golf"
}
},
"GravelRide": {
"labels": {
"de": "Gravel-Fahrt",
"en": "Gravel ride"
}
},
"Handcycle": {
"labels": {
"de": "Handbike",
"en": "Handcycle"
}
},
"HighIntensityIntervalTraining": {
"labels": {
"de": "HIIT",
"en": "High-intensity interval training"
}
},
"Hike": {
"labels": {
"de": "Wandern",
"en": "Hike"
}
},
"IceSkate": {
"labels": {
"de": "Schlittschuhlaufen",
"en": "Ice skate"
}
},
"InlineSkate": {
"labels": {
"de": "Inlineskaten",
"en": "Inline skate"
}
},
"Kayaking": {
"labels": {
"de": "Kajakfahren",
"en": "Kayaking"
}
},
"Kitesurf": {
"labels": {
"de": "Kitesurfen",
"en": "Kitesurf"
}
},
"MountainBikeRide": {
"labels": {
"de": "Mountainbike-Fahrt",
"en": "Mountain bike ride"
}
},
"NordicSki": {
"labels": {
"de": "Langlauf",
"en": "Nordic ski"
}
},
"Pickleball": {
"labels": {
"de": "Pickleball",
"en": "Pickleball"
}
},
"Pilates": {
"labels": {
"de": "Pilates",
"en": "Pilates"
}
},
"Racquetball": {
"labels": {
"de": "Racquetball",
"en": "Racquetball"
}
},
"Ride": {
"labels": {
"de": "Radfahren",
"en": "Ride"
}
},
"RockClimbing": {
"labels": {
"de": "Felsklettern",
"en": "Rock climbing"
}
},
"RollerSki": {
"labels": {
"de": "Rollski",
"en": "Roller ski"
}
},
"Rowing": {
"labels": {
"de": "Rudern",
"en": "Rowing"
}
},
"Run": {
"labels": {
"de": "Laufen",
"en": "Run"
}
},
"Sail": {
"labels": {
"de": "Segeln",
"en": "Sail"
}
},
"Skateboard": {
"labels": {
"de": "Skateboard",
"en": "Skateboard"
}
},
"Snowboard": {
"labels": {
"de": "Snowboard",
"en": "Snowboard"
}
},
"Snowshoe": {
"labels": {
"de": "Schneeschuhwandern",
"en": "Snowshoe"
}
},
"Soccer": {
"labels": {
"de": "Fussball",
"en": "Soccer"
}
},
"Squash": {
"labels": {
"de": "Squash",
"en": "Squash"
}
},
"StairStepper": {
"labels": {
"de": "Stepper",
"en": "Stair stepper"
}
},
"StandUpPaddling": {
"labels": {
"de": "Stand-up-Paddling",
"en": "Stand-up paddling"
}
},
"Surfing": {
"labels": {
"de": "Surfen",
"en": "Surfing"
}
},
"Swim": {
"labels": {
"de": "Schwimmen",
"en": "Swim"
}
},
"TableTennis": {
"labels": {
"de": "Tischtennis",
"en": "Table tennis"
}
},
"Tennis": {
"labels": {
"de": "Tennis",
"en": "Tennis"
}
},
"TrailRun": {
"labels": {
"de": "Trailrun",
"en": "Trail run"
}
},
"Training": {
"labels": {
"de": "Training",
"en": "Training"
}
},
"Velomobile": {
"labels": {
"de": "Velomobil",
"en": "Velomobile"
}
},
"VirtualRide": {
"labels": {
"de": "Virtuelle Radfahrt",
"en": "Virtual ride"
}
},
"VirtualRow": {
"labels": {
"de": "Virtuelles Rudern",
"en": "Virtual row"
}
},
"VirtualRun": {
"labels": {
"de": "Virtueller Lauf",
"en": "Virtual run"
}
},
"Walk": {
"labels": {
"de": "Gehen",
"en": "Walk"
}
},
"WeightTraining": {
"labels": {
"de": "Krafttraining",
"en": "Weight training"
}
},
"Wheelchair": {
"labels": {
"de": "Rollstuhl",
"en": "Wheelchair"
}
},
"Windsurf": {
"labels": {
"de": "Windsurfen",
"en": "Windsurf"
}
},
"Workout": {
"labels": {
"de": "Training",
"en": "Workout"
}
},
"Yoga": {
"labels": {
"de": "Yoga",
"en": "Yoga"
}
}
}
}
}