@robinpath/instagram 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,115 @@
1
+ # @robinpath/instagram
2
+
3
+ > Instagram module for RobinPath.
4
+
5
+ ![Category](https://img.shields.io/badge/category-Social-media-blue) ![Functions](https://img.shields.io/badge/functions-21-green) ![Auth](https://img.shields.io/badge/auth-Bearer%20Token-orange) ![License](https://img.shields.io/badge/license-MIT-brightgreen)
6
+
7
+ ## Why use this module?
8
+
9
+ The `instagram` module lets you:
10
+
11
+ - Get authenticated user's Instagram profile (id, username, biography, followers, media count, etc.)
12
+ - Get details of a specific media item by ID
13
+ - List the authenticated user's media posts with pagination
14
+ - Create a media container for an image post (returns container ID for publishing)
15
+ - Create a media container for a video or Reel post
16
+
17
+ All functions are callable directly from RobinPath scripts with a simple, consistent API.
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ npm install @robinpath/instagram
23
+ ```
24
+
25
+ ## Quick Start
26
+
27
+ **1. Set up credentials**
28
+
29
+ ```robinpath
30
+ instagram.setToken "EAAG..."
31
+ ```
32
+
33
+ **2. Store access token and IG Business Account ID for full API access**
34
+
35
+ ```robinpath
36
+ instagram.setBusinessAccount "EAAG..." "17841400123456"
37
+ ```
38
+
39
+ ## Available Functions
40
+
41
+ | Function | Description |
42
+ |----------|-------------|
43
+ | `instagram.setToken` | Store a long-lived Instagram access token for API calls |
44
+ | `instagram.setBusinessAccount` | Store access token and IG Business Account ID for full API access |
45
+ | `instagram.getProfile` | Get authenticated user's Instagram profile (id, username, biography, followers, media count, etc.) |
46
+ | `instagram.getMedia` | Get details of a specific media item by ID |
47
+ | `instagram.listMedia` | List the authenticated user's media posts with pagination |
48
+ | `instagram.createMediaContainer` | Create a media container for an image post (returns container ID for publishing) |
49
+ | `instagram.createVideoContainer` | Create a media container for a video or Reel post |
50
+ | `instagram.createCarouselContainer` | Create a carousel container from multiple child container IDs |
51
+ | `instagram.publishMedia` | Publish a previously created media container (image, video, or carousel) |
52
+ | `instagram.getMediaInsights` | Get insights/analytics for a specific media item |
53
+ | `instagram.getAccountInsights` | Get account-level insights (impressions, reach, follower_count, etc.) |
54
+ | `instagram.getComments` | List comments on a media post |
55
+ | `instagram.replyToComment` | Reply to a specific comment on a media post |
56
+ | `instagram.deleteComment` | Delete or hide a comment by ID |
57
+ | `instagram.getStories` | Get the authenticated user's currently active stories |
58
+ | `instagram.getHashtag` | Search for a hashtag ID by name |
59
+ | `instagram.getHashtagMedia` | Get top or recent media for a hashtag |
60
+ | `instagram.getMentions` | Get media posts where the authenticated user is tagged/mentioned |
61
+ | `instagram.sendMessage` | Send a direct message to a user via Instagram Messaging API |
62
+ | `instagram.getConversations` | List DM conversations for the authenticated account |
63
+ | `instagram.getMessages` | Get messages within a specific DM conversation |
64
+
65
+ ## Examples
66
+
67
+ ### Store access token and IG Business Account ID for full API access
68
+
69
+ ```robinpath
70
+ instagram.setBusinessAccount "EAAG..." "17841400123456"
71
+ ```
72
+
73
+ ### Get authenticated user's Instagram profile (id, username, biography, followers, media count, etc.)
74
+
75
+ ```robinpath
76
+ instagram.getProfile
77
+ ```
78
+
79
+ ### Get details of a specific media item by ID
80
+
81
+ ```robinpath
82
+ instagram.getMedia "17895695668004550"
83
+ ```
84
+
85
+ ## Integration with RobinPath
86
+
87
+ ```typescript
88
+ import { RobinPath } from "@wiredwp/robinpath";
89
+ import Module from "@robinpath/instagram";
90
+
91
+ const rp = new RobinPath();
92
+ rp.registerModule(Module.name, Module.functions);
93
+ rp.registerModuleMeta(Module.name, Module.functionMetadata);
94
+
95
+ const result = await rp.executeScript(`
96
+ instagram.setToken "EAAG..."
97
+ instagram.setBusinessAccount "EAAG..." "17841400123456"
98
+ `);
99
+ ```
100
+
101
+ ## Full API Reference
102
+
103
+ See [MODULE.md](./MODULE.md) for complete documentation including all parameters, return types, error handling, and advanced examples.
104
+
105
+ ## Related Modules
106
+
107
+ - [`@robinpath/facebook`](../facebook) — Facebook module for complementary functionality
108
+ - [`@robinpath/twitter`](../twitter) — Twitter/X module for complementary functionality
109
+ - [`@robinpath/linkedin`](../linkedin) — LinkedIn module for complementary functionality
110
+ - [`@robinpath/tiktok`](../tiktok) — TikTok module for complementary functionality
111
+ - [`@robinpath/pinterest`](../pinterest) — Pinterest module for complementary functionality
112
+
113
+ ## License
114
+
115
+ MIT
@@ -0,0 +1,6 @@
1
+ import type { ModuleAdapter } from "@wiredwp/robinpath";
2
+ declare const InstagramModule: ModuleAdapter;
3
+ export default InstagramModule;
4
+ export { InstagramModule };
5
+ export { InstagramFunctions, InstagramFunctionMetadata, InstagramModuleMetadata } from "./instagram.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"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"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ import { InstagramFunctions, InstagramFunctionMetadata, InstagramModuleMetadata } from "./instagram.js";
2
+ const InstagramModule = {
3
+ name: "instagram",
4
+ functions: InstagramFunctions,
5
+ functionMetadata: InstagramFunctionMetadata,
6
+ moduleMetadata: InstagramModuleMetadata,
7
+ global: false,
8
+ }; // as ModuleAdapter
9
+ export default InstagramModule;
10
+ export { InstagramModule };
11
+ export { InstagramFunctions, InstagramFunctionMetadata, InstagramModuleMetadata } from "./instagram.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"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"}
@@ -0,0 +1,283 @@
1
+ import type { BuiltinHandler } from "@wiredwp/robinpath";
2
+ export declare const InstagramFunctions: Record<string, BuiltinHandler>;
3
+ export declare const InstagramFunctionMetadata: {
4
+ setToken: {
5
+ description: string;
6
+ parameters: {
7
+ name: string;
8
+ dataType: string;
9
+ description: string;
10
+ formInputType: string;
11
+ required: boolean;
12
+ }[];
13
+ returnType: string;
14
+ returnDescription: string;
15
+ example: string;
16
+ };
17
+ setBusinessAccount: {
18
+ description: string;
19
+ parameters: {
20
+ name: string;
21
+ dataType: string;
22
+ description: string;
23
+ formInputType: string;
24
+ required: boolean;
25
+ }[];
26
+ returnType: string;
27
+ returnDescription: string;
28
+ example: string;
29
+ };
30
+ getProfile: {
31
+ description: string;
32
+ parameters: {
33
+ name: string;
34
+ dataType: string;
35
+ description: string;
36
+ formInputType: string;
37
+ required: boolean;
38
+ }[];
39
+ returnType: string;
40
+ returnDescription: string;
41
+ example: string;
42
+ };
43
+ getMedia: {
44
+ description: string;
45
+ parameters: {
46
+ name: string;
47
+ dataType: string;
48
+ description: string;
49
+ formInputType: string;
50
+ required: boolean;
51
+ }[];
52
+ returnType: string;
53
+ returnDescription: string;
54
+ example: string;
55
+ };
56
+ listMedia: {
57
+ description: string;
58
+ parameters: {
59
+ name: string;
60
+ dataType: string;
61
+ description: string;
62
+ formInputType: string;
63
+ required: boolean;
64
+ }[];
65
+ returnType: string;
66
+ returnDescription: string;
67
+ example: string;
68
+ };
69
+ createMediaContainer: {
70
+ description: string;
71
+ parameters: {
72
+ name: string;
73
+ dataType: string;
74
+ description: string;
75
+ formInputType: string;
76
+ required: boolean;
77
+ }[];
78
+ returnType: string;
79
+ returnDescription: string;
80
+ example: string;
81
+ };
82
+ createVideoContainer: {
83
+ description: string;
84
+ parameters: {
85
+ name: string;
86
+ dataType: string;
87
+ description: string;
88
+ formInputType: string;
89
+ required: boolean;
90
+ }[];
91
+ returnType: string;
92
+ returnDescription: string;
93
+ example: string;
94
+ };
95
+ createCarouselContainer: {
96
+ description: string;
97
+ parameters: {
98
+ name: string;
99
+ dataType: string;
100
+ description: string;
101
+ formInputType: string;
102
+ required: boolean;
103
+ }[];
104
+ returnType: string;
105
+ returnDescription: string;
106
+ example: string;
107
+ };
108
+ publishMedia: {
109
+ description: string;
110
+ parameters: {
111
+ name: string;
112
+ dataType: string;
113
+ description: string;
114
+ formInputType: string;
115
+ required: boolean;
116
+ }[];
117
+ returnType: string;
118
+ returnDescription: string;
119
+ example: string;
120
+ };
121
+ getMediaInsights: {
122
+ description: string;
123
+ parameters: {
124
+ name: string;
125
+ dataType: string;
126
+ description: string;
127
+ formInputType: string;
128
+ required: boolean;
129
+ }[];
130
+ returnType: string;
131
+ returnDescription: string;
132
+ example: string;
133
+ };
134
+ getAccountInsights: {
135
+ description: string;
136
+ parameters: {
137
+ name: string;
138
+ dataType: string;
139
+ description: string;
140
+ formInputType: string;
141
+ required: boolean;
142
+ }[];
143
+ returnType: string;
144
+ returnDescription: string;
145
+ example: string;
146
+ };
147
+ getComments: {
148
+ description: string;
149
+ parameters: {
150
+ name: string;
151
+ dataType: string;
152
+ description: string;
153
+ formInputType: string;
154
+ required: boolean;
155
+ }[];
156
+ returnType: string;
157
+ returnDescription: string;
158
+ example: string;
159
+ };
160
+ replyToComment: {
161
+ description: string;
162
+ parameters: {
163
+ name: string;
164
+ dataType: string;
165
+ description: string;
166
+ formInputType: string;
167
+ required: boolean;
168
+ }[];
169
+ returnType: string;
170
+ returnDescription: string;
171
+ example: string;
172
+ };
173
+ deleteComment: {
174
+ description: string;
175
+ parameters: {
176
+ name: string;
177
+ dataType: string;
178
+ description: string;
179
+ formInputType: string;
180
+ required: boolean;
181
+ }[];
182
+ returnType: string;
183
+ returnDescription: string;
184
+ example: string;
185
+ };
186
+ getStories: {
187
+ description: string;
188
+ parameters: {
189
+ name: string;
190
+ dataType: string;
191
+ description: string;
192
+ formInputType: string;
193
+ required: boolean;
194
+ }[];
195
+ returnType: string;
196
+ returnDescription: string;
197
+ example: string;
198
+ };
199
+ getHashtag: {
200
+ description: string;
201
+ parameters: {
202
+ name: string;
203
+ dataType: string;
204
+ description: string;
205
+ formInputType: string;
206
+ required: boolean;
207
+ }[];
208
+ returnType: string;
209
+ returnDescription: string;
210
+ example: string;
211
+ };
212
+ getHashtagMedia: {
213
+ description: string;
214
+ parameters: {
215
+ name: string;
216
+ dataType: string;
217
+ description: string;
218
+ formInputType: string;
219
+ required: boolean;
220
+ }[];
221
+ returnType: string;
222
+ returnDescription: string;
223
+ example: string;
224
+ };
225
+ getMentions: {
226
+ description: string;
227
+ parameters: {
228
+ name: string;
229
+ dataType: string;
230
+ description: string;
231
+ formInputType: string;
232
+ required: boolean;
233
+ }[];
234
+ returnType: string;
235
+ returnDescription: string;
236
+ example: string;
237
+ };
238
+ sendMessage: {
239
+ description: string;
240
+ parameters: {
241
+ name: string;
242
+ dataType: string;
243
+ description: string;
244
+ formInputType: string;
245
+ required: boolean;
246
+ }[];
247
+ returnType: string;
248
+ returnDescription: string;
249
+ example: string;
250
+ };
251
+ getConversations: {
252
+ description: string;
253
+ parameters: {
254
+ name: string;
255
+ dataType: string;
256
+ description: string;
257
+ formInputType: string;
258
+ required: boolean;
259
+ }[];
260
+ returnType: string;
261
+ returnDescription: string;
262
+ example: string;
263
+ };
264
+ getMessages: {
265
+ description: string;
266
+ parameters: {
267
+ name: string;
268
+ dataType: string;
269
+ description: string;
270
+ formInputType: string;
271
+ required: boolean;
272
+ }[];
273
+ returnType: string;
274
+ returnDescription: string;
275
+ example: string;
276
+ };
277
+ };
278
+ export declare const InstagramModuleMetadata: {
279
+ description: string;
280
+ methods: string[];
281
+ category: string;
282
+ };
283
+ //# sourceMappingURL=instagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"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"}
@@ -0,0 +1,647 @@
1
+ const accounts = new Map();
2
+ const API_BASE = "https://graph.facebook.com/v22.0";
3
+ // ── Helper ──────────────────────────────────────────────────────────
4
+ function getConfig(accountId = "default") {
5
+ const config = accounts.get(accountId);
6
+ if (!config) {
7
+ throw new Error(`Instagram account "${accountId}" not configured. Call instagram.setToken or instagram.setBusinessAccount first.`);
8
+ }
9
+ return config;
10
+ }
11
+ async function callApi(endpoint, accessToken, method = "GET", body) {
12
+ const url = new URL(`${API_BASE}/${endpoint}`);
13
+ const headers = {
14
+ Authorization: `Bearer ${accessToken}`,
15
+ };
16
+ const fetchOptions = { method, headers };
17
+ if (body && (method === "POST" || method === "DELETE")) {
18
+ headers["Content-Type"] = "application/json";
19
+ fetchOptions.body = JSON.stringify(body);
20
+ }
21
+ const response = await fetch(url.toString(), fetchOptions);
22
+ const result = (await response.json());
23
+ if (result.error) {
24
+ const err = result.error;
25
+ throw new Error(`Instagram API error: ${String(err.message ?? err.type ?? "unknown_error")} (code ${err.code ?? "?"})`);
26
+ }
27
+ return result;
28
+ }
29
+ async function callApiGet(endpoint, accessToken, params) {
30
+ const url = new URL(`${API_BASE}/${endpoint}`);
31
+ url.searchParams.set("access_token", accessToken);
32
+ if (params) {
33
+ for (const [key, value] of Object.entries(params)) {
34
+ url.searchParams.set(key, value);
35
+ }
36
+ }
37
+ const response = await fetch(url.toString());
38
+ const result = (await response.json());
39
+ if (result.error) {
40
+ const err = result.error;
41
+ throw new Error(`Instagram API error: ${String(err.message ?? err.type ?? "unknown_error")} (code ${err.code ?? "?"})`);
42
+ }
43
+ return result;
44
+ }
45
+ async function callApiPost(endpoint, accessToken, body) {
46
+ const url = new URL(`${API_BASE}/${endpoint}`);
47
+ const response = await fetch(url.toString(), {
48
+ method: "POST",
49
+ headers: {
50
+ Authorization: `Bearer ${accessToken}`,
51
+ "Content-Type": "application/json",
52
+ },
53
+ body: JSON.stringify(body),
54
+ });
55
+ const result = (await response.json());
56
+ if (result.error) {
57
+ const err = result.error;
58
+ throw new Error(`Instagram API error: ${String(err.message ?? err.type ?? "unknown_error")} (code ${err.code ?? "?"})`);
59
+ }
60
+ return result;
61
+ }
62
+ async function callApiDelete(endpoint, accessToken) {
63
+ const url = new URL(`${API_BASE}/${endpoint}`);
64
+ const response = await fetch(url.toString(), {
65
+ method: "DELETE",
66
+ headers: {
67
+ Authorization: `Bearer ${accessToken}`,
68
+ },
69
+ });
70
+ const result = (await response.json());
71
+ if (result.error) {
72
+ const err = result.error;
73
+ throw new Error(`Instagram API error: ${String(err.message ?? err.type ?? "unknown_error")} (code ${err.code ?? "?"})`);
74
+ }
75
+ return result;
76
+ }
77
+ // ── Function Handlers ───────────────────────────────────────────────
78
+ const setToken = (args) => {
79
+ const accessToken = String(args[0] ?? "");
80
+ if (!accessToken)
81
+ throw new Error("Access token is required.");
82
+ accounts.set("default", {
83
+ accessToken,
84
+ igBusinessAccountId: "",
85
+ });
86
+ return { ok: true, accountId: "default" };
87
+ };
88
+ const setBusinessAccount = (args) => {
89
+ const accessToken = String(args[0] ?? "");
90
+ const igBusinessAccountId = String(args[1] ?? "");
91
+ if (!accessToken)
92
+ throw new Error("Access token is required.");
93
+ if (!igBusinessAccountId)
94
+ throw new Error("IG Business Account ID is required.");
95
+ accounts.set("default", {
96
+ accessToken,
97
+ igBusinessAccountId,
98
+ });
99
+ return { ok: true, accountId: "default", igBusinessAccountId };
100
+ };
101
+ const getProfile = async (args) => {
102
+ const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {});
103
+ const config = getConfig("default");
104
+ if (!config.igBusinessAccountId) {
105
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
106
+ }
107
+ const fields = String(opts.fields ?? "id,name,username,biography,followers_count,follows_count,media_count,profile_picture_url,website");
108
+ const result = await callApiGet(`${config.igBusinessAccountId}`, config.accessToken, { fields });
109
+ return result;
110
+ };
111
+ const getMedia = async (args) => {
112
+ const mediaId = String(args[0] ?? "");
113
+ const fields = String(args[1] ?? "id,caption,media_type,media_url,timestamp,permalink,like_count,comments_count,thumbnail_url");
114
+ if (!mediaId)
115
+ throw new Error("Media ID is required.");
116
+ const config = getConfig("default");
117
+ const result = await callApiGet(mediaId, config.accessToken, { fields });
118
+ return result;
119
+ };
120
+ const listMedia = async (args) => {
121
+ const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {});
122
+ const config = getConfig("default");
123
+ if (!config.igBusinessAccountId) {
124
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
125
+ }
126
+ const params = {
127
+ fields: String(opts.fields ?? "id,caption,media_type,media_url,timestamp,permalink,like_count,comments_count"),
128
+ };
129
+ if (opts.limit)
130
+ params.limit = String(opts.limit);
131
+ if (opts.after)
132
+ params.after = String(opts.after);
133
+ if (opts.before)
134
+ params.before = String(opts.before);
135
+ const result = await callApiGet(`${config.igBusinessAccountId}/media`, config.accessToken, params);
136
+ return result;
137
+ };
138
+ const createMediaContainer = async (args) => {
139
+ const imageUrl = String(args[0] ?? "");
140
+ const caption = String(args[1] ?? "");
141
+ const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
142
+ if (!imageUrl)
143
+ throw new Error("Image URL is required.");
144
+ const config = getConfig("default");
145
+ if (!config.igBusinessAccountId) {
146
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
147
+ }
148
+ const body = {
149
+ image_url: imageUrl,
150
+ access_token: config.accessToken,
151
+ };
152
+ if (caption)
153
+ body.caption = caption;
154
+ if (opts.locationId)
155
+ body.location_id = String(opts.locationId);
156
+ if (opts.userTags)
157
+ body.user_tags = opts.userTags;
158
+ if (opts.isCarouselItem)
159
+ body.is_carousel_item = true;
160
+ const result = await callApiPost(`${config.igBusinessAccountId}/media`, config.accessToken, body);
161
+ return result;
162
+ };
163
+ const createVideoContainer = async (args) => {
164
+ const videoUrl = String(args[0] ?? "");
165
+ const caption = String(args[1] ?? "");
166
+ const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
167
+ if (!videoUrl)
168
+ throw new Error("Video URL is required.");
169
+ const config = getConfig("default");
170
+ if (!config.igBusinessAccountId) {
171
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
172
+ }
173
+ const mediaType = String(opts.mediaType ?? "REELS");
174
+ const body = {
175
+ video_url: videoUrl,
176
+ media_type: mediaType,
177
+ access_token: config.accessToken,
178
+ };
179
+ if (caption)
180
+ body.caption = caption;
181
+ if (opts.coverUrl)
182
+ body.cover_url = String(opts.coverUrl);
183
+ if (opts.thumbOffset)
184
+ body.thumb_offset = Number(opts.thumbOffset);
185
+ if (opts.locationId)
186
+ body.location_id = String(opts.locationId);
187
+ if (opts.isCarouselItem)
188
+ body.is_carousel_item = true;
189
+ if (opts.shareToFeed !== undefined)
190
+ body.share_to_feed = Boolean(opts.shareToFeed);
191
+ const result = await callApiPost(`${config.igBusinessAccountId}/media`, config.accessToken, body);
192
+ return result;
193
+ };
194
+ const createCarouselContainer = async (args) => {
195
+ const children = Array.isArray(args[0]) ? args[0].map(String) : [];
196
+ const caption = String(args[1] ?? "");
197
+ if (children.length < 2)
198
+ throw new Error("At least 2 child container IDs are required for a carousel.");
199
+ const config = getConfig("default");
200
+ if (!config.igBusinessAccountId) {
201
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
202
+ }
203
+ const body = {
204
+ media_type: "CAROUSEL",
205
+ children: children.join(","),
206
+ access_token: config.accessToken,
207
+ };
208
+ if (caption)
209
+ body.caption = caption;
210
+ const result = await callApiPost(`${config.igBusinessAccountId}/media`, config.accessToken, body);
211
+ return result;
212
+ };
213
+ const publishMedia = async (args) => {
214
+ const containerId = String(args[0] ?? "");
215
+ if (!containerId)
216
+ throw new Error("Container ID is required.");
217
+ const config = getConfig("default");
218
+ if (!config.igBusinessAccountId) {
219
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
220
+ }
221
+ const body = {
222
+ creation_id: containerId,
223
+ access_token: config.accessToken,
224
+ };
225
+ const result = await callApiPost(`${config.igBusinessAccountId}/media_publish`, config.accessToken, body);
226
+ return result;
227
+ };
228
+ const getMediaInsights = async (args) => {
229
+ const mediaId = String(args[0] ?? "");
230
+ const metrics = String(args[1] ?? "impressions,reach,engagement,saved");
231
+ if (!mediaId)
232
+ throw new Error("Media ID is required.");
233
+ const config = getConfig("default");
234
+ const result = await callApiGet(`${mediaId}/insights`, config.accessToken, { metric: metrics });
235
+ return result;
236
+ };
237
+ const getAccountInsights = async (args) => {
238
+ const metrics = String(args[0] ?? "impressions,reach,follower_count");
239
+ const period = String(args[1] ?? "day");
240
+ const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
241
+ const config = getConfig("default");
242
+ if (!config.igBusinessAccountId) {
243
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
244
+ }
245
+ const params = {
246
+ metric: metrics,
247
+ period,
248
+ };
249
+ if (opts.since)
250
+ params.since = String(opts.since);
251
+ if (opts.until)
252
+ params.until = String(opts.until);
253
+ const result = await callApiGet(`${config.igBusinessAccountId}/insights`, config.accessToken, params);
254
+ return result;
255
+ };
256
+ const getComments = async (args) => {
257
+ const mediaId = String(args[0] ?? "");
258
+ const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
259
+ if (!mediaId)
260
+ throw new Error("Media ID is required.");
261
+ const config = getConfig("default");
262
+ const params = {
263
+ fields: String(opts.fields ?? "id,text,timestamp,username,like_count,replies"),
264
+ };
265
+ if (opts.limit)
266
+ params.limit = String(opts.limit);
267
+ if (opts.after)
268
+ params.after = String(opts.after);
269
+ const result = await callApiGet(`${mediaId}/comments`, config.accessToken, params);
270
+ return result;
271
+ };
272
+ const replyToComment = async (args) => {
273
+ const commentId = String(args[0] ?? "");
274
+ const message = String(args[1] ?? "");
275
+ if (!commentId)
276
+ throw new Error("Comment ID is required.");
277
+ if (!message)
278
+ throw new Error("Message is required.");
279
+ const config = getConfig("default");
280
+ const body = {
281
+ message,
282
+ access_token: config.accessToken,
283
+ };
284
+ const result = await callApiPost(`${commentId}/replies`, config.accessToken, body);
285
+ return result;
286
+ };
287
+ const deleteComment = async (args) => {
288
+ const commentId = String(args[0] ?? "");
289
+ if (!commentId)
290
+ throw new Error("Comment ID is required.");
291
+ const config = getConfig("default");
292
+ await callApiDelete(commentId, config.accessToken);
293
+ return { ok: true, commentId };
294
+ };
295
+ const getStories = async (args) => {
296
+ const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {});
297
+ const config = getConfig("default");
298
+ if (!config.igBusinessAccountId) {
299
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
300
+ }
301
+ const params = {
302
+ fields: String(opts.fields ?? "id,media_type,media_url,timestamp,permalink"),
303
+ };
304
+ const result = await callApiGet(`${config.igBusinessAccountId}/stories`, config.accessToken, params);
305
+ return result;
306
+ };
307
+ const getHashtag = async (args) => {
308
+ const hashtagName = String(args[0] ?? "");
309
+ if (!hashtagName)
310
+ throw new Error("Hashtag name is required.");
311
+ const config = getConfig("default");
312
+ if (!config.igBusinessAccountId) {
313
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
314
+ }
315
+ const result = await callApiGet("ig_hashtag_search", config.accessToken, {
316
+ q: hashtagName,
317
+ user_id: config.igBusinessAccountId,
318
+ });
319
+ return result;
320
+ };
321
+ const getHashtagMedia = async (args) => {
322
+ const hashtagId = String(args[0] ?? "");
323
+ const type = String(args[1] ?? "top_media");
324
+ const opts = (typeof args[2] === "object" && args[2] !== null ? args[2] : {});
325
+ if (!hashtagId)
326
+ throw new Error("Hashtag ID is required.");
327
+ const config = getConfig("default");
328
+ if (!config.igBusinessAccountId) {
329
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
330
+ }
331
+ const edgeType = type === "recent_media" ? "recent_media" : "top_media";
332
+ const params = {
333
+ user_id: config.igBusinessAccountId,
334
+ fields: String(opts.fields ?? "id,caption,media_type,media_url,permalink,timestamp,like_count,comments_count"),
335
+ };
336
+ if (opts.limit)
337
+ params.limit = String(opts.limit);
338
+ if (opts.after)
339
+ params.after = String(opts.after);
340
+ const result = await callApiGet(`${hashtagId}/${edgeType}`, config.accessToken, params);
341
+ return result;
342
+ };
343
+ const getMentions = async (args) => {
344
+ const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {});
345
+ const config = getConfig("default");
346
+ if (!config.igBusinessAccountId) {
347
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
348
+ }
349
+ const params = {
350
+ fields: String(opts.fields ?? "id,caption,media_type,media_url,permalink,timestamp"),
351
+ };
352
+ if (opts.limit)
353
+ params.limit = String(opts.limit);
354
+ if (opts.after)
355
+ params.after = String(opts.after);
356
+ const result = await callApiGet(`${config.igBusinessAccountId}/tags`, config.accessToken, params);
357
+ return result;
358
+ };
359
+ const sendMessage = async (args) => {
360
+ const recipientId = String(args[0] ?? "");
361
+ const message = String(args[1] ?? "");
362
+ if (!recipientId)
363
+ throw new Error("Recipient ID is required.");
364
+ if (!message)
365
+ throw new Error("Message is required.");
366
+ const config = getConfig("default");
367
+ if (!config.igBusinessAccountId) {
368
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
369
+ }
370
+ const body = {
371
+ recipient: { id: recipientId },
372
+ message: { text: message },
373
+ access_token: config.accessToken,
374
+ };
375
+ const result = await callApiPost(`${config.igBusinessAccountId}/messages`, config.accessToken, body);
376
+ return result;
377
+ };
378
+ const getConversations = async (args) => {
379
+ const opts = (typeof args[0] === "object" && args[0] !== null ? args[0] : {});
380
+ const config = getConfig("default");
381
+ if (!config.igBusinessAccountId) {
382
+ throw new Error("IG Business Account ID is required. Call instagram.setBusinessAccount first.");
383
+ }
384
+ const params = {
385
+ platform: "instagram",
386
+ fields: String(opts.fields ?? "id,updated_time,participants,messages"),
387
+ };
388
+ if (opts.limit)
389
+ params.limit = String(opts.limit);
390
+ if (opts.after)
391
+ params.after = String(opts.after);
392
+ const result = await callApiGet(`${config.igBusinessAccountId}/conversations`, config.accessToken, params);
393
+ return result;
394
+ };
395
+ const getMessages = async (args) => {
396
+ const conversationId = String(args[0] ?? "");
397
+ const opts = (typeof args[1] === "object" && args[1] !== null ? args[1] : {});
398
+ if (!conversationId)
399
+ throw new Error("Conversation ID is required.");
400
+ const config = getConfig("default");
401
+ const params = {
402
+ fields: String(opts.fields ?? "id,message,from,to,created_time"),
403
+ };
404
+ if (opts.limit)
405
+ params.limit = String(opts.limit);
406
+ if (opts.after)
407
+ params.after = String(opts.after);
408
+ const result = await callApiGet(`${conversationId}/messages`, config.accessToken, params);
409
+ return result;
410
+ };
411
+ // ── Exports ─────────────────────────────────────────────────────────
412
+ export const InstagramFunctions = {
413
+ setToken,
414
+ setBusinessAccount,
415
+ getProfile,
416
+ getMedia,
417
+ listMedia,
418
+ createMediaContainer,
419
+ createVideoContainer,
420
+ createCarouselContainer,
421
+ publishMedia,
422
+ getMediaInsights,
423
+ getAccountInsights,
424
+ getComments,
425
+ replyToComment,
426
+ deleteComment,
427
+ getStories,
428
+ getHashtag,
429
+ getHashtagMedia,
430
+ getMentions,
431
+ sendMessage,
432
+ getConversations,
433
+ getMessages,
434
+ };
435
+ export const InstagramFunctionMetadata = {
436
+ setToken: {
437
+ description: "Store a long-lived Instagram access token for API calls",
438
+ parameters: [
439
+ { name: "accessToken", dataType: "string", description: "Long-lived access token from Meta/Facebook", formInputType: "text", required: true },
440
+ ],
441
+ returnType: "object",
442
+ returnDescription: "{ok, accountId}",
443
+ example: 'instagram.setToken "EAAG..."',
444
+ },
445
+ setBusinessAccount: {
446
+ description: "Store access token and IG Business Account ID for full API access",
447
+ parameters: [
448
+ { name: "accessToken", dataType: "string", description: "Long-lived access token from Meta/Facebook", formInputType: "text", required: true },
449
+ { name: "igBusinessAccountId", dataType: "string", description: "Instagram Business Account ID (numeric)", formInputType: "text", required: true },
450
+ ],
451
+ returnType: "object",
452
+ returnDescription: "{ok, accountId, igBusinessAccountId}",
453
+ example: 'instagram.setBusinessAccount "EAAG..." "17841400123456"',
454
+ },
455
+ getProfile: {
456
+ description: "Get authenticated user's Instagram profile (id, username, biography, followers, media count, etc.)",
457
+ parameters: [
458
+ { name: "options", dataType: "object", description: "{fields?: string} - comma-separated fields to retrieve", formInputType: "text", required: false },
459
+ ],
460
+ returnType: "object",
461
+ returnDescription: "{id, name, username, biography, followers_count, follows_count, media_count, ...}",
462
+ example: 'instagram.getProfile',
463
+ },
464
+ getMedia: {
465
+ description: "Get details of a specific media item by ID",
466
+ parameters: [
467
+ { name: "mediaId", dataType: "string", description: "Media ID to retrieve", formInputType: "text", required: true },
468
+ { 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 },
469
+ ],
470
+ returnType: "object",
471
+ returnDescription: "{id, caption, media_type, media_url, timestamp, permalink, like_count, comments_count, ...}",
472
+ example: 'instagram.getMedia "17895695668004550"',
473
+ },
474
+ listMedia: {
475
+ description: "List the authenticated user's media posts with pagination",
476
+ parameters: [
477
+ { name: "options", dataType: "object", description: "{limit?, after?, before?, fields?}", formInputType: "text", required: false },
478
+ ],
479
+ returnType: "object",
480
+ returnDescription: "{data: [...media], paging: {cursors, next, previous}}",
481
+ example: 'instagram.listMedia {"limit": 10}',
482
+ },
483
+ createMediaContainer: {
484
+ description: "Create a media container for an image post (returns container ID for publishing)",
485
+ parameters: [
486
+ { name: "imageUrl", dataType: "string", description: "Public URL of the image to post", formInputType: "text", required: true },
487
+ { name: "caption", dataType: "string", description: "Post caption text", formInputType: "textarea", required: false },
488
+ { name: "options", dataType: "object", description: "{locationId?, userTags?, isCarouselItem?}", formInputType: "text", required: false },
489
+ ],
490
+ returnType: "object",
491
+ returnDescription: "{id} - container ID for use with publishMedia",
492
+ example: 'instagram.createMediaContainer "https://example.com/photo.jpg" "Beautiful sunset! #nature"',
493
+ },
494
+ createVideoContainer: {
495
+ description: "Create a media container for a video or Reel post",
496
+ parameters: [
497
+ { name: "videoUrl", dataType: "string", description: "Public URL of the video", formInputType: "text", required: true },
498
+ { name: "caption", dataType: "string", description: "Post caption text", formInputType: "textarea", required: false },
499
+ { name: "options", dataType: "object", description: "{mediaType?: 'REELS'|'VIDEO', coverUrl?, thumbOffset?, locationId?, isCarouselItem?, shareToFeed?}", formInputType: "text", required: false },
500
+ ],
501
+ returnType: "object",
502
+ returnDescription: "{id} - container ID for use with publishMedia",
503
+ example: 'instagram.createVideoContainer "https://example.com/video.mp4" "Check this out!" {"mediaType": "REELS"}',
504
+ },
505
+ createCarouselContainer: {
506
+ description: "Create a carousel container from multiple child container IDs",
507
+ parameters: [
508
+ { name: "children", dataType: "array", description: "Array of child container IDs (minimum 2)", formInputType: "json", required: true },
509
+ { name: "caption", dataType: "string", description: "Carousel caption text", formInputType: "textarea", required: false },
510
+ ],
511
+ returnType: "object",
512
+ returnDescription: "{id} - carousel container ID for use with publishMedia",
513
+ example: 'instagram.createCarouselContainer ["17889615691123456", "17889615691123457"] "Photo dump!"',
514
+ },
515
+ publishMedia: {
516
+ description: "Publish a previously created media container (image, video, or carousel)",
517
+ parameters: [
518
+ { name: "containerId", dataType: "string", description: "Container ID from createMediaContainer, createVideoContainer, or createCarouselContainer", formInputType: "text", required: true },
519
+ ],
520
+ returnType: "object",
521
+ returnDescription: "{id} - published media ID",
522
+ example: 'instagram.publishMedia "17889615691123456"',
523
+ },
524
+ getMediaInsights: {
525
+ description: "Get insights/analytics for a specific media item",
526
+ parameters: [
527
+ { name: "mediaId", dataType: "string", description: "Media ID to get insights for", formInputType: "text", required: true },
528
+ { name: "metrics", dataType: "string", description: "Comma-separated metrics (default: impressions,reach,engagement,saved)", formInputType: "text", required: false },
529
+ ],
530
+ returnType: "object",
531
+ returnDescription: "{data: [{name, period, values, title, description, id}]}",
532
+ example: 'instagram.getMediaInsights "17895695668004550" "impressions,reach,engagement,saved"',
533
+ },
534
+ getAccountInsights: {
535
+ description: "Get account-level insights (impressions, reach, follower_count, etc.)",
536
+ parameters: [
537
+ { name: "metrics", dataType: "string", description: "Comma-separated metrics (e.g. impressions,reach,follower_count)", formInputType: "text", required: true },
538
+ { name: "period", dataType: "string", description: "Time period: day, week, days_28, month, lifetime", formInputType: "select", required: true },
539
+ { name: "options", dataType: "object", description: "{since?: unix_timestamp, until?: unix_timestamp}", formInputType: "text", required: false },
540
+ ],
541
+ returnType: "object",
542
+ returnDescription: "{data: [{name, period, values, title, description}]}",
543
+ example: 'instagram.getAccountInsights "impressions,reach,follower_count" "day"',
544
+ },
545
+ getComments: {
546
+ description: "List comments on a media post",
547
+ parameters: [
548
+ { name: "mediaId", dataType: "string", description: "Media ID to list comments for", formInputType: "text", required: true },
549
+ { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false },
550
+ ],
551
+ returnType: "object",
552
+ returnDescription: "{data: [{id, text, timestamp, username, like_count}], paging}",
553
+ example: 'instagram.getComments "17895695668004550" {"limit": 25}',
554
+ },
555
+ replyToComment: {
556
+ description: "Reply to a specific comment on a media post",
557
+ parameters: [
558
+ { name: "commentId", dataType: "string", description: "Comment ID to reply to", formInputType: "text", required: true },
559
+ { name: "message", dataType: "string", description: "Reply text", formInputType: "text", required: true },
560
+ ],
561
+ returnType: "object",
562
+ returnDescription: "{id} - reply comment ID",
563
+ example: 'instagram.replyToComment "17858893269123456" "Thank you!"',
564
+ },
565
+ deleteComment: {
566
+ description: "Delete or hide a comment by ID",
567
+ parameters: [
568
+ { name: "commentId", dataType: "string", description: "Comment ID to delete", formInputType: "text", required: true },
569
+ ],
570
+ returnType: "object",
571
+ returnDescription: "{ok, commentId}",
572
+ example: 'instagram.deleteComment "17858893269123456"',
573
+ },
574
+ getStories: {
575
+ description: "Get the authenticated user's currently active stories",
576
+ parameters: [
577
+ { name: "options", dataType: "object", description: "{fields?: string}", formInputType: "text", required: false },
578
+ ],
579
+ returnType: "object",
580
+ returnDescription: "{data: [{id, media_type, media_url, timestamp, permalink}]}",
581
+ example: 'instagram.getStories',
582
+ },
583
+ getHashtag: {
584
+ description: "Search for a hashtag ID by name",
585
+ parameters: [
586
+ { name: "hashtagName", dataType: "string", description: "Hashtag name without # (e.g. 'travel')", formInputType: "text", required: true },
587
+ ],
588
+ returnType: "object",
589
+ returnDescription: "{data: [{id}]}",
590
+ example: 'instagram.getHashtag "travel"',
591
+ },
592
+ getHashtagMedia: {
593
+ description: "Get top or recent media for a hashtag",
594
+ parameters: [
595
+ { name: "hashtagId", dataType: "string", description: "Hashtag ID from getHashtag", formInputType: "text", required: true },
596
+ { name: "type", dataType: "string", description: "'top_media' or 'recent_media' (default: top_media)", formInputType: "select", required: false },
597
+ { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false },
598
+ ],
599
+ returnType: "object",
600
+ returnDescription: "{data: [...media], paging}",
601
+ example: 'instagram.getHashtagMedia "17843853986012965" "top_media" {"limit": 20}',
602
+ },
603
+ getMentions: {
604
+ description: "Get media posts where the authenticated user is tagged/mentioned",
605
+ parameters: [
606
+ { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false },
607
+ ],
608
+ returnType: "object",
609
+ returnDescription: "{data: [...media], paging}",
610
+ example: 'instagram.getMentions {"limit": 10}',
611
+ },
612
+ sendMessage: {
613
+ description: "Send a direct message to a user via Instagram Messaging API",
614
+ parameters: [
615
+ { name: "recipientId", dataType: "string", description: "Instagram-scoped ID of the recipient", formInputType: "text", required: true },
616
+ { name: "message", dataType: "string", description: "Message text to send", formInputType: "text", required: true },
617
+ ],
618
+ returnType: "object",
619
+ returnDescription: "{recipient_id, message_id}",
620
+ example: 'instagram.sendMessage "17841400123456" "Hello from RobinPath!"',
621
+ },
622
+ getConversations: {
623
+ description: "List DM conversations for the authenticated account",
624
+ parameters: [
625
+ { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false },
626
+ ],
627
+ returnType: "object",
628
+ returnDescription: "{data: [{id, updated_time, participants, messages}], paging}",
629
+ example: 'instagram.getConversations {"limit": 10}',
630
+ },
631
+ getMessages: {
632
+ description: "Get messages within a specific DM conversation",
633
+ parameters: [
634
+ { name: "conversationId", dataType: "string", description: "Conversation ID from getConversations", formInputType: "text", required: true },
635
+ { name: "options", dataType: "object", description: "{limit?, after?, fields?}", formInputType: "text", required: false },
636
+ ],
637
+ returnType: "object",
638
+ returnDescription: "{data: [{id, message, from, to, created_time}], paging}",
639
+ example: 'instagram.getMessages "t_1234567890" {"limit": 20}',
640
+ },
641
+ };
642
+ export const InstagramModuleMetadata = {
643
+ description: "Instagram Graph API client for managing posts, stories, comments, insights, hashtags, mentions, and direct messages via Meta/Facebook platform",
644
+ methods: Object.keys(InstagramFunctions),
645
+ category: "social",
646
+ };
647
+ //# sourceMappingURL=instagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instagram.js","sourceRoot":"","sources":["../src/instagram.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "@robinpath/instagram",
3
+ "version": "0.1.0",
4
+ "publishConfig": { "access": "public" },
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": { ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" } },
9
+ "files": ["dist"],
10
+ "scripts": { "build": "tsc" },
11
+ "peerDependencies": { "@wiredwp/robinpath": ">=0.20.0" },
12
+ "devDependencies": { "@wiredwp/robinpath": "^0.30.1", "typescript": "^5.6.0" }
13
+ }