@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,344 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ban = ban;
7
+ exports.comment = comment;
8
+ exports.getAttachment = getAttachment;
9
+ exports.getProfile = getProfile;
10
+ exports.hide = hide;
11
+ exports.isUserBanned = isUserBanned;
12
+ exports.like = like;
13
+ exports.privateMessage = privateMessage;
14
+ exports.reactions = reactions;
15
+ exports.shareCount = shareCount;
16
+ exports.unban = unban;
17
+ exports.unhide = unhide;
18
+ exports.unlike = unlike;
19
+ var _superagent = _interopRequireDefault(require("superagent"));
20
+ var _externalIdHelpers = require("../../lib/externalId.helpers.js");
21
+ var _loggerHelpers = require("../../lib/logger.helpers.js");
22
+ var _httpError = require("../../errors/http-error.js");
23
+ var _engageError = require("../../errors/engage-error.js");
24
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
25
+ const FACEBOOK_URL = 'https://graph.facebook.com';
26
+ async function shareCount(token, externalId, logger) {
27
+ try {
28
+ const response = await getApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}/?fields=shares`, token);
29
+ return response.body.shares && response.body.shares.count;
30
+ } catch (err) {
31
+ (0, _loggerHelpers.loggerError)(logger, `Facebook shareCount error recieved - ${error.code}`, error);
32
+ }
33
+ }
34
+ async function reactions(token, externalIds, logger) {
35
+ try {
36
+ const response = await getApi(`${FACEBOOK_URL}?ids=${externalIds.map(externalId => (0, _externalIdHelpers.removePrefix)(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);
37
+ return response.body;
38
+ } catch (error) {
39
+ (0, _loggerHelpers.loggerError)(logger, `Facebook reactions error recieved - ${error.code}`, error);
40
+ return undefined;
41
+ }
42
+ }
43
+ async function comment(token, _ref) {
44
+ let {
45
+ inReplyToExternalId,
46
+ text,
47
+ attachment = undefined
48
+ } = _ref;
49
+ let logger = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
50
+ let response;
51
+ const isGif = attachment && attachment.mimeType === 'image/gif';
52
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call facebook comment api inReplyToExternalId ${inReplyToExternalId}`, {
53
+ text,
54
+ attachment
55
+ });
56
+ response = await postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(inReplyToExternalId)}/comments`, token, {
57
+ ...(text && text.length && {
58
+ message: text
59
+ }),
60
+ ...(attachment && !isGif && {
61
+ attachment_url: attachment.link
62
+ }),
63
+ ...(attachment && isGif && {
64
+ attachment_share_url: attachment.link
65
+ })
66
+ }, logger);
67
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Facebook API Publish Comment Response to externalId ${inReplyToExternalId}`, {
68
+ responseBody: JSON.stringify(response.body)
69
+ });
70
+ return response.body;
71
+ }
72
+ async function privateMessage(token, _ref2, logger) {
73
+ let {
74
+ recipientId,
75
+ text,
76
+ attachment = undefined
77
+ } = _ref2;
78
+ let response;
79
+ const isGif = attachment && attachment.mimeType === 'image/gif';
80
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call facebook PM api to recipientId ${recipientId}`, {
81
+ payload: JSON.stringify({
82
+ text,
83
+ attachment
84
+ })
85
+ });
86
+ response = await postApi(`${FACEBOOK_URL}/me/messages`, token, {
87
+ recipient: {
88
+ id: (0, _externalIdHelpers.removePrefix)(recipientId)
89
+ },
90
+ message: {
91
+ text: text,
92
+ ...(attachment && {
93
+ attachment: {
94
+ type: isGif ? 'video' : attachment.mimeType.split('/')[0],
95
+ payload: {
96
+ url: attachment.link,
97
+ is_reusable: true
98
+ }
99
+ }
100
+ })
101
+ },
102
+ tag: 'HUMAN_AGENT'
103
+ }, logger);
104
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Facebook API Publish Private Message Response for documentId ${documentId}`, {
105
+ responseBody: JSON.stringify(response.body)
106
+ });
107
+ return response.body;
108
+ }
109
+ async function hide(token, externalId, logger) {
110
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call facebook hide api`);
111
+ const response = await postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}`, token, {
112
+ is_hidden: true
113
+ }, logger);
114
+ (0, _loggerHelpers.loggerInfo)(logger`Native Facebook API Hide Response`, {
115
+ responseBody: JSON.stringify(response.body)
116
+ });
117
+ return response.body;
118
+ }
119
+ async function unhide(token, externalId, logger) {
120
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call facebook unhide api`);
121
+ const response = await postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}`, token, {
122
+ is_hidden: false
123
+ }, logger);
124
+ loggerChild.info(`Native Facebook API Unhide Response`, {
125
+ responseBody: JSON.stringify(response.body)
126
+ });
127
+ return response.body;
128
+ }
129
+ async function like(token, externalId, logger) {
130
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call facebook like api`);
131
+ const response = await postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}/likes`, token, undefined, logger);
132
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Facebook API Like Response`, {
133
+ responseBody: JSON.stringify(response.body)
134
+ });
135
+ return response.body;
136
+ }
137
+ async function unlike(token, externalId, logger) {
138
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call facebook unlike api`);
139
+ const response = await deleteApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}/likes`, token, undefined, logger);
140
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Facebook API Unlike Response`, {
141
+ responseBody: JSON.stringify(response.body)
142
+ });
143
+ return response.body;
144
+ }
145
+ async function isUserBanned(token, authorId, pageId, logger) {
146
+ if (!pageId) {
147
+ // if no pageId to check this call will fail
148
+ // should only happen with temp edge docs
149
+ return false;
150
+ }
151
+ const response = await getApi(`${FACEBOOK_URL}/${pageId}/blocked`, token, undefined,
152
+ // payload
153
+ {
154
+ user: (0, _externalIdHelpers.removePrefix)(authorId)
155
+ }, logger);
156
+ if (response && response.body && response.body.data) {
157
+ const userNoPrefix = (0, _externalIdHelpers.removePrefix)(authorId);
158
+ const user = response.body.data.find(user => {
159
+ if (user.id == userNoPrefix) {
160
+ return user;
161
+ }
162
+ });
163
+ if (user) {
164
+ return true;
165
+ } else {
166
+ return false;
167
+ }
168
+ }
169
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Facebook API is User Banned Response was invalid`, {
170
+ responseBody: JSON.stringify(response.body)
171
+ });
172
+ return false;
173
+ }
174
+ async function getProfile(token, authorId, logger) {
175
+ if (!authorId) {
176
+ return false;
177
+ }
178
+ let response = {};
179
+ const userNoPrefix = (0, _externalIdHelpers.removePrefix)(authorId);
180
+ try {
181
+ response = await _superagent.default.get(`${FACEBOOK_URL}/${userNoPrefix}`).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
182
+ access_token: token
183
+ }).send();
184
+ } catch (err) {
185
+ if (err?.response?.body?.error) {
186
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api for userId ${userNoPrefix}: ${err.response.body.error.message}`);
187
+ } else {
188
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api for userId ${userNoPrefix}`, err);
189
+ }
190
+ return null;
191
+ }
192
+ if (response.status !== 200) {
193
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api for userId ${userNoPrefix}`, {
194
+ responseBody: JSON.stringify(response.body)
195
+ });
196
+ let error = new Error(`Failed to call facebook api for userId ${userNoPrefix}`);
197
+ error.code = response.status;
198
+ return null;
199
+ }
200
+ return response;
201
+ }
202
+ async function ban(token, sourceId, authorId, logger) {
203
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call facebook ban api for externalAuthorId ${authorId} ${sourceId}`);
204
+ const response = await postApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(sourceId)}/blocked`, token, {
205
+ psid: [(0, _externalIdHelpers.removePrefix)(authorId)]
206
+ }, logger);
207
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Facebook API Hide Response for externalAuthorId ${authorId}`, {
208
+ responseBody: JSON.stringify(response.body)
209
+ });
210
+ return response.body;
211
+ }
212
+ async function unban(token, sourceId, authorId, logger) {
213
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call facebook unban api for externalAuthorId ${authorId} ${sourceId}`);
214
+ const response = await deleteApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(sourceId)}/blocked`, token, {
215
+ psid: [(0, _externalIdHelpers.removePrefix)(authorId)]
216
+ }, logger);
217
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Facebook API Unban Response for externalAuthorId ${authorId}`, {
218
+ responseBody: JSON.stringify(response.body)
219
+ });
220
+ return response.body;
221
+ }
222
+ async function getAttachment(token, externalId, discussionType, logger) {
223
+ let result;
224
+ try {
225
+ switch (discussionType) {
226
+ case 're':
227
+ case 'qt':
228
+ result = await getApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}?fields=attachment`, token, undefined, undefined, logger);
229
+ return {
230
+ images: [{
231
+ source: result?.body?.attachment?.media?.source || result?.body?.attachment?.media?.image?.src
232
+ }]
233
+ };
234
+ case 'dm':
235
+ result = await getApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}?fields=attachments`, token, undefined, undefined, logger);
236
+ return {
237
+ images: result?.body?.attachments?.data.map(item => {
238
+ return {
239
+ source: item.image_data?.url
240
+ };
241
+ })
242
+ };
243
+ default:
244
+ // og
245
+ result = await getApi(`${FACEBOOK_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}/attachments?fields=media,subattachments,file_url`, token, undefined, undefined, logger);
246
+
247
+ // if subattachments exist, use them
248
+ const res = result?.body?.data[0];
249
+ if (res?.subattachments) {
250
+ return {
251
+ images: res?.subattachments.data.map(item => {
252
+ return {
253
+ source: item?.media?.source || item?.media?.image?.src
254
+ };
255
+ })
256
+ };
257
+ }
258
+ return {
259
+ images: [{
260
+ source: res?.media?.source || res?.media?.image?.src
261
+ }]
262
+ };
263
+ }
264
+ } catch (error) {
265
+ (0, _loggerHelpers.loggerError)(logger, `Error getting facebook attachment`, error);
266
+ throw error;
267
+ }
268
+ }
269
+ async function getApi(apiUrl, accessToken, payload) {
270
+ let queryParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
271
+ let logger = arguments.length > 4 ? arguments[4] : undefined;
272
+ let response = {};
273
+ try {
274
+ response = await _superagent.default.get(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
275
+ access_token: accessToken,
276
+ ...queryParams
277
+ }).send(payload);
278
+ } catch (err) {
279
+ if (err && err.response && err.response.body && err.response.body.error) {
280
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook getApi ${apiUrl}: ${err.response.body.error.message}`);
281
+ } else {
282
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook getApi ${apiUrl}`, err);
283
+ }
284
+ throw err;
285
+ }
286
+ if (response.status !== 200) {
287
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api ${apiUrl}`, {
288
+ responseBody: JSON.stringify(response.body)
289
+ });
290
+ let error = new Error(`Failed to call facebook api ${apiUrl}`);
291
+ error.code = response.status;
292
+ throw error;
293
+ }
294
+ return response;
295
+ }
296
+ async function postApi(apiUrl, accessToken, payload, logger) {
297
+ let response = {};
298
+ try {
299
+ response = await _superagent.default.post(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
300
+ access_token: accessToken
301
+ }).send(payload);
302
+ } catch (err) {
303
+ if (err && err.response && err.response.body && err.response.body.error) {
304
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api: ${err.response.body.error.message}`);
305
+ } else {
306
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api`, err);
307
+ }
308
+ if (response.status) {
309
+ throw new _httpError.EngageHttpError(response.status, response.statusText, response.body, response.headers);
310
+ }
311
+ throw err;
312
+ }
313
+ if (response.status !== 200) {
314
+ logger.error(logger, `Failed to call facebook api`, {
315
+ responseBody: JSON.stringify(response.body)
316
+ });
317
+ throw new _engageError.EngageError(response.status, `Failed to call facebook api ${response.body}`);
318
+ }
319
+ return response;
320
+ }
321
+ async function deleteApi(apiUrl, accessToken, payload, logger) {
322
+ let response = {};
323
+ try {
324
+ response = await _superagent.default.delete(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
325
+ access_token: accessToken
326
+ }).send(payload);
327
+ } catch (err) {
328
+ if (err && err.response && err.response.body && err.response.body.error) {
329
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api delete: ${err.response.body.error.message}`);
330
+ } else {
331
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api delete`, err);
332
+ }
333
+ throw err;
334
+ }
335
+ if (response.status !== 200) {
336
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call facebook api delete`, {
337
+ responseBody: JSON.stringify(response.body)
338
+ });
339
+ let error = new Error(`Failed to call facebook api delete`);
340
+ error.code = response.status;
341
+ throw error;
342
+ }
343
+ return response;
344
+ }