UNPKG

@mcp-abap-adt/connection

Version:

ABAP connection layer for MCP ABAP ADT server

56 lines (55 loc) 2.16 kB
"use strict"; /** * Token refresh utilities for JWT authentication */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.refreshJwtToken = refreshJwtToken; const axios_1 = __importDefault(require("axios")); /** * Refreshes the access token using refresh token * @param refreshToken Refresh token * @param uaaUrl UAA URL (e.g., https://your-account.authentication.eu10.hana.ondemand.com) * @param clientId UAA client ID * @param clientSecret UAA client secret * @returns Promise that resolves to new tokens */ async function refreshJwtToken(refreshToken, uaaUrl, clientId, clientSecret) { try { const tokenUrl = `${uaaUrl}/oauth/token`; const params = new URLSearchParams(); params.append('grant_type', 'refresh_token'); params.append('refresh_token', refreshToken); const authString = Buffer.from(`${clientId}:${clientSecret}`).toString('base64'); const response = await (0, axios_1.default)({ method: 'post', url: tokenUrl, headers: { Authorization: `Basic ${authString}`, 'Content-Type': 'application/x-www-form-urlencoded', }, data: params.toString(), }); if (response.data?.access_token) { return { accessToken: response.data.access_token, refreshToken: response.data.refresh_token || refreshToken, // Use new refresh token if provided, otherwise keep old one }; } else { throw new Error('Response does not contain access_token'); } } catch (error) { const err = error; if (err.response) { throw new Error(`Token refresh failed (${err.response.status}): ${JSON.stringify(err.response.data)}`); } else { const errorMessage = error instanceof Error ? error.message : String(error); throw new Error(`Token refresh failed: ${errorMessage}`); } } }