@exileum/meta-mcp 4.0.0 → 6.0.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 +81 -12
- package/dist/config.d.ts +10 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +65 -8
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/instagram.d.ts.map +1 -1
- package/dist/resources/instagram.js +19 -13
- package/dist/resources/instagram.js.map +1 -1
- package/dist/resources/threads.d.ts.map +1 -1
- package/dist/resources/threads.js +19 -13
- package/dist/resources/threads.js.map +1 -1
- package/dist/schemas.d.ts +14 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +14 -0
- package/dist/schemas.js.map +1 -1
- package/dist/services/meta-client.d.ts +47 -5
- package/dist/services/meta-client.d.ts.map +1 -1
- package/dist/services/meta-client.js +120 -27
- package/dist/services/meta-client.js.map +1 -1
- package/dist/tools/instagram/comments.d.ts.map +1 -1
- package/dist/tools/instagram/comments.js +35 -29
- package/dist/tools/instagram/comments.js.map +1 -1
- package/dist/tools/instagram/hashtags.d.ts.map +1 -1
- package/dist/tools/instagram/hashtags.js +19 -11
- package/dist/tools/instagram/hashtags.js.map +1 -1
- package/dist/tools/instagram/media.d.ts.map +1 -1
- package/dist/tools/instagram/media.js +17 -15
- package/dist/tools/instagram/media.js.map +1 -1
- package/dist/tools/instagram/mentions.d.ts.map +1 -1
- package/dist/tools/instagram/mentions.js +16 -12
- package/dist/tools/instagram/mentions.js.map +1 -1
- package/dist/tools/instagram/messaging.d.ts.map +1 -1
- package/dist/tools/instagram/messaging.js +34 -24
- package/dist/tools/instagram/messaging.js.map +1 -1
- package/dist/tools/instagram/profile.d.ts +2 -0
- package/dist/tools/instagram/profile.d.ts.map +1 -1
- package/dist/tools/instagram/profile.js +46 -21
- package/dist/tools/instagram/profile.js.map +1 -1
- package/dist/tools/instagram/publishing.d.ts.map +1 -1
- package/dist/tools/instagram/publishing.js +14 -13
- package/dist/tools/instagram/publishing.js.map +1 -1
- package/dist/tools/meta/auth.d.ts.map +1 -1
- package/dist/tools/meta/auth.js +7 -6
- package/dist/tools/meta/auth.js.map +1 -1
- package/dist/tools/threads/insights.d.ts.map +1 -1
- package/dist/tools/threads/insights.js +8 -8
- package/dist/tools/threads/insights.js.map +1 -1
- package/dist/tools/threads/media.d.ts.map +1 -1
- package/dist/tools/threads/media.js +12 -12
- package/dist/tools/threads/media.js.map +1 -1
- package/dist/tools/threads/mentions.d.ts.map +1 -1
- package/dist/tools/threads/mentions.js +2 -1
- package/dist/tools/threads/mentions.js.map +1 -1
- package/dist/tools/threads/profile.d.ts.map +1 -1
- package/dist/tools/threads/profile.js +2 -28
- package/dist/tools/threads/profile.js.map +1 -1
- package/dist/tools/threads/publishing.d.ts +7 -0
- package/dist/tools/threads/publishing.d.ts.map +1 -1
- package/dist/tools/threads/publishing.js +47 -35
- package/dist/tools/threads/publishing.js.map +1 -1
- package/dist/tools/threads/replies.d.ts +2 -0
- package/dist/tools/threads/replies.d.ts.map +1 -1
- package/dist/tools/threads/replies.js +32 -17
- package/dist/tools/threads/replies.js.map +1 -1
- package/dist/utils/container.d.ts +4 -2
- package/dist/utils/container.d.ts.map +1 -1
- package/dist/utils/container.js +8 -3
- package/dist/utils/container.js.map +1 -1
- package/dist/utils/errors.d.ts +38 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +145 -0
- package/dist/utils/errors.js.map +1 -0
- package/package.json +10 -1
|
@@ -1,13 +1,68 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
//
|
|
1
|
+
import { MetaApiError } from "../utils/errors.js";
|
|
2
|
+
// Default Meta Graph API and Threads API versions — last verified 2026-05-06.
|
|
3
|
+
// The Graph API ships a new minor version every ~4 months and supports each
|
|
4
|
+
// for ~2 years; Threads runs a separate single-major-version track (v1.0 since
|
|
5
|
+
// launch) and is intentionally not bumped in lockstep with the Graph API.
|
|
6
|
+
// Operators can override either default at runtime via `META_API_VERSION` /
|
|
7
|
+
// `THREADS_API_VERSION` to buy time when Meta deprecates a version before a
|
|
8
|
+
// new meta-mcp release ships. OAuth token endpoints
|
|
9
|
+
// (`graph.instagram.com/access_token`, `graph.threads.net/refresh_access_token`,
|
|
10
|
+
// etc.) are unversioned by Meta — `IG_TOKEN_BASE` / `THREADS_TOKEN_BASE` stay
|
|
11
|
+
// unversioned regardless of the version env vars.
|
|
12
|
+
export const DEFAULT_META_API_VERSION = "v25.0";
|
|
13
|
+
export const DEFAULT_THREADS_API_VERSION = "v1.0";
|
|
14
|
+
const API_VERSION_PATTERN = /^v\d+\.\d+$/;
|
|
15
|
+
// Unversioned bases for OAuth token endpoints (deliberate — Meta's OAuth
|
|
16
|
+
// surface has no version segment; piping META_API_VERSION here would 404).
|
|
5
17
|
const IG_TOKEN_BASE = "https://graph.instagram.com";
|
|
6
18
|
const THREADS_TOKEN_BASE = "https://graph.threads.net";
|
|
19
|
+
function resolveApiVersion(envName, fallback, explicit) {
|
|
20
|
+
// Explicit MetaClientOptions value, if any, takes precedence over the env
|
|
21
|
+
// var; both go through the same regex check + warn-fallback so a malformed
|
|
22
|
+
// option (e.g., `{ metaApiVersion: "v25-0" }`) can't silently build a
|
|
23
|
+
// broken URL. Empty string on either path falls through to the default.
|
|
24
|
+
const source = explicit !== undefined ? `MetaClientOptions.${envName}` : envName;
|
|
25
|
+
const raw = explicit ?? process.env[envName];
|
|
26
|
+
if (!raw)
|
|
27
|
+
return fallback;
|
|
28
|
+
if (!API_VERSION_PATTERN.test(raw)) {
|
|
29
|
+
console.error(`[meta-mcp] Warning: ${source}="${raw}" is not in vX.Y format — falling back to ${fallback}.`);
|
|
30
|
+
return fallback;
|
|
31
|
+
}
|
|
32
|
+
return raw;
|
|
33
|
+
}
|
|
34
|
+
function parseMetaErrorBody(text) {
|
|
35
|
+
if (!text)
|
|
36
|
+
return undefined;
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(text);
|
|
39
|
+
const err = parsed.error;
|
|
40
|
+
if (!err)
|
|
41
|
+
return undefined;
|
|
42
|
+
return {
|
|
43
|
+
message: typeof err.message === "string" ? err.message : undefined,
|
|
44
|
+
code: typeof err.code === "number" ? err.code : undefined,
|
|
45
|
+
subcode: typeof err.error_subcode === "number" ? err.error_subcode : undefined,
|
|
46
|
+
type: typeof err.type === "string" ? err.type : undefined,
|
|
47
|
+
fbtraceId: typeof err.fbtrace_id === "string" ? err.fbtrace_id : undefined,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
7
54
|
export class MetaClient {
|
|
8
55
|
config;
|
|
9
|
-
|
|
56
|
+
igBase;
|
|
57
|
+
fbBase;
|
|
58
|
+
threadsBase;
|
|
59
|
+
constructor(config, options) {
|
|
10
60
|
this.config = config;
|
|
61
|
+
const metaVersion = resolveApiVersion("META_API_VERSION", DEFAULT_META_API_VERSION, options?.metaApiVersion);
|
|
62
|
+
const threadsVersion = resolveApiVersion("THREADS_API_VERSION", DEFAULT_THREADS_API_VERSION, options?.threadsApiVersion);
|
|
63
|
+
this.igBase = `https://graph.instagram.com/${metaVersion}`;
|
|
64
|
+
this.fbBase = `https://graph.facebook.com/${metaVersion}`;
|
|
65
|
+
this.threadsBase = `https://graph.threads.net/${threadsVersion}`;
|
|
11
66
|
}
|
|
12
67
|
parseRateLimit(headers) {
|
|
13
68
|
const usage = headers.get("x-app-usage");
|
|
@@ -25,43 +80,67 @@ export class MetaClient {
|
|
|
25
80
|
return undefined;
|
|
26
81
|
}
|
|
27
82
|
}
|
|
83
|
+
// Used for both form bodies (POST/PUT) and query strings (GET/DELETE) — every
|
|
84
|
+
// entry ends up URL-encoded in `qs`. Skipping `""` must precede the typeof
|
|
85
|
+
// check so the type narrowing below stays correct after the filter.
|
|
86
|
+
appendFormParams(qs, params) {
|
|
87
|
+
for (const [k, v] of Object.entries(params)) {
|
|
88
|
+
if (v === undefined || v === null || v === "")
|
|
89
|
+
continue;
|
|
90
|
+
if (typeof v !== "string" && typeof v !== "number" && typeof v !== "boolean") {
|
|
91
|
+
const kind = Array.isArray(v) ? "array" : typeof v;
|
|
92
|
+
throw new Error(`MetaClient: form parameter "${k}" has unsupported type "${kind}". ` +
|
|
93
|
+
`Form-encoded params must be string | number | boolean — serialize arrays/objects ` +
|
|
94
|
+
`explicitly with JSON.stringify(...) or .join(",") before assigning.`);
|
|
95
|
+
}
|
|
96
|
+
qs.set(k, String(v));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
28
99
|
async request(baseUrl, token, method, path, params, options) {
|
|
29
100
|
let url = `${baseUrl}${path}`;
|
|
30
101
|
const init = { method, signal: AbortSignal.timeout(30_000) };
|
|
31
102
|
const isWrite = method !== "GET" && method !== "DELETE";
|
|
32
|
-
const useJson = isWrite && options?.
|
|
103
|
+
const useJson = isWrite && options?.jsonBody !== undefined;
|
|
104
|
+
// `params` always lands in the URL query string (form body for POST/PUT,
|
|
105
|
+
// query string for GET/DELETE/JSON-mode). Combining `params` with
|
|
106
|
+
// `jsonBody` is rejected so that callers don't accidentally route data
|
|
107
|
+
// intended for the body into the query string when the JSON-mode wrapper
|
|
108
|
+
// overrides the body.
|
|
109
|
+
if (useJson && params !== undefined) {
|
|
110
|
+
throw new Error("MetaClient: `params` cannot be combined with `options.jsonBody`. Pass either form-encoded `params` or a JSON `jsonBody`, not both.");
|
|
111
|
+
}
|
|
33
112
|
const qs = new URLSearchParams();
|
|
34
113
|
qs.set("access_token", token);
|
|
114
|
+
if (params)
|
|
115
|
+
this.appendFormParams(qs, params);
|
|
35
116
|
if (useJson) {
|
|
36
117
|
url += (url.includes("?") ? "&" : "?") + qs.toString();
|
|
37
118
|
init.headers = { "Content-Type": "application/json" };
|
|
38
|
-
init.body = JSON.stringify(
|
|
119
|
+
init.body = JSON.stringify(options.jsonBody);
|
|
39
120
|
}
|
|
40
121
|
else if (isWrite) {
|
|
41
|
-
if (params) {
|
|
42
|
-
for (const [k, v] of Object.entries(params)) {
|
|
43
|
-
if (v !== undefined && v !== null && v !== "") {
|
|
44
|
-
qs.set(k, String(v));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
122
|
init.headers = { "Content-Type": "application/x-www-form-urlencoded" };
|
|
49
123
|
init.body = qs.toString();
|
|
50
124
|
}
|
|
51
125
|
else {
|
|
52
|
-
if (params) {
|
|
53
|
-
for (const [k, v] of Object.entries(params)) {
|
|
54
|
-
if (v !== undefined && v !== null && v !== "") {
|
|
55
|
-
qs.set(k, String(v));
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
126
|
url += (url.includes("?") ? "&" : "?") + qs.toString();
|
|
60
127
|
}
|
|
61
128
|
const res = await fetch(url, init);
|
|
62
129
|
if (!res.ok) {
|
|
63
130
|
const text = await res.text().catch(() => "");
|
|
64
|
-
|
|
131
|
+
const parsed = parseMetaErrorBody(text);
|
|
132
|
+
const detail = parsed?.message ?? text;
|
|
133
|
+
throw new MetaApiError({
|
|
134
|
+
message: `Meta API ${method} ${path} (${res.status}): ${detail}`,
|
|
135
|
+
httpStatus: res.status,
|
|
136
|
+
apiCode: parsed?.code,
|
|
137
|
+
apiSubcode: parsed?.subcode,
|
|
138
|
+
apiType: parsed?.type,
|
|
139
|
+
fbtraceId: parsed?.fbtraceId,
|
|
140
|
+
endpoint: path,
|
|
141
|
+
method,
|
|
142
|
+
body: text,
|
|
143
|
+
});
|
|
65
144
|
}
|
|
66
145
|
const rateLimit = this.parseRateLimit(res.headers);
|
|
67
146
|
const contentType = res.headers.get("content-type") || "";
|
|
@@ -69,7 +148,21 @@ export class MetaClient {
|
|
|
69
148
|
const data = (await res.json());
|
|
70
149
|
if (data.error) {
|
|
71
150
|
const err = data.error;
|
|
72
|
-
|
|
151
|
+
const apiCode = typeof err.code === "number" ? err.code : undefined;
|
|
152
|
+
const apiSubcode = typeof err.error_subcode === "number" ? err.error_subcode : undefined;
|
|
153
|
+
const apiType = typeof err.type === "string" ? err.type : undefined;
|
|
154
|
+
const apiMessage = typeof err.message === "string" ? err.message : String(err.message ?? "");
|
|
155
|
+
const fbtraceId = typeof err.fbtrace_id === "string" ? err.fbtrace_id : undefined;
|
|
156
|
+
throw new MetaApiError({
|
|
157
|
+
message: `Meta API error: ${apiMessage} (code ${apiCode ?? "?"})`,
|
|
158
|
+
apiCode,
|
|
159
|
+
apiSubcode,
|
|
160
|
+
apiType,
|
|
161
|
+
fbtraceId,
|
|
162
|
+
endpoint: path,
|
|
163
|
+
method,
|
|
164
|
+
body: JSON.stringify(err),
|
|
165
|
+
});
|
|
73
166
|
}
|
|
74
167
|
return { data, rateLimit };
|
|
75
168
|
}
|
|
@@ -80,20 +173,20 @@ export class MetaClient {
|
|
|
80
173
|
if (!this.config.instagramAccessToken) {
|
|
81
174
|
throw new Error("INSTAGRAM_ACCESS_TOKEN is not configured.");
|
|
82
175
|
}
|
|
83
|
-
return this.request(
|
|
176
|
+
return this.request(this.igBase, this.config.instagramAccessToken, method, path, params, options);
|
|
84
177
|
}
|
|
85
178
|
async threads(method, path, params, options) {
|
|
86
179
|
if (!this.config.threadsAccessToken) {
|
|
87
180
|
throw new Error("THREADS_ACCESS_TOKEN is not configured.");
|
|
88
181
|
}
|
|
89
|
-
return this.request(
|
|
182
|
+
return this.request(this.threadsBase, this.config.threadsAccessToken, method, path, params, options);
|
|
90
183
|
}
|
|
91
184
|
async meta(method, path, params, options) {
|
|
92
185
|
if (!this.config.appId || !this.config.appSecret) {
|
|
93
186
|
throw new Error("META_APP_ID and META_APP_SECRET are required.");
|
|
94
187
|
}
|
|
95
188
|
const appToken = `${this.config.appId}|${this.config.appSecret}`;
|
|
96
|
-
return this.request(
|
|
189
|
+
return this.request(this.fbBase, appToken, method, path, params, options);
|
|
97
190
|
}
|
|
98
191
|
/** Exchange short-lived Instagram token for long-lived token (60 days) */
|
|
99
192
|
async igExchangeToken(shortToken) {
|
|
@@ -133,7 +226,7 @@ export class MetaClient {
|
|
|
133
226
|
throw new Error("META_APP_ID and META_APP_SECRET are required for token debug.");
|
|
134
227
|
}
|
|
135
228
|
const appToken = `${this.config.appId}|${this.config.appSecret}`;
|
|
136
|
-
return this.request(
|
|
229
|
+
return this.request(this.fbBase, appToken, "GET", "/debug_token", {
|
|
137
230
|
input_token: inputToken,
|
|
138
231
|
});
|
|
139
232
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-client.js","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"meta-client.js","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/comments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/comments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAc,MAAM,+BAA+B,CAAC;AAQvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA2IlF"}
|
|
@@ -1,44 +1,49 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { metaId } from "../../schemas.js";
|
|
3
|
+
import { formatErrorResponse } from "../../utils/errors.js";
|
|
4
|
+
const GET_COMMENTS_DEFAULT_FIELDS = "id,text,username,timestamp,like_count,replies{id,text,username,timestamp}";
|
|
5
|
+
const GET_COMMENT_DEFAULT_FIELDS = "id,text,username,timestamp,like_count,parent_id,media";
|
|
6
|
+
const GET_REPLIES_DEFAULT_FIELDS = "id,text,username,timestamp,like_count";
|
|
2
7
|
export function registerIgCommentTools(server, client) {
|
|
3
8
|
// ─── ig_get_comments ─────────────────────────────────────────
|
|
4
9
|
server.tool("ig_get_comments", "Get comments on a specific Instagram media post.", {
|
|
5
|
-
media_id:
|
|
10
|
+
media_id: metaId.describe("Media ID"),
|
|
6
11
|
limit: z.number().optional().describe("Number of comments to return"),
|
|
7
|
-
after: z.string().optional().describe("Pagination cursor"),
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
after: z.string().optional().describe("Pagination cursor for next page"),
|
|
13
|
+
before: z.string().optional().describe("Pagination cursor for previous page"),
|
|
14
|
+
fields: z.string().optional().default(GET_COMMENTS_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${GET_COMMENTS_DEFAULT_FIELDS})`),
|
|
15
|
+
}, async ({ media_id, limit, after, before, fields }) => {
|
|
10
16
|
try {
|
|
11
|
-
const params = {
|
|
12
|
-
fields: fields || "id,text,username,timestamp,like_count,replies{id,text,username,timestamp}",
|
|
13
|
-
};
|
|
17
|
+
const params = { fields };
|
|
14
18
|
if (limit !== undefined)
|
|
15
19
|
params.limit = limit;
|
|
16
20
|
if (after)
|
|
17
21
|
params.after = after;
|
|
22
|
+
if (before)
|
|
23
|
+
params.before = before;
|
|
18
24
|
const { data, rateLimit } = await client.ig("GET", `/${media_id}/comments`, params);
|
|
19
25
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
20
26
|
}
|
|
21
27
|
catch (error) {
|
|
22
|
-
return
|
|
28
|
+
return formatErrorResponse(error, "Get comments");
|
|
23
29
|
}
|
|
24
30
|
});
|
|
25
31
|
// ─── ig_get_comment ──────────────────────────────────────────
|
|
26
32
|
server.tool("ig_get_comment", "Get details of a specific comment.", {
|
|
27
|
-
comment_id:
|
|
28
|
-
fields: z.string().optional().describe(
|
|
33
|
+
comment_id: metaId.describe("Comment ID"),
|
|
34
|
+
fields: z.string().optional().default(GET_COMMENT_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${GET_COMMENT_DEFAULT_FIELDS})`),
|
|
29
35
|
}, async ({ comment_id, fields }) => {
|
|
30
36
|
try {
|
|
31
|
-
const
|
|
32
|
-
const { data, rateLimit } = await client.ig("GET", `/${comment_id}`, { fields: f });
|
|
37
|
+
const { data, rateLimit } = await client.ig("GET", `/${comment_id}`, { fields });
|
|
33
38
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
34
39
|
}
|
|
35
40
|
catch (error) {
|
|
36
|
-
return
|
|
41
|
+
return formatErrorResponse(error, "Get comment");
|
|
37
42
|
}
|
|
38
43
|
});
|
|
39
44
|
// ─── ig_post_comment ─────────────────────────────────────────
|
|
40
45
|
server.tool("ig_post_comment", "Post a top-level comment on a media post.", {
|
|
41
|
-
media_id:
|
|
46
|
+
media_id: metaId.describe("Media ID to comment on"),
|
|
42
47
|
message: z.string().describe("Comment text"),
|
|
43
48
|
}, async ({ media_id, message }) => {
|
|
44
49
|
try {
|
|
@@ -46,34 +51,35 @@ export function registerIgCommentTools(server, client) {
|
|
|
46
51
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
47
52
|
}
|
|
48
53
|
catch (error) {
|
|
49
|
-
return
|
|
54
|
+
return formatErrorResponse(error, "Post comment");
|
|
50
55
|
}
|
|
51
56
|
});
|
|
52
57
|
// ─── ig_get_replies ──────────────────────────────────────────
|
|
53
58
|
server.tool("ig_get_replies", "Get replies to a specific comment.", {
|
|
54
|
-
comment_id:
|
|
59
|
+
comment_id: metaId.describe("Comment ID to get replies for"),
|
|
55
60
|
limit: z.number().optional().describe("Number of replies to return"),
|
|
56
|
-
after: z.string().optional().describe("Pagination cursor"),
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
after: z.string().optional().describe("Pagination cursor for next page"),
|
|
62
|
+
before: z.string().optional().describe("Pagination cursor for previous page"),
|
|
63
|
+
fields: z.string().optional().default(GET_REPLIES_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${GET_REPLIES_DEFAULT_FIELDS})`),
|
|
64
|
+
}, async ({ comment_id, limit, after, before, fields }) => {
|
|
59
65
|
try {
|
|
60
|
-
const params = {
|
|
61
|
-
fields: fields || "id,text,username,timestamp,like_count",
|
|
62
|
-
};
|
|
66
|
+
const params = { fields };
|
|
63
67
|
if (limit !== undefined)
|
|
64
68
|
params.limit = limit;
|
|
65
69
|
if (after)
|
|
66
70
|
params.after = after;
|
|
71
|
+
if (before)
|
|
72
|
+
params.before = before;
|
|
67
73
|
const { data, rateLimit } = await client.ig("GET", `/${comment_id}/replies`, params);
|
|
68
74
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
69
75
|
}
|
|
70
76
|
catch (error) {
|
|
71
|
-
return
|
|
77
|
+
return formatErrorResponse(error, "Get replies");
|
|
72
78
|
}
|
|
73
79
|
});
|
|
74
80
|
// ─── ig_reply_to_comment ─────────────────────────────────────
|
|
75
81
|
server.tool("ig_reply_to_comment", "Reply to a specific comment.", {
|
|
76
|
-
comment_id:
|
|
82
|
+
comment_id: metaId.describe("Comment ID to reply to"),
|
|
77
83
|
message: z.string().describe("Reply text"),
|
|
78
84
|
}, async ({ comment_id, message }) => {
|
|
79
85
|
try {
|
|
@@ -81,12 +87,12 @@ export function registerIgCommentTools(server, client) {
|
|
|
81
87
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
82
88
|
}
|
|
83
89
|
catch (error) {
|
|
84
|
-
return
|
|
90
|
+
return formatErrorResponse(error, "Reply");
|
|
85
91
|
}
|
|
86
92
|
});
|
|
87
93
|
// ─── ig_hide_comment ─────────────────────────────────────────
|
|
88
94
|
server.tool("ig_hide_comment", "Hide or unhide a comment on your post.", {
|
|
89
|
-
comment_id:
|
|
95
|
+
comment_id: metaId.describe("Comment ID"),
|
|
90
96
|
hide: z.boolean().describe("true to hide, false to unhide"),
|
|
91
97
|
}, async ({ comment_id, hide }) => {
|
|
92
98
|
try {
|
|
@@ -94,19 +100,19 @@ export function registerIgCommentTools(server, client) {
|
|
|
94
100
|
return { content: [{ type: "text", text: JSON.stringify({ success: true, hidden: hide, ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
95
101
|
}
|
|
96
102
|
catch (error) {
|
|
97
|
-
return
|
|
103
|
+
return formatErrorResponse(error, "Hide comment");
|
|
98
104
|
}
|
|
99
105
|
});
|
|
100
106
|
// ─── ig_delete_comment ───────────────────────────────────────
|
|
101
107
|
server.tool("ig_delete_comment", "Delete a comment from your media post. This action is irreversible.", {
|
|
102
|
-
comment_id:
|
|
108
|
+
comment_id: metaId.describe("Comment ID to delete"),
|
|
103
109
|
}, async ({ comment_id }) => {
|
|
104
110
|
try {
|
|
105
111
|
const { data, rateLimit } = await client.ig("DELETE", `/${comment_id}`);
|
|
106
112
|
return { content: [{ type: "text", text: JSON.stringify({ success: true, ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
107
113
|
}
|
|
108
114
|
catch (error) {
|
|
109
|
-
return
|
|
115
|
+
return formatErrorResponse(error, "Delete comment");
|
|
110
116
|
}
|
|
111
117
|
});
|
|
112
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../src/tools/instagram/comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../../src/tools/instagram/comments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,2BAA2B,GAAG,2EAA2E,CAAC;AAChH,MAAM,0BAA0B,GAAG,uDAAuD,CAAC;AAC3F,MAAM,0BAA0B,GAAG,uCAAuC,CAAC;AAE3E,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,MAAkB;IAC1E,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,kDAAkD,EAClD;QACE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACxE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC7E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,QAAQ,CAAC,oCAAoC,2BAA2B,GAAG,CAAC;KAChJ,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAe,EAAE,MAAM,EAAE,CAAC;YACtC,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9C,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAChC,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,QAAQ,WAAW,EAAE,MAAM,CAAC,CAAC;YACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,oCAAoC,EACpC;QACE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,oCAAoC,0BAA0B,GAAG,CAAC;KAC9I,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACjF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,2CAA2C,EAC3C;QACE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KAC7C,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,QAAQ,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,oCAAoC,EACpC;QACE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC5D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACpE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACxE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC7E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,oCAAoC,0BAA0B,GAAG,CAAC;KAC9I,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC;YACH,MAAM,MAAM,GAAe,EAAE,MAAM,EAAE,CAAC;YACtC,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAC9C,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAChC,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACnC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,UAAU,UAAU,EAAE,MAAM,CAAC,CAAC;YACrF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,8BAA8B,EAC9B;QACE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KAC3C,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,UAAU,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,wCAAwC,EACxC;QACE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;QACzC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAChF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzI,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,qEAAqE,EACrE;QACE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KACpD,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;YACxE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3H,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashtags.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/hashtags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"hashtags.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/hashtags.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAc,MAAM,+BAA+B,CAAC;AAIvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA6FlF"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { metaId } from "../../schemas.js";
|
|
3
|
+
import { formatErrorResponse } from "../../utils/errors.js";
|
|
2
4
|
export function registerIgHashtagTools(server, client) {
|
|
3
5
|
// ─── ig_search_hashtag ───────────────────────────────────────
|
|
4
6
|
server.tool("ig_search_hashtag", "Search for a hashtag ID by name. Required before querying hashtag media. Limited to 30 unique hashtags per 7-day rolling window.", {
|
|
@@ -12,12 +14,12 @@ export function registerIgHashtagTools(server, client) {
|
|
|
12
14
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
13
15
|
}
|
|
14
16
|
catch (error) {
|
|
15
|
-
return
|
|
17
|
+
return formatErrorResponse(error, "Hashtag search");
|
|
16
18
|
}
|
|
17
19
|
});
|
|
18
20
|
// ─── ig_get_hashtag ──────────────────────────────────────────
|
|
19
21
|
server.tool("ig_get_hashtag", "Get hashtag information by ID.", {
|
|
20
|
-
hashtag_id:
|
|
22
|
+
hashtag_id: metaId.describe("Hashtag ID (from ig_search_hashtag)"),
|
|
21
23
|
}, async ({ hashtag_id }) => {
|
|
22
24
|
try {
|
|
23
25
|
const { data, rateLimit } = await client.ig("GET", `/${hashtag_id}`, {
|
|
@@ -26,15 +28,16 @@ export function registerIgHashtagTools(server, client) {
|
|
|
26
28
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
27
29
|
}
|
|
28
30
|
catch (error) {
|
|
29
|
-
return
|
|
31
|
+
return formatErrorResponse(error, "Get hashtag");
|
|
30
32
|
}
|
|
31
33
|
});
|
|
32
34
|
// ─── ig_get_hashtag_recent ───────────────────────────────────
|
|
33
35
|
server.tool("ig_get_hashtag_recent", "Get recent media tagged with a specific hashtag.", {
|
|
34
|
-
hashtag_id:
|
|
36
|
+
hashtag_id: metaId.describe("Hashtag ID"),
|
|
35
37
|
limit: z.number().optional().describe("Number of results"),
|
|
36
|
-
after: z.string().optional().describe("Pagination cursor"),
|
|
37
|
-
|
|
38
|
+
after: z.string().optional().describe("Pagination cursor for next page"),
|
|
39
|
+
before: z.string().optional().describe("Pagination cursor for previous page"),
|
|
40
|
+
}, async ({ hashtag_id, limit, after, before }) => {
|
|
38
41
|
try {
|
|
39
42
|
const params = {
|
|
40
43
|
user_id: client.igUserId,
|
|
@@ -44,19 +47,22 @@ export function registerIgHashtagTools(server, client) {
|
|
|
44
47
|
params.limit = limit;
|
|
45
48
|
if (after)
|
|
46
49
|
params.after = after;
|
|
50
|
+
if (before)
|
|
51
|
+
params.before = before;
|
|
47
52
|
const { data, rateLimit } = await client.ig("GET", `/${hashtag_id}/recent_media`, params);
|
|
48
53
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
49
54
|
}
|
|
50
55
|
catch (error) {
|
|
51
|
-
return
|
|
56
|
+
return formatErrorResponse(error, "Get hashtag recent");
|
|
52
57
|
}
|
|
53
58
|
});
|
|
54
59
|
// ─── ig_get_hashtag_top ──────────────────────────────────────
|
|
55
60
|
server.tool("ig_get_hashtag_top", "Get top (most popular) media tagged with a specific hashtag.", {
|
|
56
|
-
hashtag_id:
|
|
61
|
+
hashtag_id: metaId.describe("Hashtag ID"),
|
|
57
62
|
limit: z.number().optional().describe("Number of results"),
|
|
58
|
-
after: z.string().optional().describe("Pagination cursor"),
|
|
59
|
-
|
|
63
|
+
after: z.string().optional().describe("Pagination cursor for next page"),
|
|
64
|
+
before: z.string().optional().describe("Pagination cursor for previous page"),
|
|
65
|
+
}, async ({ hashtag_id, limit, after, before }) => {
|
|
60
66
|
try {
|
|
61
67
|
const params = {
|
|
62
68
|
user_id: client.igUserId,
|
|
@@ -66,11 +72,13 @@ export function registerIgHashtagTools(server, client) {
|
|
|
66
72
|
params.limit = limit;
|
|
67
73
|
if (after)
|
|
68
74
|
params.after = after;
|
|
75
|
+
if (before)
|
|
76
|
+
params.before = before;
|
|
69
77
|
const { data, rateLimit } = await client.ig("GET", `/${hashtag_id}/top_media`, params);
|
|
70
78
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
71
79
|
}
|
|
72
80
|
catch (error) {
|
|
73
|
-
return
|
|
81
|
+
return formatErrorResponse(error, "Get hashtag top");
|
|
74
82
|
}
|
|
75
83
|
});
|
|
76
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hashtags.js","sourceRoot":"","sources":["../../../src/tools/instagram/hashtags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"hashtags.js","sourceRoot":"","sources":["../../../src/tools/instagram/hashtags.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAc,MAAM,+BAA+B,CAAC;AAOvE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAsGhF"}
|