@pipedream/linkedin 0.0.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 (25) hide show
  1. package/LICENSE +7 -0
  2. package/actions/analytics-finder-account-sample/analytics-finder-account-sample.mjs +44 -0
  3. package/actions/analytics-finder-campaign-sample/analytics-finder-campaign-sample.mjs +44 -0
  4. package/actions/create-comment/create-comment.mjs +58 -0
  5. package/actions/create-like-on-share/create-like-on-share.mjs +42 -0
  6. package/actions/create-text-post-organization/create-text-post-organization.mjs +37 -0
  7. package/actions/create-text-post-user/create-text-post-user.mjs +36 -0
  8. package/actions/delete-post/delete-post.mjs +25 -0
  9. package/actions/fetch-ad-account/fetch-ad-account.mjs +28 -0
  10. package/actions/get-current-member-profile/get-current-member-profile.mjs +21 -0
  11. package/actions/get-member-organization-access-control/get-member-organization-access-control.mjs +59 -0
  12. package/actions/get-member-profile/get-member-profile.mjs +26 -0
  13. package/actions/get-multiple-member-profiles/get-multiple-member-profiles.mjs +43 -0
  14. package/actions/get-organization-access-control/get-organization-access-control.mjs +51 -0
  15. package/actions/get-organization-administrators/get-organization-administrators.mjs +53 -0
  16. package/actions/post-share/post-share.mjs +53 -0
  17. package/actions/query-analytics-finder/query-analytics-finder.mjs +197 -0
  18. package/actions/retrieve-comments-on-comments/retrieve-comments-on-comments.mjs +49 -0
  19. package/actions/retrieve-comments-shares/retrieve-comments-shares.mjs +49 -0
  20. package/actions/search-organization/search-organization.mjs +59 -0
  21. package/actions/share-content/share-content.mjs +59 -0
  22. package/actions/share-text-mentions/share-text-mentions.mjs +52 -0
  23. package/common/constants.mjs +88 -0
  24. package/linkedin.app.mjs +263 -0
  25. package/package.json +19 -0
package/LICENSE ADDED
@@ -0,0 +1,7 @@
1
+ Copyright 2020 Pipedream, Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
+
5
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,44 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-analytics-finder-account-sample",
5
+ name: "Query Analytics Finder Account Sample",
6
+ description: "Sample query using analytics finder that gets analytics for a particular account for date range starting in a given year. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads-reporting/ads-reporting#sample-request)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ startYear: {
12
+ propDefinition: [
13
+ linkedin,
14
+ "startYear",
15
+ ],
16
+ },
17
+ timeGranularity: {
18
+ propDefinition: [
19
+ linkedin,
20
+ "timeGranularity",
21
+ ],
22
+ },
23
+ adAccountId: {
24
+ propDefinition: [
25
+ linkedin,
26
+ "adAccountId",
27
+ ],
28
+ },
29
+ },
30
+ async run({ $ }) {
31
+ // Note: This action is based on the LinkedIn Analytics Finder sample request.
32
+ // It was modified to use an sponsored account to match results by.
33
+
34
+ const querystring = `&pivot=ACCOUNT&dateRange.start.day=1&dateRange.start.month=1&dateRange.start.year=${this.startYear}&timeGranularity=${this.timeGranularity}&accounts[0]=urn:li:sponsoredAccount:${this.adAccountId}`;
35
+
36
+ const response = await this.linkedin.queryAnalytics(querystring, {
37
+ $,
38
+ });
39
+
40
+ $.export("$summary", "Successfully retrieved analytics");
41
+
42
+ return response;
43
+ },
44
+ };
@@ -0,0 +1,44 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-analytics-finder-campaign-sample",
5
+ name: "Query Analytics Finder Campaign Sample",
6
+ description: "Sample query using analytics finder that gets analytics for a particular campaign in a date range starting in a given year. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads-reporting/ads-reporting#analytics-finder)",
7
+ version: "0.2.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ startYear: {
12
+ propDefinition: [
13
+ linkedin,
14
+ "startYear",
15
+ ],
16
+ },
17
+ timeGranularity: {
18
+ propDefinition: [
19
+ linkedin,
20
+ "timeGranularity",
21
+ ],
22
+ },
23
+ campaignId: {
24
+ propDefinition: [
25
+ linkedin,
26
+ "campaignId",
27
+ ],
28
+ },
29
+ },
30
+ async run({ $ }) {
31
+ // Note: This action is based on the LinkedIn Analytics Finder sample request.
32
+ // As such, it uses an sponsored campaign to match results by.
33
+
34
+ const querystring = `&pivot=CAMPAIGN&dateRange.start.day=1&dateRange.start.month=1&dateRange.start.year=${this.startYear}&timeGranularity=${this.timeGranularity}&campaigns[0]=urn:li:sponsoredCampaign:${this.campaignId}`;
35
+
36
+ const response = await this.linkedin.queryAnalytics(querystring, {
37
+ $,
38
+ });
39
+
40
+ $.export("$summary", "Successfully retrieved analytics");
41
+
42
+ return response;
43
+ },
44
+ };
@@ -0,0 +1,58 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-create-comment",
5
+ name: "Create Comment",
6
+ description: "Create a comment on a share or user generated content post. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/network-update-social-actions#create-comment)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ urnToComment: {
12
+ type: "string",
13
+ label: "Urn to comment",
14
+ description: "The share or user generated content post where the comment will be made.",
15
+ },
16
+ actor: {
17
+ type: "string",
18
+ label: "Actor",
19
+ description: "Entity which is authoring the comment, must be a person or an organization URN.",
20
+ },
21
+ message: {
22
+ type: "string",
23
+ label: "Message",
24
+ description: "Text of the comment. May contain attributes such as links to people and organizations.",
25
+ },
26
+ content: {
27
+ type: "any",
28
+ label: "Content",
29
+ description: "Array of a media content entities.",
30
+ optional: true,
31
+ },
32
+ parentComment: {
33
+ type: "string",
34
+ label: "Parent Comment",
35
+ description: "For nested comments, this is the urn of the parent comment. This is not available for first-level comments.",
36
+ optional: true,
37
+ },
38
+ },
39
+ async run({ $ }) {
40
+ const data = {
41
+ object: this.urnToComment,
42
+ actor: this.actor,
43
+ message: {
44
+ text: this.message,
45
+ },
46
+ content: this.content,
47
+ parentComment: this.parentComment,
48
+ };
49
+ const response = await this.linkedin.createComment(encodeURIComponent(this.urnToComment), {
50
+ $,
51
+ data,
52
+ });
53
+
54
+ $.export("$summary", "Successfully created comment");
55
+
56
+ return response;
57
+ },
58
+ };
@@ -0,0 +1,42 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-create-like-on-share",
5
+ name: "Create Like On Share",
6
+ description: "Creates a like on a share. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/network-update-social-actions#create-a-like-on-a-share)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ parentUrn: {
12
+ type: "string",
13
+ label: "Parent Urn",
14
+ description: "The top-level share urn or user generated content where the like will be performed.",
15
+ },
16
+ actor: {
17
+ type: "string",
18
+ label: "Actor",
19
+ description: "Entity performing the like. Must be a person or an organization URN.",
20
+ },
21
+ object: {
22
+ type: "string",
23
+ label: "Object",
24
+ description: "Use the `object` field in the request body to specify the URN of the entity to which the like belongs. This object should be a sub-entity of the top-level share indicated in the request URL",
25
+ },
26
+ },
27
+ async run({ $ }) {
28
+ const data = {
29
+ actor: this.actor,
30
+ object: this.object,
31
+ };
32
+
33
+ const response = await this.linkedin.createLikeOnShare(encodeURIComponent(this.parentUrn), {
34
+ $,
35
+ data,
36
+ });
37
+
38
+ $.export("$summary", "Successfully created like on share");
39
+
40
+ return response;
41
+ },
42
+ };
@@ -0,0 +1,37 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-create-text-post-organization",
5
+ name: "Create a Simple Post (Organization)",
6
+ description: "Create post on LinkedIn using text, URL or article. [See the docs](https://learn.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/posts-api?view=li-lms-2022-11&tabs=http#create-organic-posts) for more information",
7
+ version: "0.0.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ organizationId: {
12
+ propDefinition: [
13
+ linkedin,
14
+ "organizationId",
15
+ ],
16
+ },
17
+ text: {
18
+ propDefinition: [
19
+ linkedin,
20
+ "text",
21
+ ],
22
+ },
23
+ },
24
+ async run({ $ }) {
25
+ const data = {
26
+ author: this.organizationId,
27
+ commentary: this.text,
28
+ visibility: "PUBLIC",
29
+ };
30
+ const response = await this.linkedin.createPost({
31
+ $,
32
+ data,
33
+ });
34
+ $.export("$summary", "Successfully created a new Post as Organization");
35
+ return response;
36
+ },
37
+ };
@@ -0,0 +1,36 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-create-text-post-user",
5
+ name: "Create a Simple Post (User)",
6
+ description: "Create post on LinkedIn using text, URL or article. [See the docs](https://learn.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/posts-api?view=li-lms-2022-11&tabs=http#create-organic-posts) for more information",
7
+ version: "0.0.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ visibility: {
12
+ propDefinition: [
13
+ linkedin,
14
+ "visibility",
15
+ ],
16
+ },
17
+ text: {
18
+ propDefinition: [
19
+ linkedin,
20
+ "text",
21
+ ],
22
+ },
23
+ },
24
+ async run({ $ }) {
25
+ const data = {
26
+ commentary: this.text,
27
+ visibility: this.visibility,
28
+ };
29
+ const response = await this.linkedin.createPost({
30
+ $,
31
+ data,
32
+ });
33
+ $.export("$summary", "Successfully created a new Post as User");
34
+ return response;
35
+ },
36
+ };
@@ -0,0 +1,25 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-delete-post",
5
+ name: "Delete Post",
6
+ description: "Removes a post from user's wall. [See the docs](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/share-api?tabs=http#delete-shares) for more information",
7
+ version: "0.0.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ postId: {
12
+ propDefinition: [
13
+ linkedin,
14
+ "postId",
15
+ ],
16
+ },
17
+ },
18
+ async run({ $ }) {
19
+ const response = await this.linkedin.deletePost(encodeURIComponent(this.postId), {
20
+ $,
21
+ });
22
+ $.export("$summary", "Successfully deleted post");
23
+ return response;
24
+ },
25
+ };
@@ -0,0 +1,28 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-fetch-ad-account",
5
+ name: "Fetch Ad Account",
6
+ description: "Fetches an individual adAccount given its id. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/ads/account-structure/create-and-manage-accounts#fetch-ad-account)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ adAccountId: {
12
+ propDefinition: [
13
+ linkedin,
14
+ "adAccountId",
15
+ ],
16
+ description: "ID of the adAccount to fetch.",
17
+ },
18
+ },
19
+ async run({ $ }) {
20
+ const response = await this.linkedin.getAdAccount(encodeURIComponent(this.adAccountId), {
21
+ $,
22
+ });
23
+
24
+ $.export("$summary", "Successfully retrieved Ad Account");
25
+
26
+ return response;
27
+ },
28
+ };
@@ -0,0 +1,21 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-get-current-member-profile",
5
+ name: "Get Current Member Profile",
6
+ description: "Gets the profile of the current authenticated member. [See the docs here](https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api#retrieve-current-members-profile)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ },
12
+ async run({ $ }) {
13
+ const response = await this.linkedin.getCurrentMemberProfile({
14
+ $,
15
+ });
16
+
17
+ $.export("$summary", "Successfully retrieved current member profile");
18
+
19
+ return response;
20
+ },
21
+ };
@@ -0,0 +1,59 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-get-member-organization-access-control",
5
+ name: "Get Member's Organization Access Control Information",
6
+ description: "Gets the organization access control information of the current authenticated member. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-access-control?context=linkedin/compliance/context#find-a-members-organization-access-control-information)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ role: {
12
+ propDefinition: [
13
+ linkedin,
14
+ "role",
15
+ ],
16
+ },
17
+ state: {
18
+ propDefinition: [
19
+ linkedin,
20
+ "state",
21
+ ],
22
+ },
23
+ max: {
24
+ propDefinition: [
25
+ linkedin,
26
+ "max",
27
+ ],
28
+ },
29
+ },
30
+ async run({ $ }) {
31
+ const count = 50;
32
+ const results = [];
33
+
34
+ const params = {
35
+ q: "roleAssignee",
36
+ role: this.role,
37
+ state: this.state,
38
+ start: 0,
39
+ count,
40
+ };
41
+
42
+ let done = false;
43
+ do {
44
+ const { elements } = await this.linkedin.getAccessControl({
45
+ $,
46
+ params,
47
+ });
48
+ results.push(...elements);
49
+ params.start += count;
50
+ if (elements?.length < count) {
51
+ done = true;
52
+ }
53
+ } while (results.length < this.max && !done);
54
+
55
+ $.export("$summary", "Successfully retrieved access control information");
56
+
57
+ return results;
58
+ },
59
+ };
@@ -0,0 +1,26 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-get-member-profile",
5
+ name: "Get Member Profile",
6
+ description: "Gets another member's profile, given its person id. [See the docs here](https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api#retrieve-other-members-profile)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ personId: {
12
+ type: "string",
13
+ label: "Person Id",
14
+ description: "Identifier of the person to retrieve",
15
+ },
16
+ },
17
+ async run({ $ }) {
18
+ const response = await this.linkedin.getMemberProfile(this.personId, {
19
+ $,
20
+ });
21
+
22
+ $.export("$summary", "Successfully retrieved member profile");
23
+
24
+ return response;
25
+ },
26
+ };
@@ -0,0 +1,43 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-get-multiple-member-profiles",
5
+ name: "Get Multiple Member Profiles",
6
+ description: "Gets multiple member profiles at once. [See the docs here](https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api#retrieve-other-members-profile)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ peopleIds: {
12
+ type: "string[]",
13
+ label: "People Ids",
14
+ description: "Identifiers of the members to retrieve",
15
+ },
16
+ },
17
+ async run({ $ }) {
18
+ const peopleIdsArr = this.peopleIds;
19
+
20
+ // Generates the ids of the request with this required string format:
21
+ // List((id:{Person ID1}),(id:{Person ID2}),(id:{Person ID3}))
22
+ let peopleIdsList = "List(";
23
+ peopleIdsArr.forEach((personId) => {
24
+ peopleIdsList = peopleIdsList.length > 5
25
+ ? peopleIdsList + `,(id:${personId})`
26
+ : peopleIdsList + `(id:${personId})`;
27
+ });
28
+ peopleIdsList = `${peopleIdsList})`;
29
+
30
+ const params = {
31
+ ids: peopleIdsList,
32
+ };
33
+
34
+ const response = await this.linkedin.getMultipleMemberProfiles({
35
+ $,
36
+ params,
37
+ });
38
+
39
+ $.export("$summary", `Successfully retrieved ${this.peopleIds.length} member profile(s)`);
40
+
41
+ return response;
42
+ },
43
+ };
@@ -0,0 +1,51 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-get-organization-access-control",
5
+ name: "Gets Organization Access Control",
6
+ description: "Gets an organization's access control information, given the organization urn. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-access-control?context=linkedin/compliance/context#find-access-control-information)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ organizationUrn: {
12
+ type: "string",
13
+ label: "Organization Urn",
14
+ description: "The organizational entity for which the access control information is being retrieved. Must be in URN format urn:li:organization:{id}.",
15
+ },
16
+ max: {
17
+ propDefinition: [
18
+ linkedin,
19
+ "max",
20
+ ],
21
+ },
22
+ },
23
+ async run({ $ }) {
24
+ const count = 50;
25
+ const results = [];
26
+
27
+ const params = {
28
+ q: "organization",
29
+ organization: encodeURI(this.organizationUrn),
30
+ start: 0,
31
+ count,
32
+ };
33
+
34
+ let done = false;
35
+ do {
36
+ const { elements } = await this.linkedin.getAccessControl({
37
+ $,
38
+ params,
39
+ });
40
+ results.push(...elements);
41
+ params.start += count;
42
+ if (elements?.length < count) {
43
+ done = true;
44
+ }
45
+ } while (results.length < this.max && !done);
46
+
47
+ $.export("$summary", "Successfully retrieved access control information");
48
+
49
+ return results;
50
+ },
51
+ };
@@ -0,0 +1,53 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-get-organization-administrators",
5
+ name: "Get Organization Administrators",
6
+ description: "Gets the administator members of an organization, given the organization urn. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/organizations/organization-access-control?context=linkedin/compliance/context#find-organization-administrators)",
7
+ version: "0.2.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ organizationUrn: {
12
+ type: "string",
13
+ label: "Organization",
14
+ description: "The organizational entity for which administrators are being retrieved. Must be in URN format urn:li:organization:{id}.",
15
+ },
16
+ max: {
17
+ propDefinition: [
18
+ linkedin,
19
+ "max",
20
+ ],
21
+ },
22
+ },
23
+ async run({ $ }) {
24
+ const count = 50;
25
+ const results = [];
26
+
27
+ const params = {
28
+ q: "organization",
29
+ organization: encodeURI(this.organizationUrn),
30
+ role: "ADMINISTRATOR",
31
+ state: "APPROVED",
32
+ start: 0,
33
+ count,
34
+ };
35
+
36
+ let done = false;
37
+ do {
38
+ const { elements } = await this.linkedin.getAccessControl({
39
+ $,
40
+ params,
41
+ });
42
+ results.push(...elements);
43
+ params.start += count;
44
+ if (elements?.length < count) {
45
+ done = true;
46
+ }
47
+ } while (results.length < this.max && !done);
48
+
49
+ $.export("$summary", `Successfully retrieved ${results.length} organization administrator(s)`);
50
+
51
+ return results;
52
+ },
53
+ };
@@ -0,0 +1,53 @@
1
+ import linkedin from "../../linkedin.app.mjs";
2
+
3
+ export default {
4
+ key: "linkedin-post-share",
5
+ name: "Post Share",
6
+ description: "Posts a share, text, media, or rather sponsored content, in the context of a specific member or organization. [See the docs here](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/share-api#post-shares)",
7
+ version: "0.1.2",
8
+ type: "action",
9
+ props: {
10
+ linkedin,
11
+ organizationId: {
12
+ propDefinition: [
13
+ linkedin,
14
+ "organizationId",
15
+ ],
16
+ optional: true,
17
+ },
18
+ text: {
19
+ type: "string",
20
+ label: "Share Text",
21
+ description: "Text of the share.",
22
+ },
23
+ visibility: {
24
+ propDefinition: [
25
+ linkedin,
26
+ "visibility",
27
+ ],
28
+ },
29
+ shareContent: {
30
+ type: "object",
31
+ label: "Share Content",
32
+ description: "Referenced content such as articles and images. See the Schema of this property in [Share Content](https://docs.microsoft.com/en-us/linkedin/marketing/integrations/community-management/shares/share-api#share-content).",
33
+ optional: true,
34
+ },
35
+ },
36
+ async run({ $ }) {
37
+ const data = {
38
+ author: this.organizationId,
39
+ commentary: this.text,
40
+ visibility: this.visibility,
41
+ content: this.shareContent,
42
+ };
43
+
44
+ const response = await this.linkedin.createPost({
45
+ $,
46
+ data,
47
+ });
48
+
49
+ $.export("$summary", "Successfully posted message");
50
+
51
+ return response;
52
+ },
53
+ };