@zeroid/trimble.identity.clientcredentialtokenprovider
Version:
An implementation of ITokenProvider for OAuth client credential grant type
65 lines (61 loc) • 2.74 kB
JavaScript
// implements ITokenProvider
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define(['@zeroid/trimble.httpclient'], factory);
} else if (typeof exports === 'object') {
// CommonJS
module.exports = factory(require('@zeroid/trimble.httpclient'));
} else {
// Browser globals (Note: root is window)
root.ClientCredentialTokenProvider = factory(root.HttpClient);
}
}(this, function (HttpClient) {
var _clientCredentialTokenProvider = function (endpointProvider, consumerKey, consumerSecret) {
this._endpointProvider = endpointProvider;
this._consumerKey = consumerKey;
this._consumerSecret = consumerSecret;
this._accessToken = null;
this._tokenExpiry = new Date(0);
}
_clientCredentialTokenProvider.prototype._refreshToken = function () {
var self = this;
return new Promise(function (resolve, reject) {
self._endpointProvider.retrieveTokenEndpoint()
.then((endpoint) => {
var basicHeader = 'Basic ' + btoa(self._consumerKey + ':' + self._consumerSecret);
var requestSettings = {
headers: {
authorization: basicHeader,
"content-type": 'application/x-www-form-urlencoded',
accept: 'application/json'
}
};
var content = 'grant_type=client_credentials';
new HttpClient().httpPost(endpoint, content, requestSettings)
.then((json) => {
var result = JSON.parse(json);
self._accessToken = result.access_token;
var now = new Date();
self._tokenExpiry = new Date(now.getTime() + result.expires_in*1000);
resolve();
})
.catch(() => { reject(); })
})
.catch(() => { reject(); });
});
};
_clientCredentialTokenProvider.prototype.retrieveToken = function () {
var self = this;
return new Promise(function (resolve, reject) {
if (self._tokenExpiry < new Date())
self._refreshToken()
.then(() => { resolve(self._accessToken); })
.catch(() => { reject(); });
else
resolve(this._accessToken);
});
};
// Exposed public methods
return _clientCredentialTokenProvider;
}));