@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,491 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LinkedInApiClient = void 0;
7
+ exports.getOrganization = getOrganization;
8
+ exports.getProfile = getProfile;
9
+ var _superagent = _interopRequireDefault(require("superagent"));
10
+ var _configuration = _interopRequireDefault(require("../../lib/configuration.js"));
11
+ var _credentialsApiClient = require("../http/credentialsApi.client.js");
12
+ var _logger = _interopRequireDefault(require("../../lib/logger.js"));
13
+ var _loggerHelpers = require("../../lib/logger.helpers.js");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ class LinkedInApiClient {
16
+ constructor() {
17
+ this.credentialsAPI = new _credentialsApiClient.CredentialsApiClient();
18
+ }
19
+ async likeMessage(document) {
20
+ const {
21
+ documentId,
22
+ systemData: {
23
+ connectionsCredential: credentialId,
24
+ policies: {
25
+ storage: {
26
+ privateTo: companyId
27
+ }
28
+ }
29
+ },
30
+ metaData: {
31
+ externalId,
32
+ source: {
33
+ id: socialAccountId
34
+ }
35
+ },
36
+ enrichments: {
37
+ socialScores: {
38
+ li_liked_by_user: likedByUser
39
+ }
40
+ }
41
+ } = document;
42
+ const loggerChild = _logger.default.child({
43
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
44
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
45
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId,
46
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTEXTERNALID]: externalId
47
+ });
48
+ let response;
49
+ let payload = {
50
+ actor: socialAccountId,
51
+ object: externalId
52
+ };
53
+ let query = likedByUser ? `${_configuration.default.get('LINKEDIN_API')}/socialActions/${fixedEncodeURIComponent(externalId)}/likes` : `${_configuration.default.get('LINKEDIN_API')}/socialActions/${fixedEncodeURIComponent(externalId)}/likes/${fixedEncodeURIComponent(payload.actor)}?actor=${fixedEncodeURIComponent(payload.actor)}`;
54
+ try {
55
+ let credential = await this.credentialsAPI.getToken(credentialId, companyId);
56
+ if (!likedByUser) {
57
+ loggerChild.debug(`${documentId} - trying Delete `, {
58
+ query,
59
+ payload: JSON.stringify(payload)
60
+ });
61
+ response = await _superagent.default.delete(query).timeout(5000).set({
62
+ Authorization: `Bearer ${credential.token}`,
63
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
64
+ 'LinkedIn-Version': '202311'
65
+ });
66
+ } else {
67
+ loggerChild.debug(`${documentId} - sending to linkedin `, {
68
+ query,
69
+ payload: JSON.stringify(payload)
70
+ });
71
+ response = await _superagent.default.post(query).timeout(5000) // 5 seconds
72
+ .set({
73
+ Authorization: `Bearer ${credential.token}`,
74
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
75
+ 'LinkedIn-Version': '202311'
76
+ }).send(payload);
77
+ }
78
+ loggerChild.info(`Native Linkedin API Like Comment Response for documentId ${documentId}`, {
79
+ ok: response.ok,
80
+ status: response.status,
81
+ message: JSON.parse(response.text),
82
+ likedByUser
83
+ });
84
+ } catch (err) {
85
+ loggerChild.error(`${documentId} - exception details`, err);
86
+ throw err;
87
+ }
88
+ return response.connection || response;
89
+ }
90
+ async deleteMessage(document) {
91
+ const {
92
+ documentId,
93
+ systemData: {
94
+ connectionsCredential: credentialId,
95
+ policies: {
96
+ storage: {
97
+ privateTo: companyId
98
+ }
99
+ }
100
+ },
101
+ metaData: {
102
+ externalId,
103
+ source: {
104
+ id: actorURN
105
+ },
106
+ inReplyTo: {
107
+ id: inReplyToId
108
+ }
109
+ }
110
+ } = document;
111
+ const loggerChild = _logger.default.child({
112
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
113
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
114
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId,
115
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTEXTERNALID]: externalId
116
+ });
117
+ const [, comment] = externalId.split(',');
118
+ const commentId = comment.split(')')[0];
119
+ let response;
120
+ let query = `${_configuration.default.get('LINKEDIN_API')}/socialActions/${fixedEncodeURIComponent(inReplyToId)}/comments/${commentId}?actor=${fixedEncodeURIComponent(actorURN)}`;
121
+ try {
122
+ let credential = await this.credentialsAPI.getToken(credentialId, companyId);
123
+ loggerChild.debug(`${documentId} - trying Delete `, {
124
+ query
125
+ });
126
+ response = await _superagent.default.delete(query).timeout(5000).set({
127
+ Authorization: `Bearer ${credential.token}`,
128
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
129
+ 'LinkedIn-Version': '202311'
130
+ });
131
+ loggerChild.info(`Native Linkedin API Delete Comment Response for documentId ${documentId}`, {
132
+ status: response.status,
133
+ ok: response.ok
134
+ });
135
+ } catch (err) {
136
+ let errorText = '';
137
+ if (err && err.response && err.response.text) {
138
+ errorText = `Call to linkedin api with documentId ${documentId} failed`;
139
+ loggerChild.error(errorText, {
140
+ message: JSON.parse(err.response.text)
141
+ });
142
+ } else {
143
+ errorText = `Call to linkedin api with documentId ${documentId} failed`;
144
+ loggerChild.error(errorText, err);
145
+ }
146
+ throw new Error(errorText);
147
+ }
148
+ return response;
149
+ }
150
+ async publishComment(document, mediaId) {
151
+ // command
152
+ const {
153
+ documentId,
154
+ systemData: {
155
+ connectionsCredential: credentialId,
156
+ policies: {
157
+ storage: {
158
+ privateTo: companyId
159
+ }
160
+ }
161
+ },
162
+ body: {
163
+ content: {
164
+ text: messageText
165
+ }
166
+ },
167
+ metaData: {
168
+ discussionType,
169
+ inReplyTo: {
170
+ id: parentUrn
171
+ },
172
+ source: {
173
+ id: socialAccountId
174
+ }
175
+ }
176
+ } = document;
177
+ let messageType = discussionType === 're' ? 'reply' : 'comment';
178
+
179
+ // for now this is needed to make the urns from the images api work until the docs are updated to reflect how to use these new ids.
180
+ if (mediaId) {
181
+ mediaId = mediaId.replace('urn:li:image:', 'urn:li:digitalmediaAsset:');
182
+ }
183
+ let body = {
184
+ actor: socialAccountId,
185
+ message: {
186
+ attributes: [],
187
+ text: messageText
188
+ }
189
+ };
190
+ if (messageType === 'reply') {
191
+ body.parentComment = parentUrn;
192
+ }
193
+ if (mediaId) {
194
+ body.content = [{
195
+ entity: {
196
+ digitalmediaAsset: mediaId
197
+ },
198
+ type: 'IMAGE'
199
+ }];
200
+ }
201
+ let query = `${_configuration.default.get('LINKEDIN_API')}/socialActions/${fixedEncodeURIComponent(parentUrn)}/comments`;
202
+
203
+ // data-listener -> linkedin_api.client sendComment
204
+ let response, updatedDocument;
205
+ try {
206
+ let credential = await this.credentialsAPI.getToken(credentialId, companyId);
207
+ let response = await _superagent.default.post(query).timeout(5000).set({
208
+ Authorization: `Bearer ${credential.token}`,
209
+ 'Content-Type': 'application/json',
210
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
211
+ 'LinkedIn-Version': '202311'
212
+ }).send(body);
213
+ response = {
214
+ status: 200,
215
+ message: JSON.parse(response.text)
216
+ };
217
+ } catch (err) {
218
+ _logger.default.error(`${documentId} - exception linkedin publish`, err, {
219
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
220
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
221
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
222
+ });
223
+ }
224
+ return response;
225
+ }
226
+ async getMediaUploadURL(companyId, credentialId, socialAccountId, documentId) {
227
+ let query = `${_configuration.default.get('LINKEDIN_API')}/images?action=initializeUpload`;
228
+ let body = {
229
+ initializeUploadRequest: {
230
+ owner: socialAccountId
231
+ }
232
+ };
233
+ let response;
234
+ try {
235
+ let credential = await this.credentialsAPI.getToken(credentialId, companyId);
236
+ response = await _superagent.default.post(query).timeout(5000).set({
237
+ Authorization: `Bearer ${credential.token}`,
238
+ 'Content-type': 'application/json',
239
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
240
+ 'LinkedIn-Version': '202311'
241
+ }).send(body);
242
+ response = {
243
+ status: 200,
244
+ message: JSON.parse(response.text)
245
+ };
246
+ return response;
247
+ } catch (err) {
248
+ _logger.default.error(`${documentId} - exception linkedin media register`, err, {
249
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTID]: documentId,
250
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
251
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
252
+ });
253
+ }
254
+ }
255
+ async getAllStats(externalId, token) {
256
+ let response = {};
257
+ const loggerChild = _logger.default.child({
258
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTEXTERNALID]: externalId
259
+ });
260
+ try {
261
+ response = await _superagent.default.get(_configuration.default.get('LINKEDIN_API') + '/socialMetadata/' + fixedEncodeURIComponent(externalId)).timeout(5000) // 5 seconds
262
+ .set({
263
+ Authorization: `Bearer ${token}`,
264
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
265
+ 'LinkedIn-Version': '202311'
266
+ });
267
+ } catch (error) {
268
+ loggerChild.error('Error in getAllStats', error);
269
+ }
270
+ let {
271
+ commentSummary,
272
+ reactionSummaries
273
+ } = response.body || {};
274
+ if (commentSummary && reactionSummaries) {
275
+ return {
276
+ commentSummary,
277
+ reactionSummaries
278
+ };
279
+ } else {
280
+ loggerChild.error(`Invalid response getting all Linkedin Stats for externalId = ${externalId}`, {
281
+ response: JSON.stringify(response)
282
+ });
283
+ return {};
284
+ }
285
+ }
286
+ async getSocialStats(externalId, token) {
287
+ try {
288
+ // get all stats (likes are not to be trusted) seems to only work
289
+ // for og posts.
290
+ const {
291
+ commentSummary,
292
+ reactionSummaries
293
+ } = await this.getAllStats(externalId, token);
294
+ return {
295
+ commentSummary,
296
+ reactionSummaries
297
+ };
298
+ } catch (error) {
299
+ _logger.default.error('Error in getSocialStats', error, {
300
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTEXTERNALID]: externalId
301
+ });
302
+ }
303
+ }
304
+ async getImageMedia(mediaId, credentialId, companyId) {
305
+ let response = {};
306
+ const loggerChild = _logger.default.child({
307
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
308
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
309
+ });
310
+ let credential = await this.credentialsAPI.getToken(credentialId, companyId);
311
+ if (mediaId && mediaId.includes('digitalmediaAsset')) {
312
+ mediaId = mediaId.replace('urn:li:digitalmediaAsset:', 'urn:li:image:');
313
+ }
314
+ try {
315
+ response = await _superagent.default.get(_configuration.default.get('LINKEDIN_API') + '/images/' + fixedEncodeURIComponent(mediaId)).timeout(5000) // 5 seconds
316
+ .set({
317
+ Authorization: `Bearer ${credential.token}`,
318
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
319
+ 'LinkedIn-Version': '202311'
320
+ });
321
+ } catch (error) {
322
+ loggerChild.error('Error in getImageMedia', error);
323
+ }
324
+ let {
325
+ downloadUrl
326
+ } = response.body || {};
327
+ if (downloadUrl) {
328
+ return {
329
+ downloadUrl
330
+ };
331
+ } else {
332
+ loggerChild.error(`Invalid response getting Linkedin media for mediaId: ${mediaId}`, {
333
+ response: JSON.stringify(response)
334
+ });
335
+ return {};
336
+ }
337
+ }
338
+ async getVideoMedia(mediaId, credentialId, companyId) {
339
+ let response = {};
340
+ let tempValue;
341
+ const loggerChild = _logger.default.child({
342
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
343
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
344
+ });
345
+ let credential = await this.credentialsAPI.getToken(credentialId, companyId);
346
+ if (mediaId && mediaId.includes('digitalmediaMediaArtifact')) {
347
+ tempValue = mediaId.split('digitalmediaMediaArtifact:(')[1];
348
+ tempValue = tempValue.split(',urn:li:digitalmediaMediaArtifactClass')[0];
349
+ mediaId = tempValue;
350
+ }
351
+ if (mediaId && mediaId.includes('digitalmediaAsset')) {
352
+ mediaId = mediaId.replace('urn:li:digitalmediaAsset:', 'urn:li:video:');
353
+ }
354
+ try {
355
+ response = await _superagent.default.get(_configuration.default.get('LINKEDIN_API') + '/videos/' + fixedEncodeURIComponent(mediaId)).timeout(5000) // 5 seconds
356
+ .set({
357
+ Authorization: `Bearer ${credential.token}`,
358
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
359
+ 'LinkedIn-Version': '202311'
360
+ });
361
+ } catch (error) {
362
+ loggerChild.error('Error in getVideoMedia', error);
363
+ }
364
+ let {
365
+ thumbnail,
366
+ downloadUrl
367
+ } = response.body || {};
368
+ if (downloadUrl) {
369
+ return {
370
+ thumbnail,
371
+ downloadUrl
372
+ };
373
+ } else {
374
+ loggerChild.error(`Invalid response getting Linkedin media for mediaId: ${mediaId}`, {
375
+ response: JSON.stringify(response)
376
+ });
377
+ return {};
378
+ }
379
+ }
380
+ async getMedia(mediaId, type, credentialId, companyId) {
381
+ // needed due to issue with polled data
382
+ if (type.includes('video') && mediaId.includes('image')) {
383
+ type = 'image/jpeg';
384
+ }
385
+ try {
386
+ if (type.includes('image')) {
387
+ const {
388
+ downloadUrl
389
+ } = await this.getImageMedia(mediaId, credentialId, companyId);
390
+ return {
391
+ downloadUrl
392
+ };
393
+ } else if (type.includes('video')) {
394
+ const {
395
+ thumbnail,
396
+ downloadUrl
397
+ } = await this.getVideoMedia(mediaId, credentialId, companyId);
398
+ return {
399
+ thumbnail,
400
+ downloadUrl
401
+ };
402
+ }
403
+ return {};
404
+ } catch (error) {
405
+ _logger.default.error('Error in getMedia', error, {
406
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
407
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
408
+ });
409
+ }
410
+ }
411
+ async getLikedByUser(externalId, authorExternalId, credentialId, companyId) {
412
+ let result;
413
+ try {
414
+ let credential = await this.credentialsAPI.getToken(credentialId, companyId);
415
+ result = await _superagent.default.get(`${_configuration.default.get('LINKEDIN_API')}/reactions/(actor:${fixedEncodeURIComponent(authorExternalId)},entity:${fixedEncodeURIComponent(externalId)})`).set({
416
+ Authorization: `Bearer ${credential.token}`,
417
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
418
+ 'LinkedIn-Version': '202311'
419
+ }).then(result => result.body);
420
+ } catch (error) {
421
+ _logger.default.error('Error in getLikesByUser', error, {
422
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId,
423
+ [_loggerHelpers.MeltwaterAttributes.DOCUMENTEXTERNALID]: externalId,
424
+ [_loggerHelpers.MeltwaterAttributes.CREDENTIALID]: credentialId
425
+ });
426
+ return false;
427
+ }
428
+ return true;
429
+ }
430
+ async uploadMedia(query) {
431
+ const {
432
+ socialAccountId,
433
+ url,
434
+ token,
435
+ data
436
+ } = query;
437
+ _logger.default.info(`Starting to upload media to linkedin for ${socialAccountId}`, {
438
+ url: query.url
439
+ });
440
+ return await _superagent.default.put(url).set({
441
+ Accept: '*/*',
442
+ 'Content-Type': 'application/octet-stream',
443
+ Authorization: `Bearer ${token}`,
444
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
445
+ 'LinkedIn-Version': '202311'
446
+ }).send(data).catch(err => {
447
+ _logger.default.error(err);
448
+ throw err;
449
+ });
450
+ }
451
+ }
452
+ exports.LinkedInApiClient = LinkedInApiClient;
453
+ async function getProfile(urn, token) {
454
+ let [,,, id] = urn.split(':');
455
+ let profile;
456
+ try {
457
+ profile = await _superagent.default.get(`${_configuration.default.get('LINKEDIN_API')}/people/(id:${id})`).query({
458
+ projection: '(id,localizedFirstName,localizedLastName,vanityName,profilePicture(displayImage~:playableStreams))'
459
+ }).timeout(5000).set({
460
+ Authorization: `Bearer ${token}`,
461
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
462
+ 'LinkedIn-Version': '202311'
463
+ }).then(result => result.body);
464
+ } catch (error) {
465
+ _logger.default.error(`Failed requesting LinkedIn API for profileId ${urn}`, error);
466
+ return;
467
+ }
468
+ _logger.default.info(`Finished requesting LinkedIn API for profileId ${urn}`);
469
+ return profile;
470
+ }
471
+ async function getOrganization(urn, token) {
472
+ let [,,, id] = urn.split(':');
473
+ let organization;
474
+ try {
475
+ organization = await _superagent.default.get(`${_configuration.default.get('LINKEDIN_API')}/organizations/${id}`).query({
476
+ projection: '(id,localizedName,vanityName,logoV2(original~:playableStreams))'
477
+ }).timeout(5000) // 5 seconds
478
+ .set({
479
+ Authorization: `Bearer ${token}`,
480
+ 'X-RestLi-Protocol-Version': _configuration.default.get('LINKEDIN_API_VERSION'),
481
+ 'LinkedIn-Version': '202311'
482
+ }).then(result => result.body);
483
+ } catch (error) {
484
+ _logger.default.error(`Failed requesting LinkedIn API for organizationId ${urn}`, error);
485
+ }
486
+ _logger.default.info(`Finished requesting LinkedIn API for organizationId ${urn}`);
487
+ return organization;
488
+ }
489
+ function fixedEncodeURIComponent(str) {
490
+ return encodeURIComponent(str).replace('(', '%28').replace(')', '%29');
491
+ }
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MasfClient = 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 MasfClient {
13
+ constructor() {
14
+ this.searchServicesUrlMasf = _configuration.default.get('MASF_SEARCH_SERVICE_URL');
15
+ this.searchServicesVersionMasf = _configuration.default.get('MASF_SEARCH_SERVICE_VERSION');
16
+ this.xClientName = _configuration.default.get('CLIENT_NAME_HEADER');
17
+ this.authorListVersionMasf = 'v3';
18
+ }
19
+ async getSearches(_ref) {
20
+ let {
21
+ companyId,
22
+ token
23
+ } = _ref;
24
+ try {
25
+ let uri = `${this.searchServicesUrlMasf}/${this.searchServicesVersionMasf}/company/${companyId}/searches`;
26
+ return (await _superagent.default.get(uri).set({
27
+ Authorization: `${token}`
28
+ })).body;
29
+ } catch (error) {
30
+ _logger.default.error(`Failed requesting Search Services for search list `, error, {
31
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId
32
+ });
33
+ }
34
+ }
35
+ async getAuthorsLists(_ref2) {
36
+ let {
37
+ companyId,
38
+ token
39
+ } = _ref2;
40
+ try {
41
+ let uri = `${this.searchServicesUrlMasf}/v3/companies/${companyId}/authorlists`;
42
+ return (await _superagent.default.get(uri).set({
43
+ Authorization: `${token}`
44
+ }).set('x-client-name', this.xClientName)).body.sort((_ref3, _ref4) => {
45
+ let {
46
+ name: n1
47
+ } = _ref3;
48
+ let {
49
+ name: n2
50
+ } = _ref4;
51
+ if (n1.toUpperCase() < n2.toUpperCase()) {
52
+ return -1;
53
+ }
54
+ if (n1.toUpperCase() > n2.toUpperCase()) {
55
+ return 1;
56
+ }
57
+ return 0;
58
+ });
59
+ } catch (error) {
60
+ _logger.default.error(`Failed requesting Search Services for author list `, error, {
61
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId
62
+ });
63
+ }
64
+ }
65
+ async getAuthorsList(_ref5) {
66
+ let {
67
+ companyId,
68
+ authorListId,
69
+ token
70
+ } = _ref5;
71
+ try {
72
+ let uri = `${this.searchServicesUrlMasf}/${this.authorListVersionMasf}/companies/${companyId}/authorlists/${authorListId}`;
73
+ return (await _superagent.default.get(uri).set({
74
+ Authorization: `${token}`
75
+ })).body;
76
+ } catch (error) {
77
+ _logger.default.error(`Failed requesting Search Services for author list `, error, {
78
+ [_loggerHelpers.MeltwaterAttributes.COMPANYID]: companyId
79
+ });
80
+ }
81
+ }
82
+ async getRune(_ref6) {
83
+ let {
84
+ searchId,
85
+ token
86
+ } = _ref6;
87
+ let rune;
88
+ try {
89
+ let uri = `${this.searchServicesUrlMasf}/${this.searchServicesVersionMasf}/search/getSavedSearchAsRunes/${searchId}`;
90
+ rune = await _superagent.default.get(uri).set({
91
+ Authorization: `${token}`
92
+ });
93
+ } catch (error) {
94
+ _logger.default.error(`Failed requesting Search Services for search list `, error);
95
+ return;
96
+ }
97
+ _logger.default.info(`Finished requesting Search Services for rune ${this.searchServicesUrlMasf} searchId: ${searchId}`);
98
+ return rune.body;
99
+ }
100
+ }
101
+ exports.MasfClient = MasfClient;