UNPKG

@sap-cloud-sdk/connectivity

Version:

SAP Cloud SDK for JavaScript connectivity

76 lines 3.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getClientCredentialsToken = getClientCredentialsToken; exports.getUserToken = getUserToken; const internal_1 = require("@sap-cloud-sdk/resilience/internal"); const resilience_1 = require("@sap-cloud-sdk/resilience"); const environment_accessor_1 = require("./environment-accessor"); const jwt_1 = require("./jwt"); /** * Make a client credentials request against the XSUAA credentials inside `service`. * @param service - Service as it is defined in the environment variable. * @param jwt - User JWT or object containing the `iss` property. * @returns Client credentials token. */ async function getClientCredentialsToken(service, jwt) { const decodedJwt = jwt ? (0, jwt_1.decodeJwt)(jwt) : {}; const fnArgument = { subdomain: (0, jwt_1.getSubdomain)(decodedJwt), zoneId: (0, jwt_1.getTenantId)(decodedJwt), serviceCredentials: (0, environment_accessor_1.resolveServiceBinding)(service).credentials }; const xssecPromise = function (arg) { const xsuaaService = (0, environment_accessor_1.getXsuaaInstanceFromServiceCredentials)(arg.serviceCredentials); return xsuaaService.fetchClientCredentialsToken({ // tenant is the subdomain, not tenant ID tenant: arg.zoneId ? undefined : arg.subdomain, zid: arg.zoneId }); }; return (0, internal_1.executeWithMiddleware)((0, resilience_1.resilience)(), { fn: xssecPromise, fnArgument, context: { uri: fnArgument.serviceCredentials.url, tenantId: fnArgument.zoneId ?? fnArgument.serviceCredentials.tenantid } }).catch(err => { throw new Error(`Could not fetch client credentials token for service of type ${(0, environment_accessor_1.resolveServiceBinding)(service).label}: ${err.message}`); }); } /** * Make a user token request against the XSUAA credentials inside `service`. * @param service - Service as it is defined in the environment variable. * @param userJwt - User JWT. * @returns User token. */ function getUserToken(service, userJwt) { const decodedUserJwt = (0, jwt_1.decodeJwt)(userJwt); const fnArgument = { subdomain: (0, jwt_1.getSubdomain)(decodedUserJwt), zoneId: (0, jwt_1.getTenantId)(decodedUserJwt), serviceCredentials: service.credentials, userJwt }; const xssecPromise = function (arg) { const xsuaaService = (0, environment_accessor_1.getXsuaaInstanceFromServiceCredentials)(arg.serviceCredentials); return xsuaaService .fetchJwtBearerToken(arg.userJwt, { // tenant is the subdomain, not tenant ID tenant: arg.zoneId ? undefined : arg.subdomain, zid: arg.zoneId }) .then((token) => token.access_token); }; return (0, internal_1.executeWithMiddleware)((0, resilience_1.resilience)(), { fn: xssecPromise, fnArgument, context: { uri: service.credentials.url, tenantId: fnArgument.zoneId ?? service.credentials.tenantid } }).catch(err => { throw new Error(`Could not fetch JWT bearer token for service of type ${service.label}: ${err.message}`); }); } //# sourceMappingURL=xsuaa-service.js.map