@meltwater/conversations-api-services 1.0.24 → 1.0.26

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.
@@ -0,0 +1,286 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.comment = comment;
7
+ exports.commentOnMention = commentOnMention;
8
+ exports.getAttachment = getAttachment;
9
+ exports.getLikes = getLikes;
10
+ exports.hide = hide;
11
+ exports.privateMessage = privateMessage;
12
+ exports.reply = reply;
13
+ exports.replyOnMention = replyOnMention;
14
+ exports.unhide = unhide;
15
+ var _superagent = _interopRequireDefault(require("superagent"));
16
+ var _externalIdHelpers = require("../../lib/externalId.helpers.js");
17
+ var _loggerHelpers = require("../../lib/logger.helpers.js");
18
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
19
+ const INSTAGRAM_URL = 'https://graph.facebook.com';
20
+ async function requestApi(apiUrl, accessToken, text, data) {
21
+ let discussionType = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 're';
22
+ let adCampaign = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;
23
+ let logger = arguments.length > 6 ? arguments[6] : undefined;
24
+ let response = {};
25
+ try {
26
+ let queryStringArgs = {
27
+ access_token: accessToken
28
+ };
29
+ if (adCampaign) {
30
+ queryStringArgs.ad_id = adCampaign.adAccountId;
31
+ }
32
+ if (text) {
33
+ queryStringArgs[discussionType === 'dm' ? 'text' : 'message'] = text;
34
+ }
35
+ response = await _superagent.default.post(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query(queryStringArgs).send(data);
36
+ } catch (err) {
37
+ if (err && err.response && err.response.body && err.response.body.error) {
38
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api: ${err.response.body.error.message}`);
39
+ } else {
40
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, err);
41
+ }
42
+ throw err;
43
+ }
44
+ if (response.status !== 200) {
45
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, {
46
+ responseBody: JSON.stringify(response.body)
47
+ });
48
+ let error = new Error(`Failed to call instagram api`);
49
+ error.code = response.status;
50
+ throw error;
51
+ }
52
+ (0, _loggerHelpers.loggerDebug)(logger, 'Instagram Response status', response.status);
53
+ return response;
54
+ }
55
+ async function getPost(apiUrl, accessToken, fields, logger) {
56
+ let response = {};
57
+ try {
58
+ response = await _superagent.default.get(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
59
+ access_token: accessToken
60
+ }).query({
61
+ fields: fields
62
+ }).send();
63
+ } catch (err) {
64
+ if (err && err.response && err.response.body) {
65
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, err.response.body.error);
66
+ } else {
67
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, err);
68
+ }
69
+ throw err;
70
+ }
71
+ if (response.status !== 200) {
72
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, {
73
+ responseBody: JSON.stringify(response.body)
74
+ });
75
+ let error = new Error(`Failed to call instagram api`);
76
+ error.code = response.status;
77
+ throw error;
78
+ }
79
+ return response;
80
+ }
81
+ async function getMessageData(accessToken, sourceId, inReplyToId, logger) {
82
+ let response;
83
+ try {
84
+ response = await getPost(`${INSTAGRAM_URL}/${sourceId}`, accessToken, `mentioned_comment.comment_id(${inReplyToId}){id, text, timestamp, media{id,media_url}}`, logger);
85
+ return response.body;
86
+ } catch (err) {
87
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, err);
88
+ return null;
89
+ }
90
+ }
91
+ async function mentionRequestApi(apiUrl, accessToken, replayObject, text, logger) {
92
+ let response = {};
93
+ try {
94
+ response = await _superagent.default.post(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
95
+ access_token: accessToken
96
+ }).query(replayObject).query({
97
+ message: text
98
+ }).send();
99
+ } catch (err) {
100
+ if (err && err.response && err.response.body && err.response.body.error) {
101
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api: ${err.response.body.error.message}`);
102
+ } else {
103
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, err);
104
+ }
105
+ throw err;
106
+ }
107
+ if (response.status !== 200) {
108
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, {
109
+ responseBody: JSON.stringify(response.body)
110
+ });
111
+ let error = new Error(`Failed to call instagram api`);
112
+ error.code = response.status;
113
+ throw error;
114
+ }
115
+ return response;
116
+ }
117
+ async function hideApi(apiUrl, accessToken, hideStatus, logger) {
118
+ let response = {};
119
+ try {
120
+ response = await _superagent.default.post(apiUrl).set('Accept', 'application/json').set('Content-Type', 'application/json').query({
121
+ access_token: accessToken
122
+ }).query({
123
+ hide: hideStatus
124
+ }).send();
125
+ } catch (err) {
126
+ if (err && err.response && err.response.body) {
127
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, err.response.body.error);
128
+ } else {
129
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, err);
130
+ }
131
+ throw err;
132
+ }
133
+ if (response.status !== 200) {
134
+ (0, _loggerHelpers.loggerError)(logger, `Failed to call instagram api`, {
135
+ responseBody: JSON.stringify(response.body)
136
+ });
137
+ let error = new Error(`Failed to call instagram api`);
138
+ error.code = response.status;
139
+ throw error;
140
+ }
141
+ return response;
142
+ }
143
+ async function getLikes(accessToken, externalId, logger) {
144
+ let response;
145
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call instagram getPost api for externalId ${externalId}`);
146
+ try {
147
+ response = await getPost(`${INSTAGRAM_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}`, accessToken, 'like_count', logger);
148
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Instagram API getPost Response`, {
149
+ responseBody: JSON.stringify(response.body)
150
+ });
151
+ return response.body;
152
+ } catch (err) {
153
+ (0, _loggerHelpers.loggerError)(logger, 'Error getLikes Instagram ' + externalId, err);
154
+ return 0;
155
+ }
156
+ }
157
+ async function commentOnMention(accessToken, sourceId, inReplyToId, text, logger) {
158
+ return commentHelper(accessToken, inReplyToId, text, true, sourceId, logger);
159
+ }
160
+ async function comment(accessToken, sourceId, inReplyToId, text, logger) {
161
+ return commentHelper(accessToken, inReplyToId, text, false, sourceId, logger);
162
+ }
163
+ async function commentHelper(accessToken, inReplyToId, text, isMention, sourceId, logger) {
164
+ let response;
165
+ if (isMention) {
166
+ response = await mentionRequestApi(`${INSTAGRAM_URL}/${sourceId}/mentions`, accessToken, {
167
+ media_id: (0, _externalIdHelpers.removePrefix)(inReplyToId)
168
+ }, text, logger);
169
+ } else {
170
+ response = await requestApi(`${INSTAGRAM_URL}/${(0, _externalIdHelpers.removePrefix)(inReplyToId)}/comments`, accessToken, text, undefined, 'qt', logger);
171
+ }
172
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Intagram API Publish Comment Response`, {
173
+ responseBody: JSON.stringify(response.body)
174
+ });
175
+ return response.body;
176
+ }
177
+ async function replyOnMention(accessToken, inReplyToId, text, sourceId, threadId, logger) {
178
+ return replyHelper(accessToken, {
179
+ inReplyToId,
180
+ text,
181
+ sourceId,
182
+ threadId,
183
+ isMention: true
184
+ }, logger);
185
+ }
186
+ async function reply(accessToken, inReplyToId, text) {
187
+ let adCampaign = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
188
+ let logger = arguments.length > 4 ? arguments[4] : undefined;
189
+ return replyHelper(accessToken, {
190
+ inReplyToId,
191
+ text,
192
+ isMention: false,
193
+ adCampaign
194
+ }, logger);
195
+ }
196
+ async function replyHelper(accessToken, payload, logger) {
197
+ let response;
198
+ const {
199
+ inReplyToId,
200
+ text,
201
+ isMention,
202
+ sourceId,
203
+ threadId,
204
+ adCampaign
205
+ } = payload;
206
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call instagram comment api`, {
207
+ payload: JSON.stringify(payload)
208
+ });
209
+ if (isMention) {
210
+ let messageData = await getMessageData(accessToken, sourceId, inReplyToId, logger);
211
+ let media_id = null;
212
+ if (messageData) {
213
+ media_id = messageData.mentioned_comment.media.id;
214
+ }
215
+ response = await mentionRequestApi(`${INSTAGRAM_URL}/${sourceId}/mentions`, accessToken, {
216
+ media_id: media_id ? media_id : (0, _externalIdHelpers.removePrefix)(threadId),
217
+ comment_id: (0, _externalIdHelpers.removePrefix)(inReplyToId)
218
+ }, text, logger);
219
+ } else {
220
+ response = await requestApi(`${INSTAGRAM_URL}/${(0, _externalIdHelpers.removePrefix)(inReplyToId)}/replies`, accessToken, text, undefined, 're', adCampaign, logger);
221
+ }
222
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Instagram API Publish Reply Response`, {
223
+ responseBody: JSON.stringify(response.body)
224
+ });
225
+ return response.body;
226
+ }
227
+ async function privateMessage(accessToken, profileId, text, logger) {
228
+ const response = await requestApi(`${INSTAGRAM_URL}/v10.0/me/messages`, accessToken,
229
+ // this sends in query string leaving out :shrug:
230
+ undefined, {
231
+ recipient: {
232
+ // not :100: this is right
233
+ id: (0, _externalIdHelpers.removePrefix)(profileId)
234
+ },
235
+ message: {
236
+ text
237
+ },
238
+ // this apparently allows up to 7 days after message 🤔
239
+ tag: 'HUMAN_AGENT'
240
+ }, 'dm', logger);
241
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Instagram API Publish Private Message Response`, {
242
+ responseBody: JSON.stringify(response.body)
243
+ });
244
+ return response.body;
245
+ }
246
+ async function hide(accessToken, externalId, logger) {
247
+ let response;
248
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call instagram hide api`);
249
+ response = await hideApi(`${INSTAGRAM_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}`, accessToken, true, logger);
250
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Instagram API Hide Response`, {
251
+ responseBody: JSON.stringify(response.body)
252
+ });
253
+ return response.body;
254
+ }
255
+ async function unhide(accessToken, externalId, logger) {
256
+ let response;
257
+ (0, _loggerHelpers.loggerDebug)(logger, `Starting to call instagram unhide api`);
258
+ response = await hideApi(`${INSTAGRAM_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}`, accessToken, false, logger);
259
+ (0, _loggerHelpers.loggerInfo)(logger, `Native Instagram API Unhide Response`, {
260
+ responseBody: JSON.stringify(response.body)
261
+ });
262
+ return response.body;
263
+ }
264
+ async function getAttachment(token, externalId, logger) {
265
+ try {
266
+ const result = await getPost(`${INSTAGRAM_URL}/${(0, _externalIdHelpers.removePrefix)(externalId)}`, token, 'media_url,children{media_url}', logger);
267
+ const res = result.body;
268
+ if (res?.children?.data?.length) {
269
+ return {
270
+ images: res.children.data.map(item => {
271
+ return {
272
+ source: item?.media_url
273
+ };
274
+ })
275
+ };
276
+ }
277
+ return {
278
+ images: [{
279
+ source: res?.media_url
280
+ }]
281
+ };
282
+ } catch (error) {
283
+ (0, _loggerHelpers.loggerError)(logger, `Error getting instagram attachment`, error);
284
+ throw error;
285
+ }
286
+ }