@memberjunction/actions-bizapps-social 2.112.0 → 2.113.1

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 (204) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +13 -0
  3. package/dist/base/base-social.action.d.ts.map +1 -1
  4. package/dist/base/base-social.action.js +24 -18
  5. package/dist/base/base-social.action.js.map +1 -1
  6. package/dist/providers/buffer/buffer-base.action.d.ts.map +1 -1
  7. package/dist/providers/buffer/buffer-base.action.js +34 -35
  8. package/dist/providers/buffer/buffer-base.action.js.map +1 -1
  9. package/dist/providers/facebook/actions/boost-post.action.d.ts.map +1 -1
  10. package/dist/providers/facebook/actions/boost-post.action.js +33 -33
  11. package/dist/providers/facebook/actions/boost-post.action.js.map +1 -1
  12. package/dist/providers/facebook/actions/create-album.action.d.ts.map +1 -1
  13. package/dist/providers/facebook/actions/create-album.action.js +36 -34
  14. package/dist/providers/facebook/actions/create-album.action.js.map +1 -1
  15. package/dist/providers/facebook/actions/create-post.action.d.ts.map +1 -1
  16. package/dist/providers/facebook/actions/create-post.action.js +20 -20
  17. package/dist/providers/facebook/actions/create-post.action.js.map +1 -1
  18. package/dist/providers/facebook/actions/get-page-insights.action.d.ts.map +1 -1
  19. package/dist/providers/facebook/actions/get-page-insights.action.js +27 -25
  20. package/dist/providers/facebook/actions/get-page-insights.action.js.map +1 -1
  21. package/dist/providers/facebook/actions/get-page-posts.action.d.ts.map +1 -1
  22. package/dist/providers/facebook/actions/get-page-posts.action.js +23 -19
  23. package/dist/providers/facebook/actions/get-page-posts.action.js.map +1 -1
  24. package/dist/providers/facebook/actions/get-post-insights.action.d.ts.map +1 -1
  25. package/dist/providers/facebook/actions/get-post-insights.action.js +32 -28
  26. package/dist/providers/facebook/actions/get-post-insights.action.js.map +1 -1
  27. package/dist/providers/facebook/actions/respond-to-comments.action.d.ts.map +1 -1
  28. package/dist/providers/facebook/actions/respond-to-comments.action.js +44 -42
  29. package/dist/providers/facebook/actions/respond-to-comments.action.js.map +1 -1
  30. package/dist/providers/facebook/actions/schedule-post.action.d.ts.map +1 -1
  31. package/dist/providers/facebook/actions/schedule-post.action.js +29 -29
  32. package/dist/providers/facebook/actions/schedule-post.action.js.map +1 -1
  33. package/dist/providers/facebook/actions/search-posts.action.d.ts.map +1 -1
  34. package/dist/providers/facebook/actions/search-posts.action.js +39 -37
  35. package/dist/providers/facebook/actions/search-posts.action.js.map +1 -1
  36. package/dist/providers/facebook/facebook-base.action.d.ts.map +1 -1
  37. package/dist/providers/facebook/facebook-base.action.js +59 -44
  38. package/dist/providers/facebook/facebook-base.action.js.map +1 -1
  39. package/dist/providers/hootsuite/actions/bulk-schedule-posts.action.d.ts.map +1 -1
  40. package/dist/providers/hootsuite/actions/bulk-schedule-posts.action.js +31 -33
  41. package/dist/providers/hootsuite/actions/bulk-schedule-posts.action.js.map +1 -1
  42. package/dist/providers/hootsuite/actions/create-scheduled-post.action.d.ts.map +1 -1
  43. package/dist/providers/hootsuite/actions/create-scheduled-post.action.js +32 -28
  44. package/dist/providers/hootsuite/actions/create-scheduled-post.action.js.map +1 -1
  45. package/dist/providers/hootsuite/actions/delete-scheduled-post.action.d.ts.map +1 -1
  46. package/dist/providers/hootsuite/actions/delete-scheduled-post.action.js +19 -19
  47. package/dist/providers/hootsuite/actions/delete-scheduled-post.action.js.map +1 -1
  48. package/dist/providers/hootsuite/actions/get-analytics.action.d.ts.map +1 -1
  49. package/dist/providers/hootsuite/actions/get-analytics.action.js +26 -24
  50. package/dist/providers/hootsuite/actions/get-analytics.action.js.map +1 -1
  51. package/dist/providers/hootsuite/actions/get-scheduled-posts.action.d.ts.map +1 -1
  52. package/dist/providers/hootsuite/actions/get-scheduled-posts.action.js +22 -22
  53. package/dist/providers/hootsuite/actions/get-scheduled-posts.action.js.map +1 -1
  54. package/dist/providers/hootsuite/actions/get-social-profiles.action.d.ts.map +1 -1
  55. package/dist/providers/hootsuite/actions/get-social-profiles.action.js +34 -32
  56. package/dist/providers/hootsuite/actions/get-social-profiles.action.js.map +1 -1
  57. package/dist/providers/hootsuite/actions/search-posts.action.d.ts.map +1 -1
  58. package/dist/providers/hootsuite/actions/search-posts.action.js +52 -43
  59. package/dist/providers/hootsuite/actions/search-posts.action.js.map +1 -1
  60. package/dist/providers/hootsuite/actions/update-scheduled-post.action.d.ts.map +1 -1
  61. package/dist/providers/hootsuite/actions/update-scheduled-post.action.js +28 -30
  62. package/dist/providers/hootsuite/actions/update-scheduled-post.action.js.map +1 -1
  63. package/dist/providers/hootsuite/hootsuite-base.action.d.ts.map +1 -1
  64. package/dist/providers/hootsuite/hootsuite-base.action.js +20 -18
  65. package/dist/providers/hootsuite/hootsuite-base.action.js.map +1 -1
  66. package/dist/providers/instagram/actions/create-post.action.d.ts.map +1 -1
  67. package/dist/providers/instagram/actions/create-post.action.js +26 -27
  68. package/dist/providers/instagram/actions/create-post.action.js.map +1 -1
  69. package/dist/providers/instagram/actions/create-story.action.d.ts.map +1 -1
  70. package/dist/providers/instagram/actions/create-story.action.js +35 -35
  71. package/dist/providers/instagram/actions/create-story.action.js.map +1 -1
  72. package/dist/providers/instagram/actions/get-account-insights.action.d.ts.map +1 -1
  73. package/dist/providers/instagram/actions/get-account-insights.action.js +59 -38
  74. package/dist/providers/instagram/actions/get-account-insights.action.js.map +1 -1
  75. package/dist/providers/instagram/actions/get-business-posts.action.d.ts.map +1 -1
  76. package/dist/providers/instagram/actions/get-business-posts.action.js +29 -29
  77. package/dist/providers/instagram/actions/get-business-posts.action.js.map +1 -1
  78. package/dist/providers/instagram/actions/get-comments.action.d.ts.map +1 -1
  79. package/dist/providers/instagram/actions/get-comments.action.js +36 -36
  80. package/dist/providers/instagram/actions/get-comments.action.js.map +1 -1
  81. package/dist/providers/instagram/actions/get-post-insights.action.d.ts.map +1 -1
  82. package/dist/providers/instagram/actions/get-post-insights.action.js +25 -23
  83. package/dist/providers/instagram/actions/get-post-insights.action.js.map +1 -1
  84. package/dist/providers/instagram/actions/schedule-post.action.d.ts.map +1 -1
  85. package/dist/providers/instagram/actions/schedule-post.action.js +25 -25
  86. package/dist/providers/instagram/actions/schedule-post.action.js.map +1 -1
  87. package/dist/providers/instagram/actions/search-posts.action.d.ts.map +1 -1
  88. package/dist/providers/instagram/actions/search-posts.action.js +60 -56
  89. package/dist/providers/instagram/actions/search-posts.action.js.map +1 -1
  90. package/dist/providers/instagram/instagram-base.action.d.ts.map +1 -1
  91. package/dist/providers/instagram/instagram-base.action.js +27 -25
  92. package/dist/providers/instagram/instagram-base.action.js.map +1 -1
  93. package/dist/providers/linkedin/actions/create-article.action.d.ts.map +1 -1
  94. package/dist/providers/linkedin/actions/create-article.action.js +45 -55
  95. package/dist/providers/linkedin/actions/create-article.action.js.map +1 -1
  96. package/dist/providers/linkedin/actions/create-post.action.d.ts.map +1 -1
  97. package/dist/providers/linkedin/actions/create-post.action.js +29 -31
  98. package/dist/providers/linkedin/actions/create-post.action.js.map +1 -1
  99. package/dist/providers/linkedin/actions/get-followers.action.d.ts.map +1 -1
  100. package/dist/providers/linkedin/actions/get-followers.action.js +28 -28
  101. package/dist/providers/linkedin/actions/get-followers.action.js.map +1 -1
  102. package/dist/providers/linkedin/actions/get-organization-posts.action.d.ts.map +1 -1
  103. package/dist/providers/linkedin/actions/get-organization-posts.action.js +20 -20
  104. package/dist/providers/linkedin/actions/get-organization-posts.action.js.map +1 -1
  105. package/dist/providers/linkedin/actions/get-personal-posts.action.d.ts.map +1 -1
  106. package/dist/providers/linkedin/actions/get-personal-posts.action.js +19 -19
  107. package/dist/providers/linkedin/actions/get-personal-posts.action.js.map +1 -1
  108. package/dist/providers/linkedin/actions/get-post-analytics.action.d.ts.map +1 -1
  109. package/dist/providers/linkedin/actions/get-post-analytics.action.js +23 -25
  110. package/dist/providers/linkedin/actions/get-post-analytics.action.js.map +1 -1
  111. package/dist/providers/linkedin/actions/schedule-post.action.d.ts.map +1 -1
  112. package/dist/providers/linkedin/actions/schedule-post.action.js +30 -32
  113. package/dist/providers/linkedin/actions/schedule-post.action.js.map +1 -1
  114. package/dist/providers/linkedin/actions/search-posts.action.d.ts.map +1 -1
  115. package/dist/providers/linkedin/actions/search-posts.action.js +30 -28
  116. package/dist/providers/linkedin/actions/search-posts.action.js.map +1 -1
  117. package/dist/providers/linkedin/linkedin-base.action.d.ts.map +1 -1
  118. package/dist/providers/linkedin/linkedin-base.action.js +38 -33
  119. package/dist/providers/linkedin/linkedin-base.action.js.map +1 -1
  120. package/dist/providers/tiktok/tiktok-base.action.d.ts.map +1 -1
  121. package/dist/providers/tiktok/tiktok-base.action.js +26 -25
  122. package/dist/providers/tiktok/tiktok-base.action.js.map +1 -1
  123. package/dist/providers/twitter/actions/create-thread.action.d.ts.map +1 -1
  124. package/dist/providers/twitter/actions/create-thread.action.js +29 -25
  125. package/dist/providers/twitter/actions/create-thread.action.js.map +1 -1
  126. package/dist/providers/twitter/actions/create-tweet.action.d.ts.map +1 -1
  127. package/dist/providers/twitter/actions/create-tweet.action.js +23 -23
  128. package/dist/providers/twitter/actions/create-tweet.action.js.map +1 -1
  129. package/dist/providers/twitter/actions/delete-tweet.action.d.ts.map +1 -1
  130. package/dist/providers/twitter/actions/delete-tweet.action.js +19 -19
  131. package/dist/providers/twitter/actions/delete-tweet.action.js.map +1 -1
  132. package/dist/providers/twitter/actions/get-analytics.action.d.ts.map +1 -1
  133. package/dist/providers/twitter/actions/get-analytics.action.js +47 -40
  134. package/dist/providers/twitter/actions/get-analytics.action.js.map +1 -1
  135. package/dist/providers/twitter/actions/get-mentions.action.d.ts.map +1 -1
  136. package/dist/providers/twitter/actions/get-mentions.action.js +31 -30
  137. package/dist/providers/twitter/actions/get-mentions.action.js.map +1 -1
  138. package/dist/providers/twitter/actions/get-timeline.action.d.ts.map +1 -1
  139. package/dist/providers/twitter/actions/get-timeline.action.js +29 -29
  140. package/dist/providers/twitter/actions/get-timeline.action.js.map +1 -1
  141. package/dist/providers/twitter/actions/schedule-tweet.action.d.ts.map +1 -1
  142. package/dist/providers/twitter/actions/schedule-tweet.action.js +26 -26
  143. package/dist/providers/twitter/actions/schedule-tweet.action.js.map +1 -1
  144. package/dist/providers/twitter/actions/search-tweets.action.d.ts.map +1 -1
  145. package/dist/providers/twitter/actions/search-tweets.action.js +58 -56
  146. package/dist/providers/twitter/actions/search-tweets.action.js.map +1 -1
  147. package/dist/providers/twitter/twitter-base.action.d.ts.map +1 -1
  148. package/dist/providers/twitter/twitter-base.action.js +68 -58
  149. package/dist/providers/twitter/twitter-base.action.js.map +1 -1
  150. package/dist/providers/youtube/youtube-base.action.d.ts +1 -1
  151. package/dist/providers/youtube/youtube-base.action.d.ts.map +1 -1
  152. package/dist/providers/youtube/youtube-base.action.js +25 -22
  153. package/dist/providers/youtube/youtube-base.action.js.map +1 -1
  154. package/package.json +6 -5
  155. package/src/base/base-social.action.ts +224 -217
  156. package/src/providers/buffer/buffer-base.action.ts +441 -435
  157. package/src/providers/facebook/actions/boost-post.action.ts +386 -350
  158. package/src/providers/facebook/actions/create-album.action.ts +307 -291
  159. package/src/providers/facebook/actions/create-post.action.ts +227 -224
  160. package/src/providers/facebook/actions/get-page-insights.action.ts +403 -383
  161. package/src/providers/facebook/actions/get-page-posts.action.ts +225 -214
  162. package/src/providers/facebook/actions/get-post-insights.action.ts +316 -300
  163. package/src/providers/facebook/actions/respond-to-comments.action.ts +336 -319
  164. package/src/providers/facebook/actions/schedule-post.action.ts +292 -289
  165. package/src/providers/facebook/actions/search-posts.action.ts +413 -399
  166. package/src/providers/facebook/facebook-base.action.ts +670 -653
  167. package/src/providers/hootsuite/actions/bulk-schedule-posts.action.ts +257 -257
  168. package/src/providers/hootsuite/actions/create-scheduled-post.action.ts +189 -184
  169. package/src/providers/hootsuite/actions/delete-scheduled-post.action.ts +161 -160
  170. package/src/providers/hootsuite/actions/get-analytics.action.ts +254 -249
  171. package/src/providers/hootsuite/actions/get-scheduled-posts.action.ts +207 -206
  172. package/src/providers/hootsuite/actions/get-social-profiles.action.ts +205 -206
  173. package/src/providers/hootsuite/actions/search-posts.action.ts +369 -351
  174. package/src/providers/hootsuite/actions/update-scheduled-post.action.ts +209 -211
  175. package/src/providers/hootsuite/hootsuite-base.action.ts +307 -301
  176. package/src/providers/instagram/actions/create-post.action.ts +296 -276
  177. package/src/providers/instagram/actions/create-story.action.ts +394 -378
  178. package/src/providers/instagram/actions/get-account-insights.action.ts +420 -384
  179. package/src/providers/instagram/actions/get-business-posts.action.ts +242 -233
  180. package/src/providers/instagram/actions/get-comments.action.ts +377 -365
  181. package/src/providers/instagram/actions/get-post-insights.action.ts +273 -265
  182. package/src/providers/instagram/actions/schedule-post.action.ts +235 -233
  183. package/src/providers/instagram/actions/search-posts.action.ts +538 -512
  184. package/src/providers/instagram/instagram-base.action.ts +393 -368
  185. package/src/providers/linkedin/actions/create-article.action.ts +266 -275
  186. package/src/providers/linkedin/actions/create-post.action.ts +177 -179
  187. package/src/providers/linkedin/actions/get-followers.action.ts +211 -211
  188. package/src/providers/linkedin/actions/get-organization-posts.action.ts +147 -146
  189. package/src/providers/linkedin/actions/get-personal-posts.action.ts +139 -138
  190. package/src/providers/linkedin/actions/get-post-analytics.action.ts +189 -190
  191. package/src/providers/linkedin/actions/schedule-post.action.ts +189 -191
  192. package/src/providers/linkedin/actions/search-posts.action.ts +283 -275
  193. package/src/providers/linkedin/linkedin-base.action.ts +421 -407
  194. package/src/providers/tiktok/tiktok-base.action.ts +320 -305
  195. package/src/providers/twitter/actions/create-thread.action.ts +207 -203
  196. package/src/providers/twitter/actions/create-tweet.action.ts +188 -187
  197. package/src/providers/twitter/actions/delete-tweet.action.ts +129 -128
  198. package/src/providers/twitter/actions/get-analytics.action.ts +411 -402
  199. package/src/providers/twitter/actions/get-mentions.action.ts +219 -218
  200. package/src/providers/twitter/actions/get-timeline.action.ts +233 -232
  201. package/src/providers/twitter/actions/schedule-tweet.action.ts +222 -221
  202. package/src/providers/twitter/actions/search-tweets.action.ts +543 -540
  203. package/src/providers/twitter/twitter-base.action.ts +560 -541
  204. package/src/providers/youtube/youtube-base.action.ts +333 -320
@@ -1,7 +1,7 @@
1
1
  import { RegisterClass } from '@memberjunction/global';
2
2
  import { LinkedInBaseAction, LinkedInAnalytics } from '../linkedin-base.action';
3
3
  import { ActionParam, ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
4
- import { LogStatus, LogError } from '@memberjunction/global';
4
+ import { LogStatus, LogError } from '@memberjunction/core';
5
5
  import { SocialAnalytics } from '../../../base/base-social.action';
6
6
  import { BaseAction } from '@memberjunction/actions';
7
7
 
@@ -10,198 +10,197 @@ import { BaseAction } from '@memberjunction/actions';
10
10
  */
11
11
  @RegisterClass(BaseAction, 'LinkedInGetPostAnalyticsAction')
12
12
  export class LinkedInGetPostAnalyticsAction extends LinkedInBaseAction {
13
- /**
14
- * Get analytics for a specific LinkedIn post
15
- */
16
- protected async InternalRunAction(params: RunActionParams): Promise<ActionResultSimple> {
17
- const { Params, ContextUser } = params;
18
-
19
- try {
20
- // Initialize OAuth
21
- const companyIntegrationId = this.getParamValue(Params, 'CompanyIntegrationID');
22
- if (!(await this.initializeOAuth(companyIntegrationId))) {
23
- throw new Error('Failed to initialize OAuth connection');
24
- }
25
-
26
- // Extract parameters
27
- const postId = this.getParamValue(Params, 'PostID');
28
- const authorType = this.getParamValue(Params, 'AuthorType') || 'organization'; // 'personal' or 'organization'
29
- const organizationId = this.getParamValue(Params, 'OrganizationID');
30
- const timeRange = this.getParamValue(Params, 'TimeRange'); // Optional: {start: Date, end: Date}
31
-
32
- // Validate required parameters
33
- if (!postId) {
34
- throw new Error('PostID is required');
35
- }
36
-
37
- let analytics: LinkedInAnalytics | null = null;
38
-
39
- if (authorType === 'organization') {
40
- // Get organization analytics
41
- let organizationUrn: string;
42
- if (!organizationId) {
43
- // Get first admin organization if not specified
44
- const orgs = await this.getAdminOrganizations();
45
- if (orgs.length === 0) {
46
- throw new Error('No organizations found. Please specify OrganizationID.');
47
- }
48
- organizationUrn = orgs[0].urn;
49
- LogStatus(`Using organization: ${orgs[0].name}`);
50
- } else {
51
- organizationUrn = `urn:li:organization:${organizationId}`;
13
+ /**
14
+ * Get analytics for a specific LinkedIn post
15
+ */
16
+ protected async InternalRunAction(params: RunActionParams): Promise<ActionResultSimple> {
17
+ const { Params, ContextUser } = params;
18
+
19
+ try {
20
+ // Initialize OAuth
21
+ const companyIntegrationId = this.getParamValue(Params, 'CompanyIntegrationID');
22
+ if (!await this.initializeOAuth(companyIntegrationId)) {
23
+ throw new Error('Failed to initialize OAuth connection');
24
+ }
25
+
26
+ // Extract parameters
27
+ const postId = this.getParamValue(Params, 'PostID');
28
+ const authorType = this.getParamValue(Params, 'AuthorType') || 'organization'; // 'personal' or 'organization'
29
+ const organizationId = this.getParamValue(Params, 'OrganizationID');
30
+ const timeRange = this.getParamValue(Params, 'TimeRange'); // Optional: {start: Date, end: Date}
31
+
32
+ // Validate required parameters
33
+ if (!postId) {
34
+ throw new Error('PostID is required');
35
+ }
36
+
37
+ let analytics: LinkedInAnalytics | null = null;
38
+
39
+ if (authorType === 'organization') {
40
+ // Get organization analytics
41
+ let organizationUrn: string;
42
+ if (!organizationId) {
43
+ // Get first admin organization if not specified
44
+ const orgs = await this.getAdminOrganizations();
45
+ if (orgs.length === 0) {
46
+ throw new Error('No organizations found. Please specify OrganizationID.');
47
+ }
48
+ organizationUrn = orgs[0].urn;
49
+ LogStatus(`Using organization: ${orgs[0].name}`);
50
+ } else {
51
+ organizationUrn = `urn:li:organization:${organizationId}`;
52
+ }
53
+
54
+ analytics = await this.getOrganizationPostAnalytics(postId, organizationUrn, timeRange);
55
+ } else {
56
+ // Get personal post analytics (limited)
57
+ analytics = await this.getPersonalPostAnalytics(postId);
58
+ }
59
+
60
+ if (!analytics) {
61
+ throw new Error('No analytics data available for this post');
62
+ }
63
+
64
+ // Normalize analytics
65
+ const normalizedAnalytics = this.normalizeAnalytics(analytics);
66
+
67
+ // Update output parameters
68
+ const outputParams = [...Params];
69
+ const analyticsParam = outputParams.find(p => p.Name === 'Analytics');
70
+ if (analyticsParam) analyticsParam.Value = normalizedAnalytics;
71
+ const rawAnalyticsParam = outputParams.find(p => p.Name === 'RawAnalytics');
72
+ if (rawAnalyticsParam) rawAnalyticsParam.Value = analytics;
73
+
74
+ return {
75
+ Success: true,
76
+ ResultCode: 'SUCCESS',
77
+ Message: `Successfully retrieved analytics for post ${postId}`,
78
+ Params: outputParams
79
+ };
80
+
81
+ } catch (error) {
82
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
83
+
84
+ return {
85
+ Success: false,
86
+ ResultCode: 'ERROR',
87
+ Message: `Failed to get post analytics: ${errorMessage}`,
88
+ Params
89
+ };
52
90
  }
91
+ }
53
92
 
54
- analytics = await this.getOrganizationPostAnalytics(postId, organizationUrn, timeRange);
55
- } else {
56
- // Get personal post analytics (limited)
57
- analytics = await this.getPersonalPostAnalytics(postId);
58
- }
59
-
60
- if (!analytics) {
61
- throw new Error('No analytics data available for this post');
62
- }
63
-
64
- // Normalize analytics
65
- const normalizedAnalytics = this.normalizeAnalytics(analytics);
66
-
67
- // Update output parameters
68
- const outputParams = [...Params];
69
- const analyticsParam = outputParams.find((p) => p.Name === 'Analytics');
70
- if (analyticsParam) analyticsParam.Value = normalizedAnalytics;
71
- const rawAnalyticsParam = outputParams.find((p) => p.Name === 'RawAnalytics');
72
- if (rawAnalyticsParam) rawAnalyticsParam.Value = analytics;
73
-
74
- return {
75
- Success: true,
76
- ResultCode: 'SUCCESS',
77
- Message: `Successfully retrieved analytics for post ${postId}`,
78
- Params: outputParams,
79
- };
80
- } catch (error) {
81
- const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
82
-
83
- return {
84
- Success: false,
85
- ResultCode: 'ERROR',
86
- Message: `Failed to get post analytics: ${errorMessage}`,
87
- Params,
88
- };
93
+ /**
94
+ * Get analytics for an organization post
95
+ */
96
+ private async getOrganizationPostAnalytics(shareId: string, organizationUrn: string, timeRange?: any): Promise<LinkedInAnalytics> {
97
+ try {
98
+ const params: any = {
99
+ q: 'organizationalEntity',
100
+ organizationalEntity: organizationUrn,
101
+ shares: `List(${shareId})`
102
+ };
103
+
104
+ // Add time range if specified
105
+ if (timeRange) {
106
+ if (timeRange.start) {
107
+ params.timeIntervals = `List((start:${new Date(timeRange.start).getTime()},end:${new Date(timeRange.end || Date.now()).getTime()}))`;
108
+ }
109
+ }
110
+
111
+ const response = await this.axiosInstance.get('/organizationalEntityShareStatistics', { params });
112
+
113
+ if (response.data.elements && response.data.elements.length > 0) {
114
+ const stats = response.data.elements[0];
115
+ return {
116
+ totalShareStatistics: stats.totalShareStatistics || {},
117
+ timeRange: timeRange ? {
118
+ start: new Date(timeRange.start).getTime(),
119
+ end: new Date(timeRange.end || Date.now()).getTime()
120
+ } : undefined
121
+ };
122
+ }
123
+
124
+ throw new Error('No analytics data found');
125
+ } catch (error) {
126
+ LogError(`Failed to get organization post analytics: ${error instanceof Error ? error.message : 'Unknown error'}`);
127
+ throw error;
128
+ }
89
129
  }
90
- }
91
-
92
- /**
93
- * Get analytics for an organization post
94
- */
95
- private async getOrganizationPostAnalytics(shareId: string, organizationUrn: string, timeRange?: any): Promise<LinkedInAnalytics> {
96
- try {
97
- const params: any = {
98
- q: 'organizationalEntity',
99
- organizationalEntity: organizationUrn,
100
- shares: `List(${shareId})`,
101
- };
102
-
103
- // Add time range if specified
104
- if (timeRange) {
105
- if (timeRange.start) {
106
- params.timeIntervals = `List((start:${new Date(timeRange.start).getTime()},end:${new Date(timeRange.end || Date.now()).getTime()}))`;
130
+
131
+ /**
132
+ * Get analytics for a personal post (limited data available)
133
+ */
134
+ private async getPersonalPostAnalytics(shareId: string): Promise<LinkedInAnalytics> {
135
+ try {
136
+ // For personal posts, we need to fetch the post itself to get basic engagement metrics
137
+ const response = await this.axiosInstance.get(`/ugcPosts/${shareId}`);
138
+
139
+ if (response.data) {
140
+ // Extract available metrics from the post data
141
+ return {
142
+ totalShareStatistics: {
143
+ impressionCount: 0, // Not available for personal posts
144
+ clickCount: 0, // Not available for personal posts
145
+ engagement: response.data.likesSummary?.totalLikes || 0 + response.data.commentsSummary?.totalComments || 0,
146
+ likeCount: response.data.likesSummary?.totalLikes || 0,
147
+ commentCount: response.data.commentsSummary?.totalComments || 0,
148
+ shareCount: 0, // Not directly available
149
+ uniqueImpressionsCount: 0 // Not available for personal posts
150
+ }
151
+ };
152
+ }
153
+
154
+ throw new Error('Post not found');
155
+ } catch (error) {
156
+ LogError(`Failed to get personal post analytics: ${error instanceof Error ? error.message : 'Unknown error'}`);
157
+ throw error;
107
158
  }
108
- }
109
-
110
- const response = await this.axiosInstance.get('/organizationalEntityShareStatistics', { params });
111
-
112
- if (response.data.elements && response.data.elements.length > 0) {
113
- const stats = response.data.elements[0];
114
- return {
115
- totalShareStatistics: stats.totalShareStatistics || {},
116
- timeRange: timeRange
117
- ? {
118
- start: new Date(timeRange.start).getTime(),
119
- end: new Date(timeRange.end || Date.now()).getTime(),
120
- }
121
- : undefined,
122
- };
123
- }
124
-
125
- throw new Error('No analytics data found');
126
- } catch (error) {
127
- LogError(`Failed to get organization post analytics: ${error instanceof Error ? error.message : 'Unknown error'}`);
128
- throw error;
129
159
  }
130
- }
131
-
132
- /**
133
- * Get analytics for a personal post (limited data available)
134
- */
135
- private async getPersonalPostAnalytics(shareId: string): Promise<LinkedInAnalytics> {
136
- try {
137
- // For personal posts, we need to fetch the post itself to get basic engagement metrics
138
- const response = await this.axiosInstance.get(`/ugcPosts/${shareId}`);
139
-
140
- if (response.data) {
141
- // Extract available metrics from the post data
142
- return {
143
- totalShareStatistics: {
144
- impressionCount: 0, // Not available for personal posts
145
- clickCount: 0, // Not available for personal posts
146
- engagement: response.data.likesSummary?.totalLikes || 0 + response.data.commentsSummary?.totalComments || 0,
147
- likeCount: response.data.likesSummary?.totalLikes || 0,
148
- commentCount: response.data.commentsSummary?.totalComments || 0,
149
- shareCount: 0, // Not directly available
150
- uniqueImpressionsCount: 0, // Not available for personal posts
151
- },
152
- };
153
- }
154
-
155
- throw new Error('Post not found');
156
- } catch (error) {
157
- LogError(`Failed to get personal post analytics: ${error instanceof Error ? error.message : 'Unknown error'}`);
158
- throw error;
160
+
161
+ /**
162
+ * Define the parameters this action expects
163
+ */
164
+ public get Params(): ActionParam[] {
165
+ return [
166
+ ...this.commonSocialParams,
167
+ {
168
+ Name: 'PostID',
169
+ Type: 'Input',
170
+ Value: null
171
+ },
172
+ {
173
+ Name: 'AuthorType',
174
+ Type: 'Input',
175
+ Value: 'organization' // 'personal' or 'organization'
176
+ },
177
+ {
178
+ Name: 'OrganizationID',
179
+ Type: 'Input',
180
+ Value: null
181
+ },
182
+ {
183
+ Name: 'TimeRange',
184
+ Type: 'Input',
185
+ Value: null // Optional: {start: Date, end: Date}
186
+ },
187
+ {
188
+ Name: 'Analytics',
189
+ Type: 'Output',
190
+ Value: null
191
+ },
192
+ {
193
+ Name: 'RawAnalytics',
194
+ Type: 'Output',
195
+ Value: null
196
+ }
197
+ ];
198
+ }
199
+
200
+ /**
201
+ * Get action description
202
+ */
203
+ public get Description(): string {
204
+ return 'Retrieves detailed analytics for a LinkedIn post (organization posts have more detailed analytics than personal posts)';
159
205
  }
160
- }
161
-
162
- /**
163
- * Define the parameters this action expects
164
- */
165
- public get Params(): ActionParam[] {
166
- return [
167
- ...this.commonSocialParams,
168
- {
169
- Name: 'PostID',
170
- Type: 'Input',
171
- Value: null,
172
- },
173
- {
174
- Name: 'AuthorType',
175
- Type: 'Input',
176
- Value: 'organization', // 'personal' or 'organization'
177
- },
178
- {
179
- Name: 'OrganizationID',
180
- Type: 'Input',
181
- Value: null,
182
- },
183
- {
184
- Name: 'TimeRange',
185
- Type: 'Input',
186
- Value: null, // Optional: {start: Date, end: Date}
187
- },
188
- {
189
- Name: 'Analytics',
190
- Type: 'Output',
191
- Value: null,
192
- },
193
- {
194
- Name: 'RawAnalytics',
195
- Type: 'Output',
196
- Value: null,
197
- },
198
- ];
199
- }
200
-
201
- /**
202
- * Get action description
203
- */
204
- public get Description(): string {
205
- return 'Retrieves detailed analytics for a LinkedIn post (organization posts have more detailed analytics than personal posts)';
206
- }
207
- }
206
+ }