@mcp-abap-adt/connection
Version:
ABAP connection layer for MCP ABAP ADT server
56 lines (55 loc) • 2.16 kB
JavaScript
;
/**
* 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}`);
}
}
}