@memberjunction/actions-bizapps-social 2.111.0 → 2.112.0

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 +6 -6
  3. package/dist/base/base-social.action.d.ts.map +1 -1
  4. package/dist/base/base-social.action.js +18 -24
  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 +35 -34
  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 +34 -36
  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 +25 -27
  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 +19 -23
  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 +28 -32
  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 +42 -44
  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 +37 -39
  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 +44 -59
  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 +33 -31
  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 +28 -32
  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 +24 -26
  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 +32 -34
  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 +43 -52
  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 +30 -28
  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 +18 -20
  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 +27 -26
  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 +38 -59
  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 +23 -25
  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 +56 -60
  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 +25 -27
  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 +55 -45
  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 +31 -29
  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 +25 -23
  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 +32 -30
  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 +28 -30
  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 +33 -38
  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 +25 -26
  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 +25 -29
  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 +40 -47
  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 +30 -31
  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 +56 -58
  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 +58 -68
  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 +22 -25
  153. package/dist/providers/youtube/youtube-base.action.js.map +1 -1
  154. package/package.json +5 -6
  155. package/src/base/base-social.action.ts +217 -224
  156. package/src/providers/buffer/buffer-base.action.ts +435 -441
  157. package/src/providers/facebook/actions/boost-post.action.ts +350 -386
  158. package/src/providers/facebook/actions/create-album.action.ts +291 -307
  159. package/src/providers/facebook/actions/create-post.action.ts +224 -227
  160. package/src/providers/facebook/actions/get-page-insights.action.ts +383 -403
  161. package/src/providers/facebook/actions/get-page-posts.action.ts +214 -225
  162. package/src/providers/facebook/actions/get-post-insights.action.ts +300 -316
  163. package/src/providers/facebook/actions/respond-to-comments.action.ts +319 -336
  164. package/src/providers/facebook/actions/schedule-post.action.ts +289 -292
  165. package/src/providers/facebook/actions/search-posts.action.ts +399 -413
  166. package/src/providers/facebook/facebook-base.action.ts +653 -670
  167. package/src/providers/hootsuite/actions/bulk-schedule-posts.action.ts +257 -257
  168. package/src/providers/hootsuite/actions/create-scheduled-post.action.ts +184 -189
  169. package/src/providers/hootsuite/actions/delete-scheduled-post.action.ts +160 -161
  170. package/src/providers/hootsuite/actions/get-analytics.action.ts +249 -254
  171. package/src/providers/hootsuite/actions/get-scheduled-posts.action.ts +206 -207
  172. package/src/providers/hootsuite/actions/get-social-profiles.action.ts +206 -205
  173. package/src/providers/hootsuite/actions/search-posts.action.ts +351 -369
  174. package/src/providers/hootsuite/actions/update-scheduled-post.action.ts +211 -209
  175. package/src/providers/hootsuite/hootsuite-base.action.ts +301 -307
  176. package/src/providers/instagram/actions/create-post.action.ts +276 -296
  177. package/src/providers/instagram/actions/create-story.action.ts +378 -394
  178. package/src/providers/instagram/actions/get-account-insights.action.ts +384 -420
  179. package/src/providers/instagram/actions/get-business-posts.action.ts +233 -242
  180. package/src/providers/instagram/actions/get-comments.action.ts +365 -377
  181. package/src/providers/instagram/actions/get-post-insights.action.ts +265 -273
  182. package/src/providers/instagram/actions/schedule-post.action.ts +233 -235
  183. package/src/providers/instagram/actions/search-posts.action.ts +512 -538
  184. package/src/providers/instagram/instagram-base.action.ts +368 -393
  185. package/src/providers/linkedin/actions/create-article.action.ts +275 -266
  186. package/src/providers/linkedin/actions/create-post.action.ts +179 -177
  187. package/src/providers/linkedin/actions/get-followers.action.ts +211 -211
  188. package/src/providers/linkedin/actions/get-organization-posts.action.ts +146 -147
  189. package/src/providers/linkedin/actions/get-personal-posts.action.ts +138 -139
  190. package/src/providers/linkedin/actions/get-post-analytics.action.ts +190 -189
  191. package/src/providers/linkedin/actions/schedule-post.action.ts +191 -189
  192. package/src/providers/linkedin/actions/search-posts.action.ts +275 -283
  193. package/src/providers/linkedin/linkedin-base.action.ts +407 -421
  194. package/src/providers/tiktok/tiktok-base.action.ts +305 -320
  195. package/src/providers/twitter/actions/create-thread.action.ts +203 -207
  196. package/src/providers/twitter/actions/create-tweet.action.ts +187 -188
  197. package/src/providers/twitter/actions/delete-tweet.action.ts +128 -129
  198. package/src/providers/twitter/actions/get-analytics.action.ts +402 -411
  199. package/src/providers/twitter/actions/get-mentions.action.ts +218 -219
  200. package/src/providers/twitter/actions/get-timeline.action.ts +232 -233
  201. package/src/providers/twitter/actions/schedule-tweet.action.ts +221 -222
  202. package/src/providers/twitter/actions/search-tweets.action.ts +540 -543
  203. package/src/providers/twitter/twitter-base.action.ts +541 -560
  204. package/src/providers/youtube/youtube-base.action.ts +320 -333
@@ -1,7 +1,7 @@
1
1
  import { RegisterClass } from '@memberjunction/global';
2
2
  import { HootSuiteBaseAction, HootSuitePost } from '../hootsuite-base.action';
3
3
  import { ActionParam, ActionResultSimple, RunActionParams } from '@memberjunction/actions-base';
4
- import { LogStatus, LogError } from '@memberjunction/core';
4
+ import { LogStatus, LogError } from '@memberjunction/global';
5
5
  import { SocialPost } from '../../../base/base-social.action';
6
6
  import { BaseAction } from '@memberjunction/actions';
7
7
 
@@ -10,212 +10,211 @@ import { BaseAction } from '@memberjunction/actions';
10
10
  */
11
11
  @RegisterClass(BaseAction, 'HootSuiteGetScheduledPostsAction')
12
12
  export class HootSuiteGetScheduledPostsAction extends HootSuiteBaseAction {
13
- /**
14
- * Get scheduled posts from HootSuite
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');
13
+ /**
14
+ * Get scheduled posts from HootSuite
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 profileId = this.getParamValue(Params, 'ProfileID');
28
+ const startDate = this.getParamValue(Params, 'StartDate');
29
+ const endDate = this.getParamValue(Params, 'EndDate');
30
+ const limit = this.getParamValue(Params, 'Limit') || 100;
31
+ const includeAnalytics = this.getParamValue(Params, 'IncludeAnalytics') || false;
32
+
33
+ // Build query parameters
34
+ const queryParams: any = {
35
+ state: 'SCHEDULED',
36
+ limit: Math.min(limit, 100),
37
+ maxResults: limit,
38
+ };
39
+
40
+ if (profileId) {
41
+ queryParams.socialProfileIds = profileId;
42
+ }
43
+
44
+ if (startDate) {
45
+ queryParams.scheduledAfter = this.formatHootSuiteDate(startDate);
46
+ }
47
+
48
+ if (endDate) {
49
+ queryParams.scheduledBefore = this.formatHootSuiteDate(endDate);
50
+ }
51
+
52
+ // Get scheduled posts
53
+ const posts = await this.makePaginatedRequest<HootSuitePost>('/messages', queryParams);
54
+
55
+ // Convert to common format
56
+ const normalizedPosts: SocialPost[] = await Promise.all(
57
+ posts.map(async (post) => {
58
+ const normalized = this.normalizePost(post);
59
+
60
+ // Optionally include analytics
61
+ if (includeAnalytics && post.state === 'PUBLISHED') {
62
+ try {
63
+ const analytics = await this.getPostAnalytics(post.id);
64
+ normalized.analytics = this.normalizeAnalytics(analytics);
65
+ } catch (error) {
66
+ LogStatus(`Failed to get analytics for post ${post.id}: ${error instanceof Error ? error.message : 'Unknown error'}`);
24
67
  }
25
-
26
- // Extract parameters
27
- const profileId = this.getParamValue(Params, 'ProfileID');
28
- const startDate = this.getParamValue(Params, 'StartDate');
29
- const endDate = this.getParamValue(Params, 'EndDate');
30
- const limit = this.getParamValue(Params, 'Limit') || 100;
31
- const includeAnalytics = this.getParamValue(Params, 'IncludeAnalytics') || false;
32
-
33
- // Build query parameters
34
- const queryParams: any = {
35
- state: 'SCHEDULED',
36
- limit: Math.min(limit, 100),
37
- maxResults: limit
38
- };
39
-
40
- if (profileId) {
41
- queryParams.socialProfileIds = profileId;
42
- }
43
-
44
- if (startDate) {
45
- queryParams.scheduledAfter = this.formatHootSuiteDate(startDate);
46
- }
47
-
48
- if (endDate) {
49
- queryParams.scheduledBefore = this.formatHootSuiteDate(endDate);
50
- }
51
-
52
- // Get scheduled posts
53
- const posts = await this.makePaginatedRequest<HootSuitePost>('/messages', queryParams);
54
-
55
- // Convert to common format
56
- const normalizedPosts: SocialPost[] = await Promise.all(
57
- posts.map(async (post) => {
58
- const normalized = this.normalizePost(post);
59
-
60
- // Optionally include analytics
61
- if (includeAnalytics && post.state === 'PUBLISHED') {
62
- try {
63
- const analytics = await this.getPostAnalytics(post.id);
64
- normalized.analytics = this.normalizeAnalytics(analytics);
65
- } catch (error) {
66
- LogStatus(`Failed to get analytics for post ${post.id}: ${error instanceof Error ? error.message : 'Unknown error'}`);
67
- }
68
- }
69
-
70
- return normalized;
71
- })
72
- );
73
-
74
- // Create summary
75
- const summary = {
76
- totalPosts: normalizedPosts.length,
77
- byProfile: this.groupByProfile(posts),
78
- byDate: this.groupByDate(normalizedPosts),
79
- dateRange: {
80
- start: startDate || 'Not specified',
81
- end: endDate || 'Not specified'
82
- }
83
- };
84
-
85
- // Update output parameters
86
- const outputParams = [...Params];
87
- const postsParam = outputParams.find(p => p.Name === 'ScheduledPosts');
88
- if (postsParam) postsParam.Value = normalizedPosts;
89
- const summaryParam = outputParams.find(p => p.Name === 'Summary');
90
- if (summaryParam) summaryParam.Value = summary;
91
-
92
- return {
93
- Success: true,
94
- ResultCode: 'SUCCESS',
95
- Message: `Retrieved ${normalizedPosts.length} scheduled posts`,
96
- Params: outputParams
97
- };
98
-
99
- } catch (error) {
100
- const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
101
-
102
- return {
103
- Success: false,
104
- ResultCode: 'ERROR',
105
- Message: `Failed to get scheduled posts: ${errorMessage}`,
106
- Params
107
- };
108
- }
109
- }
110
-
111
- /**
112
- * Convert HootSuite post to common format
113
- */
114
- protected normalizePost(hootsuitePost: HootSuitePost): SocialPost {
115
- return {
116
- id: hootsuitePost.id,
117
- platform: 'HootSuite',
118
- profileId: hootsuitePost.socialProfileIds.join(','), // Multiple profiles possible
119
- content: hootsuitePost.text,
120
- mediaUrls: hootsuitePost.mediaIds || [],
121
- publishedAt: this.parseHootSuiteDate(hootsuitePost.createdTime),
122
- scheduledFor: hootsuitePost.scheduledTime ? this.parseHootSuiteDate(hootsuitePost.scheduledTime) : undefined,
123
- platformSpecificData: {
124
- state: hootsuitePost.state,
125
- tags: hootsuitePost.tags,
126
- location: hootsuitePost.location,
127
- socialProfileIds: hootsuitePost.socialProfileIds
128
- }
129
- };
130
- }
131
-
132
- /**
133
- * Get analytics for a specific post
134
- */
135
- private async getPostAnalytics(postId: string): Promise<any> {
136
- try {
137
- const response = await this.axiosInstance.get(`/analytics/posts/${postId}`);
138
- return response.data;
139
- } catch (error) {
140
- // Analytics might not be available for all posts
141
- return null;
142
- }
143
- }
144
-
145
- /**
146
- * Group posts by profile
147
- */
148
- private groupByProfile(posts: HootSuitePost[]): Record<string, number> {
149
- const groups: Record<string, number> = {};
150
-
151
- posts.forEach(post => {
152
- post.socialProfileIds.forEach(profileId => {
153
- groups[profileId] = (groups[profileId] || 0) + 1;
154
- });
155
- });
156
-
157
- return groups;
68
+ }
69
+
70
+ return normalized;
71
+ })
72
+ );
73
+
74
+ // Create summary
75
+ const summary = {
76
+ totalPosts: normalizedPosts.length,
77
+ byProfile: this.groupByProfile(posts),
78
+ byDate: this.groupByDate(normalizedPosts),
79
+ dateRange: {
80
+ start: startDate || 'Not specified',
81
+ end: endDate || 'Not specified',
82
+ },
83
+ };
84
+
85
+ // Update output parameters
86
+ const outputParams = [...Params];
87
+ const postsParam = outputParams.find((p) => p.Name === 'ScheduledPosts');
88
+ if (postsParam) postsParam.Value = normalizedPosts;
89
+ const summaryParam = outputParams.find((p) => p.Name === 'Summary');
90
+ if (summaryParam) summaryParam.Value = summary;
91
+
92
+ return {
93
+ Success: true,
94
+ ResultCode: 'SUCCESS',
95
+ Message: `Retrieved ${normalizedPosts.length} scheduled posts`,
96
+ Params: outputParams,
97
+ };
98
+ } catch (error) {
99
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
100
+
101
+ return {
102
+ Success: false,
103
+ ResultCode: 'ERROR',
104
+ Message: `Failed to get scheduled posts: ${errorMessage}`,
105
+ Params,
106
+ };
158
107
  }
159
-
160
- /**
161
- * Group posts by scheduled date
162
- */
163
- private groupByDate(posts: SocialPost[]): Record<string, number> {
164
- const groups: Record<string, number> = {};
165
-
166
- posts.forEach(post => {
167
- if (post.scheduledFor) {
168
- const dateKey = post.scheduledFor.toISOString().split('T')[0];
169
- groups[dateKey] = (groups[dateKey] || 0) + 1;
170
- }
171
- });
172
-
173
- return groups;
174
- }
175
-
176
- /**
177
- * Define the parameters this action expects
178
- */
179
- public get Params(): ActionParam[] {
180
- return [
181
- ...this.commonSocialParams,
182
- {
183
- Name: 'StartDate',
184
- Type: 'Input',
185
- Value: null
186
- },
187
- {
188
- Name: 'EndDate',
189
- Type: 'Input',
190
- Value: null
191
- },
192
- {
193
- Name: 'Limit',
194
- Type: 'Input',
195
- Value: null
196
- },
197
- {
198
- Name: 'IncludeAnalytics',
199
- Type: 'Input',
200
- Value: null
201
- },
202
- {
203
- Name: 'ScheduledPosts',
204
- Type: 'Output',
205
- Value: null
206
- },
207
- {
208
- Name: 'Summary',
209
- Type: 'Output',
210
- Value: null
211
- }
212
- ];
213
- }
214
-
215
- /**
216
- * Get action description
217
- */
218
- public get Description(): string {
219
- return 'Retrieves scheduled posts from HootSuite with optional date filtering and analytics';
108
+ }
109
+
110
+ /**
111
+ * Convert HootSuite post to common format
112
+ */
113
+ protected normalizePost(hootsuitePost: HootSuitePost): SocialPost {
114
+ return {
115
+ id: hootsuitePost.id,
116
+ platform: 'HootSuite',
117
+ profileId: hootsuitePost.socialProfileIds.join(','), // Multiple profiles possible
118
+ content: hootsuitePost.text,
119
+ mediaUrls: hootsuitePost.mediaIds || [],
120
+ publishedAt: this.parseHootSuiteDate(hootsuitePost.createdTime),
121
+ scheduledFor: hootsuitePost.scheduledTime ? this.parseHootSuiteDate(hootsuitePost.scheduledTime) : undefined,
122
+ platformSpecificData: {
123
+ state: hootsuitePost.state,
124
+ tags: hootsuitePost.tags,
125
+ location: hootsuitePost.location,
126
+ socialProfileIds: hootsuitePost.socialProfileIds,
127
+ },
128
+ };
129
+ }
130
+
131
+ /**
132
+ * Get analytics for a specific post
133
+ */
134
+ private async getPostAnalytics(postId: string): Promise<any> {
135
+ try {
136
+ const response = await this.axiosInstance.get(`/analytics/posts/${postId}`);
137
+ return response.data;
138
+ } catch (error) {
139
+ // Analytics might not be available for all posts
140
+ return null;
220
141
  }
221
- }
142
+ }
143
+
144
+ /**
145
+ * Group posts by profile
146
+ */
147
+ private groupByProfile(posts: HootSuitePost[]): Record<string, number> {
148
+ const groups: Record<string, number> = {};
149
+
150
+ posts.forEach((post) => {
151
+ post.socialProfileIds.forEach((profileId) => {
152
+ groups[profileId] = (groups[profileId] || 0) + 1;
153
+ });
154
+ });
155
+
156
+ return groups;
157
+ }
158
+
159
+ /**
160
+ * Group posts by scheduled date
161
+ */
162
+ private groupByDate(posts: SocialPost[]): Record<string, number> {
163
+ const groups: Record<string, number> = {};
164
+
165
+ posts.forEach((post) => {
166
+ if (post.scheduledFor) {
167
+ const dateKey = post.scheduledFor.toISOString().split('T')[0];
168
+ groups[dateKey] = (groups[dateKey] || 0) + 1;
169
+ }
170
+ });
171
+
172
+ return groups;
173
+ }
174
+
175
+ /**
176
+ * Define the parameters this action expects
177
+ */
178
+ public get Params(): ActionParam[] {
179
+ return [
180
+ ...this.commonSocialParams,
181
+ {
182
+ Name: 'StartDate',
183
+ Type: 'Input',
184
+ Value: null,
185
+ },
186
+ {
187
+ Name: 'EndDate',
188
+ Type: 'Input',
189
+ Value: null,
190
+ },
191
+ {
192
+ Name: 'Limit',
193
+ Type: 'Input',
194
+ Value: null,
195
+ },
196
+ {
197
+ Name: 'IncludeAnalytics',
198
+ Type: 'Input',
199
+ Value: null,
200
+ },
201
+ {
202
+ Name: 'ScheduledPosts',
203
+ Type: 'Output',
204
+ Value: null,
205
+ },
206
+ {
207
+ Name: 'Summary',
208
+ Type: 'Output',
209
+ Value: null,
210
+ },
211
+ ];
212
+ }
213
+
214
+ /**
215
+ * Get action description
216
+ */
217
+ public get Description(): string {
218
+ return 'Retrieves scheduled posts from HootSuite with optional date filtering and analytics';
219
+ }
220
+ }