|
1 | 1 | var _ = require('lodash/core'); |
2 | 2 | var bluebird = require('bluebird'); |
3 | 3 |
|
| 4 | +var POST_METHOD = 'POST'; |
| 5 | +var GET_METHOD = 'GET'; |
| 6 | + |
4 | 7 | module.exports = { |
5 | 8 | /** |
6 | 9 | * Sample event dispatcher implementation for tracking impression and conversions |
7 | 10 | * Users of the SDK can provide their own implementation |
8 | | - * @param {string} url |
9 | | - * @param {Object} params |
| 11 | + * @param {Object} eventObj |
10 | 12 | * @return {Promise<Object>} |
11 | 13 | */ |
12 | | - dispatchEvent: function(url, params) { |
13 | | - return new bluebird(function(resolve, reject) { |
14 | | - // add param for cors headers to be sent by the log endpoint |
15 | | - url += '?wxhr=true'; |
16 | | - if (params) { |
17 | | - url += '&' + toQueryString(params); |
18 | | - } |
| 14 | + dispatchEvent: function(eventObj) { |
| 15 | + var url = eventObj.url; |
| 16 | + var params = eventObj.params; |
| 17 | + |
| 18 | + if (eventObj.httpVerb === POST_METHOD) { |
| 19 | + return new bluebird(function(resolve, reject) { |
| 20 | + |
| 21 | + var req = new XMLHttpRequest(); |
| 22 | + req.open(POST_METHOD, url, true); |
| 23 | + req.setRequestHeader('Content-Type', 'application/json'); |
| 24 | + req.addEventListener('load', function (evt) { |
| 25 | + var responseObj = evt.target.responseText; |
| 26 | + resolve(responseObj); |
| 27 | + }); |
| 28 | + req.send(JSON.stringify(params)); |
| 29 | + }) |
| 30 | + } else { |
| 31 | + return new bluebird(function (resolve, reject) { |
| 32 | + // add param for cors headers to be sent by the log endpoint |
| 33 | + url += '?wxhr=true'; |
| 34 | + if (params) { |
| 35 | + url += '&' + toQueryString(params); |
| 36 | + } |
19 | 37 |
|
20 | | - var req = new XMLHttpRequest(); |
21 | | - req.open('GET', url, true); |
22 | | - req.addEventListener('load', function(evt) { |
23 | | - var responseObj = JSON.parse(evt.target.responseText); |
24 | | - resolve(responseObj); |
| 38 | + var req = new XMLHttpRequest(); |
| 39 | + req.open(GET_METHOD, url, true); |
| 40 | + req.addEventListener('load', function (evt) { |
| 41 | + var responseObj = JSON.parse(evt.target.responseText); |
| 42 | + resolve(responseObj); |
| 43 | + }); |
| 44 | + req.send(); |
25 | 45 | }); |
26 | | - req.send(); |
27 | | - }); |
| 46 | + } |
28 | 47 | }, |
29 | 48 | }; |
30 | 49 |
|
31 | 50 | var toQueryString = function(obj) { |
32 | | - return _.map(obj, function(v, k){ |
| 51 | + return _.map(obj, function(v, k) { |
33 | 52 | return encodeURIComponent(k) + '=' + encodeURIComponent(v); |
34 | 53 | }).join('&'); |
35 | 54 | }; |
0 commit comments