diff --git a/lib/plugins/event_dispatcher/index.js b/lib/plugins/event_dispatcher/index.js index 704cfe50c..8aa6a6626 100644 --- a/lib/plugins/event_dispatcher/index.js +++ b/lib/plugins/event_dispatcher/index.js @@ -1,35 +1,54 @@ var _ = require('lodash/core'); var bluebird = require('bluebird'); +var POST_METHOD = 'POST'; +var GET_METHOD = 'GET'; + module.exports = { /** * Sample event dispatcher implementation for tracking impression and conversions * Users of the SDK can provide their own implementation - * @param {string} url - * @param {Object} params + * @param {Object} eventObj * @return {Promise} */ - dispatchEvent: function(url, params) { - return new bluebird(function(resolve, reject) { - // add param for cors headers to be sent by the log endpoint - url += '?wxhr=true'; - if (params) { - url += '&' + toQueryString(params); - } + dispatchEvent: function(eventObj) { + var url = eventObj.url; + var params = eventObj.params; + + if (eventObj.httpVerb === POST_METHOD) { + return new bluebird(function(resolve, reject) { + + var req = new XMLHttpRequest(); + req.open(POST_METHOD, url, true); + req.setRequestHeader('Content-Type', 'application/json'); + req.addEventListener('load', function (evt) { + var responseObj = evt.target.responseText; + resolve(responseObj); + }); + req.send(JSON.stringify(params)); + }) + } else { + return new bluebird(function (resolve, reject) { + // add param for cors headers to be sent by the log endpoint + url += '?wxhr=true'; + if (params) { + url += '&' + toQueryString(params); + } - var req = new XMLHttpRequest(); - req.open('GET', url, true); - req.addEventListener('load', function(evt) { - var responseObj = JSON.parse(evt.target.responseText); - resolve(responseObj); + var req = new XMLHttpRequest(); + req.open(GET_METHOD, url, true); + req.addEventListener('load', function (evt) { + var responseObj = JSON.parse(evt.target.responseText); + resolve(responseObj); + }); + req.send(); }); - req.send(); - }); + } }, }; var toQueryString = function(obj) { - return _.map(obj, function(v, k){ + return _.map(obj, function(v, k) { return encodeURIComponent(k) + '=' + encodeURIComponent(v); }).join('&'); };