|
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