UNPKG

tiny-essentials

Version:

Collection of small, essential scripts designed to be used across various projects. These simple utilities are crafted for speed, ease of use, and versatility.

60 lines (59 loc) 2.41 kB
// @ts-nocheck import getJsonFetch from '../../../http/fetch/json.mjs'; import config from '../config.mjs'; import credentials from '../get/credentials.mjs'; import errorValidator from '../get/errorValidator.mjs'; /** * Revokes an OAuth2 access token from the Discord API. * * This function makes a `POST` request to the `/oauth2/token/revoke` endpoint to invalidate * a user's access token. This is useful for logout or unlink flows, and requires HTTP Basic Auth * using the application's client ID and client secret encoded in base64. * * @param {string} access_token - The Discord OAuth2 access token to be revoked. * @param {Object} tinyAuth - An object with the client_id and client_secret used to generate the Basic Auth credentials. * @param {string} tinyAuth.client_id - The Discord application client ID. * @param {string} tinyAuth.client_secret - The Discord application client secret. * * @returns {Promise<Record<string, any>>} Resolves when the token is successfully revoked. * The response may not contain any body if successful, so `result.data` may be empty. * * @throws {Record<string, any>} If the request fails, rejects with an error object containing `code` and `message`. * * @example * revokeToken('user-access-token', { * client_id: '1234567890', * client_secret: 'superSecret' * }) * .then(() => console.log('Token revoked')) * .catch(err => console.error('Failed to revoke token:', err)); */ export default function revokeToken(access_token, tinyAuth) { return new Promise(function (resolve, reject) { // API URL const apiURL = config.url; const credentials = credentials(tinyAuth); // Response getJsonFetch(`${apiURL}oauth2/token/revoke`, { method: 'POST', body: new URLSearchParams({ token: access_token, }), headers: { Authorization: `Basic ${credentials}`, 'Content-Type': 'application/x-www-form-urlencoded', }, }) .then((data) => { // Error Validator const result = errorValidator(data); if (!result.error) resolve(result.data); else reject(result.error); }) .catch((err) => { reject({ code: err.response.status, message: err.message }); }); }); }