fitness-libraries
Version:
Fitness libraries as inversify modules.
39 lines (31 loc) • 1.28 kB
text/typescript
import { inject, injectable, named } from 'inversify';
import { DateTime } from 'luxon';
import { Api } from 'strava-api-handler';
import { ArgumentsType } from '../../../utils';
import { SYMBOLS } from '../constants';
import StravaStorageService from './StravaStorageService';
()
export default class StravaApiHandler extends Api {
public constructor(
(StravaStorageService) private storage: StravaStorageService,
(SYMBOLS.env) (SYMBOLS.clientId) clientId: string,
(SYMBOLS.env) (SYMBOLS.secretId) secretId: string,
) {
super(clientId, secretId);
}
public async request(...parameters: ArgumentsType<typeof Api.prototype.request>) {
if (parameters[0].includes('oauth/token')) {
return super.request(...parameters);
}
const token = await this.storage.get();
if (!token) {
return super.request(...parameters);
}
this.setAccessToken(token.access_token);
if (DateTime.local().toSeconds() >= token.expires_at) {
const refreshedToken = await this.refreshToken(token.refresh_token);
await this.storage.store(refreshedToken);
}
return super.request(...parameters);
}
}