🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@robinpath/linkedin

Package Overview
Dependencies
Maintainers
4
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@robinpath/linkedin - npm Package Compare versions

Comparing version
0.1.1
to
0.1.2
+16
-3
package.json
{
"name": "@robinpath/linkedin",
"version": "0.1.1",
"version": "0.1.2",
"publishConfig": {

@@ -23,8 +23,21 @@ "access": "public"

"peerDependencies": {
"@wiredwp/robinpath": ">=0.20.0"
"@robinpath/core": ">=0.20.0"
},
"devDependencies": {
"@wiredwp/robinpath": "^0.30.1",
"@robinpath/core": "^0.30.1",
"typescript": "^5.6.0"
},
"description": "LinkedIn module for RobinPath.",
"keywords": [
"linkedin",
"social media"
],
"license": "MIT",
"robinpath": {
"category": "social-media",
"type": "integration",
"auth": "bearer-token",
"functionCount": 20,
"baseUrl": "https://api.linkedin.com"
}
}
-6
import type { ModuleAdapter } from "@wiredwp/robinpath";
declare const LinkedinModule: ModuleAdapter;
export default LinkedinModule;
export { LinkedinModule };
export { LinkedinFunctions, LinkedinFunctionMetadata, LinkedinModuleMetadata } from "./linkedin.js";
//# sourceMappingURL=index.d.ts.map
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,QAAA,MAAM,cAAc,EAAE,aAMrB,CAAC;AAEF,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
import { LinkedinFunctions, LinkedinFunctionMetadata, LinkedinModuleMetadata } from "./linkedin.js";
const LinkedinModule = {
name: "linkedin",
functions: LinkedinFunctions,
functionMetadata: LinkedinFunctionMetadata,
moduleMetadata: LinkedinModuleMetadata,
global: false,
}; // as ModuleAdapter
export default LinkedinModule;
export { LinkedinModule };
export { LinkedinFunctions, LinkedinFunctionMetadata, LinkedinModuleMetadata } from "./linkedin.js";
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEpG,MAAM,cAAc,GAAkB;IACpC,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,iBAAiB;IAC5B,gBAAgB,EAAE,wBAA+B;IACjD,cAAc,EAAE,sBAA6B;IAC7C,MAAM,EAAE,KAAK;CACd,CAAC,CAAC,mBAAmB;AAEtB,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
import type { BuiltinHandler } from "@wiredwp/robinpath";
export declare const LinkedinFunctions: Record<string, BuiltinHandler>;
export declare const LinkedinFunctionMetadata: {
setToken: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
getProfile: {
description: string;
parameters: never[];
returnType: string;
returnDescription: string;
example: string;
};
getOrganization: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
createPost: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
createArticlePost: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
createImagePost: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
deletePost: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
getPost: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
registerImageUpload: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
uploadImage: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
addComment: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
getComments: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
deleteComment: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
addReaction: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
removeReaction: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
getReactions: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
getFollowerCount: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
getShareStatistics: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
searchPeople: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
getConnections: {
description: string;
parameters: {
name: string;
dataType: string;
description: string;
formInputType: string;
required: boolean;
}[];
returnType: string;
returnDescription: string;
example: string;
};
};
export declare const LinkedinModuleMetadata: {
description: string;
methods: string[];
category: string;
};
//# sourceMappingURL=linkedin.d.ts.map
{"version":3,"file":"linkedin.d.ts","sourceRoot":"","sources":["../src/linkedin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA2C,MAAM,oBAAoB,CAAC;AA2alG,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAqB5D,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkMpC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;CAIlC,CAAC"}
import { readFileSync } from "node:fs";
// ── Internal State ──────────────────────────────────────────────────
let accessToken = "";
const API_BASE = "https://api.linkedin.com";
const API_VERSION = "202401";
// ── Helper ──────────────────────────────────────────────────────────
function getHeaders() {
if (!accessToken) {
throw new Error("Access token not set. Call linkedin.setToken first.");
}
return {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
"LinkedIn-Version": API_VERSION,
"X-Restli-Protocol-Version": "2.0.0",
};
}
async function linkedinGet(path) {
const response = await fetch(`${API_BASE}${path}`, {
method: "GET",
headers: getHeaders(),
});
if (!response.ok) {
const errText = await response.text();
throw new Error(`LinkedIn API GET ${path} failed (${response.status}): ${errText}`);
}
return response.json();
}
async function linkedinPost(path, body) {
const response = await fetch(`${API_BASE}${path}`, {
method: "POST",
headers: getHeaders(),
body: JSON.stringify(body),
});
if (!response.ok) {
const errText = await response.text();
throw new Error(`LinkedIn API POST ${path} failed (${response.status}): ${errText}`);
}
const contentType = response.headers.get("content-type") ?? "";
if (contentType.includes("application/json")) {
return response.json();
}
// Some endpoints return 201 with location header and no body
return {
ok: true,
status: response.status,
location: response.headers.get("x-restli-id") ?? response.headers.get("location") ?? null,
};
}
async function linkedinDelete(path) {
const response = await fetch(`${API_BASE}${path}`, {
method: "DELETE",
headers: getHeaders(),
});
if (!response.ok) {
const errText = await response.text();
throw new Error(`LinkedIn API DELETE ${path} failed (${response.status}): ${errText}`);
}
return { ok: true, status: response.status };
}
// ── Function Handlers ───────────────────────────────────────────────
const setToken = (args) => {
const token = String(args[0] ?? "");
if (!token)
throw new Error("Access token is required");
accessToken = token;
return { ok: true };
};
const getProfile = async (_args) => {
const result = await linkedinGet("/v2/userinfo");
return result;
};
const getOrganization = async (args) => {
const organizationId = String(args[0] ?? "");
if (!organizationId)
throw new Error("Organization ID is required");
const result = await linkedinGet(`/v2/organizations/${organizationId}`);
return result;
};
const createPost = async (args) => {
const authorUrn = String(args[0] ?? "");
const text = String(args[1] ?? "");
const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
if (!authorUrn)
throw new Error("Author URN is required (e.g. urn:li:person:{id})");
if (!text)
throw new Error("Post text is required");
const visibility = String(opts.visibility ?? "PUBLIC");
const body = {
author: authorUrn,
lifecycleState: "PUBLISHED",
specificContent: {
"com.linkedin.ugc.ShareContent": {
shareCommentary: { text },
shareMediaCategory: String(opts.mediaCategory ?? "NONE"),
},
},
visibility: {
"com.linkedin.ugc.MemberNetworkVisibility": visibility,
},
};
const result = await linkedinPost("/v2/ugcPosts", body);
return result;
};
const createArticlePost = async (args) => {
const authorUrn = String(args[0] ?? "");
const text = String(args[1] ?? "");
const articleUrl = String(args[2] ?? "");
const opts = (typeof args[3] === "object" && args[3] !== null ? args[3] : {});
if (!authorUrn)
throw new Error("Author URN is required");
if (!text)
throw new Error("Post text is required");
if (!articleUrl)
throw new Error("Article URL is required");
const visibility = String(opts.visibility ?? "PUBLIC");
const media = {
status: "READY",
originalUrl: articleUrl,
};
if (opts.title)
media.title = { text: String(opts.title) };
if (opts.description)
media.description = { text: String(opts.description) };
const body = {
author: authorUrn,
lifecycleState: "PUBLISHED",
specificContent: {
"com.linkedin.ugc.ShareContent": {
shareCommentary: { text },
shareMediaCategory: "ARTICLE",
media: [media],
},
},
visibility: {
"com.linkedin.ugc.MemberNetworkVisibility": visibility,
},
};
const result = await linkedinPost("/v2/ugcPosts", body);
return result;
};
const createImagePost = async (args) => {
const authorUrn = String(args[0] ?? "");
const text = String(args[1] ?? "");
const imageUrn = String(args[2] ?? "");
const opts = (typeof args[3] === "object" && args[3] !== null ? args[3] : {});
if (!authorUrn)
throw new Error("Author URN is required");
if (!text)
throw new Error("Post text is required");
if (!imageUrn)
throw new Error("Image URN is required (from registerImageUpload)");
const visibility = String(opts.visibility ?? "PUBLIC");
const media = {
status: "READY",
media: imageUrn,
};
if (opts.title)
media.title = { text: String(opts.title) };
if (opts.description)
media.description = { text: String(opts.description) };
const body = {
author: authorUrn,
lifecycleState: "PUBLISHED",
specificContent: {
"com.linkedin.ugc.ShareContent": {
shareCommentary: { text },
shareMediaCategory: "IMAGE",
media: [media],
},
},
visibility: {
"com.linkedin.ugc.MemberNetworkVisibility": visibility,
},
};
const result = await linkedinPost("/v2/ugcPosts", body);
return result;
};
const deletePost = async (args) => {
const postUrn = String(args[0] ?? "");
if (!postUrn)
throw new Error("Post URN is required");
const encodedUrn = encodeURIComponent(postUrn);
const result = await linkedinDelete(`/v2/ugcPosts/${encodedUrn}`);
return result;
};
const getPost = async (args) => {
const postUrn = String(args[0] ?? "");
if (!postUrn)
throw new Error("Post URN is required");
const encodedUrn = encodeURIComponent(postUrn);
const result = await linkedinGet(`/v2/ugcPosts/${encodedUrn}`);
return result;
};
const registerImageUpload = async (args) => {
const ownerUrn = String(args[0] ?? "");
if (!ownerUrn)
throw new Error("Owner URN is required (e.g. urn:li:person:{id})");
const body = {
registerUploadRequest: {
recipes: ["urn:li:digitalmediaRecipe:feedshare-image"],
owner: ownerUrn,
serviceRelationships: [
{
relationshipType: "OWNER",
identifier: "urn:li:userGeneratedContent",
},
],
},
};
const result = (await linkedinPost("/v2/assets?action=registerUpload", body));
const uploadValue = (result.value ?? result);
const uploadMechanism = uploadValue.uploadMechanism;
const mediaUpload = uploadMechanism?.["com.linkedin.digitalmedia.uploading.MediaUploadHttpRequest"];
return {
uploadUrl: mediaUpload?.uploadUrl ?? null,
imageUrn: uploadValue.asset ?? null,
mediaArtifact: uploadValue.mediaArtifact ?? null,
};
};
const uploadImage = async (args) => {
const uploadUrl = String(args[0] ?? "");
const imagePath = String(args[1] ?? "");
if (!uploadUrl)
throw new Error("Upload URL is required (from registerImageUpload)");
if (!imagePath)
throw new Error("Image file path is required");
const fileData = readFileSync(imagePath);
const response = await fetch(uploadUrl, {
method: "PUT",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/octet-stream",
},
body: fileData,
});
if (!response.ok) {
const errText = await response.text();
throw new Error(`Image upload failed (${response.status}): ${errText}`);
}
return { ok: true, status: response.status };
};
const addComment = async (args) => {
const postUrn = String(args[0] ?? "");
const text = String(args[1] ?? "");
if (!postUrn)
throw new Error("Post URN is required");
if (!text)
throw new Error("Comment text is required");
const encodedUrn = encodeURIComponent(postUrn);
const body = {
actor: postUrn.includes("urn:li:person") ? postUrn : undefined,
message: { text },
};
const result = await linkedinPost(`/v2/socialActions/${encodedUrn}/comments`, body);
return result;
};
const getComments = async (args) => {
const postUrn = String(args[0] ?? "");
const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
if (!postUrn)
throw new Error("Post URN is required");
const encodedUrn = encodeURIComponent(postUrn);
const start = Number(opts.start ?? 0);
const count = Number(opts.count ?? 10);
const result = await linkedinGet(`/v2/socialActions/${encodedUrn}/comments?start=${start}&count=${count}`);
return result;
};
const deleteComment = async (args) => {
const commentUrn = String(args[0] ?? "");
if (!commentUrn)
throw new Error("Comment URN is required");
const encodedUrn = encodeURIComponent(commentUrn);
const result = await linkedinDelete(`/v2/socialActions/${encodedUrn}`);
return result;
};
const addReaction = async (args) => {
const postUrn = String(args[0] ?? "");
const reactionType = String(args[1] ?? "");
if (!postUrn)
throw new Error("Post URN is required");
if (!reactionType)
throw new Error("Reaction type is required (LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION)");
const validReactions = ["LIKE", "PRAISE", "EMPATHY", "INTEREST", "APPRECIATION"];
const upperReaction = reactionType.toUpperCase();
if (!validReactions.includes(upperReaction)) {
throw new Error(`Invalid reaction type "${reactionType}". Must be one of: ${validReactions.join(", ")}`);
}
const encodedUrn = encodeURIComponent(postUrn);
const body = {
reactionType: upperReaction,
};
const result = await linkedinPost(`/v2/socialActions/${encodedUrn}/likes`, body);
return result;
};
const removeReaction = async (args) => {
const postUrn = String(args[0] ?? "");
const reactionType = String(args[1] ?? "");
if (!postUrn)
throw new Error("Post URN is required");
if (!reactionType)
throw new Error("Reaction type is required");
const encodedUrn = encodeURIComponent(postUrn);
const result = await linkedinDelete(`/v2/socialActions/${encodedUrn}/likes/${reactionType.toUpperCase()}`);
return result;
};
const getReactions = async (args) => {
const postUrn = String(args[0] ?? "");
if (!postUrn)
throw new Error("Post URN is required");
const encodedUrn = encodeURIComponent(postUrn);
const result = await linkedinGet(`/v2/socialActions/${encodedUrn}/likes`);
return result;
};
const getFollowerCount = async (args) => {
const organizationUrn = String(args[0] ?? "");
if (!organizationUrn)
throw new Error("Organization URN is required");
// Extract numeric ID from URN if provided as full URN
const orgId = organizationUrn.includes("urn:li:organization:")
? organizationUrn.replace("urn:li:organization:", "")
: organizationUrn;
const result = (await linkedinGet(`/v2/networkSizes/${encodeURIComponent(`urn:li:organization:${orgId}`)}?edgeType=CompanyFollowedByMember`));
return {
organizationId: orgId,
followerCount: result.firstDegreeSize ?? 0,
};
};
const getShareStatistics = async (args) => {
const ownerUrn = String(args[0] ?? "");
const shareUrns = args[1];
if (!ownerUrn)
throw new Error("Owner URN is required");
let path = `/v2/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=${encodeURIComponent(ownerUrn)}`;
if (Array.isArray(shareUrns) && shareUrns.length > 0) {
const sharesParam = shareUrns.map((s) => `shares=${encodeURIComponent(String(s))}`).join("&");
path += `&${sharesParam}`;
}
const result = await linkedinGet(path);
return result;
};
const searchPeople = async (args) => {
const query = String(args[0] ?? "");
const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
if (!query)
throw new Error("Search query is required");
const start = Number(opts.start ?? 0);
const count = Number(opts.count ?? 10);
const result = await linkedinGet(`/v2/search/blended?q=people&keywords=${encodeURIComponent(query)}&start=${start}&count=${count}`);
return result;
};
const getConnections = async (args) => {
const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {});
const start = Number(opts.start ?? 0);
const count = Number(opts.count ?? 10);
const result = await linkedinGet(`/v2/connections?q=viewer&start=${start}&count=${count}`);
return result;
};
// ── Exports ─────────────────────────────────────────────────────────
export const LinkedinFunctions = {
setToken,
getProfile,
getOrganization,
createPost,
createArticlePost,
createImagePost,
deletePost,
getPost,
registerImageUpload,
uploadImage,
addComment,
getComments,
deleteComment,
addReaction,
removeReaction,
getReactions,
getFollowerCount,
getShareStatistics,
searchPeople,
getConnections,
};
export const LinkedinFunctionMetadata = {
setToken: {
description: "Store an OAuth2 access token for LinkedIn API requests",
parameters: [
{ name: "accessToken", dataType: "string", description: "OAuth2 access token", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "{ok: true}",
example: 'linkedin.setToken "your-access-token"',
},
getProfile: {
description: "Get the authenticated user's profile using /v2/userinfo",
parameters: [],
returnType: "object",
returnDescription: "User profile object with sub, name, email, picture, etc.",
example: "linkedin.getProfile",
},
getOrganization: {
description: "Get organization/company page information",
parameters: [
{ name: "organizationId", dataType: "string", description: "Organization numeric ID", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "Organization object with name, description, website, etc.",
example: 'linkedin.getOrganization "12345678"',
},
createPost: {
description: "Create a text post (share on feed)",
parameters: [
{ name: "authorUrn", dataType: "string", description: "Author URN (e.g. urn:li:person:{id} or urn:li:organization:{id})", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "Post text content", formInputType: "textarea", required: true },
{ name: "options", dataType: "object", description: "{visibility?: 'PUBLIC'|'CONNECTIONS', mediaCategory?: string}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "Created post object with id",
example: 'linkedin.createPost "urn:li:person:abc123" "Hello LinkedIn!" {"visibility": "PUBLIC"}',
},
createArticlePost: {
description: "Share an article with URL, title, and description",
parameters: [
{ name: "authorUrn", dataType: "string", description: "Author URN", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "Post commentary text", formInputType: "textarea", required: true },
{ name: "articleUrl", dataType: "string", description: "URL of the article to share", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{visibility?, title?, description?}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "Created post object with id",
example: 'linkedin.createArticlePost "urn:li:person:abc123" "Great read!" "https://example.com/article" {"title": "Article Title"}',
},
createImagePost: {
description: "Share an image post with text",
parameters: [
{ name: "authorUrn", dataType: "string", description: "Author URN", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "Post text content", formInputType: "textarea", required: true },
{ name: "imageUrn", dataType: "string", description: "Image URN from registerImageUpload", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{visibility?, title?, description?}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "Created post object with id",
example: 'linkedin.createImagePost "urn:li:person:abc123" "Check this out!" "urn:li:digitalmediaAsset:abc" {"title": "Photo"}',
},
deletePost: {
description: "Delete a post by its URN",
parameters: [
{ name: "postUrn", dataType: "string", description: "URN of the post to delete", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "{ok: true, status}",
example: 'linkedin.deletePost "urn:li:ugcPost:123456"',
},
getPost: {
description: "Get post details by URN",
parameters: [
{ name: "postUrn", dataType: "string", description: "URN of the post", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "Post object with author, text, visibility, etc.",
example: 'linkedin.getPost "urn:li:ugcPost:123456"',
},
registerImageUpload: {
description: "Register an image upload and get the upload URL and image URN",
parameters: [
{ name: "ownerUrn", dataType: "string", description: "Owner URN (e.g. urn:li:person:{id})", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "{uploadUrl, imageUrn, mediaArtifact}",
example: 'linkedin.registerImageUpload "urn:li:person:abc123"',
},
uploadImage: {
description: "Upload an image binary to the URL from registerImageUpload",
parameters: [
{ name: "uploadUrl", dataType: "string", description: "Upload URL from registerImageUpload", formInputType: "text", required: true },
{ name: "imagePath", dataType: "string", description: "Local path to the image file", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "{ok: true, status}",
example: 'linkedin.uploadImage "https://api.linkedin.com/mediaUpload/..." "./photo.jpg"',
},
addComment: {
description: "Add a comment on a post",
parameters: [
{ name: "postUrn", dataType: "string", description: "URN of the post to comment on", formInputType: "text", required: true },
{ name: "text", dataType: "string", description: "Comment text", formInputType: "textarea", required: true },
],
returnType: "object",
returnDescription: "Created comment object",
example: 'linkedin.addComment "urn:li:ugcPost:123456" "Great post!"',
},
getComments: {
description: "List comments on a post",
parameters: [
{ name: "postUrn", dataType: "string", description: "URN of the post", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{start?: number, count?: number}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "Object with elements array of comments",
example: 'linkedin.getComments "urn:li:ugcPost:123456" {"count": 20}',
},
deleteComment: {
description: "Delete a comment by its URN",
parameters: [
{ name: "commentUrn", dataType: "string", description: "URN of the comment to delete", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "{ok: true, status}",
example: 'linkedin.deleteComment "urn:li:comment:(ugcPost:123,456)"',
},
addReaction: {
description: "React to a post (LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION)",
parameters: [
{ name: "postUrn", dataType: "string", description: "URN of the post to react to", formInputType: "text", required: true },
{ name: "reactionType", dataType: "string", description: "Reaction type: LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION", formInputType: "select", required: true },
],
returnType: "object",
returnDescription: "Reaction result object",
example: 'linkedin.addReaction "urn:li:ugcPost:123456" "LIKE"',
},
removeReaction: {
description: "Remove a reaction from a post",
parameters: [
{ name: "postUrn", dataType: "string", description: "URN of the post", formInputType: "text", required: true },
{ name: "reactionType", dataType: "string", description: "Reaction type to remove: LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION", formInputType: "select", required: true },
],
returnType: "object",
returnDescription: "{ok: true, status}",
example: 'linkedin.removeReaction "urn:li:ugcPost:123456" "LIKE"',
},
getReactions: {
description: "Get all reactions on a post",
parameters: [
{ name: "postUrn", dataType: "string", description: "URN of the post", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "Object with elements array of reactions",
example: 'linkedin.getReactions "urn:li:ugcPost:123456"',
},
getFollowerCount: {
description: "Get the follower count for an organization",
parameters: [
{ name: "organizationUrn", dataType: "string", description: "Organization URN or numeric ID", formInputType: "text", required: true },
],
returnType: "object",
returnDescription: "{organizationId, followerCount}",
example: 'linkedin.getFollowerCount "urn:li:organization:12345678"',
},
getShareStatistics: {
description: "Get post/share analytics for an organization",
parameters: [
{ name: "ownerUrn", dataType: "string", description: "Owner URN (organizational entity)", formInputType: "text", required: true },
{ name: "shareUrns", dataType: "array", description: "Optional array of share URNs to filter", formInputType: "json", required: false },
],
returnType: "object",
returnDescription: "Share statistics with impressions, clicks, engagement, etc.",
example: 'linkedin.getShareStatistics "urn:li:organization:12345678"',
},
searchPeople: {
description: "Search for people on LinkedIn (limited access, requires special permissions)",
parameters: [
{ name: "query", dataType: "string", description: "Search keywords", formInputType: "text", required: true },
{ name: "options", dataType: "object", description: "{start?: number, count?: number}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "Search results object with people array",
example: 'linkedin.searchPeople "software engineer" {"count": 10}',
},
getConnections: {
description: "Get first-degree connections of the authenticated user",
parameters: [
{ name: "options", dataType: "object", description: "{start?: number, count?: number}", formInputType: "text", required: false },
],
returnType: "object",
returnDescription: "Connections list with elements array",
example: 'linkedin.getConnections {"count": 20}',
},
};
export const LinkedinModuleMetadata = {
description: "LinkedIn API client for posts, comments, reactions, image uploads, organization management, and people search via Community Management and Marketing APIs",
methods: Object.keys(LinkedinFunctions),
category: "social",
};
//# sourceMappingURL=linkedin.js.map
{"version":3,"file":"linkedin.js","sourceRoot":"","sources":["../src/linkedin.ts"],"names":[],"mappings":"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"}