@sapphire/plugin-api
Version:
Plugin for @sapphire/framework to expose a REST API
61 lines (58 loc) • 2.37 kB
JavaScript
;
var utilities = require('@sapphire/utilities');
var discord_js = require('discord.js');
var querystring = require('querystring');
var undici = require('undici');
var Route_cjs = require('../../lib/structures/Route.cjs');
var HttpCodes_cjs = require('../../lib/structures/http/HttpCodes.cjs');
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var _PluginRoute = class _PluginRoute extends Route_cjs.Route {
constructor(context) {
super(context, { route: "oauth/logout", methods: ["POST"] });
this.enabled = this.container.server.auth !== null;
}
async run(request, response) {
if (!request.auth) return response.status(HttpCodes_cjs.HttpCodes.Unauthorized).json({ error: "Unauthorized." });
const result = await this.revoke(request.auth.token);
if (result.ok) return this.success(response);
if (result.status === HttpCodes_cjs.HttpCodes.ServiceUnavailable) {
const retryAfter = this.processRetryAfter(result.headers.get("Retry-After"));
if (retryAfter) {
await utilities.sleep(retryAfter);
const result2 = await this.revoke(request.auth.token);
if (result2.ok) return this.success(response);
}
}
return response.status(HttpCodes_cjs.HttpCodes.InternalServerError).json({ error: "Unexpected error from server." });
}
success(response) {
response.cookies.remove(this.container.server.auth.cookie);
return response.json({ success: true });
}
async revoke(token) {
const auth = this.container.server.auth;
const result = await undici.fetch(discord_js.OAuth2Routes.tokenRevocationURL, {
method: "POST",
body: querystring.stringify({
token,
/* eslint-disable @typescript-eslint/naming-convention */
client_id: auth.id,
client_secret: auth.secret
/* eslint-enable @typescript-eslint/naming-convention */
}),
headers: {
"content-type": "application/x-www-form-urlencoded"
}
});
return result;
}
processRetryAfter(retryAfter) {
return retryAfter === null ? 5e3 : Number(retryAfter) * 1e3;
}
};
__name(_PluginRoute, "PluginRoute");
var PluginRoute = _PluginRoute;
exports.PluginRoute = PluginRoute;
//# sourceMappingURL=logout.post.cjs.map
//# sourceMappingURL=logout.post.cjs.map