@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, LinkedInShareData } 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 { MediaFile } from '../../../base/base-social.action';
6
6
  import { BaseAction } from '@memberjunction/actions';
7
7
 
@@ -12,198 +12,196 @@ import { BaseAction } from '@memberjunction/actions';
12
12
  */
13
13
  @RegisterClass(BaseAction, 'LinkedInSchedulePostAction')
14
14
  export class LinkedInSchedulePostAction extends LinkedInBaseAction {
15
- /**
16
- * Schedule a post for future publishing on LinkedIn
17
- */
18
- protected async InternalRunAction(params: RunActionParams): Promise<ActionResultSimple> {
19
- const { Params, ContextUser } = params;
20
-
21
- try {
22
- // Initialize OAuth
23
- const companyIntegrationId = this.getParamValue(Params, 'CompanyIntegrationID');
24
- if (!(await this.initializeOAuth(companyIntegrationId))) {
25
- throw new Error('Failed to initialize OAuth connection');
26
- }
27
-
28
- // Extract parameters
29
- const content = this.getParamValue(Params, 'Content');
30
- const scheduledTime = this.getParamValue(Params, 'ScheduledTime');
31
- const authorType = this.getParamValue(Params, 'AuthorType') || 'personal'; // 'personal' or 'organization'
32
- const organizationId = this.getParamValue(Params, 'OrganizationID');
33
- const mediaFiles = this.getParamValue(Params, 'MediaFiles');
34
- const visibility = this.getParamValue(Params, 'Visibility') || 'PUBLIC';
35
- const visibleToGuest = this.getParamValue(Params, 'VisibleToGuest') !== false; // Default true
36
-
37
- // Validate required parameters
38
- if (!content) {
39
- throw new Error('Content is required');
40
- }
41
- if (!scheduledTime) {
42
- throw new Error('ScheduledTime is required');
43
- }
44
-
45
- // Validate scheduled time is in the future
46
- const scheduledDate = new Date(scheduledTime);
47
- if (scheduledDate <= new Date()) {
48
- throw new Error('ScheduledTime must be in the future');
49
- }
50
-
51
- // Determine author URN
52
- let authorUrn: string;
53
- if (authorType === 'organization') {
54
- if (!organizationId) {
55
- // Get first admin organization if not specified
56
- const orgs = await this.getAdminOrganizations();
57
- if (orgs.length === 0) {
58
- throw new Error('No organizations found. Please specify OrganizationID.');
59
- }
60
- authorUrn = orgs[0].urn;
61
- LogStatus(`Using organization: ${orgs[0].name}`);
62
- } else {
63
- authorUrn = `urn:li:organization:${organizationId}`;
15
+ /**
16
+ * Schedule a post for future publishing on LinkedIn
17
+ */
18
+ protected async InternalRunAction(params: RunActionParams): Promise<ActionResultSimple> {
19
+ const { Params, ContextUser } = params;
20
+
21
+ try {
22
+ // Initialize OAuth
23
+ const companyIntegrationId = this.getParamValue(Params, 'CompanyIntegrationID');
24
+ if (!await this.initializeOAuth(companyIntegrationId)) {
25
+ throw new Error('Failed to initialize OAuth connection');
26
+ }
27
+
28
+ // Extract parameters
29
+ const content = this.getParamValue(Params, 'Content');
30
+ const scheduledTime = this.getParamValue(Params, 'ScheduledTime');
31
+ const authorType = this.getParamValue(Params, 'AuthorType') || 'personal'; // 'personal' or 'organization'
32
+ const organizationId = this.getParamValue(Params, 'OrganizationID');
33
+ const mediaFiles = this.getParamValue(Params, 'MediaFiles');
34
+ const visibility = this.getParamValue(Params, 'Visibility') || 'PUBLIC';
35
+ const visibleToGuest = this.getParamValue(Params, 'VisibleToGuest') !== false; // Default true
36
+
37
+ // Validate required parameters
38
+ if (!content) {
39
+ throw new Error('Content is required');
40
+ }
41
+ if (!scheduledTime) {
42
+ throw new Error('ScheduledTime is required');
43
+ }
44
+
45
+ // Validate scheduled time is in the future
46
+ const scheduledDate = new Date(scheduledTime);
47
+ if (scheduledDate <= new Date()) {
48
+ throw new Error('ScheduledTime must be in the future');
49
+ }
50
+
51
+ // Determine author URN
52
+ let authorUrn: string;
53
+ if (authorType === 'organization') {
54
+ if (!organizationId) {
55
+ // Get first admin organization if not specified
56
+ const orgs = await this.getAdminOrganizations();
57
+ if (orgs.length === 0) {
58
+ throw new Error('No organizations found. Please specify OrganizationID.');
59
+ }
60
+ authorUrn = orgs[0].urn;
61
+ LogStatus(`Using organization: ${orgs[0].name}`);
62
+ } else {
63
+ authorUrn = `urn:li:organization:${organizationId}`;
64
+ }
65
+ } else {
66
+ // Personal post
67
+ authorUrn = await this.getCurrentUserUrn();
68
+ }
69
+
70
+ // Upload media if provided (to ensure they're valid and get URNs)
71
+ let mediaUrns: string[] = [];
72
+ if (mediaFiles && Array.isArray(mediaFiles)) {
73
+ LogStatus(`Uploading ${mediaFiles.length} media files...`);
74
+ mediaUrns = await this.uploadMedia(mediaFiles as MediaFile[]);
75
+ }
76
+
77
+ // Build share data for future publishing
78
+ const shareData: LinkedInShareData = {
79
+ author: authorUrn,
80
+ lifecycleState: 'PUBLISHED',
81
+ specificContent: {
82
+ 'com.linkedin.ugc.ShareContent': {
83
+ shareCommentary: {
84
+ text: content
85
+ },
86
+ shareMediaCategory: mediaUrns.length > 0 ? 'IMAGE' : 'NONE',
87
+ media: mediaUrns.length > 0 ? mediaUrns.map(urn => ({
88
+ status: 'READY' as const,
89
+ media: urn
90
+ })) : undefined
91
+ }
92
+ },
93
+ visibility: {
94
+ 'com.linkedin.ugc.MemberNetworkVisibility': visibility as any
95
+ }
96
+ };
97
+
98
+ // Add distribution settings if public
99
+ if (visibility === 'PUBLIC') {
100
+ shareData.distribution = {
101
+ linkedInDistributionTarget: {
102
+ visibleToGuest: visibleToGuest
103
+ }
104
+ };
105
+ }
106
+
107
+ // Create a scheduled post record
108
+ // Note: This would typically be stored in a database or queue for processing
109
+ const scheduledPost = {
110
+ id: `scheduled_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
111
+ platform: 'LinkedIn',
112
+ companyIntegrationId: companyIntegrationId,
113
+ scheduledTime: scheduledDate.toISOString(),
114
+ shareData: shareData,
115
+ status: 'SCHEDULED',
116
+ createdAt: new Date().toISOString()
117
+ };
118
+
119
+ LogStatus(`Post scheduled for ${scheduledDate.toISOString()}`);
120
+
121
+ // Update output parameters
122
+ const outputParams = [...Params];
123
+ const scheduledPostParam = outputParams.find(p => p.Name === 'ScheduledPost');
124
+ if (scheduledPostParam) scheduledPostParam.Value = scheduledPost;
125
+ const scheduledIdParam = outputParams.find(p => p.Name === 'ScheduledID');
126
+ if (scheduledIdParam) scheduledIdParam.Value = scheduledPost.id;
127
+
128
+ return {
129
+ Success: true,
130
+ ResultCode: 'SUCCESS',
131
+ Message: `Successfully scheduled LinkedIn post for ${scheduledDate.toISOString()}`,
132
+ Params: outputParams
133
+ };
134
+
135
+ } catch (error) {
136
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
137
+
138
+ return {
139
+ Success: false,
140
+ ResultCode: 'ERROR',
141
+ Message: `Failed to schedule LinkedIn post: ${errorMessage}`,
142
+ Params
143
+ };
64
144
  }
65
- } else {
66
- // Personal post
67
- authorUrn = await this.getCurrentUserUrn();
68
- }
69
-
70
- // Upload media if provided (to ensure they're valid and get URNs)
71
- let mediaUrns: string[] = [];
72
- if (mediaFiles && Array.isArray(mediaFiles)) {
73
- LogStatus(`Uploading ${mediaFiles.length} media files...`);
74
- mediaUrns = await this.uploadMedia(mediaFiles as MediaFile[]);
75
- }
145
+ }
76
146
 
77
- // Build share data for future publishing
78
- const shareData: LinkedInShareData = {
79
- author: authorUrn,
80
- lifecycleState: 'PUBLISHED',
81
- specificContent: {
82
- 'com.linkedin.ugc.ShareContent': {
83
- shareCommentary: {
84
- text: content,
147
+ /**
148
+ * Define the parameters this action expects
149
+ */
150
+ public get Params(): ActionParam[] {
151
+ return [
152
+ ...this.commonSocialParams,
153
+ {
154
+ Name: 'Content',
155
+ Type: 'Input',
156
+ Value: null
85
157
  },
86
- shareMediaCategory: mediaUrns.length > 0 ? 'IMAGE' : 'NONE',
87
- media:
88
- mediaUrns.length > 0
89
- ? mediaUrns.map((urn) => ({
90
- status: 'READY' as const,
91
- media: urn,
92
- }))
93
- : undefined,
94
- },
95
- },
96
- visibility: {
97
- 'com.linkedin.ugc.MemberNetworkVisibility': visibility as any,
98
- },
99
- };
100
-
101
- // Add distribution settings if public
102
- if (visibility === 'PUBLIC') {
103
- shareData.distribution = {
104
- linkedInDistributionTarget: {
105
- visibleToGuest: visibleToGuest,
106
- },
107
- };
108
- }
109
-
110
- // Create a scheduled post record
111
- // Note: This would typically be stored in a database or queue for processing
112
- const scheduledPost = {
113
- id: `scheduled_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
114
- platform: 'LinkedIn',
115
- companyIntegrationId: companyIntegrationId,
116
- scheduledTime: scheduledDate.toISOString(),
117
- shareData: shareData,
118
- status: 'SCHEDULED',
119
- createdAt: new Date().toISOString(),
120
- };
121
-
122
- LogStatus(`Post scheduled for ${scheduledDate.toISOString()}`);
123
-
124
- // Update output parameters
125
- const outputParams = [...Params];
126
- const scheduledPostParam = outputParams.find((p) => p.Name === 'ScheduledPost');
127
- if (scheduledPostParam) scheduledPostParam.Value = scheduledPost;
128
- const scheduledIdParam = outputParams.find((p) => p.Name === 'ScheduledID');
129
- if (scheduledIdParam) scheduledIdParam.Value = scheduledPost.id;
130
-
131
- return {
132
- Success: true,
133
- ResultCode: 'SUCCESS',
134
- Message: `Successfully scheduled LinkedIn post for ${scheduledDate.toISOString()}`,
135
- Params: outputParams,
136
- };
137
- } catch (error) {
138
- const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
139
-
140
- return {
141
- Success: false,
142
- ResultCode: 'ERROR',
143
- Message: `Failed to schedule LinkedIn post: ${errorMessage}`,
144
- Params,
145
- };
158
+ {
159
+ Name: 'ScheduledTime',
160
+ Type: 'Input',
161
+ Value: null
162
+ },
163
+ {
164
+ Name: 'AuthorType',
165
+ Type: 'Input',
166
+ Value: 'personal' // 'personal' or 'organization'
167
+ },
168
+ {
169
+ Name: 'OrganizationID',
170
+ Type: 'Input',
171
+ Value: null
172
+ },
173
+ {
174
+ Name: 'MediaFiles',
175
+ Type: 'Input',
176
+ Value: null
177
+ },
178
+ {
179
+ Name: 'Visibility',
180
+ Type: 'Input',
181
+ Value: 'PUBLIC' // 'PUBLIC', 'CONNECTIONS', 'LOGGED_IN', 'CONTAINER'
182
+ },
183
+ {
184
+ Name: 'VisibleToGuest',
185
+ Type: 'Input',
186
+ Value: true
187
+ },
188
+ {
189
+ Name: 'ScheduledPost',
190
+ Type: 'Output',
191
+ Value: null
192
+ },
193
+ {
194
+ Name: 'ScheduledID',
195
+ Type: 'Output',
196
+ Value: null
197
+ }
198
+ ];
146
199
  }
147
- }
148
200
 
149
- /**
150
- * Define the parameters this action expects
151
- */
152
- public get Params(): ActionParam[] {
153
- return [
154
- ...this.commonSocialParams,
155
- {
156
- Name: 'Content',
157
- Type: 'Input',
158
- Value: null,
159
- },
160
- {
161
- Name: 'ScheduledTime',
162
- Type: 'Input',
163
- Value: null,
164
- },
165
- {
166
- Name: 'AuthorType',
167
- Type: 'Input',
168
- Value: 'personal', // 'personal' or 'organization'
169
- },
170
- {
171
- Name: 'OrganizationID',
172
- Type: 'Input',
173
- Value: null,
174
- },
175
- {
176
- Name: 'MediaFiles',
177
- Type: 'Input',
178
- Value: null,
179
- },
180
- {
181
- Name: 'Visibility',
182
- Type: 'Input',
183
- Value: 'PUBLIC', // 'PUBLIC', 'CONNECTIONS', 'LOGGED_IN', 'CONTAINER'
184
- },
185
- {
186
- Name: 'VisibleToGuest',
187
- Type: 'Input',
188
- Value: true,
189
- },
190
- {
191
- Name: 'ScheduledPost',
192
- Type: 'Output',
193
- Value: null,
194
- },
195
- {
196
- Name: 'ScheduledID',
197
- Type: 'Output',
198
- Value: null,
199
- },
200
- ];
201
- }
202
-
203
- /**
204
- * Get action description
205
- */
206
- public get Description(): string {
207
- return 'Schedules a post for future publishing on LinkedIn. Note: LinkedIn API does not support native scheduling, so this stores the post for later publishing via a scheduler service.';
208
- }
209
- }
201
+ /**
202
+ * Get action description
203
+ */
204
+ public get Description(): string {
205
+ return 'Schedules a post for future publishing on LinkedIn. Note: LinkedIn API does not support native scheduling, so this stores the post for later publishing via a scheduler service.';
206
+ }
207
+ }