UNPKG

@mcma/client

Version:

Node module with classes and functions used to access services in an MCMA environment

41 lines (40 loc) 1.73 kB
"use strict"; 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;