UNPKG

4.73 kBJavaScriptView Raw
1/**
2 * Created by Mihail on 5/30/18.
3 */
4'use strict';
5
6const fetch = require('node-fetch');
7const FormData = require('form-data');
8let fs = require('fs');
9const qs = require('qs');
10
11class Hasoffers {
12 constructor ({networkId = "", networkToken = "", fetcher = fetch, config = {} } = {}) {
13 this.networkId = networkId;
14 this.networkToken = networkToken;
15 this.config = Object.assign({}, {
16 method: 'GET',
17 headers: {
18 Accept: 'application/json',
19 'Accept-Charset': 'utf-8'
20 }
21 }, config);
22
23 this.fetcher = fetcher;
24 this.url = `https://${this.networkId}.api.hasoffers.com`;
25 }
26 getOffer (id) {
27 return createRequest({
28 fetcher: this.fetcher,
29 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=Offer&Method=findById&id=${id}`,
30 config: this.config
31 })
32 }
33 getAllCountries () {
34 return createRequest({
35 fetcher: this.fetcher,
36 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=Application&Method=findAllCountries`,
37 config: this.config
38 })
39 }
40 createOffer (data) {
41 let queryString = Object.keys(data).map(key => `data[${key}]` + '=' + encodeURIComponent(data[key])).join('&');
42 return createRequest({
43 fetcher: this.fetcher,
44 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=Offer&Method=create&${queryString}`,
45 config: this.config
46 })
47 }
48 updateOfferField (id, field, value) {
49 let queryValue = encodeURIComponent(value);
50 return createRequest({
51 fetcher: this.fetcher,
52 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=Offer&Method=updateField&id=${id}&field=${field}&value=${queryValue}`,
53 config: this.config
54 })
55 }
56 updateOffer (id, data) {
57 let queryString = Object.keys(data).map(key => `data[${key}]` + '=' + encodeURIComponent(data[key])).join('&');
58 return createRequest({
59 fetcher: this.fetcher,
60 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=Offer&Method=update&id=${id}&${queryString}`,
61 config: this.config
62 })
63 }
64 createOfferTag (offer_id, tag_id) {
65 return createRequest({
66 fetcher: this.fetcher,
67 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=Tag&Method=addToOffer&&offer_id=${offer_id}&tag_id=${tag_id}`,
68 config: this.config
69 })
70 }
71 createGeoCountries (id, data) {
72 let queryString = Object.keys(data).map(key => `location_ids[Countries][]` + '=' + encodeURIComponent(data[key])).join('&');
73
74 return createRequest({
75 fetcher: this.fetcher,
76 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=Offer&Method=setGeoTargeting&id=${id}&${queryString}`,
77 config: this.config
78 })
79 }
80 createGeoCities (id, data) {
81 let queryString = Object.keys(data).map(key => `location_ids[Cities][]` + '=' + encodeURIComponent(data[key])).join('&');
82
83 return createRequest({
84 fetcher: this.fetcher,
85 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=Offer&Method=setGeoTargeting&id=${id}&${queryString}`,
86 config: this.config
87 })
88 }
89 createOfferFile (offer_id, filename, display, type, file) {
90
91 const stats = fs.statSync("ww.jpeg");
92 const fileSizeInBytes = stats.size;
93 let readStream = fs.createReadStream('ww.jpeg');
94
95 let new_data = {
96 type: encodeURIComponent(type),
97 display: encodeURIComponent(display),
98 filename: encodeURIComponent(filename),
99 offer_id: encodeURIComponent(offer_id),
100 };
101 const form = new FormData();
102 return createRequest({
103 fetcher: this.fetcher,
104 url: `${this.url}/Apiv3/json?NetworkToken=${this.networkToken}&Target=OfferFile&Method=create&data[type]=${new_data.type}&data[display]=${new_data.display}&data[filename]=${new_data.filename}&data[offer_id]=${new_data.offer_id}&return_object=1`,
105 config: {
106 method: 'POST',
107 headers: {
108 "Content-length": fileSizeInBytes
109 },
110 body: readStream
111 }
112 })
113 }
114}
115const createRequest = (args = {}) => {
116 const { url, config, query, fetcher } = args;
117 return fetch(`${url}${query ? `?${qs.stringify(query)}` : ''}`, config).then(res =>
118 res.json()
119 )
120};
121
122module.exports = Hasoffers;
\No newline at end of file