@querc/squidex-client
Version:
NodeJS client for the [Squidex](https://squidex.io/) CMS
78 lines (60 loc) • 7.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AuthenticationManager = void 0;
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/**
* Handles authentication for Squidex requests
*/
class AuthenticationManager {
constructor(config, httpClient) {
this.config = config;
this.httpClient = httpClient;
_defineProperty(this, "accessToken", void 0);
_defineProperty(this, "accessTokenExpiresOn", void 0);
}
/**
* Authenticate with the Squidex server
*
* Resolves with the access token
*/
async authenticate() {
if (this.requiresAuthentication()) {
delete this.accessToken;
delete this.accessTokenExpiresOn;
const response = await this.httpClient.send({
method: 'POST',
path: '/identity-server/connect/token',
data: {
/* eslint-disable @typescript-eslint/camelcase */
grant_type: 'client_credentials',
scope: 'squidex-api',
client_secret: this.config.clientSecret,
client_id: this.config.clientId
/* eslint-enable */
},
contentType: 'application/x-www-form-urlencoded'
});
/* eslint-disable @typescript-eslint/camelcase */
this.accessToken = response.access_token;
/* eslint-enable */
const now = new Date();
/* eslint-disable @typescript-eslint/camelcase */
now.setTime(now.getTime() + response.expires_in * 1000);
/* eslint-enable */
this.accessTokenExpiresOn = new Date(now.toUTCString());
}
return this.accessToken;
}
requiresAuthentication() {
if (this.accessToken === undefined || this.accessTokenExpiresOn === undefined) {
return true;
} // Check 1 day before token expiry, just to be sure
const now = new Date();
now.setDate(now.getDate() - 1);
return this.accessTokenExpiresOn < new Date(now.toUTCString());
}
}
exports.AuthenticationManager = AuthenticationManager;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoZW50aWNhdGlvbi9hdXRoZW50aWNhdGlvbi1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbIkF1dGhlbnRpY2F0aW9uTWFuYWdlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiaHR0cENsaWVudCIsImF1dGhlbnRpY2F0ZSIsInJlcXVpcmVzQXV0aGVudGljYXRpb24iLCJhY2Nlc3NUb2tlbiIsImFjY2Vzc1Rva2VuRXhwaXJlc09uIiwicmVzcG9uc2UiLCJzZW5kIiwibWV0aG9kIiwicGF0aCIsImRhdGEiLCJncmFudF90eXBlIiwic2NvcGUiLCJjbGllbnRfc2VjcmV0IiwiY2xpZW50U2VjcmV0IiwiY2xpZW50X2lkIiwiY2xpZW50SWQiLCJjb250ZW50VHlwZSIsImFjY2Vzc190b2tlbiIsIm5vdyIsIkRhdGUiLCJzZXRUaW1lIiwiZ2V0VGltZSIsImV4cGlyZXNfaW4iLCJ0b1VUQ1N0cmluZyIsInVuZGVmaW5lZCIsInNldERhdGUiLCJnZXREYXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFLQTs7O0FBR08sTUFBTUEscUJBQU4sQ0FBNEI7QUFJL0JDLEVBQUFBLFdBQVcsQ0FBa0JDLE1BQWxCLEVBQXVFQyxVQUF2RSxFQUErRjtBQUFBLFNBQTdFRCxNQUE2RSxHQUE3RUEsTUFBNkU7QUFBQSxTQUF4QkMsVUFBd0IsR0FBeEJBLFVBQXdCOztBQUFBOztBQUFBO0FBQUU7QUFFNUc7Ozs7Ozs7QUFLQSxRQUFhQyxZQUFiLEdBQTZDO0FBQ3pDLFFBQUksS0FBS0Msc0JBQUwsRUFBSixFQUFtQztBQUMvQixhQUFPLEtBQUtDLFdBQVo7QUFDQSxhQUFPLEtBQUtDLG9CQUFaO0FBRUEsWUFBTUMsUUFBUSxHQUFHLE1BQU0sS0FBS0wsVUFBTCxDQUFnQk0sSUFBaEIsQ0FBZ0U7QUFDbkZDLFFBQUFBLE1BQU0sRUFBRSxNQUQyRTtBQUVuRkMsUUFBQUEsSUFBSSxFQUFFLGdDQUY2RTtBQUduRkMsUUFBQUEsSUFBSSxFQUFFO0FBQ0Y7QUFDQUMsVUFBQUEsVUFBVSxFQUFFLG9CQUZWO0FBR0ZDLFVBQUFBLEtBQUssRUFBRSxhQUhMO0FBSUZDLFVBQUFBLGFBQWEsRUFBRSxLQUFLYixNQUFMLENBQVljLFlBSnpCO0FBS0ZDLFVBQUFBLFNBQVMsRUFBRSxLQUFLZixNQUFMLENBQVlnQjtBQUN2Qjs7QUFORSxTQUg2RTtBQVduRkMsUUFBQUEsV0FBVyxFQUFFO0FBWHNFLE9BQWhFLENBQXZCO0FBY0E7O0FBQ0EsV0FBS2IsV0FBTCxHQUFtQkUsUUFBUSxDQUFDWSxZQUE1QjtBQUNBOztBQUVBLFlBQU1DLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7QUFDQTs7QUFDQUQsTUFBQUEsR0FBRyxDQUFDRSxPQUFKLENBQVlGLEdBQUcsQ0FBQ0csT0FBSixLQUFnQmhCLFFBQVEsQ0FBQ2lCLFVBQVQsR0FBc0IsSUFBbEQ7QUFDQTs7QUFDQSxXQUFLbEIsb0JBQUwsR0FBNEIsSUFBSWUsSUFBSixDQUFTRCxHQUFHLENBQUNLLFdBQUosRUFBVCxDQUE1QjtBQUNIOztBQUVELFdBQU8sS0FBS3BCLFdBQVo7QUFDSDs7QUFFT0QsRUFBQUEsc0JBQVIsR0FBMEM7QUFDdEMsUUFBSSxLQUFLQyxXQUFMLEtBQXFCcUIsU0FBckIsSUFBa0MsS0FBS3BCLG9CQUFMLEtBQThCb0IsU0FBcEUsRUFBK0U7QUFDM0UsYUFBTyxJQUFQO0FBQ0gsS0FIcUMsQ0FLdEM7OztBQUNBLFVBQU1OLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7QUFDQUQsSUFBQUEsR0FBRyxDQUFDTyxPQUFKLENBQVlQLEdBQUcsQ0FBQ1EsT0FBSixLQUFnQixDQUE1QjtBQUVBLFdBQU8sS0FBS3RCLG9CQUFMLEdBQTRCLElBQUllLElBQUosQ0FBU0QsR0FBRyxDQUFDSyxXQUFKLEVBQVQsQ0FBbkM7QUFDSDs7QUF0RDhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3F1aWRleENsaWVudENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IFNxdWlkZXhPQXV0aFJlcXVlc3QgfSBmcm9tICcuL3NxdWlkZXgtb2F1dGgtcmVxdWVzdCc7XG5pbXBvcnQgeyBTcXVpZGV4T0F1dGhSZXNwb25zZSB9IGZyb20gJy4vc3F1aWRleC1vYXV0aC1yZXNwb25zZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnLi4vaHR0cCc7XG5cbi8qKlxuICogSGFuZGxlcyBhdXRoZW50aWNhdGlvbiBmb3IgU3F1aWRleCByZXF1ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25NYW5hZ2VyIHtcbiAgICBwcml2YXRlIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBhY2Nlc3NUb2tlbkV4cGlyZXNPbjogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBTcXVpZGV4Q2xpZW50Q29uZmlndXJhdGlvbiwgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSB7fVxuXG4gICAgLyoqXG4gICAgICogQXV0aGVudGljYXRlIHdpdGggdGhlIFNxdWlkZXggc2VydmVyXG4gICAgICpcbiAgICAgKiBSZXNvbHZlcyB3aXRoIHRoZSBhY2Nlc3MgdG9rZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgYXV0aGVudGljYXRlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICh0aGlzLnJlcXVpcmVzQXV0aGVudGljYXRpb24oKSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYWNjZXNzVG9rZW47XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hY2Nlc3NUb2tlbkV4cGlyZXNPbjtcblxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuc2VuZDxTcXVpZGV4T0F1dGhSZXF1ZXN0LCBTcXVpZGV4T0F1dGhSZXNwb25zZT4oe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIHBhdGg6ICcvaWRlbnRpdHktc2VydmVyL2Nvbm5lY3QvdG9rZW4nLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2NhbWVsY2FzZSAqL1xuICAgICAgICAgICAgICAgICAgICBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6ICdzcXVpZGV4LWFwaScsXG4gICAgICAgICAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY29uZmlnLmNsaWVudFNlY3JldCxcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAgKi9cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvY2FtZWxjYXNlICovXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gcmVzcG9uc2UuYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuXG4gICAgICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2NhbWVsY2FzZSAqL1xuICAgICAgICAgICAgbm93LnNldFRpbWUobm93LmdldFRpbWUoKSArIHJlc3BvbnNlLmV4cGlyZXNfaW4gKiAxMDAwKTtcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgKi9cbiAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW5FeHBpcmVzT24gPSBuZXcgRGF0ZShub3cudG9VVENTdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hY2Nlc3NUb2tlbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcXVpcmVzQXV0aGVudGljYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFjY2Vzc1Rva2VuID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY2Nlc3NUb2tlbkV4cGlyZXNPbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIDEgZGF5IGJlZm9yZSB0b2tlbiBleHBpcnksIGp1c3QgdG8gYmUgc3VyZVxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBub3cuc2V0RGF0ZShub3cuZ2V0RGF0ZSgpIC0gMSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzVG9rZW5FeHBpcmVzT24gPCBuZXcgRGF0ZShub3cudG9VVENTdHJpbmcoKSk7XG4gICAgfVxufVxuIl19