UNPKG

@mikandev/next-discord-auth

Version:
52 lines (51 loc) 1.84 kB
export const ExchangeCodeForTokens = async (config, code) => { const response = await fetch("https://discord.com/api/oauth2/token", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: new URLSearchParams({ client_id: config.clientId, client_secret: config.clientSecret, grant_type: "authorization_code", code: code, redirect_uri: config.redirectUri, scope: config.scopes.join(" "), }), }); if (!response.ok) { const error = (await response.json()); throw new Error(`Failed to exchange code for token: ${error.error_description || error.message}`); } const data = (await response.json()); return { accessToken: data.access_token, refreshToken: data.refresh_token, expiresIn: data.expires_in, }; }; export const RefreshAccessToken = async (config, refreshToken) => { const response = await fetch("https://discord.com/api/oauth2/token", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: new URLSearchParams({ client_id: config.clientId, client_secret: config.clientSecret, grant_type: "refresh_token", refresh_token: refreshToken, scope: config.scopes.join(" "), }), }); if (!response.ok) { const error = (await response.json()); throw new Error(`Failed to refresh access token: ${error.error_description || error.message}`); } const data = (await response.json()); return { accessToken: data.access_token, refreshToken: data.refresh_token || refreshToken, expiresIn: data.expires_in, }; };