UNPKG

strava-api-handler

Version:
76 lines (62 loc) 1.87 kB
import CookieApi from 'cookie-api-handler'; import { DefaultResponseProcessor, DefaultApiException } from 'rest-api-handler'; import StravaException from './StravaException.js'; class WebApi extends CookieApi { constructor(session) { super('https://www.strava.com', [new DefaultResponseProcessor(DefaultApiException)], { 'Content-Type': 'application/x-www-form-urlencoded' }); if (session) { this.addCookies({ _strava4_session: session }); } } setSession(session) { this.session = session; } getSession() { return this.session; } async getCsfrToken(path) { const { data } = await this.get(path); const token = /csrf-token" content="(([A-Za-z]|\+|\d|=|\/)*)/g.exec(data); if (!token) { throw new StravaException('CSFR token was not found'); } return token[1]; } async login(email, password) { const token = await this.getCsfrToken('login'); try { await this.request('session', 'POST', { body: CookieApi.convertData({ utf8: '✓', authenticity_token: token, plan: '', email, password }, CookieApi.FORMATS.URL_ENCODED), redirect: 'manual' }); // eslint-disable-next-line no-empty } catch {} const cookies = this.getCookies(); this.setSession(cookies ? cookies._strava4_session : undefined); } async setPrivacy(id, privacy) { const token = await this.getCsfrToken(`activities/${id}/edit`); await this.request(`activities/${id}`, 'POST', { body: CookieApi.convertData({ 'utf8': '✓', '_method': 'patch', 'authenticity_token': token, 'activity[visibility]': privacy, 'commit': 'Save' }, CookieApi.FORMATS.URL_ENCODED), redirect: 'manual' }); } } export { WebApi as default };