@ozrageharm/epiccore
Version:
EpicCore is a Node.js API Wrapper created to Interact with Epic Games' API.
106 lines (91 loc) • 3.62 kB
JavaScript
const axios = require('axios');
const querystring = require('querystring');
const clientTokens = require('../ClientTokens.js');
class Auth {
async authenticate(auth, client) {
let payload;
switch (auth.method) {
case 'code':
payload = `grant_type=authorization_code&code=${auth.value}&token_type=eg1`;
break;
case 'exchange':
payload = `grant_type=exchange_code&exchange_code=${auth.value}&token_type=eg1`;
break;
case 'device':
payload = `grant_type=device_auth&device_id=${auth.value.deviceId}&account_id=${auth.value.accountId}&secret=${auth.value.secret}&token_type=eg1`;
break;
case 'refresh':
payload = `grant_type=refresh_token&refresh_token=${auth.value}&token_type=eg1`;
break;
}
const url = 'https://account-public-service-prod.ol.epicgames.com/account/api/oauth/token';
const token = client ? clientTokens[client] : 'MzQ0NmNkNzI2OTRjNGE0NDg1ZDgxYjc3YWRiYjIxNDE6OTIwOWQ0YTVlMjVhNDU3ZmI5YjA3NDg5ZDMxM2I0MWE=';
const headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': `Basic ${token}`,
};
try {
const response = await axios.post(url, payload, { headers });
const data = response.data;
if (data.errorMessage) throw new Error(JSON.stringify(data));
// Modify the access_token in data to be a UTF-8 string
//data.access_token = Buffer.from(data.access_token, 'binary').toString('utf8');
return data;
} catch (error) {
if (error.response) {
console.error('API Error:', error.response.data);
} else if (error.request) {
console.error('No response received:', error.request);
} else {
console.error('Request Error:', error.message);
}
throw new Error(error.message);
}
}
async createDeviceAuth(credentials) {
const url = `https://account-public-service-prod.ol.epicgames.com/account/api/public/account/${credentials.account_id}/deviceAuth`;
const payload = querystring.stringify({}); // Empty payload
const headers = {
'Authorization': `Bearer ${credentials.access_token}`,
'Content-Type': 'application/json', // Add Content-Type header
};
try {
const response = await axios.post(url, payload, { headers });
const data = response.data;
if (data.errorMessage) throw new Error(JSON.stringify(data));
return data;
} catch (error) {
if (error.response) {
console.error('API Error:', error.response.data);
} else if (error.request) {
console.error('No response received:', error.request);
} else {
console.error('Request Error:', error.message);
}
throw new Error(error.message);
}
}
async generateExchangeCode(credentials) {
const url = 'https://account-public-service-prod.ol.epicgames.com/account/api/oauth/exchange';
const headers = {
'Authorization': `Bearer ${credentials.access_token}`,
'Content-Type': 'application/json',
};
try {
const response = await axios.get(url, { headers });
const data = response.data;
if (data.errorMessage) throw new Error(JSON.stringify(data));
return data;
} catch (error) {
if (error.response) {
console.error('API Error:', error.response.data);
} else if (error.request) {
console.error('No response received:', error.request);
} else {
console.error('Request Error:', error.message);
}
throw new Error(error.message);
}
}
}
module.exports = Auth;