@robinpath/instagram
Advanced tools
+36
-7
| { | ||
| "name": "@robinpath/instagram", | ||
| "version": "0.1.0", | ||
| "publishConfig": { "access": "public" }, | ||
| "version": "0.1.1", | ||
| "publishConfig": { | ||
| "access": "public" | ||
| }, | ||
| "type": "module", | ||
| "main": "dist/index.js", | ||
| "types": "dist/index.d.ts", | ||
| "exports": { ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" } }, | ||
| "files": ["dist"], | ||
| "scripts": { "build": "tsc" }, | ||
| "peerDependencies": { "@wiredwp/robinpath": ">=0.20.0" }, | ||
| "devDependencies": { "@wiredwp/robinpath": "^0.30.1", "typescript": "^5.6.0" } | ||
| "exports": { | ||
| ".": { | ||
| "import": "./dist/index.js", | ||
| "types": "./dist/index.d.ts" | ||
| } | ||
| }, | ||
| "files": [ | ||
| "dist" | ||
| ], | ||
| "scripts": { | ||
| "build": "tsc" | ||
| }, | ||
| "peerDependencies": { | ||
| "@robinpath/core": ">=0.20.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@robinpath/core": "^0.30.1", | ||
| "typescript": "^5.6.0" | ||
| }, | ||
| "description": "Instagram module for RobinPath.", | ||
| "keywords": [ | ||
| "instagram", | ||
| "social media" | ||
| ], | ||
| "license": "MIT", | ||
| "robinpath": { | ||
| "category": "social-media", | ||
| "type": "integration", | ||
| "auth": "bearer-token", | ||
| "functionCount": 21, | ||
| "baseUrl": "https://graph.facebook.com/v22.0" | ||
| } | ||
| } |
| import type { ModuleAdapter } from "@wiredwp/robinpath"; | ||
| declare const InstagramModule: ModuleAdapter; | ||
| export default InstagramModule; | ||
| export { InstagramModule }; | ||
| export { InstagramFunctions, InstagramFunctionMetadata, InstagramModuleMetadata } from "./instagram.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,eAAe,EAAE,aAMtB,CAAC;AAEF,eAAe,eAAe,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC"} |
| import { InstagramFunctions, InstagramFunctionMetadata, InstagramModuleMetadata } from "./instagram.js"; | ||
| const InstagramModule = { | ||
| name: "instagram", | ||
| functions: InstagramFunctions, | ||
| functionMetadata: InstagramFunctionMetadata, | ||
| moduleMetadata: InstagramModuleMetadata, | ||
| global: false, | ||
| }; // as ModuleAdapter | ||
| export default InstagramModule; | ||
| export { InstagramModule }; | ||
| export { InstagramFunctions, InstagramFunctionMetadata, InstagramModuleMetadata } from "./instagram.js"; | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAExG,MAAM,eAAe,GAAkB;IACrC,IAAI,EAAE,WAAW;IACjB,SAAS,EAAE,kBAAkB;IAC7B,gBAAgB,EAAE,yBAAgC;IAClD,cAAc,EAAE,uBAA8B;IAC9C,MAAM,EAAE,KAAK;CACd,CAAC,CAAC,mBAAmB;AAEtB,eAAe,eAAe,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC"} |
| import type { BuiltinHandler } from "@wiredwp/robinpath"; | ||
| export declare const InstagramFunctions: Record<string, BuiltinHandler>; | ||
| export declare const InstagramFunctionMetadata: { | ||
| setToken: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| setBusinessAccount: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getProfile: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getMedia: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| listMedia: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| createMediaContainer: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| createVideoContainer: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| createCarouselContainer: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| publishMedia: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getMediaInsights: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getAccountInsights: { | ||
| 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; | ||
| }; | ||
| replyToComment: { | ||
| 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; | ||
| }; | ||
| getStories: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getHashtag: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getHashtagMedia: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getMentions: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| sendMessage: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getConversations: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| getMessages: { | ||
| description: string; | ||
| parameters: { | ||
| name: string; | ||
| dataType: string; | ||
| description: string; | ||
| formInputType: string; | ||
| required: boolean; | ||
| }[]; | ||
| returnType: string; | ||
| returnDescription: string; | ||
| example: string; | ||
| }; | ||
| }; | ||
| export declare const InstagramModuleMetadata: { | ||
| description: string; | ||
| methods: string[]; | ||
| category: string; | ||
| }; | ||
| //# sourceMappingURL=instagram.d.ts.map |
| {"version":3,"file":"instagram.d.ts","sourceRoot":"","sources":["../src/instagram.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA2C,MAAM,oBAAoB,CAAC;AA8hBlG,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAsB7D,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8MrC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;CAInC,CAAC"} |
| const accounts = new Map(); | ||
| const API_BASE = "https://graph.facebook.com/v22.0"; | ||
| // ── Helper ────────────────────────────────────────────────────────── | ||
| function getConfig(accountId = "default") { | ||
| const config = accounts.get(accountId); | ||
| if (!config) { | ||
| throw new Error(`Instagram account "${accountId}" not configured. Call instagram.setToken or instagram.setBusinessAccount first.`); | ||
| } | ||
| return config; | ||
| } | ||
| async function callApi(endpoint, accessToken, method = "GET", body) { | ||
| const url = new URL(`${API_BASE}/${endpoint}`); | ||
| const headers = { | ||
| Authorization: `Bearer ${accessToken}`, | ||
| }; | ||
| const fetchOptions = { method, headers }; | ||
| if (body && (method === "POST" || method === "DELETE")) { | ||
| headers["Content-Type"] = "application/json"; | ||
| fetchOptions.body = JSON.stringify(body); | ||
| } | ||
| const response = await fetch(url.toString(), fetchOptions); | ||
| const result = (await response.json()); | ||
| if (result.error) { | ||
| const err = result.error; | ||
| throw new Error(`Instagram API error: ${String(err.message ?? err.type ?? "unknown_error")} (code ${err.code ?? "?"})`); | ||
| } | ||
| return result; | ||
| } | ||
| async function callApiGet(endpoint, accessToken, params) { | ||
| const url = new URL(`${API_BASE}/${endpoint}`); | ||
| url.searchParams.set("access_token", accessToken); | ||
| if (params) { | ||
| for (const [key, value] of Object.entries(params)) { | ||
| url.searchParams.set(key, value); | ||
| } | ||
| } | ||
| const response = await fetch(url.toString()); | ||
| const result = (await response.json()); | ||
| if (result.error) { | ||
| const err = result.error; | ||
| throw new Error(`Instagram API error: ${String(err.message ?? err.type ?? "unknown_error")} (code ${err.code ?? "?"})`); | ||
| } | ||
| return result; | ||
| } | ||
| async function callApiPost(endpoint, accessToken, body) { | ||
| const url = new URL(`${API_BASE}/${endpoint}`); | ||
| const response = await fetch(url.toString(), { | ||
| method: "POST", | ||
| headers: { | ||
| Authorization: `Bearer ${accessToken}`, | ||
| "Content-Type": "application/json", | ||
| }, | ||
| body: JSON.stringify(body), | ||
| }); | ||
| const result = (await response.json()); | ||
| if (result.error) { | ||
| const err = result.error; | ||
| throw new Error(`Instagram API error: ${String(err.message ?? err.type ?? "unknown_error")} (code ${err.code ?? "?"})`); | ||
| } | ||
| return result; | ||
| } | ||
| async function callApiDelete(endpoint, accessToken) { | ||
| const url = new URL(`${API_BASE}/${endpoint}`); | ||
| const response = await fetch(url.toString(), { | ||
| method: "DELETE", | ||
| headers: { | ||
| Authorization: `Bearer ${accessToken}`, | ||
| }, | ||
| }); | ||
| const result = (await response.json()); | ||
| if (result.error) { | ||
| const err = result.error; | ||
| throw new Error(`Instagram API error: ${String(err.message ?? err.type ?? "unknown_error")} (code ${err.code ?? "?"})`); | ||
| } | ||
| return result; | ||
| } | ||
| // ── Function Handlers ─────────────────────────────────────────────── | ||
| const setToken = (args) => { | ||
| const accessToken = String(args[0] ?? ""); | ||
| if (!accessToken) | ||
| throw new Error("Access token is required."); | ||
| accounts.set("default", { | ||
| accessToken, | ||
| igBusinessAccountId: "", | ||
| }); | ||
| return { ok: true, accountId: "default" }; | ||
| }; | ||
| const setBusinessAccount = (args) => { | ||
| const accessToken = String(args[0] ?? ""); | ||
| const igBusinessAccountId = String(args[1] ?? ""); | ||
| if (!accessToken) | ||
| throw new Error("Access token is required."); | ||
| if (!igBusinessAccountId) | ||
| throw new Error("IG Business Account ID is required."); | ||
| accounts.set("default", { | ||
| accessToken, | ||
| igBusinessAccountId, | ||
| }); | ||
| return { ok: true, accountId: "default", igBusinessAccountId }; | ||
| }; | ||
| const getProfile = async (args) => { | ||
| const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {}); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const fields = String(opts.fields ?? "id,name,username,biography,followers_count,follows_count,media_count,profile_picture_url,website"); | ||
| const result = await callApiGet(`${config.igBusinessAccountId}`, config.accessToken, { fields }); | ||
| return result; | ||
| }; | ||
| const getMedia = async (args) => { | ||
| const mediaId = String(args[0] ?? ""); | ||
| const fields = String(args[1] ?? "id,caption,media_type,media_url,timestamp,permalink,like_count,comments_count,thumbnail_url"); | ||
| if (!mediaId) | ||
| throw new Error("Media ID is required."); | ||
| const config = getConfig("default"); | ||
| const result = await callApiGet(mediaId, config.accessToken, { fields }); | ||
| return result; | ||
| }; | ||
| const listMedia = async (args) => { | ||
| const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {}); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const params = { | ||
| fields: String(opts.fields ?? "id,caption,media_type,media_url,timestamp,permalink,like_count,comments_count"), | ||
| }; | ||
| if (opts.limit) | ||
| params.limit = String(opts.limit); | ||
| if (opts.after) | ||
| params.after = String(opts.after); | ||
| if (opts.before) | ||
| params.before = String(opts.before); | ||
| const result = await callApiGet(`${config.igBusinessAccountId}/media`, config.accessToken, params); | ||
| return result; | ||
| }; | ||
| const createMediaContainer = async (args) => { | ||
| const imageUrl = String(args[0] ?? ""); | ||
| const caption = String(args[1] ?? ""); | ||
| const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {}); | ||
| if (!imageUrl) | ||
| throw new Error("Image URL is required."); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const body = { | ||
| image_url: imageUrl, | ||
| access_token: config.accessToken, | ||
| }; | ||
| if (caption) | ||
| body.caption = caption; | ||
| if (opts.locationId) | ||
| body.location_id = String(opts.locationId); | ||
| if (opts.userTags) | ||
| body.user_tags = opts.userTags; | ||
| if (opts.isCarouselItem) | ||
| body.is_carousel_item = true; | ||
| const result = await callApiPost(`${config.igBusinessAccountId}/media`, config.accessToken, body); | ||
| return result; | ||
| }; | ||
| const createVideoContainer = async (args) => { | ||
| const videoUrl = String(args[0] ?? ""); | ||
| const caption = String(args[1] ?? ""); | ||
| const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {}); | ||
| if (!videoUrl) | ||
| throw new Error("Video URL is required."); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const mediaType = String(opts.mediaType ?? "REELS"); | ||
| const body = { | ||
| video_url: videoUrl, | ||
| media_type: mediaType, | ||
| access_token: config.accessToken, | ||
| }; | ||
| if (caption) | ||
| body.caption = caption; | ||
| if (opts.coverUrl) | ||
| body.cover_url = String(opts.coverUrl); | ||
| if (opts.thumbOffset) | ||
| body.thumb_offset = Number(opts.thumbOffset); | ||
| if (opts.locationId) | ||
| body.location_id = String(opts.locationId); | ||
| if (opts.isCarouselItem) | ||
| body.is_carousel_item = true; | ||
| if (opts.shareToFeed !== undefined) | ||
| body.share_to_feed = Boolean(opts.shareToFeed); | ||
| const result = await callApiPost(`${config.igBusinessAccountId}/media`, config.accessToken, body); | ||
| return result; | ||
| }; | ||
| const createCarouselContainer = async (args) => { | ||
| const children = Array.isArray(args[0]) ? args[0].map(String) : []; | ||
| const caption = String(args[1] ?? ""); | ||
| if (children.length < 2) | ||
| throw new Error("At least 2 child container IDs are required for a carousel."); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const body = { | ||
| media_type: "CAROUSEL", | ||
| children: children.join(","), | ||
| access_token: config.accessToken, | ||
| }; | ||
| if (caption) | ||
| body.caption = caption; | ||
| const result = await callApiPost(`${config.igBusinessAccountId}/media`, config.accessToken, body); | ||
| return result; | ||
| }; | ||
| const publishMedia = async (args) => { | ||
| const containerId = String(args[0] ?? ""); | ||
| if (!containerId) | ||
| throw new Error("Container ID is required."); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const body = { | ||
| creation_id: containerId, | ||
| access_token: config.accessToken, | ||
| }; | ||
| const result = await callApiPost(`${config.igBusinessAccountId}/media_publish`, config.accessToken, body); | ||
| return result; | ||
| }; | ||
| const getMediaInsights = async (args) => { | ||
| const mediaId = String(args[0] ?? ""); | ||
| const metrics = String(args[1] ?? "impressions,reach,engagement,saved"); | ||
| if (!mediaId) | ||
| throw new Error("Media ID is required."); | ||
| const config = getConfig("default"); | ||
| const result = await callApiGet(`${mediaId}/insights`, config.accessToken, { metric: metrics }); | ||
| return result; | ||
| }; | ||
| const getAccountInsights = async (args) => { | ||
| const metrics = String(args[0] ?? "impressions,reach,follower_count"); | ||
| const period = String(args[1] ?? "day"); | ||
| const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {}); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const params = { | ||
| metric: metrics, | ||
| period, | ||
| }; | ||
| if (opts.since) | ||
| params.since = String(opts.since); | ||
| if (opts.until) | ||
| params.until = String(opts.until); | ||
| const result = await callApiGet(`${config.igBusinessAccountId}/insights`, config.accessToken, params); | ||
| return result; | ||
| }; | ||
| const getComments = async (args) => { | ||
| const mediaId = String(args[0] ?? ""); | ||
| const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {}); | ||
| if (!mediaId) | ||
| throw new Error("Media ID is required."); | ||
| const config = getConfig("default"); | ||
| const params = { | ||
| fields: String(opts.fields ?? "id,text,timestamp,username,like_count,replies"), | ||
| }; | ||
| if (opts.limit) | ||
| params.limit = String(opts.limit); | ||
| if (opts.after) | ||
| params.after = String(opts.after); | ||
| const result = await callApiGet(`${mediaId}/comments`, config.accessToken, params); | ||
| return result; | ||
| }; | ||
| const replyToComment = async (args) => { | ||
| const commentId = String(args[0] ?? ""); | ||
| const message = String(args[1] ?? ""); | ||
| if (!commentId) | ||
| throw new Error("Comment ID is required."); | ||
| if (!message) | ||
| throw new Error("Message is required."); | ||
| const config = getConfig("default"); | ||
| const body = { | ||
| message, | ||
| access_token: config.accessToken, | ||
| }; | ||
| const result = await callApiPost(`${commentId}/replies`, config.accessToken, body); | ||
| return result; | ||
| }; | ||
| const deleteComment = async (args) => { | ||
| const commentId = String(args[0] ?? ""); | ||
| if (!commentId) | ||
| throw new Error("Comment ID is required."); | ||
| const config = getConfig("default"); | ||
| await callApiDelete(commentId, config.accessToken); | ||
| return { ok: true, commentId }; | ||
| }; | ||
| const getStories = async (args) => { | ||
| const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {}); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const params = { | ||
| fields: String(opts.fields ?? "id,media_type,media_url,timestamp,permalink"), | ||
| }; | ||
| const result = await callApiGet(`${config.igBusinessAccountId}/stories`, config.accessToken, params); | ||
| return result; | ||
| }; | ||
| const getHashtag = async (args) => { | ||
| const hashtagName = String(args[0] ?? ""); | ||
| if (!hashtagName) | ||
| throw new Error("Hashtag name is required."); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const result = await callApiGet("ig_hashtag_search", config.accessToken, { | ||
| q: hashtagName, | ||
| user_id: config.igBusinessAccountId, | ||
| }); | ||
| return result; | ||
| }; | ||
| const getHashtagMedia = async (args) => { | ||
| const hashtagId = String(args[0] ?? ""); | ||
| const type = String(args[1] ?? "top_media"); | ||
| const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {}); | ||
| if (!hashtagId) | ||
| throw new Error("Hashtag ID is required."); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const edgeType = type === "recent_media" ? "recent_media" : "top_media"; | ||
| const params = { | ||
| user_id: config.igBusinessAccountId, | ||
| fields: String(opts.fields ?? "id,caption,media_type,media_url,permalink,timestamp,like_count,comments_count"), | ||
| }; | ||
| if (opts.limit) | ||
| params.limit = String(opts.limit); | ||
| if (opts.after) | ||
| params.after = String(opts.after); | ||
| const result = await callApiGet(`${hashtagId}/${edgeType}`, config.accessToken, params); | ||
| return result; | ||
| }; | ||
| const getMentions = async (args) => { | ||
| const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {}); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const params = { | ||
| fields: String(opts.fields ?? "id,caption,media_type,media_url,permalink,timestamp"), | ||
| }; | ||
| if (opts.limit) | ||
| params.limit = String(opts.limit); | ||
| if (opts.after) | ||
| params.after = String(opts.after); | ||
| const result = await callApiGet(`${config.igBusinessAccountId}/tags`, config.accessToken, params); | ||
| return result; | ||
| }; | ||
| const sendMessage = async (args) => { | ||
| const recipientId = String(args[0] ?? ""); | ||
| const message = String(args[1] ?? ""); | ||
| if (!recipientId) | ||
| throw new Error("Recipient ID is required."); | ||
| if (!message) | ||
| throw new Error("Message is required."); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const body = { | ||
| recipient: { id: recipientId }, | ||
| message: { text: message }, | ||
| access_token: config.accessToken, | ||
| }; | ||
| const result = await callApiPost(`${config.igBusinessAccountId}/messages`, config.accessToken, body); | ||
| return result; | ||
| }; | ||
| const getConversations = async (args) => { | ||
| const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {}); | ||
| const config = getConfig("default"); | ||
| if (!config.igBusinessAccountId) { | ||
| throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first."); | ||
| } | ||
| const params = { | ||
| platform: "instagram", | ||
| fields: String(opts.fields ?? "id,updated_time,participants,messages"), | ||
| }; | ||
| if (opts.limit) | ||
| params.limit = String(opts.limit); | ||
| if (opts.after) | ||
| params.after = String(opts.after); | ||
| const result = await callApiGet(`${config.igBusinessAccountId}/conversations`, config.accessToken, params); | ||
| return result; | ||
| }; | ||
| const getMessages = async (args) => { | ||
| const conversationId = String(args[0] ?? ""); | ||
| const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {}); | ||
| if (!conversationId) | ||
| throw new Error("Conversation ID is required."); | ||
| const config = getConfig("default"); | ||
| const params = { | ||
| fields: String(opts.fields ?? "id,message,from,to,created_time"), | ||
| }; | ||
| if (opts.limit) | ||
| params.limit = String(opts.limit); | ||
| if (opts.after) | ||
| params.after = String(opts.after); | ||
| const result = await callApiGet(`${conversationId}/messages`, config.accessToken, params); | ||
| return result; | ||
| }; | ||
| // ── Exports ───────────────────────────────────────────────────────── | ||
| export const InstagramFunctions = { | ||
| setToken, | ||
| setBusinessAccount, | ||
| getProfile, | ||
| getMedia, | ||
| listMedia, | ||
| createMediaContainer, | ||
| createVideoContainer, | ||
| createCarouselContainer, | ||
| publishMedia, | ||
| getMediaInsights, | ||
| getAccountInsights, | ||
| getComments, | ||
| replyToComment, | ||
| deleteComment, | ||
| getStories, | ||
| getHashtag, | ||
| getHashtagMedia, | ||
| getMentions, | ||
| sendMessage, | ||
| getConversations, | ||
| getMessages, | ||
| }; | ||
| export const InstagramFunctionMetadata = { | ||
| setToken: { | ||
| description: "Store a long-lived Instagram access token for API calls", | ||
| parameters: [ | ||
| { name: "accessToken", dataType: "string", description: "Long-lived access token from Meta/Facebook", formInputType: "text", required: true }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ok, accountId}", | ||
| example: 'instagram.setToken "EAAG..."', | ||
| }, | ||
| setBusinessAccount: { | ||
| description: "Store access token and IG Business Account ID for full API access", | ||
| parameters: [ | ||
| { name: "accessToken", dataType: "string", description: "Long-lived access token from Meta/Facebook", formInputType: "text", required: true }, | ||
| { name: "igBusinessAccountId", dataType: "string", description: "Instagram Business Account ID (numeric)", formInputType: "text", required: true }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ok, accountId, igBusinessAccountId}", | ||
| example: 'instagram.setBusinessAccount "EAAG..." "17841400123456"', | ||
| }, | ||
| getProfile: { | ||
| description: "Get authenticated user's Instagram profile (id, username, biography, followers, media count, etc.)", | ||
| parameters: [ | ||
| { name: "options", dataType: "object", description: "{fields?: string} - comma-separated fields to retrieve", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{id, name, username, biography, followers_count, follows_count, media_count, ...}", | ||
| example: 'instagram.getProfile', | ||
| }, | ||
| getMedia: { | ||
| description: "Get details of a specific media item by ID", | ||
| parameters: [ | ||
| { name: "mediaId", dataType: "string", description: "Media ID to retrieve", formInputType: "text", required: true }, | ||
| { name: "fields", dataType: "string", description: "Comma-separated fields (default: id,caption,media_type,media_url,timestamp,permalink,like_count,comments_count)", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{id, caption, media_type, media_url, timestamp, permalink, like_count, comments_count, ...}", | ||
| example: 'instagram.getMedia "17895695668004550"', | ||
| }, | ||
| listMedia: { | ||
| description: "List the authenticated user's media posts with pagination", | ||
| parameters: [ | ||
| { name: "options", dataType: "object", description: "{limit?, after?, before?, fields?}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [...media], paging: {cursors, next, previous}}", | ||
| example: 'instagram.listMedia {"limit": 10}', | ||
| }, | ||
| createMediaContainer: { | ||
| description: "Create a media container for an image post (returns container ID for publishing)", | ||
| parameters: [ | ||
| { name: "imageUrl", dataType: "string", description: "Public URL of the image to post", formInputType: "text", required: true }, | ||
| { name: "caption", dataType: "string", description: "Post caption text", formInputType: "textarea", required: false }, | ||
| { name: "options", dataType: "object", description: "{locationId?, userTags?, isCarouselItem?}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{id} - container ID for use with publishMedia", | ||
| example: 'instagram.createMediaContainer "https://example.com/photo.jpg" "Beautiful sunset! #nature"', | ||
| }, | ||
| createVideoContainer: { | ||
| description: "Create a media container for a video or Reel post", | ||
| parameters: [ | ||
| { name: "videoUrl", dataType: "string", description: "Public URL of the video", formInputType: "text", required: true }, | ||
| { name: "caption", dataType: "string", description: "Post caption text", formInputType: "textarea", required: false }, | ||
| { name: "options", dataType: "object", description: "{mediaType?: 'REELS'|'VIDEO', coverUrl?, thumbOffset?, locationId?, isCarouselItem?, shareToFeed?}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{id} - container ID for use with publishMedia", | ||
| example: 'instagram.createVideoContainer "https://example.com/video.mp4" "Check this out!" {"mediaType": "REELS"}', | ||
| }, | ||
| createCarouselContainer: { | ||
| description: "Create a carousel container from multiple child container IDs", | ||
| parameters: [ | ||
| { name: "children", dataType: "array", description: "Array of child container IDs (minimum 2)", formInputType: "json", required: true }, | ||
| { name: "caption", dataType: "string", description: "Carousel caption text", formInputType: "textarea", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{id} - carousel container ID for use with publishMedia", | ||
| example: 'instagram.createCarouselContainer ["17889615691123456", "17889615691123457"] "Photo dump!"', | ||
| }, | ||
| publishMedia: { | ||
| description: "Publish a previously created media container (image, video, or carousel)", | ||
| parameters: [ | ||
| { name: "containerId", dataType: "string", description: "Container ID from createMediaContainer, createVideoContainer, or createCarouselContainer", formInputType: "text", required: true }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{id} - published media ID", | ||
| example: 'instagram.publishMedia "17889615691123456"', | ||
| }, | ||
| getMediaInsights: { | ||
| description: "Get insights/analytics for a specific media item", | ||
| parameters: [ | ||
| { name: "mediaId", dataType: "string", description: "Media ID to get insights for", formInputType: "text", required: true }, | ||
| { name: "metrics", dataType: "string", description: "Comma-separated metrics (default: impressions,reach,engagement,saved)", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [{name, period, values, title, description, id}]}", | ||
| example: 'instagram.getMediaInsights "17895695668004550" "impressions,reach,engagement,saved"', | ||
| }, | ||
| getAccountInsights: { | ||
| description: "Get account-level insights (impressions, reach, follower_count, etc.)", | ||
| parameters: [ | ||
| { name: "metrics", dataType: "string", description: "Comma-separated metrics (e.g. impressions,reach,follower_count)", formInputType: "text", required: true }, | ||
| { name: "period", dataType: "string", description: "Time period: day, week, days_28, month, lifetime", formInputType: "select", required: true }, | ||
| { name: "options", dataType: "object", description: "{since?: unix_timestamp, until?: unix_timestamp}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [{name, period, values, title, description}]}", | ||
| example: 'instagram.getAccountInsights "impressions,reach,follower_count" "day"', | ||
| }, | ||
| getComments: { | ||
| description: "List comments on a media post", | ||
| parameters: [ | ||
| { name: "mediaId", dataType: "string", description: "Media ID to list comments for", formInputType: "text", required: true }, | ||
| { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [{id, text, timestamp, username, like_count}], paging}", | ||
| example: 'instagram.getComments "17895695668004550" {"limit": 25}', | ||
| }, | ||
| replyToComment: { | ||
| description: "Reply to a specific comment on a media post", | ||
| parameters: [ | ||
| { name: "commentId", dataType: "string", description: "Comment ID to reply to", formInputType: "text", required: true }, | ||
| { name: "message", dataType: "string", description: "Reply text", formInputType: "text", required: true }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{id} - reply comment ID", | ||
| example: 'instagram.replyToComment "17858893269123456" "Thank you!"', | ||
| }, | ||
| deleteComment: { | ||
| description: "Delete or hide a comment by ID", | ||
| parameters: [ | ||
| { name: "commentId", dataType: "string", description: "Comment ID to delete", formInputType: "text", required: true }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{ok, commentId}", | ||
| example: 'instagram.deleteComment "17858893269123456"', | ||
| }, | ||
| getStories: { | ||
| description: "Get the authenticated user's currently active stories", | ||
| parameters: [ | ||
| { name: "options", dataType: "object", description: "{fields?: string}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [{id, media_type, media_url, timestamp, permalink}]}", | ||
| example: 'instagram.getStories', | ||
| }, | ||
| getHashtag: { | ||
| description: "Search for a hashtag ID by name", | ||
| parameters: [ | ||
| { name: "hashtagName", dataType: "string", description: "Hashtag name without # (e.g. 'travel')", formInputType: "text", required: true }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [{id}]}", | ||
| example: 'instagram.getHashtag "travel"', | ||
| }, | ||
| getHashtagMedia: { | ||
| description: "Get top or recent media for a hashtag", | ||
| parameters: [ | ||
| { name: "hashtagId", dataType: "string", description: "Hashtag ID from getHashtag", formInputType: "text", required: true }, | ||
| { name: "type", dataType: "string", description: "'top_media' or 'recent_media' (default: top_media)", formInputType: "select", required: false }, | ||
| { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [...media], paging}", | ||
| example: 'instagram.getHashtagMedia "17843853986012965" "top_media" {"limit": 20}', | ||
| }, | ||
| getMentions: { | ||
| description: "Get media posts where the authenticated user is tagged/mentioned", | ||
| parameters: [ | ||
| { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [...media], paging}", | ||
| example: 'instagram.getMentions {"limit": 10}', | ||
| }, | ||
| sendMessage: { | ||
| description: "Send a direct message to a user via Instagram Messaging API", | ||
| parameters: [ | ||
| { name: "recipientId", dataType: "string", description: "Instagram-scoped ID of the recipient", formInputType: "text", required: true }, | ||
| { name: "message", dataType: "string", description: "Message text to send", formInputType: "text", required: true }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{recipient_id, message_id}", | ||
| example: 'instagram.sendMessage "17841400123456" "Hello from RobinPath!"', | ||
| }, | ||
| getConversations: { | ||
| description: "List DM conversations for the authenticated account", | ||
| parameters: [ | ||
| { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [{id, updated_time, participants, messages}], paging}", | ||
| example: 'instagram.getConversations {"limit": 10}', | ||
| }, | ||
| getMessages: { | ||
| description: "Get messages within a specific DM conversation", | ||
| parameters: [ | ||
| { name: "conversationId", dataType: "string", description: "Conversation ID from getConversations", formInputType: "text", required: true }, | ||
| { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false }, | ||
| ], | ||
| returnType: "object", | ||
| returnDescription: "{data: [{id, message, from, to, created_time}], paging}", | ||
| example: 'instagram.getMessages "t_1234567890" {"limit": 20}', | ||
| }, | ||
| }; | ||
| export const InstagramModuleMetadata = { | ||
| description: "Instagram Graph API client for managing posts, stories, comments, insights, hashtags, mentions, and direct messages via Meta/Facebook platform", | ||
| methods: Object.keys(InstagramFunctions), | ||
| category: "social", | ||
| }; | ||
| //# sourceMappingURL=instagram.js.map |
| {"version":3,"file":"instagram.js","sourceRoot":"","sources":["../src/instagram.ts"],"names":[],"mappings":"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"} |
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.
Found 1 instance in 1 package
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.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
No License Found
LicenseLicense information could not be found.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
0
-100%1
-50%2
-50%5444
-92.2%2
-80%0
-100%