import type { OAuthTokenResponse, Result } from "./types" import * as querystring from "node:querystring" import { baseUrl, failure, success } from "./common" import logger from "@common/logger" export async function refreshToken( clientId: string, clientSecret: string, refreshToken: string, ): Promise> { const queries = querystring.stringify({ client_id: clientId, client_secret: clientSecret, refresh_token: refreshToken, grant_type: "refresh_token", }) const url = `${baseUrl}/oauth/token?${queries}` logger.debug(`Sending POST request to url: '${url}'`) const response = await fetch(url, { method: "post", headers: { "Content-Type": "application/x-www-form-urlencoded", }, }) logger.debug(`Received response with status '${response.status}'`) if (!response.ok) { return failure(await response.text()) } return success(await response.json()) }