@memberjunction/actions-bizapps-social 2.111.1 → 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 { LinkedInBaseAction, LinkedInShareData } from '../linkedin-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 { MediaFile } from '../../../base/base-social.action';
6
6
  import { BaseAction } from '@memberjunction/actions';
7
7
 
@@ -10,182 +10,184 @@ import { BaseAction } from '@memberjunction/actions';
10
10
  */
11
11
  @RegisterClass(BaseAction, 'LinkedInCreatePostAction')
12
12
  export class LinkedInCreatePostAction extends LinkedInBaseAction {
13
- /**
14
- * Create a post on LinkedIn (personal or organization)
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 content = this.getParamValue(Params, 'Content');
28
- const authorType = this.getParamValue(Params, 'AuthorType') || 'personal'; // 'personal' or 'organization'
29
- const organizationId = this.getParamValue(Params, 'OrganizationID');
30
- const mediaFiles = this.getParamValue(Params, 'MediaFiles');
31
- const visibility = this.getParamValue(Params, 'Visibility') || 'PUBLIC';
32
- const visibleToGuest = this.getParamValue(Params, 'VisibleToGuest') !== false; // Default true
33
-
34
- // Validate required parameters
35
- if (!content) {
36
- throw new Error('Content is required');
37
- }
38
-
39
- // Determine author URN
40
- let authorUrn: string;
41
- if (authorType === 'organization') {
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
- authorUrn = orgs[0].urn;
49
- LogStatus(`Using organization: ${orgs[0].name}`);
50
- } else {
51
- authorUrn = `urn:li:organization:${organizationId}`;
52
- }
53
- } else {
54
- // Personal post
55
- authorUrn = await this.getCurrentUserUrn();
56
- }
57
-
58
- // Upload media if provided
59
- let mediaUrns: string[] = [];
60
- if (mediaFiles && Array.isArray(mediaFiles)) {
61
- LogStatus(`Uploading ${mediaFiles.length} media files...`);
62
- mediaUrns = await this.uploadMedia(mediaFiles as MediaFile[]);
63
- }
64
-
65
- // Build share data
66
- const shareData: LinkedInShareData = {
67
- author: authorUrn,
68
- lifecycleState: 'PUBLISHED',
69
- specificContent: {
70
- 'com.linkedin.ugc.ShareContent': {
71
- shareCommentary: {
72
- text: content
73
- },
74
- shareMediaCategory: mediaUrns.length > 0 ? 'IMAGE' : 'NONE',
75
- media: mediaUrns.length > 0 ? mediaUrns.map(urn => ({
76
- status: 'READY' as const,
77
- media: urn
78
- })) : undefined
79
- }
80
- },
81
- visibility: {
82
- 'com.linkedin.ugc.MemberNetworkVisibility': visibility as any
83
- }
84
- };
85
-
86
- // Add distribution settings if public
87
- if (visibility === 'PUBLIC') {
88
- shareData.distribution = {
89
- linkedInDistributionTarget: {
90
- visibleToGuest: visibleToGuest
91
- }
92
- };
93
- }
94
-
95
- // Create the post
96
- LogStatus('Creating LinkedIn post...');
97
- const postId = await this.createShare(shareData);
98
-
99
- // Get the created post details
100
- const shares = await this.getShares(authorUrn, 1);
101
- const createdPost = shares.find(s => s.id === postId);
102
-
103
- if (!createdPost) {
104
- throw new Error('Failed to retrieve created post');
105
- }
106
-
107
- // Normalize the created post
108
- const normalizedPost = this.normalizePost(createdPost);
109
-
110
- // Update output parameters
111
- const outputParams = [...Params];
112
- const postParam = outputParams.find(p => p.Name === 'CreatedPost');
113
- if (postParam) postParam.Value = normalizedPost;
114
- const postIdParam = outputParams.find(p => p.Name === 'PostID');
115
- if (postIdParam) postIdParam.Value = postId;
116
-
117
- return {
118
- Success: true,
119
- ResultCode: 'SUCCESS',
120
- Message: `Successfully created LinkedIn post (ID: ${postId})`,
121
- Params: outputParams
122
- };
123
-
124
- } catch (error) {
125
- const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
126
-
127
- return {
128
- Success: false,
129
- ResultCode: 'ERROR',
130
- Message: `Failed to create LinkedIn post: ${errorMessage}`,
131
- Params
132
- };
13
+ /**
14
+ * Create a post on LinkedIn (personal or organization)
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 content = this.getParamValue(Params, 'Content');
28
+ const authorType = this.getParamValue(Params, 'AuthorType') || 'personal'; // 'personal' or 'organization'
29
+ const organizationId = this.getParamValue(Params, 'OrganizationID');
30
+ const mediaFiles = this.getParamValue(Params, 'MediaFiles');
31
+ const visibility = this.getParamValue(Params, 'Visibility') || 'PUBLIC';
32
+ const visibleToGuest = this.getParamValue(Params, 'VisibleToGuest') !== false; // Default true
33
+
34
+ // Validate required parameters
35
+ if (!content) {
36
+ throw new Error('Content is required');
37
+ }
38
+
39
+ // Determine author URN
40
+ let authorUrn: string;
41
+ if (authorType === 'organization') {
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
+ authorUrn = orgs[0].urn;
49
+ LogStatus(`Using organization: ${orgs[0].name}`);
50
+ } else {
51
+ authorUrn = `urn:li:organization:${organizationId}`;
133
52
  }
134
- }
135
-
136
- /**
137
- * Define the parameters this action expects
138
- */
139
- public get Params(): ActionParam[] {
140
- return [
141
- ...this.commonSocialParams,
142
- {
143
- Name: 'Content',
144
- Type: 'Input',
145
- Value: null
146
- },
147
- {
148
- Name: 'AuthorType',
149
- Type: 'Input',
150
- Value: 'personal' // 'personal' or 'organization'
151
- },
152
- {
153
- Name: 'OrganizationID',
154
- Type: 'Input',
155
- Value: null
156
- },
157
- {
158
- Name: 'MediaFiles',
159
- Type: 'Input',
160
- Value: null
53
+ } else {
54
+ // Personal post
55
+ authorUrn = await this.getCurrentUserUrn();
56
+ }
57
+
58
+ // Upload media if provided
59
+ let mediaUrns: string[] = [];
60
+ if (mediaFiles && Array.isArray(mediaFiles)) {
61
+ LogStatus(`Uploading ${mediaFiles.length} media files...`);
62
+ mediaUrns = await this.uploadMedia(mediaFiles as MediaFile[]);
63
+ }
64
+
65
+ // Build share data
66
+ const shareData: LinkedInShareData = {
67
+ author: authorUrn,
68
+ lifecycleState: 'PUBLISHED',
69
+ specificContent: {
70
+ 'com.linkedin.ugc.ShareContent': {
71
+ shareCommentary: {
72
+ text: content,
161
73
  },
162
- {
163
- Name: 'Visibility',
164
- Type: 'Input',
165
- Value: 'PUBLIC' // 'PUBLIC', 'CONNECTIONS', 'LOGGED_IN', 'CONTAINER'
166
- },
167
- {
168
- Name: 'VisibleToGuest',
169
- Type: 'Input',
170
- Value: true
171
- },
172
- {
173
- Name: 'CreatedPost',
174
- Type: 'Output',
175
- Value: null
176
- },
177
- {
178
- Name: 'PostID',
179
- Type: 'Output',
180
- Value: null
181
- }
182
- ];
183
- }
184
-
185
- /**
186
- * Get action description
187
- */
188
- public get Description(): string {
189
- return 'Creates a post on LinkedIn for personal profiles or organization pages with optional media attachments';
74
+ shareMediaCategory: mediaUrns.length > 0 ? 'IMAGE' : 'NONE',
75
+ media:
76
+ mediaUrns.length > 0
77
+ ? mediaUrns.map((urn) => ({
78
+ status: 'READY' as const,
79
+ media: urn,
80
+ }))
81
+ : undefined,
82
+ },
83
+ },
84
+ visibility: {
85
+ 'com.linkedin.ugc.MemberNetworkVisibility': visibility as any,
86
+ },
87
+ };
88
+
89
+ // Add distribution settings if public
90
+ if (visibility === 'PUBLIC') {
91
+ shareData.distribution = {
92
+ linkedInDistributionTarget: {
93
+ visibleToGuest: visibleToGuest,
94
+ },
95
+ };
96
+ }
97
+
98
+ // Create the post
99
+ LogStatus('Creating LinkedIn post...');
100
+ const postId = await this.createShare(shareData);
101
+
102
+ // Get the created post details
103
+ const shares = await this.getShares(authorUrn, 1);
104
+ const createdPost = shares.find((s) => s.id === postId);
105
+
106
+ if (!createdPost) {
107
+ throw new Error('Failed to retrieve created post');
108
+ }
109
+
110
+ // Normalize the created post
111
+ const normalizedPost = this.normalizePost(createdPost);
112
+
113
+ // Update output parameters
114
+ const outputParams = [...Params];
115
+ const postParam = outputParams.find((p) => p.Name === 'CreatedPost');
116
+ if (postParam) postParam.Value = normalizedPost;
117
+ const postIdParam = outputParams.find((p) => p.Name === 'PostID');
118
+ if (postIdParam) postIdParam.Value = postId;
119
+
120
+ return {
121
+ Success: true,
122
+ ResultCode: 'SUCCESS',
123
+ Message: `Successfully created LinkedIn post (ID: ${postId})`,
124
+ Params: outputParams,
125
+ };
126
+ } catch (error) {
127
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
128
+
129
+ return {
130
+ Success: false,
131
+ ResultCode: 'ERROR',
132
+ Message: `Failed to create LinkedIn post: ${errorMessage}`,
133
+ Params,
134
+ };
190
135
  }
191
- }
136
+ }
137
+
138
+ /**
139
+ * Define the parameters this action expects
140
+ */
141
+ public get Params(): ActionParam[] {
142
+ return [
143
+ ...this.commonSocialParams,
144
+ {
145
+ Name: 'Content',
146
+ Type: 'Input',
147
+ Value: null,
148
+ },
149
+ {
150
+ Name: 'AuthorType',
151
+ Type: 'Input',
152
+ Value: 'personal', // 'personal' or 'organization'
153
+ },
154
+ {
155
+ Name: 'OrganizationID',
156
+ Type: 'Input',
157
+ Value: null,
158
+ },
159
+ {
160
+ Name: 'MediaFiles',
161
+ Type: 'Input',
162
+ Value: null,
163
+ },
164
+ {
165
+ Name: 'Visibility',
166
+ Type: 'Input',
167
+ Value: 'PUBLIC', // 'PUBLIC', 'CONNECTIONS', 'LOGGED_IN', 'CONTAINER'
168
+ },
169
+ {
170
+ Name: 'VisibleToGuest',
171
+ Type: 'Input',
172
+ Value: true,
173
+ },
174
+ {
175
+ Name: 'CreatedPost',
176
+ Type: 'Output',
177
+ Value: null,
178
+ },
179
+ {
180
+ Name: 'PostID',
181
+ Type: 'Output',
182
+ Value: null,
183
+ },
184
+ ];
185
+ }
186
+
187
+ /**
188
+ * Get action description
189
+ */
190
+ public get Description(): string {
191
+ return 'Creates a post on LinkedIn for personal profiles or organization pages with optional media attachments';
192
+ }
193
+ }