@mcma/client
Version:
Node module with classes and functions used to access services in an MCMA environment
41 lines (40 loc) • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccessTokenAuthenticator = void 0;
const core_1 = require("@mcma/core");
class AccessTokenAuthenticator {
tokenProvider;
authContext;
accessToken;
constructor(tokenProvider, authContext) {
this.tokenProvider = tokenProvider;
this.authContext = authContext;
// check that the token/provider is valid
if (!tokenProvider) {
throw new core_1.McmaException("Must provide an access token or access token provider.");
}
if (!tokenProvider.getAccessToken) {
throw new core_1.McmaException("Invalid access token or access token provider. Object must define 'accessToken' or 'getAccessToken'.");
}
}
async sign(config) {
// check if the access token is expired
if (this.accessToken && this.accessToken.expiresOn &&
((typeof this.accessToken.expiresOn === "number" && Date.now() >= this.accessToken.expiresOn) ||
(this.accessToken.expiresOn instanceof Date && Date.now() >= this.accessToken.expiresOn.getTime()))) {
this.accessToken = null;
}
// get the access token, if necessary
if (!this.accessToken) {
this.accessToken = await this.tokenProvider.getAccessToken(this.authContext);
}
// if we still don't have an access token at this point, we cannot proceed
if (this.accessToken) {
if (!config.headers) {
config.headers = {};
}
config.headers["Authorization"] = `Bearer ${this.accessToken.accessToken}`;
}
}
}
exports.AccessTokenAuthenticator = AccessTokenAuthenticator;