UNPKG

@sapphire/plugin-api

Version:

Plugin for @sapphire/framework to expose a REST API

61 lines (58 loc) 2.37 kB
'use strict'; 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