@exileum/meta-mcp 7.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 (96) hide show
  1. package/README.md +31 -7
  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 +76 -26
  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/resources/instagram.d.ts.map +1 -1
  18. package/dist/resources/instagram.js +13 -4
  19. package/dist/resources/instagram.js.map +1 -1
  20. package/dist/resources/threads.d.ts.map +1 -1
  21. package/dist/resources/threads.js +13 -4
  22. package/dist/resources/threads.js.map +1 -1
  23. package/dist/services/meta-client.d.ts +22 -3
  24. package/dist/services/meta-client.d.ts.map +1 -1
  25. package/dist/services/meta-client.js +132 -6
  26. package/dist/services/meta-client.js.map +1 -1
  27. package/dist/shutdown.d.ts +18 -0
  28. package/dist/shutdown.d.ts.map +1 -0
  29. package/dist/shutdown.js +60 -0
  30. package/dist/shutdown.js.map +1 -0
  31. package/dist/tools/instagram/comments.d.ts.map +1 -1
  32. package/dist/tools/instagram/comments.js +14 -19
  33. package/dist/tools/instagram/comments.js.map +1 -1
  34. package/dist/tools/instagram/hashtags.d.ts +1 -0
  35. package/dist/tools/instagram/hashtags.d.ts.map +1 -1
  36. package/dist/tools/instagram/hashtags.js +19 -19
  37. package/dist/tools/instagram/hashtags.js.map +1 -1
  38. package/dist/tools/instagram/media.d.ts.map +1 -1
  39. package/dist/tools/instagram/media.js +8 -11
  40. package/dist/tools/instagram/media.js.map +1 -1
  41. package/dist/tools/instagram/mentions.d.ts.map +1 -1
  42. package/dist/tools/instagram/mentions.js +2 -7
  43. package/dist/tools/instagram/mentions.js.map +1 -1
  44. package/dist/tools/instagram/messaging.d.ts.map +1 -1
  45. package/dist/tools/instagram/messaging.js +10 -20
  46. package/dist/tools/instagram/messaging.js.map +1 -1
  47. package/dist/tools/instagram/profile.d.ts +2 -0
  48. package/dist/tools/instagram/profile.d.ts.map +1 -1
  49. package/dist/tools/instagram/profile.js +13 -15
  50. package/dist/tools/instagram/profile.js.map +1 -1
  51. package/dist/tools/instagram/publishing.d.ts.map +1 -1
  52. package/dist/tools/instagram/publishing.js +133 -96
  53. package/dist/tools/instagram/publishing.js.map +1 -1
  54. package/dist/tools/meta/auth.d.ts.map +1 -1
  55. package/dist/tools/meta/auth.js +18 -2
  56. package/dist/tools/meta/auth.js.map +1 -1
  57. package/dist/tools/threads/insights.d.ts.map +1 -1
  58. package/dist/tools/threads/insights.js +2 -5
  59. package/dist/tools/threads/insights.js.map +1 -1
  60. package/dist/tools/threads/media.d.ts.map +1 -1
  61. package/dist/tools/threads/media.js +5 -47
  62. package/dist/tools/threads/media.js.map +1 -1
  63. package/dist/tools/threads/mentions.d.ts.map +1 -1
  64. package/dist/tools/threads/mentions.js +3 -10
  65. package/dist/tools/threads/mentions.js.map +1 -1
  66. package/dist/tools/threads/profile.d.ts +2 -0
  67. package/dist/tools/threads/profile.d.ts.map +1 -1
  68. package/dist/tools/threads/profile.js +10 -1
  69. package/dist/tools/threads/profile.js.map +1 -1
  70. package/dist/tools/threads/publishing.d.ts.map +1 -1
  71. package/dist/tools/threads/publishing.js +122 -103
  72. package/dist/tools/threads/publishing.js.map +1 -1
  73. package/dist/tools/threads/replies.d.ts.map +1 -1
  74. package/dist/tools/threads/replies.js +15 -23
  75. package/dist/tools/threads/replies.js.map +1 -1
  76. package/dist/utils/container.d.ts +16 -4
  77. package/dist/utils/container.d.ts.map +1 -1
  78. package/dist/utils/container.js +36 -6
  79. package/dist/utils/container.js.map +1 -1
  80. package/dist/utils/errors.d.ts +23 -3
  81. package/dist/utils/errors.d.ts.map +1 -1
  82. package/dist/utils/errors.js +32 -2
  83. package/dist/utils/errors.js.map +1 -1
  84. package/dist/utils/logger.d.ts +28 -0
  85. package/dist/utils/logger.d.ts.map +1 -0
  86. package/dist/utils/logger.js +32 -0
  87. package/dist/utils/logger.js.map +1 -0
  88. package/dist/utils/params.d.ts +3 -0
  89. package/dist/utils/params.d.ts.map +1 -0
  90. package/dist/utils/params.js +14 -0
  91. package/dist/utils/params.js.map +1 -0
  92. package/dist/utils/progress.d.ts +42 -0
  93. package/dist/utils/progress.d.ts.map +1 -0
  94. package/dist/utils/progress.js +35 -0
  95. package/dist/utils/progress.js.map +1 -0
  96. package/package.json +3 -2
@@ -3,6 +3,7 @@ import { httpsUrl, metaId } from "../../schemas.js";
3
3
  import { waitForThreadsContainer, IMAGE_PROCESSING_TIMEOUT, VIDEO_PROCESSING_TIMEOUT } from "../../utils/container.js";
4
4
  import { formatErrorResponse, validationError } from "../../utils/errors.js";
5
5
  import { formatResponse } from "../../utils/response.js";
6
+ import { buildParams } from "../../utils/params.js";
6
7
  import { READ_ONLY_TOOL, WRITE_TOOL, WRITE_IDEMPOTENT_TOOL } from "../annotations.js";
7
8
  const REPLIES_BASE_FIELDS = "id,text,username,permalink,timestamp,media_type,media_url,has_replies,hide_status,root_post,replied_to,is_reply,is_quote_post";
8
9
  // is_verified / profile_picture_url are documented as "Only available on direct
@@ -29,15 +30,7 @@ export function registerThreadsReplyTools(server, client) {
29
30
  const defaultFields = mode === "full_tree"
30
31
  ? REPLIES_FULL_TREE_DEFAULT_FIELDS
31
32
  : REPLIES_TOP_LEVEL_DEFAULT_FIELDS;
32
- const params = {
33
- fields: fields || defaultFields,
34
- };
35
- if (reverse !== undefined)
36
- params.reverse = reverse;
37
- if (limit !== undefined)
38
- params.limit = limit;
39
- if (after)
40
- params.after = after;
33
+ const params = buildParams({ fields: fields || defaultFields }, { reverse, limit, after });
41
34
  const edge = mode === "full_tree" ? "conversation" : "replies";
42
35
  const { data, rateLimit } = await client.threads("GET", `/${post_id}/${edge}`, params);
43
36
  return formatResponse(data, rateLimit);
@@ -58,6 +51,8 @@ export function registerThreadsReplyTools(server, client) {
58
51
  },
59
52
  annotations: WRITE_TOOL,
60
53
  }, async ({ reply_to_id, text, image_url, video_url, auto_publish }) => {
54
+ let step = "container creation";
55
+ let containerId;
61
56
  try {
62
57
  if (image_url && video_url) {
63
58
  return validationError("image_url and video_url cannot be combined on a single reply");
@@ -72,17 +67,11 @@ export function registerThreadsReplyTools(server, client) {
72
67
  // if a caller bypasses Zod's schema-level default. Only an explicit `false`
73
68
  // forces the legacy two-step flow for text replies.
74
69
  const useAutoPublish = isTextOnly && auto_publish !== false;
75
- const params = {
76
- media_type: mediaType,
77
- text,
78
- reply_to_id,
79
- };
80
- if (image_url)
81
- params.image_url = image_url;
82
- if (video_url)
83
- params.video_url = video_url;
84
- if (useAutoPublish)
85
- params.auto_publish_text = true;
70
+ const params = buildParams({ media_type: mediaType, text, reply_to_id }, {
71
+ image_url,
72
+ video_url,
73
+ auto_publish_text: useAutoPublish ? true : undefined,
74
+ });
86
75
  // `createResponse.id` is the published post id when useAutoPublish is true,
87
76
  // and the unpublished container id otherwise.
88
77
  const { data: createResponse, rateLimit: createRateLimit } = await client.threads("POST", `/${client.threadsUserId}/threads`, params);
@@ -91,16 +80,19 @@ export function registerThreadsReplyTools(server, client) {
91
80
  if (useAutoPublish) {
92
81
  return formatResponse(createResponse, createRateLimit);
93
82
  }
83
+ containerId = createResponse.id;
94
84
  if (image_url || video_url) {
95
- await waitForThreadsContainer(client, createResponse.id, video_url ? VIDEO_PROCESSING_TIMEOUT : IMAGE_PROCESSING_TIMEOUT);
85
+ step = "processing";
86
+ await waitForThreadsContainer(client, containerId, video_url ? VIDEO_PROCESSING_TIMEOUT : IMAGE_PROCESSING_TIMEOUT);
96
87
  }
88
+ step = "publishing";
97
89
  const { data, rateLimit } = await client.threads("POST", `/${client.threadsUserId}/threads_publish`, {
98
- creation_id: createResponse.id,
90
+ creation_id: containerId,
99
91
  });
100
92
  return formatResponse(data, rateLimit);
101
93
  }
102
94
  catch (error) {
103
- return formatErrorResponse(error, "Reply");
95
+ return formatErrorResponse(error, "Reply", { step, containerId });
104
96
  }
105
97
  });
106
98
  // ─── threads_hide_reply ──────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"replies.js","sourceRoot":"","sources":["../../../src/tools/threads/replies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replies.js","sourceRoot":"","sources":["../../../src/tools/threads/replies.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,31 @@
1
- import { MetaClient, ClientResponse, FormParams } from "../services/meta-client.js";
2
- type ApiCallFn = (method: string, path: string, params?: FormParams) => Promise<ClientResponse>;
1
+ import { MetaClient, ClientResponse, FormParams, HttpMethod } from "../services/meta-client.js";
2
+ type ApiCallFn = (method: HttpMethod, path: string, params?: FormParams) => Promise<ClientResponse>;
3
3
  export declare const IMAGE_PROCESSING_TIMEOUT = 30;
4
4
  export declare const VIDEO_PROCESSING_TIMEOUT = 300;
5
+ export declare const POLL_BACKOFF_FACTOR = 1.5;
6
+ export declare const MAX_POLL_INTERVAL_MS = 30000;
7
+ export declare const POLL_JITTER_MS = 500;
8
+ export type ContainerProgressCallback = (progress: number, total: number, message?: string) => void;
5
9
  export interface PollContainerOptions {
6
10
  apiCall: ApiCallFn;
7
11
  statusField: "status" | "status_code";
8
12
  label: string;
9
13
  maxWait?: number;
10
14
  interval?: number;
15
+ maxInterval?: number;
16
+ backoffFactor?: number;
17
+ jitterMs?: number;
18
+ random?: () => number;
19
+ onProgress?: ContainerProgressCallback;
20
+ }
21
+ export interface ContainerWaitOptions {
22
+ onProgress?: ContainerProgressCallback;
11
23
  }
12
24
  /** Poll container status until FINISHED or terminal status */
13
25
  export declare function pollContainerStatus(containerId: string, options: PollContainerOptions): Promise<void>;
14
26
  /** Instagram container polling — uses client.ig() and status_code field */
15
- export declare function waitForIgContainer(client: MetaClient, containerId: string, maxWait?: number): Promise<void>;
27
+ export declare function waitForIgContainer(client: MetaClient, containerId: string, maxWait?: number, options?: ContainerWaitOptions): Promise<void>;
16
28
  /** Threads container polling — uses client.threads() and status field */
17
- export declare function waitForThreadsContainer(client: MetaClient, containerId: string, maxWait?: number): Promise<void>;
29
+ export declare function waitForThreadsContainer(client: MetaClient, containerId: string, maxWait?: number, options?: ContainerWaitOptions): Promise<void>;
18
30
  export {};
19
31
  //# sourceMappingURL=container.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/utils/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEpF,KAAK,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAKhG,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,SAAS,CAAC;IACnB,WAAW,EAAE,QAAQ,GAAG,aAAa,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,8DAA8D;AAC9D,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB3G;AAED,2EAA2E;AAC3E,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAOnI;AAED,yEAAyE;AACzE,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxI"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/utils/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEhG,KAAK,SAAS,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAKpG,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAI5C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC;AAKlC,MAAM,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;AAEpG,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,SAAS,CAAC;IACnB,WAAW,EAAE,QAAQ,GAAG,aAAa,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACxC;AAED,8DAA8D;AAC9D,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD3G;AAED,2EAA2E;AAC3E,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAA2B,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvK;AAED,yEAAyE;AACzE,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,SAA2B,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ5K"}
@@ -3,15 +3,35 @@
3
3
  // for no more than 5 minutes" per the Instagram content publishing docs.
4
4
  export const IMAGE_PROCESSING_TIMEOUT = 30;
5
5
  export const VIDEO_PROCESSING_TIMEOUT = 300;
6
+ // Backoff caps polls at ~11 over a 300s video budget (down from ~60 fixed-5s)
7
+ // and jitter spreads concurrent carousel-child polls (#48) off the same tick.
8
+ export const POLL_BACKOFF_FACTOR = 1.5;
9
+ export const MAX_POLL_INTERVAL_MS = 30_000;
10
+ export const POLL_JITTER_MS = 500;
6
11
  /** Poll container status until FINISHED or terminal status */
7
12
  export async function pollContainerStatus(containerId, options) {
8
- const { apiCall, statusField, label, maxWait = IMAGE_PROCESSING_TIMEOUT, interval = 5000 } = options;
13
+ const { apiCall, statusField, label, maxWait = IMAGE_PROCESSING_TIMEOUT, interval = 5000, maxInterval = MAX_POLL_INTERVAL_MS, backoffFactor = POLL_BACKOFF_FACTOR, jitterMs = POLL_JITTER_MS, random = Math.random, onProgress, } = options;
14
+ // Upper-bound denominator for `onProgress` — the fixed-interval count. Real
15
+ // attempts trend much lower under backoff, so a determinate progress bar
16
+ // completes early; harmless and avoids changing the callback signature.
9
17
  const maxAttempts = Math.ceil((maxWait * 1000) / interval);
18
+ const deadline = Date.now() + maxWait * 1000;
10
19
  let lastStatus;
11
- for (let i = 0; i < maxAttempts; i++) {
20
+ let attempt = 0;
21
+ while (true) {
12
22
  const { data } = await apiCall("GET", `/${containerId}`, { fields: statusField });
13
23
  const status = data[statusField];
14
24
  lastStatus = status;
25
+ // 1-based so the very first emission is already strictly > 0, satisfying
26
+ // the MCP requirement that progress increases monotonically per token.
27
+ if (onProgress) {
28
+ try {
29
+ onProgress(attempt + 1, maxAttempts, status ? `${label} status: ${status}` : undefined);
30
+ }
31
+ catch {
32
+ // Callback failures must not break polling.
33
+ }
34
+ }
15
35
  if (status === "FINISHED")
16
36
  return;
17
37
  if (status === "ERROR")
@@ -24,26 +44,36 @@ export async function pollContainerStatus(containerId, options) {
24
44
  throw new Error(`${label} status field missing from API response`);
25
45
  if (status !== "IN_PROGRESS")
26
46
  throw new Error(`Unexpected ${label.toLowerCase()} status: ${status}`);
27
- await new Promise((r) => setTimeout(r, interval));
47
+ const remaining = deadline - Date.now();
48
+ if (remaining <= 0) {
49
+ throw new Error(`${label} processing timed out after ${maxWait}s (last status: ${lastStatus ?? "unknown"})`);
50
+ }
51
+ const baseDelay = Math.min(interval * Math.pow(backoffFactor, attempt), maxInterval);
52
+ const delay = baseDelay + random() * jitterMs;
53
+ // Clamp the sleep to the remaining budget so the next poll fires AT the
54
+ // deadline rather than aborting early when the next backoff would overrun.
55
+ await new Promise((r) => setTimeout(r, Math.min(delay, remaining)));
56
+ attempt++;
28
57
  }
29
- throw new Error(`${label} processing timed out after ${maxWait}s (last status: ${lastStatus ?? "unknown"})`);
30
58
  }
31
59
  /** Instagram container polling — uses client.ig() and status_code field */
32
- export async function waitForIgContainer(client, containerId, maxWait = IMAGE_PROCESSING_TIMEOUT) {
60
+ export async function waitForIgContainer(client, containerId, maxWait = IMAGE_PROCESSING_TIMEOUT, options = {}) {
33
61
  return pollContainerStatus(containerId, {
34
62
  apiCall: client.ig.bind(client),
35
63
  statusField: "status_code",
36
64
  label: "Container",
37
65
  maxWait,
66
+ onProgress: options.onProgress,
38
67
  });
39
68
  }
40
69
  /** Threads container polling — uses client.threads() and status field */
41
- export async function waitForThreadsContainer(client, containerId, maxWait = IMAGE_PROCESSING_TIMEOUT) {
70
+ export async function waitForThreadsContainer(client, containerId, maxWait = IMAGE_PROCESSING_TIMEOUT, options = {}) {
42
71
  return pollContainerStatus(containerId, {
43
72
  apiCall: client.threads.bind(client),
44
73
  statusField: "status",
45
74
  label: "Threads container",
46
75
  maxWait,
76
+ onProgress: options.onProgress,
47
77
  });
48
78
  }
49
79
  //# sourceMappingURL=container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/utils/container.ts"],"names":[],"mappings":"AAIA,gFAAgF;AAChF,oFAAoF;AACpF,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAU5C,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,OAA6B;IAC1F,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,wBAAwB,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACrG,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC3D,IAAI,UAA8B,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,IAAI,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAuB,CAAC;QACvD,UAAU,GAAG,MAAM,CAAC;QACpB,IAAI,MAAM,KAAK,UAAU;YAAE,OAAO;QAClC,IAAI,MAAM,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,mCAAmC,CAAC,CAAC;QACrF,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uEAAuE,CAAC,CAAC;QAC3H,IAAI,MAAM,KAAK,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yCAAyC,CAAC,CAAC;QAChF,IAAI,MAAM,KAAK,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,WAAW,EAAE,YAAY,MAAM,EAAE,CAAC,CAAC;QACrG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+BAA+B,OAAO,mBAAmB,UAAU,IAAI,SAAS,GAAG,CAAC,CAAC;AAC/G,CAAC;AAED,2EAA2E;AAC3E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAkB,EAAE,WAAmB,EAAE,OAAO,GAAG,wBAAwB;IAClH,OAAO,mBAAmB,CAAC,WAAW,EAAE;QACtC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,WAAW,EAAE,aAAa;QAC1B,KAAK,EAAE,WAAW;QAClB,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAkB,EAAE,WAAmB,EAAE,OAAO,GAAG,wBAAwB;IACvH,OAAO,mBAAmB,CAAC,WAAW,EAAE;QACtC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC,WAAW,EAAE,QAAQ;QACrB,KAAK,EAAE,mBAAmB;QAC1B,OAAO;KACR,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/utils/container.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { McpError } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { HttpMethod } from "../services/meta-client.js";
2
3
  export type ErrorType = "auth" | "validation" | "rate_limit" | "server" | "network" | "internal";
3
4
  interface MetaApiErrorInit {
4
5
  message: string;
@@ -8,7 +9,7 @@ interface MetaApiErrorInit {
8
9
  apiType?: string;
9
10
  fbtraceId?: string;
10
11
  endpoint: string;
11
- method: string;
12
+ method: HttpMethod;
12
13
  body?: string;
13
14
  }
14
15
  export declare class MetaApiError extends Error {
@@ -18,11 +19,30 @@ export declare class MetaApiError extends Error {
18
19
  readonly apiType?: string;
19
20
  readonly fbtraceId?: string;
20
21
  readonly endpoint: string;
21
- readonly method: string;
22
+ readonly method: HttpMethod;
22
23
  readonly body?: string;
23
24
  constructor(init: MetaApiErrorInit);
24
25
  }
26
+ export type NetworkErrorKind = "timeout" | "network";
27
+ interface MetaNetworkErrorInit {
28
+ kind: NetworkErrorKind;
29
+ endpoint: string;
30
+ method: HttpMethod;
31
+ cause: unknown;
32
+ timeoutMs: number;
33
+ }
34
+ export declare class MetaNetworkError extends Error {
35
+ readonly kind: NetworkErrorKind;
36
+ readonly endpoint: string;
37
+ readonly method: HttpMethod;
38
+ readonly timeoutMs: number;
39
+ constructor(init: MetaNetworkErrorInit);
40
+ }
25
41
  export declare function sanitizeRaw(text: string): string;
42
+ export interface ErrorContext {
43
+ step?: string;
44
+ containerId?: string;
45
+ }
26
46
  export interface McpErrorResult {
27
47
  [key: string]: unknown;
28
48
  content: {
@@ -31,7 +51,7 @@ export interface McpErrorResult {
31
51
  }[];
32
52
  isError: true;
33
53
  }
34
- export declare function formatErrorResponse(error: unknown, label: string): McpErrorResult;
54
+ export declare function formatErrorResponse(error: unknown, label: string, context?: ErrorContext): McpErrorResult;
35
55
  export declare function toMcpResourceError(error: unknown, label: string): McpError;
36
56
  export declare function validationError(message: string): McpErrorResult;
37
57
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEjG,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,IAAI,EAAE,gBAAgB;CAYnC;AA6DD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAShD;AAeD,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf;AAUD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAkBjF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAW1E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAU/D"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEjG,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,IAAI,EAAE,gBAAgB;CAYnC;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD,UAAU,oBAAoB;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,IAAI,EAAE,oBAAoB;CAevC;AAiED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAShD;AAiBD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf;AAUD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,cAAc,CAsBzG;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAW1E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAU/D"}
@@ -21,6 +21,25 @@ export class MetaApiError extends Error {
21
21
  this.body = init.body;
22
22
  }
23
23
  }
24
+ export class MetaNetworkError extends Error {
25
+ kind;
26
+ endpoint;
27
+ method;
28
+ timeoutMs;
29
+ constructor(init) {
30
+ const causeMessage = init.cause instanceof Error ? init.cause.message : String(init.cause);
31
+ const timeoutSeconds = init.timeoutMs / 1000;
32
+ const message = init.kind === "timeout"
33
+ ? `Meta API ${init.method} ${init.endpoint}: request timed out after ${timeoutSeconds}s`
34
+ : `Meta API ${init.method} ${init.endpoint}: network error — ${causeMessage}`;
35
+ super(message, { cause: init.cause });
36
+ this.name = "MetaNetworkError";
37
+ this.kind = init.kind;
38
+ this.endpoint = init.endpoint;
39
+ this.method = init.method;
40
+ this.timeoutMs = init.timeoutMs;
41
+ }
42
+ }
24
43
  const AUTH_CODES = new Set([10, 102, 190]);
25
44
  const RATE_LIMIT_CODES = new Set([4, 17, 32, 341, 613]);
26
45
  const VALIDATION_CODES = new Set([100, 200, 803]);
@@ -29,6 +48,11 @@ function isBusinessUseCaseRateLimit(code) {
29
48
  return typeof code === "number" && code >= 80001 && code <= 80008;
30
49
  }
31
50
  function categorize(error) {
51
+ // Must run before the `instanceof Error` block — MetaNetworkError.name is
52
+ // "MetaNetworkError", so the AbortError/TimeoutError checks below would
53
+ // otherwise miss it and fall through to "internal".
54
+ if (error instanceof MetaNetworkError)
55
+ return "network";
32
56
  if (error instanceof MetaApiError) {
33
57
  const { httpStatus, apiCode, apiType } = error;
34
58
  // Check rate_limit before auth: Meta returns rate-limit errors as
@@ -98,17 +122,23 @@ function assignMetaApiFields(target, error) {
98
122
  if (error.fbtraceId)
99
123
  target.fbtrace_id = error.fbtraceId;
100
124
  }
101
- export function formatErrorResponse(error, label) {
125
+ export function formatErrorResponse(error, label, context) {
102
126
  const errorType = categorize(error);
103
127
  const original = error instanceof Error ? error.message : String(error);
128
+ const stepSuffix = context?.step ? ` at ${context.step}` : "";
129
+ const containerSuffix = context?.containerId ? ` (container: ${context.containerId})` : "";
104
130
  const payload = {
105
131
  error: true,
106
132
  error_type: errorType,
107
- message: `${label} failed: ${original}`,
133
+ message: `${label} failed${stepSuffix}${containerSuffix}: ${original}`,
108
134
  };
109
135
  if (error instanceof MetaApiError) {
110
136
  assignMetaApiFields(payload, error);
111
137
  }
138
+ if (context?.step)
139
+ payload.step = context.step;
140
+ if (context?.containerId)
141
+ payload.container_id = context.containerId;
112
142
  const remediation = REMEDIATION[errorType];
113
143
  if (remediation)
114
144
  payload.remediation = remediation;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type LogLevel = "debug" | "info" | "warning" | "error";
2
+ export interface Logger {
3
+ debug(data: unknown): void;
4
+ info(data: unknown): void;
5
+ warning(data: unknown): void;
6
+ error(data: unknown): void;
7
+ }
8
+ export interface LoggingServer {
9
+ sendLoggingMessage(params: {
10
+ level: LogLevel;
11
+ logger?: string;
12
+ data: unknown;
13
+ }): Promise<void>;
14
+ }
15
+ export declare const NOOP_LOGGER: Logger;
16
+ /**
17
+ * Build a {@link Logger} that forwards each call to the MCP structured-logging
18
+ * channel via `server.sendLoggingMessage()` (emitted as a `notifications/message`
19
+ * event). Requires the server to have declared `capabilities: { logging: {} }`;
20
+ * without it the SDK drops the message silently. The SDK also filters out levels
21
+ * below any client-set `logging/setLevel`, so callers don't gate by level here.
22
+ *
23
+ * Emission is fire-and-forget with a swallowed rejection: a closed transport
24
+ * (client disconnect, cancelled request) must never turn a successful API
25
+ * operation into a failure — same contract as `makeProgressNotifier`.
26
+ */
27
+ export declare function createMcpLogger(server: LoggingServer, name?: string): Logger;
28
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAID,MAAM,WAAW,aAAa;IAC5B,kBAAkB,CAAC,MAAM,EAAE;QACzB,KAAK,EAAE,QAAQ,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,OAAO,CAAC;KACf,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAGD,eAAO,MAAM,WAAW,EAAE,MAKzB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,SAAa,GAAG,MAAM,CAYhF"}
@@ -0,0 +1,32 @@
1
+ // Default when no server-backed logger is injected (tests, sandbox); lets call sites skip null-checks.
2
+ export const NOOP_LOGGER = {
3
+ debug() { },
4
+ info() { },
5
+ warning() { },
6
+ error() { },
7
+ };
8
+ /**
9
+ * Build a {@link Logger} that forwards each call to the MCP structured-logging
10
+ * channel via `server.sendLoggingMessage()` (emitted as a `notifications/message`
11
+ * event). Requires the server to have declared `capabilities: { logging: {} }`;
12
+ * without it the SDK drops the message silently. The SDK also filters out levels
13
+ * below any client-set `logging/setLevel`, so callers don't gate by level here.
14
+ *
15
+ * Emission is fire-and-forget with a swallowed rejection: a closed transport
16
+ * (client disconnect, cancelled request) must never turn a successful API
17
+ * operation into a failure — same contract as `makeProgressNotifier`.
18
+ */
19
+ export function createMcpLogger(server, name = "meta-mcp") {
20
+ const emit = (level) => (data) => {
21
+ void server
22
+ .sendLoggingMessage({ level, logger: name, data })
23
+ .catch(() => { });
24
+ };
25
+ return {
26
+ debug: emit("debug"),
27
+ info: emit("info"),
28
+ warning: emit("warning"),
29
+ error: emit("error"),
30
+ };
31
+ }
32
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAoBA,uGAAuG;AACvG,MAAM,CAAC,MAAM,WAAW,GAAW;IACjC,KAAK,KAAI,CAAC;IACV,IAAI,KAAI,CAAC;IACT,OAAO,KAAI,CAAC;IACZ,KAAK,KAAI,CAAC;CACX,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,MAAqB,EAAE,IAAI,GAAG,UAAU;IACtE,MAAM,IAAI,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC,IAAa,EAAQ,EAAE;QACxD,KAAK,MAAM;aACR,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;aACjD,KAAK,CAAC,GAAG,EAAE,GAAiB,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;QACpB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;QACxB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FormParamValue, FormParams } from "../services/meta-client.js";
2
+ export declare function buildParams(required: FormParams, optional: Record<string, FormParamValue | undefined>): FormParams;
3
+ //# sourceMappingURL=params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/utils/params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAM7E,wBAAgB,WAAW,CACzB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC,GACnD,UAAU,CAQZ"}
@@ -0,0 +1,14 @@
1
+ // Skips only `undefined`, not the rest of the falsy set — `if (x)` checks
2
+ // silently dropped `0` (#32 thumb_offset bug), `false`, and `""`. Note that
3
+ // `null` and `""` survive here but are still dropped by `appendFormParams`
4
+ // at the wire layer; use `undefined` as the canonical "omit this key" signal.
5
+ export function buildParams(required, optional) {
6
+ const params = { ...required };
7
+ for (const [key, value] of Object.entries(optional)) {
8
+ if (value !== undefined) {
9
+ params[key] = value;
10
+ }
11
+ }
12
+ return params;
13
+ }
14
+ //# sourceMappingURL=params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/utils/params.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,MAAM,UAAU,WAAW,CACzB,QAAoB,EACpB,QAAoD;IAEpD,MAAM,MAAM,GAAe,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import type { ContainerProgressCallback } from "./container.js";
2
+ export interface ProgressExtra {
3
+ _meta?: {
4
+ progressToken?: string | number;
5
+ };
6
+ sendNotification: (notification: {
7
+ method: "notifications/progress";
8
+ params: {
9
+ progressToken: string | number;
10
+ progress: number;
11
+ total?: number;
12
+ message?: string;
13
+ };
14
+ }) => Promise<void>;
15
+ }
16
+ /**
17
+ * `ContainerProgressCallback` with an attached `.stop()` for lifecycle control.
18
+ * Calling `.stop()` makes subsequent invocations no-ops — required for the
19
+ * `Promise.all`-parallel carousel case, where a rejected child can leave its
20
+ * sibling polls running and emitting `notifications/progress` after the tool
21
+ * call has already returned (MCP forbids progress after request completion).
22
+ */
23
+ export type ProgressNotifier = ContainerProgressCallback & {
24
+ stop: () => void;
25
+ };
26
+ /**
27
+ * Build a `ProgressNotifier` that forwards each poll-loop emission as an MCP
28
+ * `notifications/progress` event, or `undefined` when no progressToken was
29
+ * attached (lets callers pass the result straight to `{ onProgress }` without
30
+ * null-checking).
31
+ *
32
+ * `mode: "shared"` replaces the caller-supplied `progress`/`total` with an
33
+ * internal monotonically-increasing counter (and omits `total`) — required
34
+ * when multiple `pollContainerStatus` calls run in parallel via `Promise.all`,
35
+ * since MCP requires strictly increasing values per progressToken.
36
+ *
37
+ * Callers should invoke `.stop()` in a `finally` block once the tool call has
38
+ * completed (success or failure). For sequential single-poll tools this is a
39
+ * defensive no-op; for parallel carousel flows it prevents leaked emissions.
40
+ */
41
+ export declare function makeProgressNotifier(extra: ProgressExtra | undefined, mode?: "single" | "shared"): ProgressNotifier | undefined;
42
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAIhE,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KACjC,CAAC;IACF,gBAAgB,EAAE,CAAC,YAAY,EAAE;QAC/B,MAAM,EAAE,wBAAwB,CAAC;QACjC,MAAM,EAAE;YACN,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;YAC/B,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,yBAAyB,GAAG;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAEhF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,IAAI,GAAE,QAAQ,GAAG,QAAmB,GACnC,gBAAgB,GAAG,SAAS,CAiB9B"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Build a `ProgressNotifier` that forwards each poll-loop emission as an MCP
3
+ * `notifications/progress` event, or `undefined` when no progressToken was
4
+ * attached (lets callers pass the result straight to `{ onProgress }` without
5
+ * null-checking).
6
+ *
7
+ * `mode: "shared"` replaces the caller-supplied `progress`/`total` with an
8
+ * internal monotonically-increasing counter (and omits `total`) — required
9
+ * when multiple `pollContainerStatus` calls run in parallel via `Promise.all`,
10
+ * since MCP requires strictly increasing values per progressToken.
11
+ *
12
+ * Callers should invoke `.stop()` in a `finally` block once the tool call has
13
+ * completed (success or failure). For sequential single-poll tools this is a
14
+ * defensive no-op; for parallel carousel flows it prevents leaked emissions.
15
+ */
16
+ export function makeProgressNotifier(extra, mode = "single") {
17
+ const token = extra?._meta?.progressToken;
18
+ if (extra === undefined || token === undefined)
19
+ return undefined;
20
+ let counter = 0;
21
+ let alive = true;
22
+ const emit = (progress, total, message) => {
23
+ if (!alive)
24
+ return;
25
+ const params = mode === "shared"
26
+ ? { progressToken: token, progress: ++counter, message }
27
+ : { progressToken: token, progress, total, message };
28
+ // Transport may have closed (client disconnect, request cancelled) —
29
+ // a rejection must not propagate or it would fail a successful upload.
30
+ void extra.sendNotification({ method: "notifications/progress", params })
31
+ .catch(() => { });
32
+ };
33
+ return Object.assign(emit, { stop: () => { alive = false; } });
34
+ }
35
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AA4BA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAgC,EAChC,OAA4B,QAAQ;IAEpC,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,MAAM,IAAI,GAA8B,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACnE,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,MAAM,GAAG,IAAI,KAAK,QAAQ;YAC9B,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;YACxD,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACvD,qEAAqE;QACrE,uEAAuE;QACvE,KAAK,KAAK,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC;aACtE,KAAK,CAAC,GAAG,EAAE,GAAiB,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exileum/meta-mcp",
3
- "version": "7.0.0",
3
+ "version": "8.0.0",
4
4
  "mcpName": "io.github.exileum/meta",
5
5
  "description": "Enables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API",
6
6
  "type": "module",
@@ -30,7 +30,8 @@
30
30
  "lint": "eslint . --max-warnings 0",
31
31
  "lint:fix": "eslint . --fix",
32
32
  "test": "vitest run",
33
- "test:watch": "vitest"
33
+ "test:watch": "vitest",
34
+ "prepublishOnly": "node scripts/check-versions.mjs && npm run build"
34
35
  },
35
36
  "keywords": [
36
37
  "mcp",