dc-management-sdk-js
Version:
Amplience Dynamic Content Management SDK
64 lines • 4.68 kB
JavaScript
import { HttpMethod } from '../../http/HttpRequest';
import { combineURLs } from '../../utils/URL';
/**
* @hidden
*/
export class Oauth2AuthHeaderProvider {
constructor(clientCredentials, options, httpClient) {
this.safelyExpireOffsetSeconds = 30;
options = { authUrl: 'https://auth.amplience.net', ...options };
this.authUrl = options.authUrl;
this.clientCredentials = clientCredentials;
this.httpClient = httpClient;
}
/**
* Requests an authentication token that can be used
* to make requests to the Dynamic Content api.
* Tokens are reused until they expire.
*
* @returns {Promise<AccessToken>}
*/
async getToken() {
if (this.inFlight != null) {
return this.inFlight;
}
if (this.token != null &&
this.tokenExpires - this.safelyExpireOffsetSeconds * 1000 > Date.now()) {
return this.token;
}
const payload = 'grant_type=client_credentials' +
'&client_id=' +
encodeURIComponent(this.clientCredentials.client_id) +
'&client_secret=' +
encodeURIComponent(this.clientCredentials.client_secret);
const request = this.httpClient.request({
data: payload,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
method: HttpMethod.POST,
url: combineURLs(this.authUrl, '/oauth/token'),
});
this.inFlight = request.then((response) => {
if (typeof response.data !== 'object') {
throw new Error('Unexpected response format from /oauth/token endpoint');
}
this.token = response.data;
this.tokenExpires = Date.now() + this.token.expires_in * 1000;
this.inFlight = null;
return this.token;
});
return this.inFlight;
}
/**
* Returns an authorization header that can be used to make
* requests to the Dynamic Content api.
*
* @returns {Promise<string>}
*/
async getAuthHeader() {
const token = await this.getToken();
return `bearer ${token.access_token}`;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2F1dGgyQXV0aEhlYWRlclByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9vYXV0aDIvc2VydmljZXMvT2F1dGgyQXV0aEhlYWRlclByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJOUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBV25DLFlBQ0UsaUJBQXNELEVBQ3RELE9BQXVELEVBQ3ZELFVBQXNCO1FBWFAsOEJBQXlCLEdBQUcsRUFBRSxDQUFDO1FBYTlDLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBRWhFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxRQUFRO1FBQ25CLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQ0UsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQ3RFLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUNYLCtCQUErQjtZQUMvQixhQUFhO1lBQ2Isa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztZQUNwRCxpQkFBaUI7WUFDakIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3RDLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxtQ0FBbUM7YUFDcEQ7WUFDRCxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDdkIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQztTQUMvQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQWUsRUFBRTtZQUNyRCxJQUFJLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FDYix1REFBdUQsQ0FDeEQsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFXLENBQUM7WUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQzlELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDLENBQXlCLENBQUM7UUFFM0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxhQUFhO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXBDLE9BQU8sVUFBVSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGIn0=