trainingpeaks-sdk
Version:
TypeScript SDK for TrainingPeaks API integration
47 lines (46 loc) • 1.78 kB
JavaScript
import { API_BASE_URLS, API_ENDPOINTS, } from '../../../../adapters/public-api/constants/api-urls.js';
export const LOGIN_API_BASE_URL = API_BASE_URLS.LOGIN;
export const LOGIN_FORM_HEADERS = {
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'max-age=0',
'content-type': 'application/x-www-form-urlencoded',
origin: 'null',
priority: 'u=0, i',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
};
export const getLoginPage = async (httpClient) => {
return await httpClient.get(API_ENDPOINTS.LOGIN_PAGE, {
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
},
});
};
export const submitLogin = async (httpClient, requestVerificationToken, credentials) => {
const formData = new URLSearchParams({
Username: credentials.username,
__RequestVerificationToken: requestVerificationToken,
Password: credentials.password,
});
return await httpClient.post(API_ENDPOINTS.LOGIN_PAGE, formData.toString(), {
headers: {
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
...LOGIN_FORM_HEADERS,
},
});
};
export const getRequestVerificationToken = (html) => {
const inputMatches = html.match(/<input[^>]+>/g) || [];
for (const input of inputMatches) {
const nameMatch = input.match(/name="__RequestVerificationToken"/);
if (nameMatch) {
const valueMatch = input.match(/value="([^"]*)"/);
return valueMatch?.[1] || null;
}
}
return null;
};