@meltwater/conversations-api-services 1.0.19 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yml +2 -0
- package/babel.config.js +18 -0
- package/dist/cjs/data-access/http/InstagramVideoClient.js +42 -0
- package/dist/cjs/data-access/http/WarpZoneApi.client.js +32 -0
- package/dist/cjs/data-access/http/amazonS3.js +44 -0
- package/dist/cjs/data-access/http/asset-manager-tvm.client.js +35 -0
- package/dist/cjs/data-access/http/companiesApi.client.js +38 -0
- package/dist/cjs/data-access/http/credentialsApi.client.js +102 -0
- package/dist/cjs/data-access/http/entitlementsApi.client.js +40 -0
- package/dist/cjs/data-access/http/facebook.native.js +344 -0
- package/dist/cjs/data-access/http/facebookApi.client.js +631 -0
- package/dist/cjs/data-access/http/featureToggleApi.client.js +31 -0
- package/dist/cjs/data-access/http/identityServices.client.js +97 -0
- package/dist/cjs/data-access/http/instagramApi.client.js +428 -0
- package/dist/cjs/data-access/http/ir.client.js +242 -0
- package/dist/cjs/data-access/http/linkedInApi.client.js +491 -0
- package/dist/cjs/data-access/http/masf.client.js +101 -0
- package/dist/cjs/data-access/http/tiktok.native.js +162 -0
- package/dist/cjs/data-access/http/tiktokApi.client.js +441 -0
- package/dist/cjs/data-access/index.js +132 -0
- package/dist/cjs/errors/engage-error.js +16 -0
- package/dist/cjs/errors/http-error.js +23 -0
- package/dist/cjs/lib/applicationTags.helpers.js +30 -0
- package/dist/cjs/lib/configuration.js +14 -0
- package/dist/cjs/lib/document-action-events.js +12 -0
- package/dist/cjs/lib/externalId.helpers.js +19 -0
- package/dist/cjs/lib/hidden.helpers.js +13 -0
- package/dist/cjs/lib/hiddenComment.helper.js +119 -0
- package/dist/cjs/lib/logger.helpers.js +68 -0
- package/dist/cjs/lib/logger.js +23 -0
- package/dist/cjs/lib/message.helpers.js +58 -0
- package/dist/cjs/lib/metrics.helper.js +97 -0
- package/dist/esm/data-access/http/InstagramVideoClient.js +34 -0
- package/dist/esm/data-access/http/WarpZoneApi.client.js +24 -0
- package/dist/esm/data-access/http/amazonS3.js +37 -0
- package/dist/esm/data-access/http/asset-manager-tvm.client.js +28 -0
- package/dist/esm/data-access/http/companiesApi.client.js +30 -0
- package/dist/esm/data-access/http/credentialsApi.client.js +92 -0
- package/dist/esm/data-access/http/entitlementsApi.client.js +32 -0
- package/dist/esm/data-access/http/facebook.native.js +325 -0
- package/dist/esm/data-access/http/facebookApi.client.js +621 -0
- package/dist/esm/data-access/http/featureToggleApi.client.js +23 -0
- package/dist/esm/data-access/http/identityServices.client.js +89 -0
- package/dist/esm/data-access/http/instagramApi.client.js +420 -0
- package/dist/esm/data-access/http/ir.client.js +234 -0
- package/dist/esm/data-access/http/linkedInApi.client.js +481 -0
- package/dist/esm/data-access/http/masf.client.js +93 -0
- package/dist/esm/data-access/http/tiktok.native.js +146 -0
- package/dist/esm/data-access/http/tiktokApi.client.js +433 -0
- package/dist/esm/data-access/index.js +30 -0
- package/dist/esm/errors/engage-error.js +9 -0
- package/dist/esm/errors/http-error.js +16 -0
- package/dist/esm/lib/applicationTags.helpers.js +22 -0
- package/dist/esm/lib/configuration.js +8 -0
- package/dist/esm/lib/document-action-events.js +6 -0
- package/dist/esm/lib/externalId.helpers.js +12 -0
- package/dist/esm/lib/hidden.helpers.js +6 -0
- package/dist/esm/lib/hiddenComment.helper.js +112 -0
- package/dist/esm/lib/logger.helpers.js +60 -0
- package/dist/esm/lib/logger.js +16 -0
- package/dist/esm/lib/message.helpers.js +52 -0
- package/dist/esm/lib/metrics.helper.js +90 -0
- package/package.json +14 -4
- package/src/data-access/http/facebook.native.js +542 -0
- package/src/data-access/http/tiktok.native.js +248 -0
- package/src/data-access/index.js +4 -0
- package/src/errors/engage-error.js +11 -0
- package/src/errors/http-error.js +19 -0
- package/src/lib/logger.helpers.js +15 -0
- package/src/lib/message.helpers.js +7 -1
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
import superagent from 'superagent';
|
|
2
|
+
import { removePrefix } from '../../lib/externalId.helpers.js';
|
|
3
|
+
import { loggerDebug, loggerError, loggerInfo } from '../../lib/logger.helpers.js';
|
|
4
|
+
import { EngageHttpError } from '../../errors/http-error.js';
|
|
5
|
+
import { EngageError } from '../../errors/engage-error.js';
|
|
6
|
+
|
|
7
|
+
const FACEBOOK_URL = 'https://graph.facebook.com';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
export async function shareCount(token, externalId, logger) {
|
|
11
|
+
try{
|
|
12
|
+
const response = await getApi(
|
|
13
|
+
`${FACEBOOK_URL}/${removePrefix(
|
|
14
|
+
externalId
|
|
15
|
+
)}/?fields=shares`,
|
|
16
|
+
token
|
|
17
|
+
);
|
|
18
|
+
return response.body.shares && response.body.shares.count;
|
|
19
|
+
}catch(err){
|
|
20
|
+
loggerError(logger,
|
|
21
|
+
`Facebook shareCount error recieved - ${error.code}`,
|
|
22
|
+
error,
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function reactions(token, externalIds, logger) {
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const response = await getApi(
|
|
31
|
+
`${FACEBOOK_URL}?ids=${externalIds
|
|
32
|
+
.map((externalId) => removePrefix(externalId))
|
|
33
|
+
.join(',')}&fields=` +
|
|
34
|
+
`reactions.limit(0).summary(viewer_reaction).as(fb_post_reaction_of_user),` +
|
|
35
|
+
`reactions.type(LOVE).limit(0).summary(total_count).as(fb_post_reactions_love),` +
|
|
36
|
+
`reactions.type(WOW).limit(0).summary(total_count).as(fb_post_reactions_wow),` +
|
|
37
|
+
`reactions.type(SAD).limit(0).summary(total_count).as(fb_post_reactions_sad),` +
|
|
38
|
+
`reactions.type(LIKE).limit(0).summary(total_count).as(fb_post_reactions_like),` +
|
|
39
|
+
`reactions.type(ANGRY).limit(0).summary(total_count).as(fb_post_reactions_angry),` +
|
|
40
|
+
`reactions.type(HAHA).limit(0).summary(total_count).as(fb_post_reactions_haha)`,
|
|
41
|
+
token
|
|
42
|
+
);
|
|
43
|
+
return response.body;
|
|
44
|
+
} catch (error) {
|
|
45
|
+
loggerError(logger,
|
|
46
|
+
`Facebook reactions error recieved - ${error.code}`,
|
|
47
|
+
error
|
|
48
|
+
);
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export async function comment(token, {
|
|
54
|
+
inReplyToExternalId,
|
|
55
|
+
text,
|
|
56
|
+
attachment = undefined,
|
|
57
|
+
}, logger = undefined) {
|
|
58
|
+
let response;
|
|
59
|
+
const isGif = attachment && attachment.mimeType === 'image/gif';
|
|
60
|
+
|
|
61
|
+
loggerDebug(logger,
|
|
62
|
+
`Starting to call facebook comment api inReplyToExternalId ${inReplyToExternalId}`,
|
|
63
|
+
{ text, attachment }
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
response = await postApi(
|
|
67
|
+
`${FACEBOOK_URL}/${removePrefix(inReplyToExternalId)}/comments`,
|
|
68
|
+
token,
|
|
69
|
+
{
|
|
70
|
+
...(text && text.length && { message: text }),
|
|
71
|
+
...(attachment &&
|
|
72
|
+
!isGif && { attachment_url: attachment.link }),
|
|
73
|
+
...(attachment &&
|
|
74
|
+
isGif && { attachment_share_url: attachment.link }),
|
|
75
|
+
},
|
|
76
|
+
logger
|
|
77
|
+
);
|
|
78
|
+
loggerInfo(logger,
|
|
79
|
+
`Native Facebook API Publish Comment Response to externalId ${inReplyToExternalId}`,
|
|
80
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
81
|
+
);
|
|
82
|
+
return response.body;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export async function privateMessage(token, {
|
|
86
|
+
recipientId,
|
|
87
|
+
text,
|
|
88
|
+
attachment = undefined,
|
|
89
|
+
}, logger){
|
|
90
|
+
let response;
|
|
91
|
+
const isGif = attachment && attachment.mimeType === 'image/gif';
|
|
92
|
+
|
|
93
|
+
loggerDebug(logger,
|
|
94
|
+
`Starting to call facebook PM api to recipientId ${recipientId}`,
|
|
95
|
+
{ payload: JSON.stringify({text, attachment}) }
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
response = await postApi(
|
|
99
|
+
`${FACEBOOK_URL}/me/messages`,
|
|
100
|
+
token,
|
|
101
|
+
{
|
|
102
|
+
recipient: { id: removePrefix(recipientId) },
|
|
103
|
+
message: {
|
|
104
|
+
text: text,
|
|
105
|
+
...(attachment && {
|
|
106
|
+
attachment: {
|
|
107
|
+
type: isGif
|
|
108
|
+
? 'video'
|
|
109
|
+
: attachment.mimeType.split('/')[0],
|
|
110
|
+
payload: {
|
|
111
|
+
url: attachment.link,
|
|
112
|
+
is_reusable: true,
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
}),
|
|
116
|
+
},
|
|
117
|
+
tag: 'HUMAN_AGENT',
|
|
118
|
+
},
|
|
119
|
+
logger
|
|
120
|
+
);
|
|
121
|
+
loggerInfo(logger,
|
|
122
|
+
`Native Facebook API Publish Private Message Response for documentId ${documentId}`,
|
|
123
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
124
|
+
);
|
|
125
|
+
return response.body;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export async function hide(token, externalId, logger) {
|
|
129
|
+
loggerDebug(logger,
|
|
130
|
+
`Starting to call facebook hide api`
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
const response = await postApi(
|
|
134
|
+
`${FACEBOOK_URL}/${removePrefix(externalId)}`,
|
|
135
|
+
token,
|
|
136
|
+
{ is_hidden: true },
|
|
137
|
+
logger
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
loggerInfo(logger
|
|
141
|
+
`Native Facebook API Hide Response`,
|
|
142
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
143
|
+
);
|
|
144
|
+
return response.body;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export async function unhide(token, externalId, logger) {
|
|
148
|
+
loggerDebug(logger,
|
|
149
|
+
`Starting to call facebook unhide api`
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
const response = await postApi(
|
|
153
|
+
`${FACEBOOK_URL}/${removePrefix(externalId)}`,
|
|
154
|
+
token,
|
|
155
|
+
{ is_hidden: false },
|
|
156
|
+
logger
|
|
157
|
+
);
|
|
158
|
+
|
|
159
|
+
loggerChild.info(
|
|
160
|
+
`Native Facebook API Unhide Response`,
|
|
161
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
162
|
+
);
|
|
163
|
+
return response.body;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export async function like(token, externalId, logger) {
|
|
167
|
+
|
|
168
|
+
loggerDebug(logger,
|
|
169
|
+
`Starting to call facebook like api`
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
const response = await postApi(
|
|
173
|
+
`${FACEBOOK_URL}/${removePrefix(externalId)}/likes`,
|
|
174
|
+
token,
|
|
175
|
+
undefined,
|
|
176
|
+
logger
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
loggerInfo(logger,
|
|
180
|
+
`Native Facebook API Like Response`,
|
|
181
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
182
|
+
);
|
|
183
|
+
return response.body;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export async function unlike(token, externalId, logger) {
|
|
187
|
+
|
|
188
|
+
loggerDebug(logger,
|
|
189
|
+
`Starting to call facebook unlike api`
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
const response = await deleteApi(
|
|
193
|
+
`${FACEBOOK_URL}/${removePrefix(externalId)}/likes`,
|
|
194
|
+
token,
|
|
195
|
+
undefined,
|
|
196
|
+
logger
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
loggerInfo( logger,
|
|
200
|
+
`Native Facebook API Unlike Response`,
|
|
201
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
202
|
+
);
|
|
203
|
+
return response.body;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export async function isUserBanned(token, authorId, pageId, logger) {
|
|
207
|
+
if (!pageId) {
|
|
208
|
+
// if no pageId to check this call will fail
|
|
209
|
+
// should only happen with temp edge docs
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
const response = await getApi(
|
|
213
|
+
`${FACEBOOK_URL}/${pageId}/blocked`,
|
|
214
|
+
token,
|
|
215
|
+
undefined, // payload
|
|
216
|
+
{
|
|
217
|
+
user: removePrefix(authorId),
|
|
218
|
+
},
|
|
219
|
+
logger
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
if (response && response.body && response.body.data) {
|
|
223
|
+
const userNoPrefix = removePrefix(authorId);
|
|
224
|
+
const user = response.body.data.find((user) => {
|
|
225
|
+
if (user.id == userNoPrefix) {
|
|
226
|
+
return user;
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
if (user) {
|
|
230
|
+
return true;
|
|
231
|
+
} else {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
loggerInfo( logger,
|
|
237
|
+
`Native Facebook API is User Banned Response was invalid`,
|
|
238
|
+
{
|
|
239
|
+
responseBody: JSON.stringify(response.body),
|
|
240
|
+
}
|
|
241
|
+
);
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export async function getProfile(token, authorId, logger) {
|
|
246
|
+
if (!authorId) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
let response = {};
|
|
251
|
+
const userNoPrefix = removePrefix(authorId);
|
|
252
|
+
|
|
253
|
+
try {
|
|
254
|
+
response = await superagent
|
|
255
|
+
.get(`${FACEBOOK_URL}/${userNoPrefix}`)
|
|
256
|
+
.set('Accept', 'application/json')
|
|
257
|
+
.set('Content-Type', 'application/json')
|
|
258
|
+
.query({ access_token: token })
|
|
259
|
+
.send();
|
|
260
|
+
} catch (err) {
|
|
261
|
+
if (
|
|
262
|
+
err?.response?.body?.error
|
|
263
|
+
) {
|
|
264
|
+
loggerError(logger,
|
|
265
|
+
`Failed to call facebook api for userId ${userNoPrefix}: ${err.response.body.error.message}`
|
|
266
|
+
);
|
|
267
|
+
} else {
|
|
268
|
+
loggerError(logger,
|
|
269
|
+
`Failed to call facebook api for userId ${userNoPrefix}`,
|
|
270
|
+
err
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
if (response.status !== 200) {
|
|
278
|
+
loggerError(logger,
|
|
279
|
+
`Failed to call facebook api for userId ${userNoPrefix}`,
|
|
280
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
281
|
+
);
|
|
282
|
+
let error = new Error(
|
|
283
|
+
`Failed to call facebook api for userId ${userNoPrefix}`
|
|
284
|
+
);
|
|
285
|
+
error.code = response.status;
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
return response;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
export async function ban(token, sourceId, authorId, logger) {
|
|
293
|
+
loggerDebug( logger,
|
|
294
|
+
`Starting to call facebook ban api for externalAuthorId ${authorId} ${sourceId}`
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
const response = await postApi(
|
|
298
|
+
`${FACEBOOK_URL}/${removePrefix(sourceId)}/blocked`,
|
|
299
|
+
token,
|
|
300
|
+
{ psid: [removePrefix(authorId)] },
|
|
301
|
+
logger
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
loggerInfo(logger,
|
|
305
|
+
`Native Facebook API Hide Response for externalAuthorId ${authorId}`,
|
|
306
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
307
|
+
);
|
|
308
|
+
return response.body;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
export async function unban(token, sourceId, authorId, logger) {
|
|
312
|
+
|
|
313
|
+
loggerDebug( logger,
|
|
314
|
+
`Starting to call facebook unban api for externalAuthorId ${authorId} ${sourceId}`
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
const response = await deleteApi(
|
|
318
|
+
`${FACEBOOK_URL}/${removePrefix(sourceId)}/blocked`,
|
|
319
|
+
token,
|
|
320
|
+
{ psid: [removePrefix(authorId)] },
|
|
321
|
+
logger
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
loggerInfo( logger,
|
|
325
|
+
`Native Facebook API Unban Response for externalAuthorId ${authorId}`,
|
|
326
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
327
|
+
);
|
|
328
|
+
return response.body;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
export async function getAttachment(token, externalId, discussionType, logger) {
|
|
332
|
+
let result;
|
|
333
|
+
try {
|
|
334
|
+
switch(discussionType) {
|
|
335
|
+
case 're':
|
|
336
|
+
case 'qt':
|
|
337
|
+
result = await getApi(
|
|
338
|
+
`${FACEBOOK_URL}/${removePrefix(
|
|
339
|
+
externalId
|
|
340
|
+
)}?fields=attachment`,
|
|
341
|
+
token,
|
|
342
|
+
undefined,
|
|
343
|
+
undefined,
|
|
344
|
+
logger
|
|
345
|
+
);
|
|
346
|
+
|
|
347
|
+
return {
|
|
348
|
+
images: [
|
|
349
|
+
{
|
|
350
|
+
source:
|
|
351
|
+
result?.body?.attachment?.media?.source ||
|
|
352
|
+
result?.body?.attachment?.media?.image?.src,
|
|
353
|
+
},
|
|
354
|
+
],
|
|
355
|
+
};
|
|
356
|
+
case 'dm':
|
|
357
|
+
result = await getApi(
|
|
358
|
+
`${FACEBOOK_URL}/${removePrefix(
|
|
359
|
+
externalId
|
|
360
|
+
)}?fields=attachments`,
|
|
361
|
+
token,undefined,undefined,
|
|
362
|
+
logger
|
|
363
|
+
);
|
|
364
|
+
|
|
365
|
+
return {
|
|
366
|
+
images: result?.body?.attachments?.data.map((item) => {
|
|
367
|
+
return {
|
|
368
|
+
source: item.image_data?.url,
|
|
369
|
+
};
|
|
370
|
+
}),
|
|
371
|
+
};
|
|
372
|
+
default: // og
|
|
373
|
+
result = await getApi(
|
|
374
|
+
`${FACEBOOK_URL}/${removePrefix(
|
|
375
|
+
externalId
|
|
376
|
+
)}/attachments?fields=media,subattachments,file_url`,
|
|
377
|
+
token, undefined, undefined,
|
|
378
|
+
logger
|
|
379
|
+
);
|
|
380
|
+
|
|
381
|
+
// if subattachments exist, use them
|
|
382
|
+
const res = result?.body?.data[0];
|
|
383
|
+
if (res?.subattachments) {
|
|
384
|
+
return {
|
|
385
|
+
images: res?.subattachments.data.map((item) => {
|
|
386
|
+
return {
|
|
387
|
+
source:
|
|
388
|
+
item?.media?.source || item?.media?.image?.src,
|
|
389
|
+
};
|
|
390
|
+
}),
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
return {
|
|
395
|
+
images: [
|
|
396
|
+
{
|
|
397
|
+
source: res?.media?.source || res?.media?.image?.src,
|
|
398
|
+
},
|
|
399
|
+
],
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
} catch (error) {
|
|
403
|
+
loggerError(logger,`Error getting facebook attachment`, error);
|
|
404
|
+
throw error;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
async function getApi(apiUrl, accessToken, payload, queryParams = {}, logger) {
|
|
409
|
+
|
|
410
|
+
let response = {};
|
|
411
|
+
try {
|
|
412
|
+
response = await superagent
|
|
413
|
+
.get(apiUrl)
|
|
414
|
+
.set('Accept', 'application/json')
|
|
415
|
+
.set('Content-Type', 'application/json')
|
|
416
|
+
.query({ access_token: accessToken, ...queryParams })
|
|
417
|
+
.send(payload);
|
|
418
|
+
} catch (err) {
|
|
419
|
+
if (
|
|
420
|
+
err &&
|
|
421
|
+
err.response &&
|
|
422
|
+
err.response.body &&
|
|
423
|
+
err.response.body.error
|
|
424
|
+
) {
|
|
425
|
+
loggerError(logger,
|
|
426
|
+
`Failed to call facebook getApi ${apiUrl}: ${err.response.body.error.message}`
|
|
427
|
+
);
|
|
428
|
+
} else {
|
|
429
|
+
loggerError(logger,
|
|
430
|
+
`Failed to call facebook getApi ${apiUrl}`,
|
|
431
|
+
err
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
throw err;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
if (response.status !== 200) {
|
|
439
|
+
loggerError(logger,
|
|
440
|
+
`Failed to call facebook api ${apiUrl}`,
|
|
441
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
442
|
+
);
|
|
443
|
+
let error = new Error(
|
|
444
|
+
`Failed to call facebook api ${apiUrl}`
|
|
445
|
+
);
|
|
446
|
+
error.code = response.status;
|
|
447
|
+
throw error;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
return response;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
async function postApi(apiUrl, accessToken, payload, logger) {
|
|
454
|
+
|
|
455
|
+
let response = {};
|
|
456
|
+
try {
|
|
457
|
+
response = await superagent
|
|
458
|
+
.post(apiUrl)
|
|
459
|
+
.set('Accept', 'application/json')
|
|
460
|
+
.set('Content-Type', 'application/json')
|
|
461
|
+
.query({ access_token: accessToken })
|
|
462
|
+
.send(payload);
|
|
463
|
+
} catch (err) {
|
|
464
|
+
if (
|
|
465
|
+
err &&
|
|
466
|
+
err.response &&
|
|
467
|
+
err.response.body &&
|
|
468
|
+
err.response.body.error
|
|
469
|
+
) {
|
|
470
|
+
loggerError(logger,
|
|
471
|
+
`Failed to call facebook api: ${err.response.body.error.message}`
|
|
472
|
+
);
|
|
473
|
+
} else {
|
|
474
|
+
loggerError(logger,
|
|
475
|
+
`Failed to call facebook api`,
|
|
476
|
+
err
|
|
477
|
+
);
|
|
478
|
+
}
|
|
479
|
+
if(response.status){
|
|
480
|
+
throw new EngageHttpError(response.status, response.statusText, response.body, response.headers);
|
|
481
|
+
}
|
|
482
|
+
throw err;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
if (response.status !== 200) {
|
|
486
|
+
logger.error(logger,
|
|
487
|
+
`Failed to call facebook api`,
|
|
488
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
489
|
+
);
|
|
490
|
+
throw new EngageError(
|
|
491
|
+
response.status,
|
|
492
|
+
`Failed to call facebook api ${response.body}`
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
return response;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
async function deleteApi(apiUrl, accessToken, payload, logger) {
|
|
500
|
+
|
|
501
|
+
let response = {};
|
|
502
|
+
try {
|
|
503
|
+
response = await superagent
|
|
504
|
+
.delete(apiUrl)
|
|
505
|
+
.set('Accept', 'application/json')
|
|
506
|
+
.set('Content-Type', 'application/json')
|
|
507
|
+
.query({ access_token: accessToken })
|
|
508
|
+
.send(payload);
|
|
509
|
+
} catch (err) {
|
|
510
|
+
if (
|
|
511
|
+
err &&
|
|
512
|
+
err.response &&
|
|
513
|
+
err.response.body &&
|
|
514
|
+
err.response.body.error
|
|
515
|
+
) {
|
|
516
|
+
loggerError(logger,
|
|
517
|
+
`Failed to call facebook api delete: ${err.response.body.error.message}`
|
|
518
|
+
);
|
|
519
|
+
} else {
|
|
520
|
+
loggerError(logger,
|
|
521
|
+
`Failed to call facebook api delete`,
|
|
522
|
+
err
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
throw err;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
if (response.status !== 200) {
|
|
530
|
+
loggerError(logger,
|
|
531
|
+
`Failed to call facebook api delete`,
|
|
532
|
+
{ responseBody: JSON.stringify(response.body) }
|
|
533
|
+
);
|
|
534
|
+
let error = new Error(
|
|
535
|
+
`Failed to call facebook api delete`
|
|
536
|
+
);
|
|
537
|
+
error.code = response.status;
|
|
538
|
+
throw error;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
return response;
|
|
542
|
+
}
|