Advertisement
Guest User

Untitled

a guest
Feb 14th, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.21 KB | None | 0 0
  1. /**
  2. *
  3. * Created by mayank on 15/7/16.
  4. */
  5.  
  6. var request = require("request");
  7. var cheerio = require('cheerio');
  8. var parse = require('csv-parse');
  9. var DateFormat = require("../../utils/DateFormat")
  10. var Async = require("async")
  11. var ResponseHandler = require("../../utils/ResponseHandler")
  12. var DateFormat = require("../../utils/DateFormat")
  13. var AdPartnerService = require("../adPartner/AdPartnerService")
  14. var SiteAdPartnerService = require("../siteAdPartner/SiteAdPartnerService")
  15. var StatsService = require("../stats/StatsService")
  16. var moment = require("moment");
  17. var _ = require('lodash');
  18.  
  19. /**
  20. * this method is called to fetch the sovrn site data and save the new adpartner for sovrn
  21. * @param data
  22. * @param res
  23. */
  24. var sovrnGetSite = function (data, res) {
  25. var adPartnerId = data.adPartnerId
  26. var siteId = data.siteId
  27. var userId = data.userId;
  28. var username = data.username;
  29. var password = data.password;
  30. var connectionName = data.connectionName;
  31. var advertiserOrPublisher = data.advertiserOrPublisher;
  32.  
  33. Async.auto({
  34. checkAuthCred: Async.apply(sovrnLogin, username, password),
  35. getSovrnSite: ['checkAuthCred', Async.apply(getSovrnSites)],
  36. createSiteAdPartner: ['getSovrnSite', Async.apply(SiteAdPartnerService.createPublisherSiteAdPartnerUsingAdPartner,
  37. userId, siteId, adPartnerId, connectionName, advertiserOrPublisher)]
  38. }, function (err, results) {
  39.  
  40. if (err) {
  41. ResponseHandler.errorResponseHandler(res, null, "Invalid Credentials")
  42. }
  43. else {
  44. ResponseHandler.successResponseHandler(res, {
  45. sites: results.getSovrnSite.site,
  46. siteAdPartner: results.createSiteAdPartner
  47. })
  48. }
  49. })
  50. }
  51.  
  52. /**
  53. * this method is called to login sovrn
  54. * @param username
  55. * @param password
  56. * @param next
  57. */
  58. var sovrnLogin = function (username, password, next) {
  59. request.post({
  60. url: "https://api.sovrn.com/oauth/token",
  61. form: {
  62. grant_type: "password",
  63. username: username,
  64. password: password,
  65. client_id: "sovrn",
  66. client_secret: "sovrn"
  67. }
  68. }, function (err, httpResponse, body) {
  69. try {
  70. if (httpResponse.statusCode != 200) {
  71. err = true
  72. next(err)
  73. } else {
  74. var authCred = {
  75. username: username,
  76. password: password
  77. }
  78. next(null, {"authCred": authCred, access_details: JSON.parse(body)})
  79. }
  80. }catch (err){
  81. logger.error("Error in sovrnLogin ",err)
  82. next(null,err)
  83. }
  84. });
  85. }
  86.  
  87.  
  88. /**
  89. * this method is called to fetch the sites of sovrn
  90. * @param results
  91. * @param next
  92. */
  93. var getSovrnSites = function (results, next) {
  94. var authorization = results.checkAuthCred.access_details.token_type + ' ' + results.checkAuthCred.access_details.access_token;
  95. request({
  96. url: "https://api.sovrn.com/account/user",
  97. headers: {
  98. Authorization: authorization
  99. }
  100. }, function (err, httpResponse, body) {
  101. if (err) {
  102. err = true
  103. next(err)
  104. } else {
  105. var userDetails = JSON.parse(body);
  106. var site = [];
  107. for (var attribute in userDetails.websites) {
  108. if (userDetails.websites[attribute].approvalState == "approvedWithSubdomains") {
  109. site.push({
  110. site_id: userDetails.websites[attribute].id,
  111. site_name: userDetails.websites[attribute].site
  112. })
  113. }
  114.  
  115. }
  116. results.checkAuthCred.authCred.iid = userDetails.iid;
  117. next(null, {"site": site})
  118. }
  119. })
  120. }
  121.  
  122. /**
  123. * this method to fetch the data of the selected site of sovrn
  124. * @param data
  125. * @param res
  126. */
  127. var sovrnGetData = function (data, res) {
  128. var adPartnerId = data.adPartnerId
  129. var siteId = data.siteId
  130. var userId = data.userId
  131. var siteAdPartnerId = data.siteAdPartnerId
  132. var externalSiteId = data.externalSiteId
  133. var widgetForAuthCred = data.widgets
  134. var widgetToGetData = []
  135.  
  136. for (var i = 0; i < widgetForAuthCred.length; i++) {
  137. widgetToGetData.push(widgetForAuthCred[i].widgetId)
  138. }
  139.  
  140. var sitesAndWidgets = {}
  141. sitesAndWidgets.sites = externalSiteId
  142. sitesAndWidgets.widgets = widgetForAuthCred
  143.  
  144. Async.auto({
  145. siteAdPartner: Async.apply(SiteAdPartnerService.getSiteAdPartnerById, siteAdPartnerId)
  146. }, function (err, results) {
  147.  
  148. var auth_cred = JSON.parse(results.siteAdPartner.auth_cred)
  149. var username = auth_cred.username
  150. var password = auth_cred.password
  151. var sovrnSitesToFetch = externalSiteId
  152. var startDate = configParamsGlobal.AD_PARTNER_GET_DATA_START_DATE
  153.  
  154. Async.auto({
  155. authCred: Async.apply(sovrnLogin, username, password),
  156. getData: ['authCred', Async.apply(getDataFromSovrn, sovrnSitesToFetch,widgetToGetData, auth_cred, startDate)],
  157. statsObj: ['getData', Async.apply(createStatsObjForSovrn, userId, siteId, adPartnerId, siteAdPartnerId)],
  158. createBatchStats: ['statsObj', StatsService.createBatchStats],
  159. siteAdPartnerAccountSet: ['getData', Async.apply(SiteAdPartnerService.siteAdPartnerAccountSet, siteAdPartnerId, sitesAndWidgets)]
  160. }, function (err, results) {
  161. if (err) {
  162. err = true
  163. next(err)
  164. } else {
  165. ResponseHandler.successResponseHandler(res, true, "Save Succefully")
  166. }
  167.  
  168. })
  169. })
  170. }
  171.  
  172. /**
  173. * this method is called to get the site data selected by the user
  174. * @param sovrnSitesToFetch
  175. * @param startDate
  176. * @param results
  177. * @param next
  178. */
  179. var getDataFromSovrn = function (sovrnSitesToFetch, widgetIds, authCred, startDate, results, next) {
  180. var endDate = DateFormat.getTodatDate();
  181. var mapFunction = {};
  182. for (var i = 0; i < sovrnSitesToFetch.length; i++) {
  183. mapFunction[i] = Async.apply(sovrnParallel, sovrnSitesToFetch[i], authCred, results.authCred, startDate, endDate)
  184. }
  185.  
  186. Async.parallel(mapFunction, function (err, results) {
  187. var data = [];
  188. try {
  189. for (var i = 0; i < Object.keys(results).length; i++) {
  190. for (var j = 0; j < Object.keys(results['' + i]).length; j++) {
  191. for (k = 0; k < results['' + i]['' + j]["body"]["display"]["tags"].length; k++) {
  192. var stats = {};
  193. if (_.includes(widgetIds, results['' + i]['' + j]["body"]["display"]["tags"][k]["zoneId"].toString().trim())) {
  194. stats.date = moment(new Date(results['' + i]['' + j]["body"]["startDate"])).format('YYYY-MM-DD');
  195. stats.impressions = results['' + i]['' + j]["body"]["display"]["tags"][k].impressions;
  196. stats.revenue = results['' + i]['' + j]["body"]["display"]["tags"][k].earnings;
  197. stats.site = results['' + i]['' + j]["body"]["site"];
  198. stats.siteId = results['' + i]['' + j]["siteId"]
  199. stats.widget_name = results['' + i]['' + j]["body"]["display"]["tags"][k]["zoneTitle"].trim()
  200. stats.widget_id = results['' + i]['' + j]["body"]["display"]["tags"][k]["zoneId"].toString().trim()
  201. data.push(stats);
  202. }
  203.  
  204. }
  205.  
  206. }
  207.  
  208. }
  209. next(err, data);
  210. }catch(err){
  211. logger.error("Err in getDataFromSovrn ",err)
  212. next(null,"Err in getDataFromSovrn ")
  213. }
  214. })
  215.  
  216. }
  217.  
  218. /**
  219. * this method is called to fetch the data of sovrn combined
  220. * @param sovrnData
  221. * @param authCred
  222. * @param accesDetails
  223. * @param startDate
  224. * @param endDate
  225. * @param next
  226. */
  227. var sovrnParallel = function (sovrnData, authCred, accesDetails, startDate, endDate, next) {
  228. var actualEndDate = endDate;
  229. var dateToSend = new Date(configParamsGlobal.sovrn.START_DATE);
  230. var endDate = new Date(configParamsGlobal.sovrn.START_DATE);
  231. var todaysDate = new Date();
  232. var numberOfDaysToAdd = 1;
  233. var mapFunction = {};
  234. //endDate.setDate(endDate.getDate() + numberOfDaysToAdd);
  235. var i = 0;
  236. var isLoopToStop = false
  237. try {
  238. while (dateToSend.getTime() < todaysDate.getTime() && isLoopToStop == false) {
  239. if (dateToSend.getMonth() == todaysDate.getMonth() && dateToSend.getDate() == todaysDate.getDate()) {
  240. //endDate = new Date(actualEndDate);
  241. isLoopToStop = true;
  242. break;
  243. }
  244. var authorization = accesDetails.access_details.token_type + ' ' + accesDetails.access_details.access_token;
  245. var url = "https://api.sovrn.com/earnings/breakout/all?site=" + sovrnData.siteName.trim() + "&startDate=" + Date.UTC(dateToSend.getFullYear(), dateToSend.getMonth(), dateToSend.getDate()) + "&endDate=" + Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate()) + "&iid=" + parseInt(authCred.iid);
  246. mapFunction[i] = Async.apply(sovrnSiteDataFetchByDaysParallel, url, authorization, sovrnData.siteId)
  247. dateToSend.setDate(dateToSend.getDate() + 1);
  248. endDate.setDate(endDate.getDate() + 1/*getDaysInMonth(dateToSend.getMonth()+1,dateToSend.getFullYear())*/);
  249. i++;
  250. }
  251. Async.parallel(mapFunction, function (err, results) {
  252. next(null, results);
  253. })
  254. }catch (err){
  255. logger.error("Err in sovrnParallel ",err)
  256. next(null,"Err in sovrnParallel ")
  257. }
  258.  
  259. }
  260.  
  261.  
  262. /**
  263. * this method is called to fetch the data from sovrn by days
  264. * @param url
  265. * @param auth
  266. * @param next
  267. */
  268. var sovrnSiteDataFetchByDaysParallel = function (url, auth, siteId, next) {
  269. request.get({
  270. url: url,
  271. headers: {
  272. Authorization: auth
  273. }
  274. }, function (err, httpResponse, body) {
  275. if (err) {
  276. err = true
  277. next(err)
  278. } else {
  279. try {
  280. next(null, {"body": JSON.parse(body), siteId: siteId});
  281. }catch (err){
  282. logger.error("Error in sovrnSiteDataFetchByDaysParallel "+err)
  283. next(null,err)
  284. }
  285. }
  286. })
  287. }
  288.  
  289.  
  290. /**
  291. * method to check no. of days in current month
  292. * @param m
  293. * @param y
  294. * @returns {number}
  295. */
  296. function getDaysInMonth(m, y) {
  297. return /8|3|5|10/.test(--m) ? 30 : m == 1 ? (!(y % 4) && y % 100) || !(y % 400) ? 29 : 28 : 31;
  298. }
  299.  
  300.  
  301. /**
  302. *
  303. * @param userId
  304. * @param siteId
  305. * @param adPartnerId
  306. * @param siteAdPartnerId
  307. * @param results
  308. * @param next
  309. */
  310. var createStatsObjForSovrn = function (userId, siteId, adPartnerId, siteAdPartnerId, results, next) {
  311. var rows = results.getData
  312. var statsObj = []
  313. try {
  314. for (var i = 0; i < rows.length; i++) {
  315. var stats = {}
  316. stats.adpartner_id = adPartnerId
  317. stats.date = rows[i].date
  318. stats.users_id = userId
  319. stats.site_id = siteId
  320. stats.partner_id = adPartnerId
  321. stats.sites_adpartners_id = siteAdPartnerId
  322. stats.impressions = rows[i].impressions
  323. stats.revenue = rows[i].revenue
  324. stats.widget_name = rows[i].widget_name.trim()
  325. stats.widget_id = rows[i].widget_id.trim()
  326. stats.clicks = rows[i].clicks
  327. stats.external_site_name = rows[i].site.trim()
  328. stats.external_site_id = rows[i].siteId.trim()
  329. stats.uniquelyIdentifyKey = uniquelyIdentifyKey(stats.sites_adpartners_id, stats.date, siteId, stats.external_site_name, stats.external_site_id, stats.widget_name, stats.widget_id);
  330. statsObj.push(stats)
  331. }
  332. next(null, statsObj)
  333. }catch (err){
  334. logger.error("Err in createStatsObjForSovrn ",err)
  335. next(null,"Err in createStatsObjForSovrn ")
  336. }
  337. }
  338.  
  339.  
  340. /**
  341. *
  342. * @param siteAdPartner
  343. * @param date
  344. * @param siteId
  345. * @param sitename
  346. * @param widgetId
  347. * @param widgetName
  348. * @returns {string}
  349. */
  350. var uniquelyIdentifyKey = function (siteAdPartner, date, siteId, externalSiteName, externalSiteId, widget_name,widget_id) {
  351. return siteAdPartner + "_" + date + "_" + siteId + "_" + externalSiteName + "_" + externalSiteId + "_" + widget_name+"_"+widget_id
  352. }
  353.  
  354. /**
  355. * this method is used to get the external site for update in sovrn
  356. * @param siteId
  357. * @param siteAdPartnerId
  358. * @param adPartnerId
  359. * @param previousAdUnits
  360. * @param res
  361. */
  362. var getExternalSiteSovrn = function (siteId, siteAdPartnerId, adPartnerId, authCred, res) {
  363. var startDate = configParamsGlobal.AD_PARTNER_GET_DATA_START_DATE
  364. var endate = DateFormat.getTodatDate()
  365. var username = authCred.username;
  366. var password = authCred.password;
  367. Async.auto({
  368. checkAuthCred: Async.apply(sovrnLogin, username, password),
  369. getSovrnSite: ['checkAuthCred', Async.apply(getSovrnSites)],
  370.  
  371. }, function (err, result) {
  372. var sitestoSend = []
  373. var sitesToGetAllWidgets = authCred.sites.sites
  374. for (var i = 0; i < sitesToGetAllWidgets.length; i++) {
  375. sitestoSend.push({
  376. id: sitesToGetAllWidgets[i].siteId+"***"+sitesToGetAllWidgets[i].siteName.trim()
  377. })
  378. }
  379. Async.auto({
  380. checkAuthCred: Async.apply(sovrnLogin, username, password),
  381. getSovrnWidget: ['checkAuthCred', Async.apply(getSovrnSitesWidgetData, sitestoSend, startDate, endate, authCred)]
  382. }, function (err, results) {
  383. var data = {}
  384. data.allSites = result.getSovrnSite
  385. data.allWidgets = results.getSovrnWidget
  386. data.previousSelectedSite = []//authCred.sites;
  387. for (var i = 0; i < authCred.sites.sites.length; i++) {
  388. var dataToPush = {};
  389. dataToPush.siteId = parseInt(authCred.sites.sites[i].siteId);
  390. dataToPush.siteName = authCred.sites.sites[i].siteName.trim();
  391. data.previousSelectedSite.push(dataToPush);
  392. }
  393.  
  394. data.previousSelectedWidget = []//authCred.sites;
  395. for (var i = 0; i < authCred.sites.widgets.length; i++) {
  396. var dataToPush = {};
  397. dataToPush.id = authCred.sites.widgets[i].widgetId+"***"+authCred.sites.widgets[i].widgetName;
  398. dataToPush.label = authCred.sites.widgets[i].widgetName;
  399. data.previousSelectedWidget.push(dataToPush);
  400. }
  401.  
  402. data.partnerName = configParamsGlobal.adPartner.Sovrn.partner_name
  403. ResponseHandler.successResponseHandler(res, data);
  404. })
  405. })
  406. }
  407.  
  408. /**
  409. * call to update stats table according to edited sites
  410. * @param authCred
  411. * @param data
  412. * @param adPartnerId
  413. * @param updateSites
  414. * @param res
  415. */
  416. var updateExternalSiteFromSovrn = function (authCred, data, adPartnerId, updateSites, updateWidgets, res) {
  417. var username = authCred.username
  418. var password = authCred.password
  419. var siteToUpdate = []
  420. for (var i = 0; i < updateSites.length; i++) {
  421. siteToUpdate.push({
  422. siteId: updateSites[i]['id'].split("***")[0].trim(),
  423. siteName: updateSites[i]['id'].split("***")[1].trim()
  424. })
  425. }
  426.  
  427. var widgetToUpdateAuthCred = []
  428. for(var i = 0 ; i<updateWidgets.length ; i++){
  429. widgetToUpdateAuthCred.push({
  430. widgetId:updateWidgets[i]['id'].split("***")[0].trim(),
  431. widgetName:updateWidgets[i]['id'].split("***")[1].trim(),
  432. })
  433. }
  434. var widgetToSendInGetData = []
  435. for (var i = 0; i < updateWidgets.length; i++) {
  436. widgetToSendInGetData.push(updateWidgets[i]['id'].split("***")[0].trim())
  437. }
  438.  
  439.  
  440.  
  441. var sitesAndWidgetsToUpdateInAuthCred = {
  442. sites: siteToUpdate,
  443. widgets: widgetToUpdateAuthCred
  444. }
  445.  
  446.  
  447. var startDate = configParamsGlobal.AD_PARTNER_GET_DATA_START_DATE
  448. Async.auto({
  449. getIntersectionSovrnData: Async.apply(checkIntersectionSovrnData, authCred.sites, siteToUpdate, widgetToUpdateAuthCred),
  450. }, function (err, results) {
  451. var newAddedSite = results.getIntersectionSovrnData.toUpdateData.toAddSite
  452. var deleteSite = results.getIntersectionSovrnData.toUpdateData.toDeleteSite
  453. var deleteWidget = results.getIntersectionSovrnData.toUpdateData.toDeleteWidget
  454. var siteToDelete = []
  455. for (var i = 0; i < deleteSite.length; i++) {
  456. siteToDelete.push({
  457. "siteId": deleteSite[i]['siteId'].trim(),
  458. "siteName": deleteSite[i]['siteName'].trim()
  459. })
  460. }
  461. Async.auto({
  462. authCred: Async.apply(sovrnLogin, username, password),
  463. getData: ['authCred', Async.apply(getDataFromSovrn, siteToUpdate, widgetToSendInGetData, authCred, startDate)],
  464. statsObj: ['getData', Async.apply(createStatsObjForSovrn, data.userId, data.siteId, adPartnerId, data.siteAdPartnerId)],
  465. createBatchStats: ['statsObj', StatsService.createBatchStats],
  466. siteAdPartnerAccountSet: ['getData', Async.apply(SiteAdPartnerService.siteAdPartnerAccountSet, data.siteAdPartnerId, sitesAndWidgetsToUpdateInAuthCred)],
  467. deleteUnUsedStats: ['getData', Async.apply(StatsService.deleteUnUsedStatsByWidgetSovrn, deleteWidget ,data.siteAdPartnerId)]
  468. }, function (err, results) {
  469. if (err) {
  470.  
  471. } else {
  472. ResponseHandler.successResponseHandler(res, true, "Save Succefully")
  473. }
  474. })
  475. })
  476.  
  477. }
  478.  
  479. /**
  480. * method to find sites to be deleted and to be added.
  481. * @param sovrnData
  482. * @param siteToUpdate
  483. * @param next
  484. */
  485. var checkIntersectionSovrnData = function (sovrnData, siteToUpdate, widgetToUpdate, next) {
  486. var previousSites = sovrnData.sites
  487. var previousWidgets = sovrnData.widgets
  488. var newSites = siteToUpdate;
  489. var newWidgets = widgetToUpdate;
  490. var dataToReturn = {};
  491. dataToReturn.toAddSite = _.differenceBy(newSites, previousSites, 'siteId');
  492. dataToReturn.toDeleteSite = _.differenceBy(previousSites, newSites, 'siteId');
  493. dataToReturn.toDeleteWidget = _.differenceBy(previousWidgets, newWidgets, 'widgetId');
  494. next(null, {toUpdateData: dataToReturn})
  495. }
  496.  
  497. /**
  498. * this method is used to get the sovrn widget
  499. * @param sites
  500. * @param sitedAdPartnerId
  501. * @param res
  502. */
  503. var getSovrnSiteWidget = function (sites, sitedAdPartnerId, res) {
  504. Async.auto({
  505. siteAdPartner: Async.apply(SiteAdPartnerService.getSiteAdPartnerById, sitedAdPartnerId)
  506. }, function (err, results) {
  507. var endDate = DateFormat.getTodatDate();
  508. var auth_cred = JSON.parse(results.siteAdPartner.auth_cred)
  509. var username = auth_cred.username
  510. var password = auth_cred.password
  511. var sitesToFetch = sites
  512. var siteData = [];
  513. for (var i = 0; i < sitesToFetch.length; i++) {
  514.  
  515. siteData.push(sitesToFetch[i].id.split("***")[0].trim());
  516. }
  517.  
  518. var startDate = configParamsGlobal.AD_PARTNER_GET_DATA_START_DATE
  519.  
  520. Async.auto({
  521. checkAuthCred: Async.apply(sovrnLogin, username, password),
  522. getSovrnSiteWidget: ['checkAuthCred', Async.apply(getSovrnSitesWidgetData, sites, startDate, endDate, auth_cred)]
  523. }, function (err, results) {
  524.  
  525. if (err) {
  526. ResponseHandler.errorResponseHandler(res, null, "Invalid Credentials")
  527. }
  528. else {
  529. ResponseHandler.successResponseHandler(res, results.getSovrnSiteWidget, "Save Succefully")
  530. }
  531. })
  532.  
  533.  
  534. })
  535. }
  536.  
  537.  
  538. /**
  539. * this method is called to fetch the widget name from sovren site
  540. * @param sites
  541. * @param startDate
  542. * @param endate
  543. * @param auth_cred
  544. * @param results
  545. * @param next
  546. */
  547. var getSovrnSitesWidgetData = function (sites, startDate, endate, auth_cred, results, next) {
  548. var authorization = results.checkAuthCred.access_details.token_type + ' ' + results.checkAuthCred.access_details.access_token;
  549. var mapFunction = {};
  550. for (var i = 0; i < sites.length; i++) {
  551. mapFunction[i] = Async.apply(sovrnParallelWidgets, sites[i], authorization, parseInt(auth_cred.iid), startDate, endate)
  552. }
  553. Async.parallel(mapFunction, function (err, results) {
  554. var dataToSend = [];
  555. for (var i = 0; i < Object.keys(results).length; i++) {
  556. for (var j = 0; j < results["" + i].display.tags.length; j++) {
  557. var data = {};
  558.  
  559. data.id = results["" + i].display.tags[j].zoneId+"***"+results["" + i].display.tags[j].zoneTitle;
  560. data.label = results["" + i].display.tags[j].zoneTitle
  561. dataToSend.push(data);
  562. }
  563. }
  564. var newDataToSend = _.uniq(dataToSend);
  565. next(err, newDataToSend);
  566. })
  567. }
  568.  
  569. /**
  570. * this method to run a parallel call to fetch widget
  571. * @param site
  572. * @param authorization
  573. * @param iid
  574. * @param startDate
  575. * @param endDate
  576. * @param next
  577. */
  578. var sovrnParallelWidgets = function (site, authorization, iid, startDate, endDate, next) {
  579. var startDateTime = new Date(startDate);
  580. var endDateTime = new Date(endDate);
  581. var url = "https://api.sovrn.com/earnings/breakout/all?site=" + site.id.split("***")[1].trim() + "&startDate=" + Date.UTC(startDateTime.getFullYear(), startDateTime.getMonth(), startDateTime.getDate()) + "&endDate=" + Date.UTC(endDateTime.getFullYear(), endDateTime.getMonth(), endDateTime.getDate()) + "&iid=" + iid + "&country=US"
  582. request({
  583. url: url,
  584. headers: {
  585. Authorization: authorization
  586. }
  587. }, function (err, httpResponse, body) {
  588. next(err, JSON.parse(body));
  589. })
  590. }
  591.  
  592. module.exports = {
  593. getSovrnSiteWidget: getSovrnSiteWidget,
  594. sovrnGetSite: sovrnGetSite,
  595. sovrnGetData: sovrnGetData,
  596. getExternalSiteSovrn: getExternalSiteSovrn,
  597. sovrnLogin: sovrnLogin,
  598. getDataFromSovrn: getDataFromSovrn,
  599. createStatsObjForSovrn: createStatsObjForSovrn,
  600. updateExternalSiteFromSovrn: updateExternalSiteFromSovrn
  601. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement