@robinpath/linkedin
Advanced tools
+16
-3
| { | ||
| "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" | ||
| } | ||
| } |
| 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"} |
-582
| 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":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,uEAAuE;AAEvE,IAAI,WAAW,GAAG,EAAE,CAAC;AAErB,MAAM,QAAQ,GAAG,0BAA0B,CAAC;AAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC;AAE7B,uEAAuE;AAEvE,SAAS,UAAU;IACjB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO;QACL,aAAa,EAAE,UAAU,WAAW,EAAE;QACtC,cAAc,EAAE,kBAAkB;QAClC,kBAAkB,EAAE,WAAW;QAC/B,2BAA2B,EAAE,OAAO;KACrC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY;IACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE;QACjD,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,UAAU,EAAE;KACtB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,YAAY,QAAQ,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAoB,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,IAAa;IACrD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,UAAU,EAAE;QACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,YAAY,QAAQ,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC,IAAI,EAAoB,CAAC;IAC3C,CAAC;IAED,6DAA6D;IAC7D,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI;KAC1F,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY;IACxC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,EAAE;QACjD,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,UAAU,EAAE;KACtB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,YAAY,QAAQ,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,uEAAuE;AAEvE,MAAM,QAAQ,GAAmB,CAAC,IAAI,EAAE,EAAE;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACxD,WAAW,GAAG,KAAK,CAAC;IACpB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,KAAK,EAAE,KAAK,EAAE,EAAE;IACjD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,cAAc,CAAC,CAAC;IACjD,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,qBAAqB,cAAc,EAAE,CAAC,CAAC;IACxE,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEzG,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACpF,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC;IAEvD,MAAM,IAAI,GAA4B;QACpC,MAAM,EAAE,SAAS;QACjB,cAAc,EAAE,WAAW;QAC3B,eAAe,EAAE;YACf,+BAA+B,EAAE;gBAC/B,eAAe,EAAE,EAAE,IAAI,EAAE;gBACzB,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC;aACzD;SACF;QACD,UAAU,EAAE;YACV,0CAA0C,EAAE,UAAU;SACvD;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxD,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEzG,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC;IAEvD,MAAM,KAAK,GAA4B;QACrC,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,UAAU;KACxB,CAAC;IACF,IAAI,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3D,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IAE7E,MAAM,IAAI,GAA4B;QACpC,MAAM,EAAE,SAAS;QACjB,cAAc,EAAE,WAAW;QAC3B,eAAe,EAAE;YACf,+BAA+B,EAAE;gBAC/B,eAAe,EAAE,EAAE,IAAI,EAAE;gBACzB,kBAAkB,EAAE,SAAS;gBAC7B,KAAK,EAAE,CAAC,KAAK,CAAC;aACf;SACF;QACD,UAAU,EAAE;YACV,0CAA0C,EAAE,UAAU;SACvD;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxD,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEzG,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAEnF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC;IAEvD,MAAM,KAAK,GAA4B;QACrC,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,QAAQ;KAChB,CAAC;IACF,IAAI,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3D,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IAE7E,MAAM,IAAI,GAA4B;QACpC,MAAM,EAAE,SAAS;QACjB,cAAc,EAAE,WAAW;QAC3B,eAAe,EAAE;YACf,+BAA+B,EAAE;gBAC/B,eAAe,EAAE,EAAE,IAAI,EAAE;gBACzB,kBAAkB,EAAE,OAAO;gBAC3B,KAAK,EAAE,CAAC,KAAK,CAAC;aACf;SACF;QACD,UAAU,EAAE;YACV,0CAA0C,EAAE,UAAU;SACvD;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxD,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;IAClE,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,OAAO,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;IAC/D,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAElF,MAAM,IAAI,GAAG;QACX,qBAAqB,EAAE;YACrB,OAAO,EAAE,CAAC,2CAA2C,CAAC;YACtD,KAAK,EAAE,QAAQ;YACf,oBAAoB,EAAE;gBACpB;oBACE,gBAAgB,EAAE,OAAO;oBACzB,UAAU,EAAE,6BAA6B;iBAC1C;aACF;SACF;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAA4B,CAAC;IAEzG,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAA4B,CAAC;IACxE,MAAM,eAAe,GAAG,WAAW,CAAC,eAAsD,CAAC;IAC3F,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC,4DAA4D,CAAwC,CAAC;IAE3I,OAAO;QACL,SAAS,EAAE,WAAW,EAAE,SAAS,IAAI,IAAI;QACzC,QAAQ,EAAE,WAAW,CAAC,KAAK,IAAI,IAAI;QACnC,aAAa,EAAE,WAAW,CAAC,aAAa,IAAI,IAAI;KACjD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,WAAW,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACrF,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAE/D,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE;QACtC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,WAAW,EAAE;YACtC,cAAc,EAAE,0BAA0B;SAC3C;QACD,IAAI,EAAE,QAAQ;KACf,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,UAAU,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAG;QACX,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAC9D,OAAO,EAAE,EAAE,IAAI,EAAE;KAClB,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,qBAAqB,UAAU,WAAW,EAAE,IAAI,CAAC,CAAC;IACpF,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEzG,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,qBAAqB,UAAU,mBAAmB,KAAK,UAAU,KAAK,EAAE,CAAC,CAAC;IAC3G,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAE5D,MAAM,UAAU,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IACvE,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,WAAW,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAEhH,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IACjD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,sBAAsB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,IAAI,GAAG;QACX,YAAY,EAAE,aAAa;KAC5B,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,qBAAqB,UAAU,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjF,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,qBAAqB,UAAU,UAAU,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC3G,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,qBAAqB,UAAU,QAAQ,CAAC,CAAC;IAC1E,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACtD,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAEtE,sDAAsD;IACtD,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QAC5D,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;QACrD,CAAC,CAAC,eAAe,CAAC;IAEpB,MAAM,MAAM,GAAG,CAAC,MAAM,WAAW,CAC/B,oBAAoB,kBAAkB,CAAC,uBAAuB,KAAK,EAAE,CAAC,mCAAmC,CAC1G,CAA4B,CAAC;IAE9B,OAAO;QACL,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,MAAM,CAAC,eAAe,IAAI,CAAC;KAC3C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAExD,IAAI,IAAI,GAAG,uFAAuF,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAEjI,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,UAAU,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnG,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEzG,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,wCAAwC,kBAAkB,CAAC,KAAK,CAAC,UAAU,KAAK,UAAU,KAAK,EAAE,CAClG,CAAC;IACF,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,cAAc,GAAmB,KAAK,EAAE,IAAI,EAAE,EAAE;IACpD,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IAEzG,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,kCAAkC,KAAK,UAAU,KAAK,EAAE,CAAC,CAAC;IAC3F,OAAO,MAAe,CAAC;AACzB,CAAC,CAAC;AAEF,uEAAuE;AAEvE,MAAM,CAAC,MAAM,iBAAiB,GAAmC;IAC/D,QAAQ;IACR,UAAU;IACV,eAAe;IACf,UAAU;IACV,iBAAiB;IACjB,eAAe;IACf,UAAU;IACV,OAAO;IACP,mBAAmB;IACnB,WAAW;IACX,UAAU;IACV,WAAW;IACX,aAAa;IACb,WAAW;IACX,cAAc;IACd,YAAY;IACZ,gBAAgB;IAChB,kBAAkB;IAClB,YAAY;IACZ,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,QAAQ,EAAE;QACR,WAAW,EAAE,wDAAwD;QACrE,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SACvH;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,YAAY;QAC/B,OAAO,EAAE,uCAAuC;KACjD;IACD,UAAU,EAAE;QACV,WAAW,EAAE,yDAAyD;QACtE,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,0DAA0D;QAC7E,OAAO,EAAE,qBAAqB;KAC/B;IACD,eAAe,EAAE;QACf,WAAW,EAAE,2CAA2C;QACxD,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC9H;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,2DAA2D;QAC9E,OAAO,EAAE,qCAAqC;KAC/C;IACD,UAAU,EAAE;QACV,WAAW,EAAE,oCAAoC;QACjD,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,kEAAkE,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACjK,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;YACjH,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;SAC9J;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,6BAA6B;QAChD,OAAO,EAAE,uFAAuF;KACjG;IACD,iBAAiB,EAAE;QACjB,WAAW,EAAE,mDAAmD;QAChE,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC3G,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpH,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC7H,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;SACpI;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,6BAA6B;QAChD,OAAO,EAAE,0HAA0H;KACpI;IACD,eAAe,EAAE;QACf,WAAW,EAAE,+BAA+B;QAC5C,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC3G,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;YACjH,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAClI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;SACpI;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,6BAA6B;QAChD,OAAO,EAAE,qHAAqH;KAC/H;IACD,UAAU,EAAE;QACV,WAAW,EAAE,0BAA0B;QACvC,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SACzH;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,oBAAoB;QACvC,OAAO,EAAE,6CAA6C;KACvD;IACD,OAAO,EAAE;QACP,WAAW,EAAE,yBAAyB;QACtC,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC/G;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,iDAAiD;QACpE,OAAO,EAAE,0CAA0C;KACpD;IACD,mBAAmB,EAAE;QACnB,WAAW,EAAE,+DAA+D;QAC5E,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SACpI;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,sCAAsC;QACzD,OAAO,EAAE,qDAAqD;KAC/D;IACD,WAAW,EAAE;QACX,WAAW,EAAE,4DAA4D;QACzE,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC9H;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,oBAAoB;QACvC,OAAO,EAAE,+EAA+E;KACzF;IACD,UAAU,EAAE;QACV,WAAW,EAAE,yBAAyB;QACtC,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC5H,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC7G;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,wBAAwB;QAC3C,OAAO,EAAE,2DAA2D;KACrE;IACD,WAAW,EAAE;QACX,WAAW,EAAE,yBAAyB;QACtC,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9G,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;SACjI;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,wCAAwC;QAC3D,OAAO,EAAE,4DAA4D;KACtE;IACD,aAAa,EAAE;QACb,WAAW,EAAE,6BAA6B;QAC1C,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC/H;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,oBAAoB;QACvC,OAAO,EAAE,2DAA2D;KACrE;IACD,WAAW,EAAE;QACX,WAAW,EAAE,iEAAiE;QAC9E,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC1H,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,8DAA8D,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;SACnK;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,wBAAwB;QAC3C,OAAO,EAAE,qDAAqD;KAC/D;IACD,cAAc,EAAE;QACd,WAAW,EAAE,+BAA+B;QAC5C,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9G,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,wEAAwE,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC7K;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,oBAAoB;QACvC,OAAO,EAAE,wDAAwD;KAClE;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,6BAA6B;QAC1C,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SAC/G;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,yCAAyC;QAC5D,OAAO,EAAE,+CAA+C;KACzD;IACD,gBAAgB,EAAE;QAChB,WAAW,EAAE,4CAA4C;QACzD,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;SACtI;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,iCAAiC;QACpD,OAAO,EAAE,0DAA0D;KACpE;IACD,kBAAkB,EAAE;QAClB,WAAW,EAAE,8CAA8C;QAC3D,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACjI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,wCAAwC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;SACxI;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,6DAA6D;QAChF,OAAO,EAAE,4DAA4D;KACtE;IACD,YAAY,EAAE;QACZ,WAAW,EAAE,8EAA8E;QAC3F,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC5G,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;SACjI;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,yCAAyC;QAC5D,OAAO,EAAE,yDAAyD;KACnE;IACD,cAAc,EAAE;QACd,WAAW,EAAE,wDAAwD;QACrE,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;SACjI;QACD,UAAU,EAAE,QAAQ;QACpB,iBAAiB,EAAE,sCAAsC;QACzD,OAAO,EAAE,uCAAuC;KACjD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,WAAW,EAAE,2JAA2J;IACxK,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACvC,QAAQ,EAAE,QAAQ;CACnB,CAAC"} |
Empty package
Supply chain riskPackage does not contain any code. It may be removed, is name squatting, or the result of a faulty package publish.
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Network access
Supply chain riskThis module accesses the network.
No License Found
LicenseLicense information could not be found.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
0
-100%1
-50%2
-50%4825
-91.95%2
-80%0
-100%