UNPKG

@zeroid/trimble.identity.clientcredentialtokenprovider

Version:

An implementation of ITokenProvider for OAuth client credential grant type

65 lines (61 loc) 2.74 kB
// 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; }));