https://github.com/rfoel/strava
JavaScript wrapper for the Strava JSON API
https://github.com/rfoel/strava
api json node strava
Last synced: about 1 year ago
JSON representation
JavaScript wrapper for the Strava JSON API
- Host: GitHub
- URL: https://github.com/rfoel/strava
- Owner: rfoel
- License: mit
- Created: 2020-11-18T21:13:48.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-03-15T14:17:58.000Z (over 2 years ago)
- Last Synced: 2025-04-13T06:03:15.458Z (about 1 year ago)
- Topics: api, json, node, strava
- Language: TypeScript
- Homepage:
- Size: 1.5 MB
- Stars: 26
- Watchers: 0
- Forks: 11
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# Strava
[](https://www.npmjs.com/strava)
[](https://www.npmjs.com/strava)
[](LICENSE)
[](https://github.com/semantic-release/semantic-release)
This library is a fully typed JavaScript wrapper of the [Strava JSON API](https://developers.strava.com/docs/reference/).
## Installation
To install the package, run:
```
npm install strava
```
or
```
yarn add strava
```
## Usage
The library can be initialized with a refresh token and optionally an access token.
If these are not available, see below (**Token exchange**).
```javascript
import { Strava } from 'strava'
const strava = new Strava({
client_id: '123',
client_secret: 'abc',
refresh_token: 'def',
})
try {
const activities = await strava.activities.getLoggedInAthleteActivities()
console.log(activities)
} catch (error) {
console.log(error)
}
```
### Refreshing the access token
This library will automatically refresh the access token when needed.
In order to store the token, you can use the `on_token_refresh` callback.
This received an `AccessToken` object (consisting of `access_token`, `expires_at`, and `refresh_token`).
Note that the refresh token as returned by this call can sometimes change,
at which point the old token becomes invalid.
An `AccessToken` object can also be passed as a second argument to the Strava constructor.
This can save an initial token refresh.
As `AccessToken` contains a refresh token,
the first argument does not need to contain a refresh token.
```javascript
import { Strava } from 'strava'
const strava = new Strava(
{
client_id: '123',
client_secret: 'abc',
on_token_refresh: response => {
cache.accessToken = response
},
},
cache.accessToken,
)
```
### Token exchange
When a user logs in for the first time, you will need to perform authorization with OAuth.
This involves sending the user to ,
and receiving the auth code as a query parameter.
This can be used as follows:
```javascript
import { Strava } from 'strava'
try {
const strava = await Strava.createFromTokenExchange(
{
client_id: '123',
client_secret: 'abc',
},
token,
)
const activities = await strava.activities.getLoggedInAthleteActivities()
console.log(activities)
} catch (error) {
console.log(error)
}
```
### Getting athlete info
When a user logs in for the first time, the Strava API returns information about the newly logged-in user.
This can be read using the on_token_refresh callback.
Note that this will only ever be provided on the initial token exchange,
before the promise returned from `Strava.createFromTokenExchange` returns.
When the `on_token_refresh` callback is called again after the token expires,
`response.athlete` will always be undefined.
```javascript
import { Strava } from 'strava'
try {
const strava = await Strava.createFromTokenExchange(
{
client_id: '123',
client_secret: 'abc',
on_token_refresh: response => {
if (response.athlete) {
console.log(response.athlete)
}
db.set('refresh_token', response.refresh_token)
},
},
token,
)
const activities = await strava.activities.getLoggedInAthleteActivities()
console.log(activities)
} catch (error) {
console.log(error)
}
```
## Contributing
Issues and pull requests are welcome.
## License
[MIT](https://github.com/rfoel/strava/blob/master/LICENSE)