@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.
Files changed (70) hide show
  1. package/.github/workflows/release.yml +2 -0
  2. package/babel.config.js +18 -0
  3. package/dist/cjs/data-access/http/InstagramVideoClient.js +42 -0
  4. package/dist/cjs/data-access/http/WarpZoneApi.client.js +32 -0
  5. package/dist/cjs/data-access/http/amazonS3.js +44 -0
  6. package/dist/cjs/data-access/http/asset-manager-tvm.client.js +35 -0
  7. package/dist/cjs/data-access/http/companiesApi.client.js +38 -0
  8. package/dist/cjs/data-access/http/credentialsApi.client.js +102 -0
  9. package/dist/cjs/data-access/http/entitlementsApi.client.js +40 -0
  10. package/dist/cjs/data-access/http/facebook.native.js +344 -0
  11. package/dist/cjs/data-access/http/facebookApi.client.js +631 -0
  12. package/dist/cjs/data-access/http/featureToggleApi.client.js +31 -0
  13. package/dist/cjs/data-access/http/identityServices.client.js +97 -0
  14. package/dist/cjs/data-access/http/instagramApi.client.js +428 -0
  15. package/dist/cjs/data-access/http/ir.client.js +242 -0
  16. package/dist/cjs/data-access/http/linkedInApi.client.js +491 -0
  17. package/dist/cjs/data-access/http/masf.client.js +101 -0
  18. package/dist/cjs/data-access/http/tiktok.native.js +162 -0
  19. package/dist/cjs/data-access/http/tiktokApi.client.js +441 -0
  20. package/dist/cjs/data-access/index.js +132 -0
  21. package/dist/cjs/errors/engage-error.js +16 -0
  22. package/dist/cjs/errors/http-error.js +23 -0
  23. package/dist/cjs/lib/applicationTags.helpers.js +30 -0
  24. package/dist/cjs/lib/configuration.js +14 -0
  25. package/dist/cjs/lib/document-action-events.js +12 -0
  26. package/dist/cjs/lib/externalId.helpers.js +19 -0
  27. package/dist/cjs/lib/hidden.helpers.js +13 -0
  28. package/dist/cjs/lib/hiddenComment.helper.js +119 -0
  29. package/dist/cjs/lib/logger.helpers.js +68 -0
  30. package/dist/cjs/lib/logger.js +23 -0
  31. package/dist/cjs/lib/message.helpers.js +58 -0
  32. package/dist/cjs/lib/metrics.helper.js +97 -0
  33. package/dist/esm/data-access/http/InstagramVideoClient.js +34 -0
  34. package/dist/esm/data-access/http/WarpZoneApi.client.js +24 -0
  35. package/dist/esm/data-access/http/amazonS3.js +37 -0
  36. package/dist/esm/data-access/http/asset-manager-tvm.client.js +28 -0
  37. package/dist/esm/data-access/http/companiesApi.client.js +30 -0
  38. package/dist/esm/data-access/http/credentialsApi.client.js +92 -0
  39. package/dist/esm/data-access/http/entitlementsApi.client.js +32 -0
  40. package/dist/esm/data-access/http/facebook.native.js +325 -0
  41. package/dist/esm/data-access/http/facebookApi.client.js +621 -0
  42. package/dist/esm/data-access/http/featureToggleApi.client.js +23 -0
  43. package/dist/esm/data-access/http/identityServices.client.js +89 -0
  44. package/dist/esm/data-access/http/instagramApi.client.js +420 -0
  45. package/dist/esm/data-access/http/ir.client.js +234 -0
  46. package/dist/esm/data-access/http/linkedInApi.client.js +481 -0
  47. package/dist/esm/data-access/http/masf.client.js +93 -0
  48. package/dist/esm/data-access/http/tiktok.native.js +146 -0
  49. package/dist/esm/data-access/http/tiktokApi.client.js +433 -0
  50. package/dist/esm/data-access/index.js +30 -0
  51. package/dist/esm/errors/engage-error.js +9 -0
  52. package/dist/esm/errors/http-error.js +16 -0
  53. package/dist/esm/lib/applicationTags.helpers.js +22 -0
  54. package/dist/esm/lib/configuration.js +8 -0
  55. package/dist/esm/lib/document-action-events.js +6 -0
  56. package/dist/esm/lib/externalId.helpers.js +12 -0
  57. package/dist/esm/lib/hidden.helpers.js +6 -0
  58. package/dist/esm/lib/hiddenComment.helper.js +112 -0
  59. package/dist/esm/lib/logger.helpers.js +60 -0
  60. package/dist/esm/lib/logger.js +16 -0
  61. package/dist/esm/lib/message.helpers.js +52 -0
  62. package/dist/esm/lib/metrics.helper.js +90 -0
  63. package/package.json +14 -4
  64. package/src/data-access/http/facebook.native.js +542 -0
  65. package/src/data-access/http/tiktok.native.js +248 -0
  66. package/src/data-access/index.js +4 -0
  67. package/src/errors/engage-error.js +11 -0
  68. package/src/errors/http-error.js +19 -0
  69. package/src/lib/logger.helpers.js +15 -0
  70. package/src/lib/message.helpers.js +7 -1
@@ -0,0 +1,631 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FacebookApiClient = void 0;
7
+ var _superagent = _interopRequireDefault(require("superagent"));
8
+ var _logger = _interopRequireDefault(require("../../lib/logger.js"));
9
+ var _externalIdHelpers = require("../../lib/externalId.helpers.js");
10
+ var _credentialsApiClient = require("../http/credentialsApi.client.js");
11
+ var _loggerHelpers = require("../../lib/logger.helpers.js");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ // @todo remove superagent
14
+
15
+ const FACEBOOK_URL = 'https://graph.facebook.com';
16
+ class FacebookApiClient {
17
+ constructor() {
18
+ this.credentialsAPI = new _credentialsApiClient.CredentialsApiClient();
19
+ }
20
+
21
+ // assumes all documents are from same credential
22
+ async shareCount(documents) {
23
+ const {
24
+ documentId,
25
+ metaData: {
26
+ discussionType = 'og'
27
+ } = {},
28
+ systemData: {
29
+ connectionsCredential: credentialId,
30
+ policies: {
31
+ storage: {
32
+ privateTo: companyId
33
+ } = {}
34
+ } = {}
35
+ } = {}
36
+ } = documents;
37
+ if (discussionType !== 'og') {
38
+ return;
39
+ }
40
+ try {
41
+ const token = await this.credentialsAPI.getToken(credentialId, companyId);
42
+ const response = await this.getApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(documents.metaData.externalId)}/?fields=shares`, token.token, documentId);
43
+ return response.body.shares && response.body.shares.count;
44
+ } catch (error) {
45
+ _logger.default.error(`${documentId} - error recieved - ${error.code}`, error, {
46
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
47
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
48
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
49
+ });
50
+ return undefined;
51
+ }
52
+ }
53
+ async reactions(documents) {
54
+ const {
55
+ documentId,
56
+ systemData: {
57
+ connectionsCredential: credentialId,
58
+ policies: {
59
+ storage: {
60
+ privateTo: companyId
61
+ } = {}
62
+ } = {}
63
+ } = {}
64
+ } = documents[0];
65
+ try {
66
+ const token = await this.credentialsAPI.getToken(credentialId, companyId);
67
+ const response = await this.getApi(`${FACEBOOK_URL}?ids=${documents.map(doc => (0, _externalIdHelpers.removePrefix)(doc.metaData.externalId)).join(',')}&fields=` + `reactions.limit(0).summary(viewer_reaction).as(fb_post_reaction_of_user),` + `reactions.type(LOVE).limit(0).summary(total_count).as(fb_post_reactions_love),` + `reactions.type(WOW).limit(0).summary(total_count).as(fb_post_reactions_wow),` + `reactions.type(SAD).limit(0).summary(total_count).as(fb_post_reactions_sad),` + `reactions.type(LIKE).limit(0).summary(total_count).as(fb_post_reactions_like),` + `reactions.type(ANGRY).limit(0).summary(total_count).as(fb_post_reactions_angry),` + `reactions.type(HAHA).limit(0).summary(total_count).as(fb_post_reactions_haha)`, token.token, documentId);
68
+ return response.body;
69
+ } catch (error) {
70
+ _logger.default.error(`${documentId} - error recieved - ${error.code}`, error, {
71
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
72
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
73
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
74
+ });
75
+ return undefined;
76
+ }
77
+ }
78
+ async comment(accessToken, payload) {
79
+ let response;
80
+ const {
81
+ inReplyToId,
82
+ text,
83
+ documentId,
84
+ attachment
85
+ } = payload;
86
+ const isGif = attachment && attachment.mimeType === 'image/gif';
87
+ const loggerChild = _logger.default.child({
88
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId
89
+ });
90
+ loggerChild.debug(`Starting to call facebook comment api for documentId ${documentId}`, {
91
+ payload: JSON.stringify(payload)
92
+ });
93
+ response = await this.postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(inReplyToId)}/comments`, accessToken.token, documentId, {
94
+ ...(text && text.length && {
95
+ message: text
96
+ }),
97
+ ...(attachment && !isGif && {
98
+ attachment_url: attachment.link
99
+ }),
100
+ ...(attachment && isGif && {
101
+ attachment_share_url: attachment.link
102
+ })
103
+ });
104
+ loggerChild.info(`Native Facebook API Publish Comment Response for documentId ${documentId}`, {
105
+ ok: response.ok,
106
+ status: response.status,
107
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId
108
+ });
109
+ return response.body;
110
+ }
111
+ async privateMessage(accessToken, payload) {
112
+ let response;
113
+ const {
114
+ profileId,
115
+ recipientId,
116
+ text,
117
+ documentId,
118
+ attachment
119
+ } = payload;
120
+ const isGif = attachment && attachment.mimeType === 'image/gif';
121
+ const loggerChild = _logger.default.child({
122
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId
123
+ });
124
+ loggerChild.debug(`Starting to call facebook messages api for documentId ${documentId}`, {
125
+ payload: JSON.stringify(payload)
126
+ });
127
+ response = await this.postApi(`${FACEBOOK_URL}/me/messages`, accessToken.token, documentId, {
128
+ recipient: {
129
+ id: (0, _externalIdHelpers.removePrefix)(profileId || recipientId)
130
+ },
131
+ message: {
132
+ text: text,
133
+ ...(attachment && {
134
+ attachment: {
135
+ type: isGif ? 'video' : attachment.mimeType.split('/')[0],
136
+ payload: {
137
+ url: attachment.link,
138
+ is_reusable: true
139
+ }
140
+ }
141
+ })
142
+ },
143
+ tag: 'HUMAN_AGENT'
144
+ });
145
+ loggerChild.info(`Native Facebook API Publish Private Message Response for documentId ${documentId}`, {
146
+ status: response.status,
147
+ ok: response.ok
148
+ });
149
+ return response.body;
150
+ }
151
+ async getApi(apiUrl, accessToken, documentId, payload) {
152
+ let queryParams = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
153
+ const loggerChild = _logger.default.child({
154
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId
155
+ });
156
+ let response = {};
157
+ try {
158
+ response = await _superagent.default.get(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
159
+ access_token: accessToken,
160
+ ...queryParams
161
+ }).send(payload);
162
+ } catch (err) {
163
+ let errorText = '';
164
+ if (err && err.response && err.response.body && err.response.body.error) {
165
+ errorText = `Failed to call facebook api for documentId ${documentId}: ${err.response.body.error.message}`;
166
+ loggerChild.error(errorText);
167
+ } else {
168
+ errorText = `Failed to call facebook api for documentId ${documentId}`;
169
+ loggerChild.error(errorText, err);
170
+ }
171
+ throw new Error(errorText);
172
+ }
173
+ if (response.status !== 200) {
174
+ loggerChild.error(`Failed to call facebook api for documentId ${documentId}`, {
175
+ response: JSON.stringify(response.body)
176
+ });
177
+ let error = new Error(`Failed to call facebook api for documentId ${documentId}`);
178
+ error.code = response.status;
179
+ throw error;
180
+ }
181
+ return response;
182
+ }
183
+ async postApi(apiUrl, accessToken, documentId, payload) {
184
+ let response = {};
185
+ const loggerChild = _logger.default.child({
186
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId
187
+ });
188
+ try {
189
+ response = await _superagent.default.post(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
190
+ access_token: accessToken
191
+ }).send(payload);
192
+ } catch (err) {
193
+ let errorText = '';
194
+ if (err && err.response && err.response.body && err.response.body.error) {
195
+ errorText = `Failed to call facebook api for documentId ${documentId}: ${err.response.body.error.message}`;
196
+ loggerChild.error(errorText);
197
+ } else {
198
+ errorText = `Failed to call facebook api for documentId ${documentId}`;
199
+ loggerChild.error(errorText, err);
200
+ }
201
+ throw new Error(errorText);
202
+ }
203
+ if (response.status !== 200) {
204
+ loggerChild.error(`Failed to call facebook api for documentId ${documentId}`, {
205
+ response: JSON.stringify(response.body)
206
+ });
207
+ let error = new Error(`Failed to call facebook api for documentId ${documentId}`);
208
+ error.code = response.status;
209
+ throw error;
210
+ }
211
+ return response;
212
+ }
213
+ async deleteApi(apiUrl, accessToken, documentId, payload) {
214
+ const loggerChild = _logger.default.child({
215
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId
216
+ });
217
+ let response = {};
218
+ try {
219
+ response = await _superagent.default.delete(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
220
+ access_token: accessToken
221
+ }).send(payload);
222
+ } catch (err) {
223
+ let errorText = '';
224
+ if (err && err.response && err.response.body && err.response.body.error) {
225
+ errorText = `Failed to call facebook api for documentId ${documentId}: ${err.response.body.error.message}`;
226
+ loggerChild.error(errorText);
227
+ } else {
228
+ errorText = `Failed to call facebook api for documentId ${documentId}`;
229
+ loggerChild.error(errorText, err);
230
+ }
231
+ throw new Error(errorText);
232
+ }
233
+ if (response.status !== 200) {
234
+ loggerChild.error(`Failed to call facebook api for documentId ${documentId}`, {
235
+ response: JSON.stringify(response.body)
236
+ });
237
+ let error = new Error(`Failed to call facebook api for documentId ${documentId}`);
238
+ error.code = response.status;
239
+ throw error;
240
+ }
241
+ return response;
242
+ }
243
+ async publish(document) {
244
+ const {
245
+ documentId,
246
+ body: {
247
+ content: {
248
+ text
249
+ }
250
+ },
251
+ attachments: [attachment] = [],
252
+ metaData: {
253
+ discussionType,
254
+ inReplyTo: {
255
+ id: inReplyToId,
256
+ recipientId,
257
+ profileId
258
+ }
259
+ },
260
+ systemData: {
261
+ connectionsCredential: credentialId,
262
+ policies: {
263
+ storage: {
264
+ privateTo: companyId
265
+ } = {}
266
+ } = {}
267
+ } = {}
268
+ } = document;
269
+ const loggerChild = _logger.default.child({
270
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
271
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
272
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
273
+ });
274
+ let updatedDocument;
275
+ let apiResponse;
276
+ try {
277
+ const token = await this.credentialsAPI.getToken(credentialId, companyId);
278
+ loggerChild.debug(`finished fetching token for Facebook for ${documentId} on company ${companyId}`);
279
+ let payload;
280
+ switch (discussionType) {
281
+ case 'qt':
282
+ case 're':
283
+ payload = {
284
+ documentId,
285
+ companyId,
286
+ credentialId,
287
+ text,
288
+ inReplyToId,
289
+ attachment
290
+ };
291
+ apiResponse = await this.comment(token, payload);
292
+ break;
293
+ case 'dm':
294
+ payload = {
295
+ documentId,
296
+ companyId,
297
+ credentialId,
298
+ text,
299
+ recipientId,
300
+ profileId,
301
+ attachment
302
+ };
303
+ apiResponse = await this.privateMessage(token, payload);
304
+ break;
305
+ default:
306
+ throw new Error('Unsupported discussion type');
307
+ }
308
+ if (apiResponse) {
309
+ let findQuery = {
310
+ documentId
311
+ };
312
+ findQuery['systemData.policies.storage.privateTo'] = companyId;
313
+ let updateObj = {};
314
+ updateObj['systemData.status'] = DOCUMENT_STATUS.SUCCESS;
315
+ updateObj['metaData.externalId'] = apiResponse.id || apiResponse.message_id;
316
+ updateObj.documentId = Buffer.from(`${updateObj['metaData.externalId']}`).toString('base64');
317
+ updatedDocument = await messagesRepository.updateOne(findQuery, updateObj);
318
+ } else {
319
+ throw new Error('Invalid response from Facebook publish endpoints');
320
+ }
321
+ } catch (exception) {
322
+ loggerChild.error(`${documentId} - exception details`, exception);
323
+ let findQuery = {
324
+ documentId
325
+ };
326
+ findQuery['systemData.policies.storage.privateTo'] = companyId;
327
+ let updateQuery = {};
328
+ updateQuery['systemData.status'] = DOCUMENT_STATUS.FAILED;
329
+ updateQuery['systemData.error'] = exception && exception.response && exception.response.error ? exception.response.error : exception;
330
+ updatedDocument = await messagesRepository.updateOne(findQuery, updateQuery);
331
+ }
332
+ return apiResponse;
333
+ }
334
+ async toggleHide(document) {
335
+ const {
336
+ documentId,
337
+ appData: {
338
+ hidden: hiddenOnNative
339
+ },
340
+ metaData: {
341
+ externalId
342
+ },
343
+ systemData: {
344
+ connectionsCredential: credentialId,
345
+ policies: {
346
+ storage: {
347
+ privateTo: companyId
348
+ } = {}
349
+ } = {}
350
+ } = {},
351
+ version
352
+ } = document;
353
+ let hideResponse;
354
+ const loggerChild = _logger.default.child({
355
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
356
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
357
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
358
+ });
359
+ try {
360
+ loggerChild.debug(`processing Facebook Version ${version} for documentID ${documentId} on company ${companyId}`);
361
+ const token = await this.credentialsAPI.getToken(credentialId, companyId);
362
+ loggerChild.debug(`finished fetching token for facebook for ${documentId} on company ${companyId} `);
363
+ if (hiddenOnNative) {
364
+ hideResponse = await this.hide(token, {
365
+ externalId,
366
+ documentId
367
+ });
368
+ } else {
369
+ hideResponse = await this.unhide(token, {
370
+ externalId,
371
+ documentId
372
+ });
373
+ }
374
+ loggerChild.debug(`finished hiding in facebook for ${documentId} on company ${companyId} `, {
375
+ hideResponse: JSON.stringify(hideResponse)
376
+ });
377
+ return hideResponse;
378
+ } catch (error) {
379
+ loggerChild.error(`${documentId} - error recieved - ${error.code}`, error);
380
+ }
381
+ }
382
+ async toggleBan(document, banStatus) {
383
+ let {
384
+ documentId,
385
+ metaData: {
386
+ source: {
387
+ id: sourceId
388
+ },
389
+ authors: authors
390
+ },
391
+ systemData: {
392
+ connectionsCredential: credentialId,
393
+ policies: {
394
+ storage: {
395
+ privateTo: companyId
396
+ } = {}
397
+ } = {}
398
+ } = {},
399
+ version
400
+ } = document;
401
+ const loggerChild = _logger.default.child({
402
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
403
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
404
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
405
+ });
406
+ let banResponse;
407
+ let authorId = authors[0].authorInfo.externalId;
408
+ try {
409
+ loggerChild.debug(`processing Facebook Version ${version} for profileId ${authorId} on company ${companyId}`);
410
+ const token = await this.credentialsAPI.getToken(credentialId, companyId);
411
+ loggerChild.debug(`finished fetching token for facebook for ${authorId} on company ${companyId} `);
412
+ if (!banStatus) {
413
+ banResponse = await this.unban(token, {
414
+ sourceId,
415
+ authorId
416
+ });
417
+ } else if (banStatus) {
418
+ banResponse = await this.ban(token, {
419
+ sourceId,
420
+ authorId
421
+ });
422
+ }
423
+ loggerChild.debug(`finished banning in facebook for ${authorId} on company ${companyId} `, {
424
+ banResponse: JSON.stringify(banResponse)
425
+ });
426
+ } catch (error) {
427
+ loggerChild.error(`${authorId} - error recieved - ${error.code}`, error);
428
+ }
429
+ }
430
+ async toggleLike(document) {
431
+ const {
432
+ documentId,
433
+ enrichments: {
434
+ socialScores: {
435
+ fb_liked_by_user: likedByUser
436
+ }
437
+ },
438
+ metaData: {
439
+ externalId
440
+ },
441
+ systemData: {
442
+ connectionsCredential: credentialId,
443
+ policies: {
444
+ storage: {
445
+ privateTo: companyId
446
+ } = {}
447
+ } = {}
448
+ } = {},
449
+ version
450
+ } = document;
451
+ const loggerChild = _logger.default.child({
452
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
453
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
454
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
455
+ });
456
+ try {
457
+ loggerChild.debug(`processing Facebook Version ${version} for documentID ${documentId}`);
458
+ loggerChild.debug(`starting to fetch tokens for facebook for ${documentId} on company ${companyId} `);
459
+ const token = await this.credentialsAPI.getToken(credentialId, companyId);
460
+ loggerChild.debug(`finished fetching token for facebook for ${documentId} on company ${companyId} `);
461
+ let likeResponse = await (likedByUser ? this.like(token, {
462
+ externalId,
463
+ documentId
464
+ }) : this.unlike(token, {
465
+ externalId,
466
+ documentId
467
+ }));
468
+ loggerChild.debug(`finished liking in facebook for ${documentId} on company ${companyId} `, {
469
+ likeResponse: JSON.stringify(likeResponse)
470
+ });
471
+ } catch (error) {
472
+ loggerChild.error(`${document} - error recieved - ${error.code}`, error);
473
+ throw error;
474
+ }
475
+ }
476
+ async like(accessToken, command) {
477
+ let response;
478
+ const {
479
+ externalId,
480
+ documentId
481
+ } = command;
482
+ const loggerChild = _logger.default.child({
483
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId
484
+ });
485
+ loggerChild.debug(`Starting to call facebook like api for documentId ${documentId}`, {
486
+ command: JSON.stringify(command)
487
+ });
488
+ response = await this.postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}/likes`, accessToken.token, documentId);
489
+ loggerChild.info(`Native Facebook API Like Response for documentId ${documentId}`, {
490
+ status: response.status,
491
+ ok: response.ok
492
+ });
493
+ return response.body;
494
+ }
495
+ async unlike(accessToken, command) {
496
+ let response;
497
+ const {
498
+ externalId,
499
+ documentId
500
+ } = command;
501
+ const loggerChild = _logger.default.child({
502
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId
503
+ });
504
+ loggerChild.debug(`Starting to call facebook unlike api for documentId ${documentId}`, {
505
+ command: JSON.stringify(command)
506
+ });
507
+ response = await this.deleteApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}/likes`, accessToken.token, documentId);
508
+ loggerChild.info(`Native Facebook API Unlike Response for documentId ${documentId}`, {
509
+ status: response.status,
510
+ ok: response.ok
511
+ });
512
+ return response.body;
513
+ }
514
+ async hide(accessToken, command) {
515
+ let response;
516
+ const {
517
+ externalId,
518
+ documentId
519
+ } = command;
520
+ const loggerChild = _logger.default.child({
521
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
522
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTEXTERNALID]: externalId
523
+ });
524
+ loggerChild.debug(`Starting to call facebook hide api for documentId ${documentId}`, {
525
+ command: JSON.stringify(command)
526
+ });
527
+ response = await this.postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}`, accessToken.token, documentId, {
528
+ is_hidden: true
529
+ });
530
+ loggerChild.info(`Native Facebook API Hide Response for documentId ${documentId}`, {
531
+ status: response.status,
532
+ ok: response.ok
533
+ });
534
+ return response.body;
535
+ }
536
+ async unhide(accessToken, command) {
537
+ let response;
538
+ const {
539
+ externalId,
540
+ documentId
541
+ } = command;
542
+ const loggerChild = _logger.default.child({
543
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
544
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTEXTERNALID]: externalId
545
+ });
546
+ loggerChild.debug(`Starting to call facebook unhide api for documentId ${documentId}`, {
547
+ command: JSON.stringify(command)
548
+ });
549
+ response = await this.postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}`, accessToken.token, documentId, {
550
+ is_hidden: false
551
+ });
552
+ loggerChild.info(`Native Facebook API Unhide Response for documentId ${documentId}`, {
553
+ status: response.status,
554
+ ok: response.ok
555
+ });
556
+ return response.body;
557
+ }
558
+ async isUserBanned(_ref) {
559
+ let {
560
+ credentialId,
561
+ companyId,
562
+ userId,
563
+ pageId
564
+ } = _ref;
565
+ const token = await this.credentialsAPI.getToken(credentialId, companyId);
566
+ const response = await this.getApi(`${FACEBOOK_URL}/${pageId}/blocked`, token.token, `${companyId}-${credentialId}-${userId}-${pageId}`, undefined,
567
+ // payload
568
+ {
569
+ user: (0, _externalIdHelpers.removePrefix)(userId)
570
+ });
571
+ if (response && response.body && response.body.data) {
572
+ const userNoPrefix = (0, _externalIdHelpers.removePrefix)(userId);
573
+ const user = response.body.data.find(user => {
574
+ if (user.id == userNoPrefix) {
575
+ return user;
576
+ }
577
+ });
578
+ if (user) {
579
+ return true;
580
+ } else {
581
+ return false;
582
+ }
583
+ }
584
+ _logger.default.info(`Native Facebook API is User Banned Response was invalid for userId ${userId} ${credentialId}`, {
585
+ ok: response.ok,
586
+ status: response.status,
587
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
588
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId,
589
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
590
+ [_loggerHelpers.MeltwaterAttributes.USERID]: userId
591
+ });
592
+ return false;
593
+ }
594
+ async ban(accessToken, command) {
595
+ let response;
596
+ const {
597
+ sourceId,
598
+ authorId
599
+ } = command;
600
+ _logger.default.debug(`Starting to call facebook ban api for externalAuthorId ${authorId}`, {
601
+ command: JSON.stringify(command)
602
+ });
603
+ response = await this.postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(sourceId)}/blocked`, accessToken.token, (0, _externalIdHelpers.removePrefix)(authorId), {
604
+ psid: [(0, _externalIdHelpers.removePrefix)(authorId)]
605
+ });
606
+ _logger.default.info(`Native Facebook API Hide Response for externalAuthorId ${authorId}`, {
607
+ status: response.status,
608
+ ok: response.ok
609
+ });
610
+ return response.body;
611
+ }
612
+ async unban(accessToken, command) {
613
+ let response;
614
+ const {
615
+ sourceId,
616
+ authorId
617
+ } = command;
618
+ _logger.default.debug(`Starting to call facebook unban api for externalAuthorId ${authorId}`, {
619
+ command: JSON.stringify(command)
620
+ });
621
+ response = await this.deleteApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(sourceId)}/blocked`, accessToken.token, (0, _externalIdHelpers.removePrefix)(authorId), {
622
+ psid: [(0, _externalIdHelpers.removePrefix)(authorId)]
623
+ });
624
+ _logger.default.info(`Native Facebook API Unban Response for externalAuthorId ${authorId}`, {
625
+ status: response.status,
626
+ ok: response.ok
627
+ });
628
+ return response.body;
629
+ }
630
+ }
631
+ exports.FacebookApiClient = FacebookApiClient;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FeatureToggleClient = void 0;
7
+ var _superagent = _interopRequireDefault(require("superagent"));
8
+ var _logger = _interopRequireDefault(require("../../lib/logger.js"));
9
+ var _configuration = _interopRequireDefault(require("../../lib/configuration.js"));
10
+ var _loggerHelpers = require("../../lib/logger.helpers.js");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ class FeatureToggleClient {
13
+ constructor() {
14
+ this.featureToggleUrl = _configuration.default.get('FEATURE_TOGGLE_URL');
15
+ this.featureToggleNames = ['CONNECTIONS-SOCIAL-GOVERNANCE', 'conversations-googlebusiness-display', 'CONVERSATIONS_FACEBOOK_MENTIONS'];
16
+ }
17
+ async get(companyId, jwt) {
18
+ try {
19
+ const result = await _superagent.default.post(`${this.featureToggleUrl}/treatments/${companyId}`).set('Authorization', jwt).send({
20
+ features: this.featureToggleNames,
21
+ attributes: {}
22
+ }).timeout(5000);
23
+ return result.body.treatments;
24
+ } catch (error) {
25
+ _logger.default.error(`Failed requesting Feature Toggle service for feature toggle get `, error, {
26
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId
27
+ });
28
+ }
29
+ }
30
+ }
31
+ exports.FeatureToggleClient = FeatureToggleClient;