@memberjunction/actions-bizapps-social 2.112.0 → 2.113.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 +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 { HootSuiteBaseAction } from '../hootsuite-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 { MediaFile } from '../../../base/base-social.action';
6
6
  import { BaseAction } from '@memberjunction/actions';
7
7
 
@@ -10,216 +10,214 @@ import { BaseAction } from '@memberjunction/actions';
10
10
  */
11
11
  @RegisterClass(BaseAction, 'HootSuiteUpdateScheduledPostAction')
12
12
  export class HootSuiteUpdateScheduledPostAction extends HootSuiteBaseAction {
13
- /**
14
- * Update a scheduled post in 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 postId = this.getParamValue(Params, 'PostID');
28
- const content = this.getParamValue(Params, 'Content');
29
- const profileIds = this.getParamValue(Params, 'ProfileIDs');
30
- const scheduledTime = this.getParamValue(Params, 'ScheduledTime');
31
- const mediaFiles = this.getParamValue(Params, 'MediaFiles');
32
- const replaceMedia = this.getParamValue(Params, 'ReplaceMedia') || false;
33
- const tags = this.getParamValue(Params, 'Tags');
34
- const location = this.getParamValue(Params, 'Location');
35
-
36
- // Validate required parameters
37
- if (!postId) {
38
- throw new Error('PostID is required');
39
- }
40
-
41
- // First, get the existing post
42
- LogStatus(`Fetching existing post ${postId}...`);
43
- const existingPostResponse = await this.axiosInstance.get(`/messages/${postId}`);
44
- const existingPost = existingPostResponse.data;
45
-
46
- // Check if post can be updated
47
- if (existingPost.state !== 'SCHEDULED' && existingPost.state !== 'DRAFT') {
48
- throw new Error(`Cannot update post in ${existingPost.state} state. Only SCHEDULED and DRAFT posts can be updated.`);
49
- }
50
-
51
- // Build update data
52
- const updateData: any = {};
53
-
54
- // Update content if provided
55
- if (content !== undefined && content !== null) {
56
- updateData.text = content;
57
- }
58
-
59
- // Update profile IDs if provided
60
- if (profileIds) {
61
- if (Array.isArray(profileIds)) {
62
- updateData.socialProfileIds = profileIds;
63
- } else if (typeof profileIds === 'string') {
64
- updateData.socialProfileIds = [profileIds];
65
- }
66
- }
67
-
68
- // Update scheduled time if provided
69
- if (scheduledTime !== undefined) {
70
- updateData.scheduledTime = scheduledTime ? this.formatHootSuiteDate(scheduledTime) : null;
71
- }
72
-
73
- // Handle media updates
74
- if (mediaFiles !== undefined) {
75
- if (replaceMedia || !existingPost.mediaIds || existingPost.mediaIds.length === 0) {
76
- // Replace all media or add new media
77
- if (mediaFiles && Array.isArray(mediaFiles) && mediaFiles.length > 0) {
78
- LogStatus(`Uploading ${mediaFiles.length} media files...`);
79
- const mediaIds = await this.uploadMedia(mediaFiles as MediaFile[]);
80
- updateData.mediaIds = mediaIds;
81
- } else {
82
- // Remove all media
83
- updateData.mediaIds = [];
84
- }
85
- } else if (mediaFiles && Array.isArray(mediaFiles) && mediaFiles.length > 0) {
86
- // Append new media to existing
87
- LogStatus(`Uploading ${mediaFiles.length} additional media files...`);
88
- const newMediaIds = await this.uploadMedia(mediaFiles as MediaFile[]);
89
- updateData.mediaIds = [...(existingPost.mediaIds || []), ...newMediaIds];
13
+ /**
14
+ * Update a scheduled post in 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 postId = this.getParamValue(Params, 'PostID');
28
+ const content = this.getParamValue(Params, 'Content');
29
+ const profileIds = this.getParamValue(Params, 'ProfileIDs');
30
+ const scheduledTime = this.getParamValue(Params, 'ScheduledTime');
31
+ const mediaFiles = this.getParamValue(Params, 'MediaFiles');
32
+ const replaceMedia = this.getParamValue(Params, 'ReplaceMedia') || false;
33
+ const tags = this.getParamValue(Params, 'Tags');
34
+ const location = this.getParamValue(Params, 'Location');
35
+
36
+ // Validate required parameters
37
+ if (!postId) {
38
+ throw new Error('PostID is required');
39
+ }
40
+
41
+ // First, get the existing post
42
+ LogStatus(`Fetching existing post ${postId}...`);
43
+ const existingPostResponse = await this.axiosInstance.get(`/messages/${postId}`);
44
+ const existingPost = existingPostResponse.data;
45
+
46
+ // Check if post can be updated
47
+ if (existingPost.state !== 'SCHEDULED' && existingPost.state !== 'DRAFT') {
48
+ throw new Error(`Cannot update post in ${existingPost.state} state. Only SCHEDULED and DRAFT posts can be updated.`);
49
+ }
50
+
51
+ // Build update data
52
+ const updateData: any = {};
53
+
54
+ // Update content if provided
55
+ if (content !== undefined && content !== null) {
56
+ updateData.text = content;
57
+ }
58
+
59
+ // Update profile IDs if provided
60
+ if (profileIds) {
61
+ if (Array.isArray(profileIds)) {
62
+ updateData.socialProfileIds = profileIds;
63
+ } else if (typeof profileIds === 'string') {
64
+ updateData.socialProfileIds = [profileIds];
65
+ }
66
+ }
67
+
68
+ // Update scheduled time if provided
69
+ if (scheduledTime !== undefined) {
70
+ updateData.scheduledTime = scheduledTime ? this.formatHootSuiteDate(scheduledTime) : null;
71
+ }
72
+
73
+ // Handle media updates
74
+ if (mediaFiles !== undefined) {
75
+ if (replaceMedia || !existingPost.mediaIds || existingPost.mediaIds.length === 0) {
76
+ // Replace all media or add new media
77
+ if (mediaFiles && Array.isArray(mediaFiles) && mediaFiles.length > 0) {
78
+ LogStatus(`Uploading ${mediaFiles.length} media files...`);
79
+ const mediaIds = await this.uploadMedia(mediaFiles as MediaFile[]);
80
+ updateData.mediaIds = mediaIds;
81
+ } else {
82
+ // Remove all media
83
+ updateData.mediaIds = [];
84
+ }
85
+ } else if (mediaFiles && Array.isArray(mediaFiles) && mediaFiles.length > 0) {
86
+ // Append new media to existing
87
+ LogStatus(`Uploading ${mediaFiles.length} additional media files...`);
88
+ const newMediaIds = await this.uploadMedia(mediaFiles as MediaFile[]);
89
+ updateData.mediaIds = [...(existingPost.mediaIds || []), ...newMediaIds];
90
+ }
91
+ }
92
+
93
+ // Update tags if provided
94
+ if (tags !== undefined) {
95
+ updateData.tags = Array.isArray(tags) ? tags : [];
96
+ }
97
+
98
+ // Update location if provided
99
+ if (location !== undefined) {
100
+ updateData.location = location ? {
101
+ latitude: location.latitude,
102
+ longitude: location.longitude
103
+ } : null;
104
+ }
105
+
106
+ // Only proceed if there are updates
107
+ if (Object.keys(updateData).length === 0) {
108
+ return {
109
+ Success: true,
110
+ ResultCode: 'NO_CHANGES',
111
+ Message: 'No updates were provided',
112
+ Params
113
+ };
114
+ }
115
+
116
+ // Update the post
117
+ LogStatus(`Updating post ${postId}...`);
118
+ const response = await this.axiosInstance.patch(`/messages/${postId}`, updateData);
119
+ const updatedPost = response.data;
120
+
121
+ // Normalize the updated post
122
+ const normalizedPost = this.normalizePost(updatedPost);
123
+
124
+ // Update output parameters
125
+ const outputParams = [...Params];
126
+ const postParam = outputParams.find(p => p.Name === 'UpdatedPost');
127
+ if (postParam) postParam.Value = normalizedPost;
128
+ const changesSummaryParam = outputParams.find(p => p.Name === 'ChangesSummary');
129
+ if (changesSummaryParam) changesSummaryParam.Value = {
130
+ fieldsUpdated: Object.keys(updateData),
131
+ previousState: existingPost.state,
132
+ newState: updatedPost.state,
133
+ mediaChanges: {
134
+ before: existingPost.mediaIds?.length || 0,
135
+ after: updatedPost.mediaIds?.length || 0
136
+ }
137
+ };
138
+
139
+ return {
140
+ Success: true,
141
+ ResultCode: 'SUCCESS',
142
+ Message: `Successfully updated scheduled post (ID: ${postId})`,
143
+ Params: outputParams
144
+ };
145
+
146
+ } catch (error) {
147
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
148
+
149
+ return {
150
+ Success: false,
151
+ ResultCode: 'ERROR',
152
+ Message: `Failed to update scheduled post: ${errorMessage}`,
153
+ Params
154
+ };
90
155
  }
91
- }
92
-
93
- // Update tags if provided
94
- if (tags !== undefined) {
95
- updateData.tags = Array.isArray(tags) ? tags : [];
96
- }
97
-
98
- // Update location if provided
99
- if (location !== undefined) {
100
- updateData.location = location
101
- ? {
102
- latitude: location.latitude,
103
- longitude: location.longitude,
156
+ }
157
+
158
+ /**
159
+ * Define the parameters this action expects
160
+ */
161
+ public get Params(): ActionParam[] {
162
+ return [
163
+ ...this.commonSocialParams,
164
+ {
165
+ Name: 'PostID',
166
+ Type: 'Input',
167
+ Value: null
168
+ },
169
+ {
170
+ Name: 'Content',
171
+ Type: 'Input',
172
+ Value: null
173
+ },
174
+ {
175
+ Name: 'ProfileIDs',
176
+ Type: 'Input',
177
+ Value: null
178
+ },
179
+ {
180
+ Name: 'ScheduledTime',
181
+ Type: 'Input',
182
+ Value: null
183
+ },
184
+ {
185
+ Name: 'MediaFiles',
186
+ Type: 'Input',
187
+ Value: null
188
+ },
189
+ {
190
+ Name: 'ReplaceMedia',
191
+ Type: 'Input',
192
+ Value: null
193
+ },
194
+ {
195
+ Name: 'Tags',
196
+ Type: 'Input',
197
+ Value: null
198
+ },
199
+ {
200
+ Name: 'Location',
201
+ Type: 'Input',
202
+ Value: null
203
+ },
204
+ {
205
+ Name: 'UpdatedPost',
206
+ Type: 'Output',
207
+ Value: null
208
+ },
209
+ {
210
+ Name: 'ChangesSummary',
211
+ Type: 'Output',
212
+ Value: null
104
213
  }
105
- : null;
106
- }
107
-
108
- // Only proceed if there are updates
109
- if (Object.keys(updateData).length === 0) {
110
- return {
111
- Success: true,
112
- ResultCode: 'NO_CHANGES',
113
- Message: 'No updates were provided',
114
- Params,
115
- };
116
- }
117
-
118
- // Update the post
119
- LogStatus(`Updating post ${postId}...`);
120
- const response = await this.axiosInstance.patch(`/messages/${postId}`, updateData);
121
- const updatedPost = response.data;
122
-
123
- // Normalize the updated post
124
- const normalizedPost = this.normalizePost(updatedPost);
125
-
126
- // Update output parameters
127
- const outputParams = [...Params];
128
- const postParam = outputParams.find((p) => p.Name === 'UpdatedPost');
129
- if (postParam) postParam.Value = normalizedPost;
130
- const changesSummaryParam = outputParams.find((p) => p.Name === 'ChangesSummary');
131
- if (changesSummaryParam)
132
- changesSummaryParam.Value = {
133
- fieldsUpdated: Object.keys(updateData),
134
- previousState: existingPost.state,
135
- newState: updatedPost.state,
136
- mediaChanges: {
137
- before: existingPost.mediaIds?.length || 0,
138
- after: updatedPost.mediaIds?.length || 0,
139
- },
140
- };
141
-
142
- return {
143
- Success: true,
144
- ResultCode: 'SUCCESS',
145
- Message: `Successfully updated scheduled post (ID: ${postId})`,
146
- Params: outputParams,
147
- };
148
- } catch (error) {
149
- const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
150
-
151
- return {
152
- Success: false,
153
- ResultCode: 'ERROR',
154
- Message: `Failed to update scheduled post: ${errorMessage}`,
155
- Params,
156
- };
214
+ ];
215
+ }
216
+
217
+ /**
218
+ * Get action description
219
+ */
220
+ public get Description(): string {
221
+ return 'Updates a scheduled post in HootSuite. Only SCHEDULED and DRAFT posts can be updated.';
157
222
  }
158
- }
159
-
160
- /**
161
- * Define the parameters this action expects
162
- */
163
- public get Params(): ActionParam[] {
164
- return [
165
- ...this.commonSocialParams,
166
- {
167
- Name: 'PostID',
168
- Type: 'Input',
169
- Value: null,
170
- },
171
- {
172
- Name: 'Content',
173
- Type: 'Input',
174
- Value: null,
175
- },
176
- {
177
- Name: 'ProfileIDs',
178
- Type: 'Input',
179
- Value: null,
180
- },
181
- {
182
- Name: 'ScheduledTime',
183
- Type: 'Input',
184
- Value: null,
185
- },
186
- {
187
- Name: 'MediaFiles',
188
- Type: 'Input',
189
- Value: null,
190
- },
191
- {
192
- Name: 'ReplaceMedia',
193
- Type: 'Input',
194
- Value: null,
195
- },
196
- {
197
- Name: 'Tags',
198
- Type: 'Input',
199
- Value: null,
200
- },
201
- {
202
- Name: 'Location',
203
- Type: 'Input',
204
- Value: null,
205
- },
206
- {
207
- Name: 'UpdatedPost',
208
- Type: 'Output',
209
- Value: null,
210
- },
211
- {
212
- Name: 'ChangesSummary',
213
- Type: 'Output',
214
- Value: null,
215
- },
216
- ];
217
- }
218
-
219
- /**
220
- * Get action description
221
- */
222
- public get Description(): string {
223
- return 'Updates a scheduled post in HootSuite. Only SCHEDULED and DRAFT posts can be updated.';
224
- }
225
- }
223
+ }