diff --git a/integrationos-oauth/src/connections/box/init.ts b/integrationos-oauth/src/connections/box/init.ts new file mode 100644 index 00000000..a1a37970 --- /dev/null +++ b/integrationos-oauth/src/connections/box/init.ts @@ -0,0 +1,47 @@ +import axios from "axios"; +import qs from "qs"; +import { DataObject, OAuthResponse } from "../../lib/types"; + +export const init = async ({ body }: DataObject): Promise => { + try { + const { + clientId: client_id, + clientSecret: client_secret, + metadata: { code }, + } = body; + + const requestBody = { + grant_type: "authorization_code", + code, + client_id, + client_secret, + }; + + const response = await axios({ + url: "https://api.box.com/oauth2/token", + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Accept: 'application/json', + }, + data: qs.stringify(requestBody), + }); + + const { + access_token: accessToken, + refresh_token: refreshToken, + token_type: tokenType, + expires_in: expiresIn, + } = response.data; + + return { + accessToken, + refreshToken, + expiresIn, + tokenType, + meta: {}, + }; + } catch (error) { + throw new Error(`Error fetching access token for Box: ${error}`); + } +}; diff --git a/integrationos-oauth/src/connections/box/refresh.ts b/integrationos-oauth/src/connections/box/refresh.ts new file mode 100644 index 00000000..6ef2ed89 --- /dev/null +++ b/integrationos-oauth/src/connections/box/refresh.ts @@ -0,0 +1,48 @@ +import axios from "axios"; +import qs from "qs"; +import { DataObject, OAuthResponse } from "../../lib/types"; + +export const refresh = async ({ body }: DataObject): Promise => { + try { + const { + OAUTH_CLIENT_ID: client_id, + OAUTH_CLIENT_SECRET: client_secret, + OAUTH_REFRESH_TOKEN: refresh_token, + OAUTH_METADATA: { meta }, + } = body; + + const requestBody = { + grant_type: "refresh_token", + refresh_token, + client_id, + client_secret, + }; + + const response = await axios({ + url: "https://api.box.com/oauth2/token", + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded", + Accept: 'application/json', + }, + data: qs.stringify(requestBody), + }); + + const { + access_token: accessToken, + refresh_token: refreshToken, + token_type: tokenType, + expires_in: expiresIn, + } = response.data; + + return { + accessToken, + refreshToken, + expiresIn, + tokenType, + meta, + }; + } catch (error) { + throw new Error(`Error fetching access token for Box: ${error}`); + } +};