@sap-cloud-sdk/connectivity
Version:
SAP Cloud SDK for JavaScript connectivity
76 lines • 3.34 kB
JavaScript
;
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