@exileum/meta-mcp 6.0.0 → 8.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.
Files changed (108) hide show
  1. package/README.md +44 -18
  2. package/dist/constants/fields.d.ts +6 -0
  3. package/dist/constants/fields.d.ts.map +1 -0
  4. package/dist/constants/fields.js +25 -0
  5. package/dist/constants/fields.js.map +1 -0
  6. package/dist/http-transport.d.ts +20 -0
  7. package/dist/http-transport.d.ts.map +1 -0
  8. package/dist/http-transport.js +228 -0
  9. package/dist/http-transport.js.map +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +77 -82
  12. package/dist/index.js.map +1 -1
  13. package/dist/prompts/index.d.ts +56 -0
  14. package/dist/prompts/index.d.ts.map +1 -1
  15. package/dist/prompts/index.js +264 -41
  16. package/dist/prompts/index.js.map +1 -1
  17. package/dist/register-all.d.ts +4 -0
  18. package/dist/register-all.d.ts.map +1 -0
  19. package/dist/register-all.js +41 -0
  20. package/dist/register-all.js.map +1 -0
  21. package/dist/resources/instagram.d.ts.map +1 -1
  22. package/dist/resources/instagram.js +13 -4
  23. package/dist/resources/instagram.js.map +1 -1
  24. package/dist/resources/threads.d.ts.map +1 -1
  25. package/dist/resources/threads.js +13 -4
  26. package/dist/resources/threads.js.map +1 -1
  27. package/dist/services/meta-client.d.ts +76 -3
  28. package/dist/services/meta-client.d.ts.map +1 -1
  29. package/dist/services/meta-client.js +330 -46
  30. package/dist/services/meta-client.js.map +1 -1
  31. package/dist/shutdown.d.ts +18 -0
  32. package/dist/shutdown.d.ts.map +1 -0
  33. package/dist/shutdown.js +60 -0
  34. package/dist/shutdown.js.map +1 -0
  35. package/dist/tools/annotations.d.ts +6 -0
  36. package/dist/tools/annotations.d.ts.map +1 -0
  37. package/dist/tools/annotations.js +27 -0
  38. package/dist/tools/annotations.js.map +1 -0
  39. package/dist/tools/instagram/comments.d.ts.map +1 -1
  40. package/dist/tools/instagram/comments.js +75 -50
  41. package/dist/tools/instagram/comments.js.map +1 -1
  42. package/dist/tools/instagram/hashtags.d.ts +1 -0
  43. package/dist/tools/instagram/hashtags.d.ts.map +1 -1
  44. package/dist/tools/instagram/hashtags.js +54 -36
  45. package/dist/tools/instagram/hashtags.js.map +1 -1
  46. package/dist/tools/instagram/media.d.ts.map +1 -1
  47. package/dist/tools/instagram/media.js +53 -34
  48. package/dist/tools/instagram/media.js.map +1 -1
  49. package/dist/tools/instagram/mentions.d.ts.map +1 -1
  50. package/dist/tools/instagram/mentions.js +22 -17
  51. package/dist/tools/instagram/mentions.js.map +1 -1
  52. package/dist/tools/instagram/messaging.d.ts.map +1 -1
  53. package/dist/tools/instagram/messaging.js +74 -50
  54. package/dist/tools/instagram/messaging.js.map +1 -1
  55. package/dist/tools/instagram/profile.d.ts +2 -0
  56. package/dist/tools/instagram/profile.d.ts.map +1 -1
  57. package/dist/tools/instagram/profile.js +63 -43
  58. package/dist/tools/instagram/profile.js.map +1 -1
  59. package/dist/tools/instagram/publishing.d.ts.map +1 -1
  60. package/dist/tools/instagram/publishing.js +202 -139
  61. package/dist/tools/instagram/publishing.js.map +1 -1
  62. package/dist/tools/meta/auth.d.ts.map +1 -1
  63. package/dist/tools/meta/auth.js +63 -21
  64. package/dist/tools/meta/auth.js.map +1 -1
  65. package/dist/tools/threads/insights.d.ts.map +1 -1
  66. package/dist/tools/threads/insights.js +22 -15
  67. package/dist/tools/threads/insights.js.map +1 -1
  68. package/dist/tools/threads/media.d.ts.map +1 -1
  69. package/dist/tools/threads/media.js +42 -70
  70. package/dist/tools/threads/media.js.map +1 -1
  71. package/dist/tools/threads/mentions.d.ts.map +1 -1
  72. package/dist/tools/threads/mentions.js +15 -16
  73. package/dist/tools/threads/mentions.js.map +1 -1
  74. package/dist/tools/threads/profile.d.ts +2 -0
  75. package/dist/tools/threads/profile.d.ts.map +1 -1
  76. package/dist/tools/threads/profile.js +18 -3
  77. package/dist/tools/threads/profile.js.map +1 -1
  78. package/dist/tools/threads/publishing.d.ts.map +1 -1
  79. package/dist/tools/threads/publishing.js +260 -157
  80. package/dist/tools/threads/publishing.js.map +1 -1
  81. package/dist/tools/threads/replies.d.ts.map +1 -1
  82. package/dist/tools/threads/replies.js +55 -45
  83. package/dist/tools/threads/replies.js.map +1 -1
  84. package/dist/utils/container.d.ts +16 -4
  85. package/dist/utils/container.d.ts.map +1 -1
  86. package/dist/utils/container.js +36 -6
  87. package/dist/utils/container.js.map +1 -1
  88. package/dist/utils/errors.d.ts +23 -3
  89. package/dist/utils/errors.d.ts.map +1 -1
  90. package/dist/utils/errors.js +32 -2
  91. package/dist/utils/errors.js.map +1 -1
  92. package/dist/utils/logger.d.ts +28 -0
  93. package/dist/utils/logger.d.ts.map +1 -0
  94. package/dist/utils/logger.js +32 -0
  95. package/dist/utils/logger.js.map +1 -0
  96. package/dist/utils/params.d.ts +3 -0
  97. package/dist/utils/params.d.ts.map +1 -0
  98. package/dist/utils/params.js +14 -0
  99. package/dist/utils/params.js.map +1 -0
  100. package/dist/utils/progress.d.ts +42 -0
  101. package/dist/utils/progress.d.ts.map +1 -0
  102. package/dist/utils/progress.js +35 -0
  103. package/dist/utils/progress.js.map +1 -0
  104. package/dist/utils/response.d.ts +11 -0
  105. package/dist/utils/response.d.ts.map +1 -0
  106. package/dist/utils/response.js +6 -0
  107. package/dist/utils/response.js.map +1 -0
  108. package/package.json +5 -4
@@ -1,19 +1,77 @@
1
1
  import { MetaConfig } from "../config.js";
2
+ import { Logger } from "../utils/logger.js";
2
3
  export declare const DEFAULT_META_API_VERSION = "v25.0";
3
4
  export declare const DEFAULT_THREADS_API_VERSION = "v1.0";
5
+ export declare const DEFAULT_MAX_RETRIES = 3;
6
+ export declare const DEFAULT_RETRY_BASE_DELAY_MS = 1000;
7
+ export declare const MAX_RETRY_DELAY_MS = 60000;
8
+ export declare const REQUEST_TIMEOUT_MS = 30000;
9
+ /**
10
+ * Parse a `Retry-After` response header value (RFC 7231 §7.1.3) into
11
+ * milliseconds. Returns `undefined` for missing or unparseable values so the
12
+ * caller falls back to the exponential-backoff schedule. Past dates and
13
+ * negative seconds clamp to `0` to absorb server time skew.
14
+ */
15
+ export declare function parseRetryAfter(value: string | null, nowMs: number): number | undefined;
16
+ /**
17
+ * Exponential backoff `base * 2^attempt` with 0–25% jitter to spread
18
+ * concurrent clients and avoid thundering-herd reconnects. Capped at
19
+ * {@link MAX_RETRY_DELAY_MS}. `rand` is injectable for deterministic tests.
20
+ */
21
+ export declare function computeBackoffDelay(attempt: number, baseDelayMs: number, rand?: () => number): number;
4
22
  export interface MetaClientOptions {
5
23
  metaApiVersion?: string;
6
24
  threadsApiVersion?: string;
25
+ /**
26
+ * Maximum number of retry attempts after the initial request fails with a
27
+ * transient error (HTTP 429/500/502/503/504 or a thrown network error).
28
+ * Total request count is `maxRetries + 1`. Set to `0` to disable retries
29
+ * entirely (matches pre-#61 behavior). Defaults to {@link DEFAULT_MAX_RETRIES}.
30
+ */
31
+ maxRetries?: number;
32
+ /**
33
+ * Base delay (ms) used by the exponential-backoff schedule between retries.
34
+ * Attempt N waits `baseDelayMs * 2^N` plus 0–25% jitter (capped at
35
+ * {@link MAX_RETRY_DELAY_MS}). Defaults to {@link DEFAULT_RETRY_BASE_DELAY_MS}.
36
+ * Tests pass `0` to make retries fire immediately without real waiting.
37
+ */
38
+ retryBaseDelayMs?: number;
39
+ /**
40
+ * @internal — testing-only seam, not part of the stable API. Injection point
41
+ * for the sleep primitive used between retries. Defaults to a
42
+ * `setTimeout`-backed `Promise`.
43
+ */
44
+ sleep?: (ms: number) => Promise<void>;
45
+ /**
46
+ * @internal — testing-only seam, not part of the stable API. Injection point
47
+ * for the current-time source used when parsing the HTTP-date form of the
48
+ * `Retry-After` header. Defaults to `Date.now`.
49
+ */
50
+ now?: () => number;
51
+ /**
52
+ * Structured-logging sink. Defaults to {@link NOOP_LOGGER}; `index.ts` injects
53
+ * a `createMcpLogger(server)` so request/error/rate-limit/audit events reach
54
+ * the MCP `notifications/message` channel (#62).
55
+ */
56
+ logger?: Logger;
7
57
  }
8
58
  export interface RateLimit {
9
59
  callCount?: number;
10
60
  totalCpuTime?: number;
11
61
  totalTime?: number;
12
62
  }
63
+ export declare const RATE_LIMIT_SLOWDOWN_THRESHOLD = 80;
64
+ export declare const RATE_LIMIT_BACKOFF_THRESHOLD = 90;
65
+ export declare const RATE_LIMIT_SLOWDOWN_MS = 1000;
66
+ export declare const RATE_LIMIT_BACKOFF_MS = 5000;
67
+ export declare const RATE_LIMIT_SNAPSHOT_TTL_MS: number;
68
+ export declare const PROFILE_CACHE_TTL_MS: number;
69
+ export declare const HASHTAG_CACHE_TTL_MS: number;
13
70
  export interface ClientResponse {
14
71
  data: Record<string, unknown>;
15
72
  rateLimit?: RateLimit;
16
73
  }
74
+ export type HttpMethod = "GET" | "POST" | "DELETE";
17
75
  /**
18
76
  * Allowed value types for form-encoded query string and request body parameters.
19
77
  * Non-primitive values (arrays, objects) must be serialized by the caller (JSON.stringify, .join(",") etc.)
@@ -54,13 +112,24 @@ export declare class MetaClient {
54
112
  private igBase;
55
113
  private fbBase;
56
114
  private threadsBase;
115
+ private lastRateLimit?;
116
+ private lastRateLimitAt?;
117
+ private cache;
118
+ private maxRetries;
119
+ private retryBaseDelayMs;
120
+ private sleep;
121
+ private now;
122
+ private logger;
57
123
  constructor(config: MetaConfig, options?: MetaClientOptions);
58
124
  private parseRateLimit;
125
+ private maybeThrottle;
59
126
  private appendFormParams;
60
127
  private request;
61
- ig(method: string, path: string, params?: FormParams, options?: RequestOptions): Promise<ClientResponse>;
62
- threads(method: string, path: string, params?: FormParams, options?: RequestOptions): Promise<ClientResponse>;
63
- meta(method: string, path: string, params?: FormParams, options?: RequestOptions): Promise<ClientResponse>;
128
+ private auditMutation;
129
+ private requestRaw;
130
+ ig(method: HttpMethod, path: string, params?: FormParams, options?: RequestOptions): Promise<ClientResponse>;
131
+ threads(method: HttpMethod, path: string, params?: FormParams, options?: RequestOptions): Promise<ClientResponse>;
132
+ meta(method: HttpMethod, path: string, params?: FormParams, options?: RequestOptions): Promise<ClientResponse>;
64
133
  /** Exchange short-lived Instagram token for long-lived token (60 days) */
65
134
  igExchangeToken(shortToken: string): Promise<ClientResponse>;
66
135
  /** Refresh a long-lived Instagram token (must be at least 24h old and not expired) */
@@ -73,5 +142,9 @@ export declare class MetaClient {
73
142
  debugToken(inputToken: string): Promise<ClientResponse>;
74
143
  get igUserId(): string;
75
144
  get threadsUserId(): string;
145
+ updateConfig(partial: Partial<MetaConfig>): void;
146
+ getCached<T>(key: string): T | undefined;
147
+ setCache(key: string, data: unknown, ttlMs: number): void;
148
+ invalidateCache(prefix?: string): void;
76
149
  }
77
150
  //# sourceMappingURL=meta-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta-client.d.ts","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAa1C,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAChD,eAAO,MAAM,2BAA2B,SAAS,CAAC;AA8BlD,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AA4BD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAiB3D,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,gBAAgB;YAeV,OAAO;IAuFf,EAAE,CACN,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,CAAC;IAOpB,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,CAAC;IAOpB,IAAI,CACR,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,CAAC;IAQ1B,0EAA0E;IACpE,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAUlE,sFAAsF;IAChF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMhE,wEAAwE;IAClE,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAUvE,oFAAoF;IAC9E,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMrE,oBAAoB;IACd,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU7D,IAAI,QAAQ,IAAI,MAAM,CAKrB;IAED,IAAI,aAAa,IAAI,MAAM,CAK1B;CACF"}
1
+ {"version":3,"file":"meta-client.d.ts","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import { MetaApiError } from "../utils/errors.js";
1
+ import { MetaApiError, MetaNetworkError, sanitizeRaw } from "../utils/errors.js";
2
+ import { NOOP_LOGGER } from "../utils/logger.js";
2
3
  // Default Meta Graph API and Threads API versions — last verified 2026-05-06.
3
4
  // The Graph API ships a new minor version every ~4 months and supports each
4
5
  // for ~2 years; Threads runs a separate single-major-version track (v1.0 since
@@ -16,6 +17,53 @@ const API_VERSION_PATTERN = /^v\d+\.\d+$/;
16
17
  // surface has no version segment; piping META_API_VERSION here would 404).
17
18
  const IG_TOKEN_BASE = "https://graph.instagram.com";
18
19
  const THREADS_TOKEN_BASE = "https://graph.threads.net";
20
+ // Retry policy for transient Meta API failures (#61). 429 is the explicit
21
+ // rate-limit signal; 502/503/504 are canonical gateway/availability errors;
22
+ // 500 is included because Meta's infrastructure routinely returns transient
23
+ // 500s during brief overloads alongside the more canonical 5xx codes. Every
24
+ // other 4xx is a permanent caller-side error (auth, validation) and fails fast.
25
+ const RETRYABLE_HTTP_STATUSES = new Set([429, 500, 502, 503, 504]);
26
+ export const DEFAULT_MAX_RETRIES = 3;
27
+ export const DEFAULT_RETRY_BASE_DELAY_MS = 1000;
28
+ // Cap so a malformed `Retry-After: 999999` (≈11 days) can't hang a tool.
29
+ export const MAX_RETRY_DELAY_MS = 60_000;
30
+ export const REQUEST_TIMEOUT_MS = 30_000;
31
+ /**
32
+ * Parse a `Retry-After` response header value (RFC 7231 §7.1.3) into
33
+ * milliseconds. Returns `undefined` for missing or unparseable values so the
34
+ * caller falls back to the exponential-backoff schedule. Past dates and
35
+ * negative seconds clamp to `0` to absorb server time skew.
36
+ */
37
+ export function parseRetryAfter(value, nowMs) {
38
+ if (value === null)
39
+ return undefined;
40
+ const trimmed = value.trim();
41
+ if (trimmed === "")
42
+ return undefined;
43
+ if (/^-?\d+(\.\d+)?$/.test(trimmed)) {
44
+ const seconds = Number(trimmed);
45
+ if (Number.isFinite(seconds))
46
+ return Math.max(0, seconds * 1000);
47
+ }
48
+ const dateMs = Date.parse(trimmed);
49
+ if (!Number.isNaN(dateMs)) {
50
+ return Math.max(0, dateMs - nowMs);
51
+ }
52
+ return undefined;
53
+ }
54
+ /**
55
+ * Exponential backoff `base * 2^attempt` with 0–25% jitter to spread
56
+ * concurrent clients and avoid thundering-herd reconnects. Capped at
57
+ * {@link MAX_RETRY_DELAY_MS}. `rand` is injectable for deterministic tests.
58
+ */
59
+ export function computeBackoffDelay(attempt, baseDelayMs, rand = Math.random) {
60
+ const exponential = baseDelayMs * Math.pow(2, attempt);
61
+ const jitter = exponential * 0.25 * rand();
62
+ return Math.min(exponential + jitter, MAX_RETRY_DELAY_MS);
63
+ }
64
+ function defaultSleep(ms) {
65
+ return new Promise((resolve) => setTimeout(resolve, ms));
66
+ }
19
67
  function resolveApiVersion(envName, fallback, explicit) {
20
68
  // Explicit MetaClientOptions value, if any, takes precedence over the env
21
69
  // var; both go through the same regex check + warn-fallback so a malformed
@@ -31,6 +79,22 @@ function resolveApiVersion(envName, fallback, explicit) {
31
79
  }
32
80
  return raw;
33
81
  }
82
+ // Pre-request throttle thresholds — Meta throttles at 100% usage on any of
83
+ // callCount / totalCpuTime / totalTime per
84
+ // https://developers.facebook.com/docs/graph-api/overview/rate-limiting/,
85
+ // so we back off well before the cliff.
86
+ export const RATE_LIMIT_SLOWDOWN_THRESHOLD = 80;
87
+ export const RATE_LIMIT_BACKOFF_THRESHOLD = 90;
88
+ export const RATE_LIMIT_SLOWDOWN_MS = 1000;
89
+ export const RATE_LIMIT_BACKOFF_MS = 5000;
90
+ // Meta's rate-limit window is rolling 1h — discard the snapshot after that so
91
+ // a long-idle client doesn't pay a spurious backoff on its first post-idle call.
92
+ export const RATE_LIMIT_SNAPSHOT_TTL_MS = 60 * 60 * 1000;
93
+ // Response cache TTLs (#90). Hashtag TTL matches Meta's 30-unique-hashtag /
94
+ // 7-day API quota so a session-long cache stays warm for the full quota window;
95
+ // profile TTL is kept short to bound follower-count staleness.
96
+ export const PROFILE_CACHE_TTL_MS = 5 * 60 * 1000;
97
+ export const HASHTAG_CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000;
34
98
  function parseMetaErrorBody(text) {
35
99
  if (!text)
36
100
  return undefined;
@@ -51,11 +115,43 @@ function parseMetaErrorBody(text) {
51
115
  return undefined;
52
116
  }
53
117
  }
118
+ // Shape the `data` payload for an error-level log. method + path are safe (the
119
+ // access_token lives only in the query string, never the path); the message is
120
+ // passed through sanitizeRaw as a belt-and-suspenders guard against a token
121
+ // leaking from a Meta error body — the MCP logging spec forbids logging secrets.
122
+ function buildErrorLogData(error, method, path) {
123
+ const data = { method, path };
124
+ if (error instanceof MetaApiError) {
125
+ if (error.httpStatus !== undefined)
126
+ data.http_status = error.httpStatus;
127
+ if (error.apiCode !== undefined)
128
+ data.code = error.apiCode;
129
+ if (error.apiSubcode !== undefined)
130
+ data.subcode = error.apiSubcode;
131
+ if (error.apiType)
132
+ data.type = error.apiType;
133
+ if (error.fbtraceId)
134
+ data.fbtrace_id = error.fbtraceId;
135
+ }
136
+ else if (error instanceof MetaNetworkError) {
137
+ data.kind = error.kind;
138
+ }
139
+ data.message = sanitizeRaw(error instanceof Error ? error.message : String(error));
140
+ return data;
141
+ }
54
142
  export class MetaClient {
55
143
  config;
56
144
  igBase;
57
145
  fbBase;
58
146
  threadsBase;
147
+ lastRateLimit;
148
+ lastRateLimitAt;
149
+ cache = new Map();
150
+ maxRetries;
151
+ retryBaseDelayMs;
152
+ sleep;
153
+ now;
154
+ logger;
59
155
  constructor(config, options) {
60
156
  this.config = config;
61
157
  const metaVersion = resolveApiVersion("META_API_VERSION", DEFAULT_META_API_VERSION, options?.metaApiVersion);
@@ -63,6 +159,19 @@ export class MetaClient {
63
159
  this.igBase = `https://graph.instagram.com/${metaVersion}`;
64
160
  this.fbBase = `https://graph.facebook.com/${metaVersion}`;
65
161
  this.threadsBase = `https://graph.threads.net/${threadsVersion}`;
162
+ // `Math.max(0, Infinity)` is `Infinity` (infinite loop) and `0 <= NaN` is
163
+ // `false` (loop body never runs); reject non-finite values and fall back.
164
+ const rawMaxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;
165
+ this.maxRetries = Number.isFinite(rawMaxRetries)
166
+ ? Math.max(0, rawMaxRetries)
167
+ : DEFAULT_MAX_RETRIES;
168
+ const rawBaseDelay = options?.retryBaseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS;
169
+ this.retryBaseDelayMs = Number.isFinite(rawBaseDelay)
170
+ ? Math.max(0, rawBaseDelay)
171
+ : DEFAULT_RETRY_BASE_DELAY_MS;
172
+ this.sleep = options?.sleep ?? defaultSleep;
173
+ this.now = options?.now ?? Date.now;
174
+ this.logger = options?.logger ?? NOOP_LOGGER;
66
175
  }
67
176
  parseRateLimit(headers) {
68
177
  const usage = headers.get("x-app-usage");
@@ -70,16 +179,63 @@ export class MetaClient {
70
179
  return undefined;
71
180
  try {
72
181
  const raw = JSON.parse(usage);
182
+ // `Number(undefined)` is NaN, `Number("92")` is 92 — coerce defensively
183
+ // so a future Meta API tweak (numbers shipped as strings) still produces
184
+ // a usable RateLimit instead of silently leaving fields `undefined`.
185
+ const num = (v) => {
186
+ if (v === undefined || v === null)
187
+ return undefined;
188
+ const n = Number(v);
189
+ return Number.isFinite(n) ? n : undefined;
190
+ };
73
191
  return {
74
- callCount: raw.call_count,
75
- totalCpuTime: raw.total_cpu_time,
76
- totalTime: raw.total_time,
192
+ callCount: num(raw.call_count),
193
+ totalCpuTime: num(raw.total_cpu_time),
194
+ totalTime: num(raw.total_time),
77
195
  };
78
196
  }
79
197
  catch {
80
198
  return undefined;
81
199
  }
82
200
  }
201
+ // Take `max(callCount, totalCpuTime, totalTime)` because Meta throttles on
202
+ // whichever quota hits 100% first. Concurrent calls at high usage both
203
+ // sleep their full delay and then fire together — acceptable for MCP's
204
+ // typically sequential call pattern, still safer than no throttling.
205
+ async maybeThrottle() {
206
+ const rl = this.lastRateLimit;
207
+ if (!rl)
208
+ return;
209
+ if (this.lastRateLimitAt !== undefined && Date.now() - this.lastRateLimitAt > RATE_LIMIT_SNAPSHOT_TTL_MS) {
210
+ this.lastRateLimit = undefined;
211
+ this.lastRateLimitAt = undefined;
212
+ return;
213
+ }
214
+ const max = Math.max(rl.callCount ?? 0, rl.totalCpuTime ?? 0, rl.totalTime ?? 0);
215
+ let delay;
216
+ if (max >= RATE_LIMIT_BACKOFF_THRESHOLD) {
217
+ delay = RATE_LIMIT_BACKOFF_MS;
218
+ }
219
+ else if (max >= RATE_LIMIT_SLOWDOWN_THRESHOLD) {
220
+ delay = RATE_LIMIT_SLOWDOWN_MS;
221
+ }
222
+ else {
223
+ return;
224
+ }
225
+ const warning = {
226
+ message: `x-app-usage at ${max}%; delaying next request by ${delay}ms to stay under Meta's per-app quota`,
227
+ usage_pct: max,
228
+ delay_ms: delay,
229
+ };
230
+ if (rl.callCount !== undefined)
231
+ warning.call_count = rl.callCount;
232
+ if (rl.totalTime !== undefined)
233
+ warning.total_time = rl.totalTime;
234
+ if (rl.totalCpuTime !== undefined)
235
+ warning.total_cpu_time = rl.totalCpuTime;
236
+ this.logger.warning(warning);
237
+ await new Promise((resolve) => setTimeout(resolve, delay));
238
+ }
83
239
  // Used for both form bodies (POST/PUT) and query strings (GET/DELETE) — every
84
240
  // entry ends up URL-encoded in `qs`. Skipping `""` must precede the typeof
85
241
  // check so the type narrowing below stays correct after the filter.
@@ -96,9 +252,45 @@ export class MetaClient {
96
252
  qs.set(k, String(v));
97
253
  }
98
254
  }
255
+ // Logging wrapper around the retry loop (#62): the terminal error is logged
256
+ // once here — transient retries `continue` inside requestRaw and never reach
257
+ // this catch.
99
258
  async request(baseUrl, token, method, path, params, options) {
259
+ this.logger.debug({ method, path });
260
+ try {
261
+ const res = await this.requestRaw(baseUrl, token, method, path, params, options);
262
+ this.auditMutation(method, path, params, res.data);
263
+ return res;
264
+ }
265
+ catch (err) {
266
+ this.logger.error(buildErrorLogData(err, method, path));
267
+ throw err;
268
+ }
269
+ }
270
+ // Audit (info) for state-changing ops so they stay visible when a client
271
+ // raises the level above debug. The /threads check is gated on
272
+ // auto_publish_text because that endpoint ALSO creates the unpublished
273
+ // container in two-step flows — auditing the bare path would mislabel
274
+ // container creation as a publish (the two-step publish is caught by
275
+ // /threads_publish instead).
276
+ auditMutation(method, path, params, data) {
277
+ if (method === "DELETE") {
278
+ this.logger.info({ operation: "delete", method, path });
279
+ return;
280
+ }
281
+ const isPublish = path.endsWith("/media_publish") ||
282
+ path.endsWith("/threads_publish") ||
283
+ path.endsWith("/repost") ||
284
+ (path.endsWith("/threads") && params?.auto_publish_text === true);
285
+ if (isPublish) {
286
+ const entry = { operation: "publish", method, path };
287
+ if (typeof data.id === "string")
288
+ entry.id = data.id;
289
+ this.logger.info(entry);
290
+ }
291
+ }
292
+ async requestRaw(baseUrl, token, method, path, params, options) {
100
293
  let url = `${baseUrl}${path}`;
101
- const init = { method, signal: AbortSignal.timeout(30_000) };
102
294
  const isWrite = method !== "GET" && method !== "DELETE";
103
295
  const useJson = isWrite && options?.jsonBody !== undefined;
104
296
  // `params` always lands in the URL query string (form body for POST/PUT,
@@ -113,61 +305,119 @@ export class MetaClient {
113
305
  qs.set("access_token", token);
114
306
  if (params)
115
307
  this.appendFormParams(qs, params);
308
+ // Body/headers are stable strings reusable across retry attempts; only
309
+ // `signal` must be fresh per attempt — sharing an exhausted
310
+ // `AbortSignal.timeout` would silently abort every subsequent retry.
311
+ const baseInit = { method };
116
312
  if (useJson) {
117
313
  url += (url.includes("?") ? "&" : "?") + qs.toString();
118
- init.headers = { "Content-Type": "application/json" };
119
- init.body = JSON.stringify(options.jsonBody);
314
+ baseInit.headers = { "Content-Type": "application/json" };
315
+ baseInit.body = JSON.stringify(options.jsonBody);
120
316
  }
121
317
  else if (isWrite) {
122
- init.headers = { "Content-Type": "application/x-www-form-urlencoded" };
123
- init.body = qs.toString();
318
+ baseInit.headers = { "Content-Type": "application/x-www-form-urlencoded" };
319
+ baseInit.body = qs.toString();
124
320
  }
125
321
  else {
126
322
  url += (url.includes("?") ? "&" : "?") + qs.toString();
127
323
  }
128
- const res = await fetch(url, init);
129
- if (!res.ok) {
130
- const text = await res.text().catch(() => "");
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
- });
144
- }
145
- const rateLimit = this.parseRateLimit(res.headers);
146
- const contentType = res.headers.get("content-type") || "";
147
- if (contentType.includes("application/json")) {
148
- const data = (await res.json());
149
- if (data.error) {
150
- const err = data.error;
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;
324
+ // Retry loop (#61): total request count is `maxRetries + 1`. `attempt` is
325
+ // 0-based — `attempt = 0` is the initial request, `attempt = N` is the Nth
326
+ // retry. `computeBackoffDelay(attempt, )` therefore produces the correct
327
+ // 1s / 2s / 4s schedule on attempts 0 / 1 / 2 before retries 1 / 2 / 3.
328
+ // The trailing `throw` after the loop is for TS control-flow narrowing.
329
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
330
+ // Pre-request throttle from #60 runs before every attempt so a retry
331
+ // after a 429 still consults the most recent x-app-usage snapshot.
332
+ await this.maybeThrottle();
333
+ // Arm the 30s abort timer *after* the throttle sleep so a backoff at
334
+ // high x-app-usage doesn't eat into the actual network window (#60 review).
335
+ const init = { ...baseInit, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS) };
336
+ let res;
337
+ try {
338
+ res = await fetch(url, init);
339
+ }
340
+ catch (err) {
341
+ if (attempt < this.maxRetries) {
342
+ await this.sleep(computeBackoffDelay(attempt, this.retryBaseDelayMs));
343
+ continue;
344
+ }
345
+ // AbortSignal.timeout per WHATWG throws name="TimeoutError"; "AbortError"
346
+ // is defensive cover for environments using the older spelling, safe
347
+ // today because AbortSignal.timeout is the only abort source in this
348
+ // file revisit if a caller-controlled AbortController is ever wired
349
+ // in, since user-aborted signals would then be misclassified (#72).
350
+ const isTimeout = err instanceof Error && (err.name === "TimeoutError" || err.name === "AbortError");
351
+ throw new MetaNetworkError({
352
+ kind: isTimeout ? "timeout" : "network",
353
+ endpoint: path,
354
+ method,
355
+ cause: err,
356
+ timeoutMs: REQUEST_TIMEOUT_MS,
357
+ });
358
+ }
359
+ // Parse rate-limit on every response (a 429 still carries `x-app-usage`);
360
+ // header-less responses (OAuth token endpoints) leave state intact.
361
+ const rateLimit = this.parseRateLimit(res.headers);
362
+ if (rateLimit) {
363
+ this.lastRateLimit = rateLimit;
364
+ this.lastRateLimitAt = Date.now();
365
+ }
366
+ if (!res.ok &&
367
+ RETRYABLE_HTTP_STATUSES.has(res.status) &&
368
+ attempt < this.maxRetries) {
369
+ const retryAfterMs = parseRetryAfter(res.headers.get("retry-after"), this.now());
370
+ const delay = retryAfterMs !== undefined
371
+ ? Math.min(retryAfterMs, MAX_RETRY_DELAY_MS)
372
+ : computeBackoffDelay(attempt, this.retryBaseDelayMs);
373
+ // Release the connection — `cancel()` rejects on already-consumed bodies.
374
+ res.body?.cancel().catch(() => { });
375
+ await this.sleep(delay);
376
+ continue;
377
+ }
378
+ if (!res.ok) {
379
+ const text = await res.text().catch(() => "");
380
+ const parsed = parseMetaErrorBody(text);
381
+ const detail = parsed?.message ?? text;
156
382
  throw new MetaApiError({
157
- message: `Meta API error: ${apiMessage} (code ${apiCode ?? "?"})`,
158
- apiCode,
159
- apiSubcode,
160
- apiType,
161
- fbtraceId,
383
+ message: `Meta API ${method} ${path} (${res.status}): ${detail}`,
384
+ httpStatus: res.status,
385
+ apiCode: parsed?.code,
386
+ apiSubcode: parsed?.subcode,
387
+ apiType: parsed?.type,
388
+ fbtraceId: parsed?.fbtraceId,
162
389
  endpoint: path,
163
390
  method,
164
- body: JSON.stringify(err),
391
+ body: text,
165
392
  });
166
393
  }
167
- return { data, rateLimit };
394
+ const contentType = res.headers.get("content-type") || "";
395
+ if (contentType.includes("application/json")) {
396
+ const data = (await res.json());
397
+ if (data.error) {
398
+ const err = data.error;
399
+ const apiCode = typeof err.code === "number" ? err.code : undefined;
400
+ const apiSubcode = typeof err.error_subcode === "number" ? err.error_subcode : undefined;
401
+ const apiType = typeof err.type === "string" ? err.type : undefined;
402
+ const apiMessage = typeof err.message === "string" ? err.message : String(err.message ?? "");
403
+ const fbtraceId = typeof err.fbtrace_id === "string" ? err.fbtrace_id : undefined;
404
+ throw new MetaApiError({
405
+ message: `Meta API error: ${apiMessage} (code ${apiCode ?? "?"})`,
406
+ apiCode,
407
+ apiSubcode,
408
+ apiType,
409
+ fbtraceId,
410
+ endpoint: path,
411
+ method,
412
+ body: JSON.stringify(err),
413
+ });
414
+ }
415
+ return { data, rateLimit };
416
+ }
417
+ const text = await res.text();
418
+ return { data: { raw: text, success: true }, rateLimit };
168
419
  }
169
- const text = await res.text();
170
- return { data: { raw: text, success: true }, rateLimit };
420
+ throw new Error("MetaClient: retry loop exited without resolution (unreachable)");
171
421
  }
172
422
  async ig(method, path, params, options) {
173
423
  if (!this.config.instagramAccessToken) {
@@ -242,5 +492,39 @@ export class MetaClient {
242
492
  }
243
493
  return this.config.threadsUserId;
244
494
  }
495
+ // Request methods re-read `this.config.<field>` per call, so mutating
496
+ // `this.config` is enough for runtime token rotation — no URL or token
497
+ // cache needs invalidation (#65). The response cache (#90), however, holds
498
+ // per-account profile data that no longer applies after the rotation.
499
+ updateConfig(partial) {
500
+ this.config = { ...this.config, ...partial };
501
+ this.invalidateCache();
502
+ }
503
+ // Expired entries are evicted lazily on read; the cache is bounded by use
504
+ // (≤2 profile keys + ≤30 hashtag keys per the 7-day API quota), so no
505
+ // background sweep is needed.
506
+ getCached(key) {
507
+ const entry = this.cache.get(key);
508
+ if (!entry)
509
+ return undefined;
510
+ if (Date.now() >= entry.expiry) {
511
+ this.cache.delete(key);
512
+ return undefined;
513
+ }
514
+ return entry.data;
515
+ }
516
+ setCache(key, data, ttlMs) {
517
+ this.cache.set(key, { data, expiry: Date.now() + ttlMs });
518
+ }
519
+ invalidateCache(prefix) {
520
+ if (prefix === undefined) {
521
+ this.cache.clear();
522
+ return;
523
+ }
524
+ for (const key of this.cache.keys()) {
525
+ if (key.startsWith(prefix))
526
+ this.cache.delete(key);
527
+ }
528
+ }
245
529
  }
246
530
  //# sourceMappingURL=meta-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"meta-client.js","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta-client.js","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"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"}