Using the RPGLogs API is easy!
And the NPM package makes it even easier.
Find a guild's latest report
With the SDK, the implementation is simple:
import { buildSdk } from "@rpglogs/api-sdk";
const accessToken = await getAccessToken();
const sdk = buildSdk(accessToken);
const response = await sdk.getGuildReports({
guildName: 'Reaction',
guildServerSlug: 'Kazzak',
guildServerRegion: 'EU',
limit: 1,
zoneId: 28,
includeFights: false,
});
const report = response?.reportData?.reports.data[0];
Well, you might also want to handle validation and errors:
import { buildSdk } from "@rpglogs/api-sdk";
export default async function handler(req, res) {
if (!req.query.name ||
!req.query.server ||
!req.query.region) {
res.status(400).json({
message: 'Invalid parameters provided.'
});
return;
}
const accessToken = await getAccessToken();
const sdk = buildSdk(accessToken);
try {
const response = await sdk.getGuildReports({
guildName: req.query.name,
guildServerSlug: req.query.server,
guildServerRegion: req.query.region,
limit: 1,
zoneId: 28,
includeFights: false,
});
if (!response?.reportData?.reports?.data?.length) {
res.status(404)
.json({ message: 'Report not found.' });
return;
}
res.status(200)
.json(response.reportData.reports.data[0]);
} catch (error) {
res
.status(error?.response?.status ?? 500)
.json({
message: error?.response?.error ?? 'An error occurred.'
});
}
}
You can provide a valid access token however you want. For example:
async function getAccessToken() {
const authHeader = 'Basic ' +
btoa(
process.env.RPGLOGS_API_CLIENT_ID + ':' +
process.env.RPGLOGS_API_CLIENT_SECRET
);
const response = await fetch(
'https://www.warcraftlogs.com' +
'/oauth/token',
{
method: 'POST',
headers: {
Authorization: authHeader,
'Content-Type': 'application/x-www-form-urlencoded'
},
body: 'grant_type=client_credentials'
});
const json = await response.json();
if (response.status === 200) {
return json.access_token;
} else {
throw new Error(
'Response was not OK: ' +
JSON.stringify(json ?? {})
);
}
}