( authorizationCode: string, state: string, codeVerifier: string, port: number, useManualRedirect: boolean = false, expiresIn?: number, manualRedirectUri?: string, )
| 251 | } |
| 252 | |
| 253 | export async function exchangeCodeForTokens( |
| 254 | authorizationCode: string, |
| 255 | state: string, |
| 256 | codeVerifier: string, |
| 257 | port: number, |
| 258 | useManualRedirect: boolean = false, |
| 259 | expiresIn?: number, |
| 260 | manualRedirectUri?: string, |
| 261 | ): Promise<OAuthTokenExchangeResponse> { |
| 262 | const requestBody: Record<string, string | number> = { |
| 263 | grant_type: 'authorization_code', |
| 264 | code: authorizationCode, |
| 265 | redirect_uri: useManualRedirect |
| 266 | ? (manualRedirectUri ?? getOauthManualRedirectUrl()) |
| 267 | : `http://localhost:${port}/callback`, |
| 268 | client_id: getOauthClientId(), |
| 269 | code_verifier: codeVerifier, |
| 270 | state, |
| 271 | } |
| 272 | |
| 273 | if (expiresIn !== undefined) { |
| 274 | requestBody.expires_in = expiresIn |
| 275 | } |
| 276 | |
| 277 | const data = await getIdentityClient().exchangeCodeForTokens({ |
| 278 | requestBody, |
| 279 | timeout: 15000, |
| 280 | }) |
| 281 | logEvent('ncode_oauth_token_exchange_success', {}) |
| 282 | return data |
| 283 | } |
| 284 | |
| 285 | export async function refreshOAuthToken( |
| 286 | refreshToken: string, |
no test coverage detected