diff --git a/loginradius-sdk/sdk/util/lr.js b/loginradius-sdk/sdk/util/lr.js index c1f5f5b..84d0f5a 100644 --- a/loginradius-sdk/sdk/util/lr.js +++ b/loginradius-sdk/sdk/util/lr.js @@ -1,20 +1,24 @@ /* * Created by LoginRadius Development Team - Copyright 2019 LoginRadius Inc. All rights reserved. -*/ -var https = require('https'); -var path = require('path'); + * Copyright 2019 LoginRadius Inc. All rights reserved. + */ + +const https = require('https'); +const path = require('path'); module.exports = function (config = {}) { + // Validate required configuration values if (config.apiKey === undefined || config.apiSecret === undefined) { - console.error('Please set apiKey API & apiSecret'); - return; + throw new Error('Please set apiKey and apiSecret'); } - config.HELPER_PATH = path.join(__dirname, 'helper.js'); - var helper = require(config.HELPER_PATH)(config); + // Set helper path + const HELPER_PATH = path.join(__dirname, 'helper.js'); + const helper = require(HELPER_PATH)(config); + + // Define request function config.request = function (type, resourcePath, queryParameters, formData) { - var isApiSecret; + let isApiSecret; if (queryParameters.apiSecret) { isApiSecret = queryParameters.apiSecret; delete queryParameters.apiSecret; @@ -24,7 +28,7 @@ module.exports = function (config = {}) { queryParameters.region = config.serverRegion; } - var headers = { 'Content-Type': 'application/json' }; + let headers = { 'Content-Type': 'application/json' }; if (queryParameters.sott) { Object.assign(headers, { 'X-LoginRadius-Sott': queryParameters.sott }); @@ -33,26 +37,27 @@ module.exports = function (config = {}) { if (!helper.isNullOrWhiteSpace(config.originIp)) { Object.assign(headers, { 'X-Origin-IP': config.originIp }); } - var queryString = helper.getQueryString(queryParameters); + const queryString = helper.getQueryString(queryParameters); if (queryParameters.access_token) { Object.assign(headers, { - authorization: 'Bearer ' + queryParameters.access_token + authorization: 'Bearer ' + queryParameters.access_token, }); delete queryParameters.access_token; } - var options = { + + let options = { method: type, hostname: resourcePath === 'ciam/appinfo' ? 'config.lrcontent.com' : config.apiDomain, path: '/' + resourcePath + (queryString ? '?' + queryString : ''), - headers: headers + headers: headers, }; if (formData !== '' && formData !== null) { - var out_text = JSON.stringify(formData); + const out_text = JSON.stringify(formData); Object.assign(headers, { 'Content-Length': out_text.length }); } @@ -69,16 +74,15 @@ module.exports = function (config = {}) { config.proxy.port; } - var customHeader = { + const customHeader = { 'X-LoginRadius-apiKey': config.apiKey, - 'X-LoginRadius-apiSecret': config.apiSecret + 'X-LoginRadius-apiSecret': config.apiSecret, }; if (config.fieldsParam && config.fieldsValue) { - var fieldsList; + let fieldsList; if (options.path.match(/\?./)) { - fieldsList = - config.fieldsParam + encodeURIComponent(config.fieldsValue); + fieldsList = config.fieldsParam + encodeURIComponent(config.fieldsValue); } else { fieldsList = '?fields=' + encodeURIComponent(config.fieldsValue); } @@ -90,7 +94,7 @@ module.exports = function (config = {}) { if (!options.path.match('apiKey')) { options.path += '&apiKey=' + encodeURIComponent(config.apiKey); } - var signingHeader = helper.generateSigningHeader( + const signingHeader = helper.generateSigningHeader( options, config.apiSecret ); @@ -100,27 +104,24 @@ module.exports = function (config = {}) { Object.assign(options.headers, customHeader); } } + return new Promise(function (resolve, reject) { const req = https .request(options, (resp) => { - var data = ''; + let data = ''; + if ( Object.prototype.hasOwnProperty.call(resp, 'statusCode') && resp.statusCode === 429 ) { - var jsondata = { - Description: 'Too many request in particular time frame', + const jsondata = { + Description: 'Too many requests in a particular time frame', ErrorCode: 429, - Message: 'Too many request in particular time frame', + Message: 'Too many requests in a particular time frame', IsProviderError: false, - ProviderErrorResponse: null + ProviderErrorResponse: null, }; - helper.manageRequestResponse( - 'serverError', - jsondata, - resolve, - reject - ); + helper.manageRequestResponse('serverError', jsondata, resolve, reject); } else { resp.on('data', (chunk) => { data += chunk; @@ -128,15 +129,10 @@ module.exports = function (config = {}) { resp.on('end', () => { try { - var response = JSON.parse(data); + const response = JSON.parse(data); helper.manageRequestResponse('', response, resolve, reject); } catch (err) { - helper.manageRequestResponse( - 'serverError', - '', - resolve, - reject - ); + helper.manageRequestResponse('serverError', '', resolve, reject); } }); } @@ -145,47 +141,26 @@ module.exports = function (config = {}) { helper.manageRequestResponse('serverError', error, resolve, reject); }); - if (out_text) { - req.write(out_text); + if (formData) { + req.write(formData); } req.end(); }); }; - config.apiDomain = - config.apiDomain && config.apiDomain !== '' - ? config.apiDomain - : 'api.loginradius.com'; + // Set default apiDomain if not provided + config.apiDomain = config.apiDomain && config.apiDomain !== '' ? config.apiDomain : 'api.loginradius.com'; + return { helper, - accountApi: require(path.join( - __dirname, - '..', - 'api', - 'account', - 'accountApi' - ))(config), - roleApi: require(path.join(__dirname, '..', 'api', 'account', 'roleApi'))( - config - ), - sottApi: require(path.join(__dirname, '..', 'api', 'account', 'sottApi'))( - config - ), - configurationApi: require(path.join( - __dirname, - '..', - 'api', - 'advanced', - 'configurationApi' - ))(config), - customObjectApi: require(path.join( - __dirname, - '..', - 'api', - 'advanced', - 'customObjectApi' - ))(config), + + // Group related APIs together for better organization + accountApi: require(path.join(__dirname, '..', 'api', 'account', 'accountApi'))(config), + roleApi: require(path.join(__dirname, '..', 'api', 'account', 'roleApi'))(config), + sottApi: require(path.join(__dirname, '..', 'api', 'account', 'sottApi'))(config), + configurationApi: require(path.join(__dirname, '..', 'api', 'advanced', 'configurationApi'))(config), + customObjectApi: require(path.join(__dirname, '..', 'api', 'advanced', 'customObjectApi'))(config), multiFactorAuthenticationApi: require(path.join( __dirname, '..', @@ -193,55 +168,13 @@ module.exports = function (config = {}) { 'advanced', 'multiFactorAuthenticationApi' ))(config), - webHookApi: require(path.join( - __dirname, - '..', - 'api', - 'advanced', - 'webHookApi' - ))(config), - consentManagementApi: require(path.join( - __dirname, - '..', - 'api', - 'advanced', - 'consentManagementApi' - ))(config), - reAuthenticationApi: require(path.join( - __dirname, - '..', - 'api', - 'advanced', - 'reAuthenticationApi' - ))(config), - authenticationApi: require(path.join( - __dirname, - '..', - 'api', - 'authentication', - 'authenticationApi' - ))(config), - oneTouchLoginApi: require(path.join( - __dirname, - '..', - 'api', - 'authentication', - 'oneTouchLoginApi' - ))(config), - passwordLessLoginApi: require(path.join( - __dirname, - '..', - 'api', - 'authentication', - 'passwordLessLoginApi' - ))(config), - phoneAuthenticationApi: require(path.join( - __dirname, - '..', - 'api', - 'authentication', - 'phoneAuthenticationApi' - ))(config), + webHookApi: require(path.join(__dirname, '..', 'api', 'advanced', 'webHookApi'))(config), + consentManagementApi: require(path.join(__dirname, '..', 'api', 'advanced', 'consentManagementApi'))(config), + reAuthenticationApi: require(path.join(__dirname, '..', 'api', 'advanced', 'reAuthenticationApi'))(config), + authenticationApi: require(path.join(__dirname, '..', 'api', 'authentication', 'authenticationApi'))(config), + oneTouchLoginApi: require(path.join(__dirname, '..', 'api', 'authentication', 'oneTouchLoginApi'))(config), + passwordLessLoginApi: require(path.join(__dirname, '..', 'api', 'authentication', 'passwordLessLoginApi'))(config), + phoneAuthenticationApi: require(path.join(__dirname, '..', 'api', 'authentication', 'phoneAuthenticationApi'))(config), riskBasedAuthenticationApi: require(path.join( __dirname, '..', @@ -249,33 +182,9 @@ module.exports = function (config = {}) { 'authentication', 'riskBasedAuthenticationApi' ))(config), - pinAuthenticationApi: require(path.join( - __dirname, - '..', - 'api', - 'authentication', - 'pinAuthenticationApi' - ))(config), - smartLoginApi: require(path.join( - __dirname, - '..', - 'api', - 'authentication', - 'smartLoginApi' - ))(config), - nativeSocialApi: require(path.join( - __dirname, - '..', - 'api', - 'social', - 'nativeSocialApi' - ))(config), - socialApi: require(path.join( - __dirname, - '..', - 'api', - 'social', - 'socialApi' - ))(config) + pinAuthenticationApi: require(path.join(__dirname, '..', 'api', 'authentication', 'pinAuthenticationApi'))(config), + smartLoginApi: require(path.join(__dirname, '..', 'api', 'authentication', 'smartLoginApi'))(config), + nativeSocialApi: require(path.join(__dirname, '..', 'api', 'social', 'nativeSocialApi'))(config), + socialApi: require(path.join(__dirname, '..', 'api', 'social', 'socialApi'))(config), }; };