@automattic/mcp-wordpress-remote 0.5.3 → 0.5.5

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/dist/lib.d.ts CHANGED
@@ -15,7 +15,7 @@ interface WordPressResponse {
15
15
  [key: string]: any;
16
16
  }
17
17
 
18
- declare const MCP_WORDPRESS_REMOTE_VERSION = "0.5.3";
18
+ declare const MCP_WORDPRESS_REMOTE_VERSION = "0.5.5";
19
19
  /**
20
20
  * Centralized configuration for MCP WordPress Remote
21
21
  * All default values are defined here and can be overridden via environment variables
package/dist/lib.js CHANGED
@@ -6498,7 +6498,7 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
6498
6498
  const LAST_CHUNK = Buffer3.from("0\r\n\r\n");
6499
6499
  let isChunkedTransfer = false;
6500
6500
  let properLastChunkReceived = false;
6501
- let previousChunk;
6501
+ let trailingBytes = Buffer3.alloc(0);
6502
6502
  request.on("response", (response) => {
6503
6503
  const { headers } = response;
6504
6504
  isChunkedTransfer = headers["transfer-encoding"] === "chunked" && !headers["content-length"];
@@ -6512,11 +6512,15 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
6512
6512
  }
6513
6513
  };
6514
6514
  const onData = (buf) => {
6515
- properLastChunkReceived = Buffer3.compare(buf.slice(-5), LAST_CHUNK) === 0;
6516
- if (!properLastChunkReceived && previousChunk) {
6517
- properLastChunkReceived = Buffer3.compare(previousChunk.slice(-3), LAST_CHUNK.slice(0, 3)) === 0 && Buffer3.compare(buf.slice(-2), LAST_CHUNK.slice(3)) === 0;
6515
+ if (buf.length === 0) return;
6516
+ if (buf.length >= LAST_CHUNK.length) {
6517
+ trailingBytes = Buffer3.from(buf.subarray(-LAST_CHUNK.length));
6518
+ } else {
6519
+ trailingBytes = Buffer3.from(
6520
+ Buffer3.concat([trailingBytes, buf]).subarray(-LAST_CHUNK.length)
6521
+ );
6518
6522
  }
6519
- previousChunk = buf;
6523
+ properLastChunkReceived = trailingBytes.equals(LAST_CHUNK);
6520
6524
  };
6521
6525
  socket.prependListener("close", onSocketClose);
6522
6526
  socket.on("data", onData);
@@ -75950,7 +75954,7 @@ async function selectCallbackPort(serverUrl, specifiedPort, _unused, host = "127
75950
75954
  }
75951
75955
 
75952
75956
  // src/lib/config.ts
75953
- var MCP_WORDPRESS_REMOTE_VERSION = "0.5.3";
75957
+ var MCP_WORDPRESS_REMOTE_VERSION = "0.5.5";
75954
75958
  function parsePositiveIntEnv(value, defaultValue) {
75955
75959
  if (!value) {
75956
75960
  return defaultValue;
@@ -76461,6 +76465,26 @@ function getProxyType() {
76461
76465
  return proxyConfig.type;
76462
76466
  }
76463
76467
 
76468
+ // src/lib/node-web-stream.ts
76469
+ function nodeReadableToWeb(stream) {
76470
+ const chunks = stream[Symbol.asyncIterator]();
76471
+ let cancelled = false;
76472
+ return new ReadableStream({
76473
+ async pull(controller) {
76474
+ const { value, done } = await chunks.next();
76475
+ if (cancelled) return;
76476
+ if (done) controller.close();
76477
+ else
76478
+ controller.enqueue(typeof value === "string" ? Buffer.from(value) : value);
76479
+ },
76480
+ async cancel() {
76481
+ cancelled = true;
76482
+ stream.destroy();
76483
+ await chunks.return?.();
76484
+ }
76485
+ });
76486
+ }
76487
+
76464
76488
  // src/lib/fetch-utils.ts
76465
76489
  var PROXY_PRODUCT = `mcp-wordpress-remote/${MCP_WORDPRESS_REMOTE_VERSION}`;
76466
76490
  var clientProduct;
@@ -76493,7 +76517,13 @@ async function proxyFetch(url2, init) {
76493
76517
  const agent = await getAgentForUrl(url2);
76494
76518
  if (agent) {
76495
76519
  const nodeFetch = (await Promise.resolve().then(() => (init_src(), src_exports))).default;
76496
- return nodeFetch(url2, { ...init, agent });
76520
+ const response = await nodeFetch(url2, { ...init, agent });
76521
+ const body = response.body && ![204, 205, 304].includes(response.status) ? nodeReadableToWeb(response.body) : null;
76522
+ return new Response(body, {
76523
+ status: response.status,
76524
+ statusText: response.statusText,
76525
+ headers: [...response.headers]
76526
+ });
76497
76527
  }
76498
76528
  return fetch(url2, init);
76499
76529
  }
package/dist/proxy.js CHANGED
@@ -6499,7 +6499,7 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
6499
6499
  const LAST_CHUNK = Buffer3.from("0\r\n\r\n");
6500
6500
  let isChunkedTransfer = false;
6501
6501
  let properLastChunkReceived = false;
6502
- let previousChunk;
6502
+ let trailingBytes = Buffer3.alloc(0);
6503
6503
  request.on("response", (response) => {
6504
6504
  const { headers } = response;
6505
6505
  isChunkedTransfer = headers["transfer-encoding"] === "chunked" && !headers["content-length"];
@@ -6513,11 +6513,15 @@ function fixResponseChunkedTransferBadEnding(request, errorCallback) {
6513
6513
  }
6514
6514
  };
6515
6515
  const onData = (buf) => {
6516
- properLastChunkReceived = Buffer3.compare(buf.slice(-5), LAST_CHUNK) === 0;
6517
- if (!properLastChunkReceived && previousChunk) {
6518
- properLastChunkReceived = Buffer3.compare(previousChunk.slice(-3), LAST_CHUNK.slice(0, 3)) === 0 && Buffer3.compare(buf.slice(-2), LAST_CHUNK.slice(3)) === 0;
6516
+ if (buf.length === 0) return;
6517
+ if (buf.length >= LAST_CHUNK.length) {
6518
+ trailingBytes = Buffer3.from(buf.subarray(-LAST_CHUNK.length));
6519
+ } else {
6520
+ trailingBytes = Buffer3.from(
6521
+ Buffer3.concat([trailingBytes, buf]).subarray(-LAST_CHUNK.length)
6522
+ );
6519
6523
  }
6520
- previousChunk = buf;
6524
+ properLastChunkReceived = trailingBytes.equals(LAST_CHUNK);
6521
6525
  };
6522
6526
  socket.prependListener("close", onSocketClose);
6523
6527
  socket.on("data", onData);
@@ -76615,7 +76619,7 @@ async function selectCallbackPort(serverUrl, specifiedPort, _unused, host = "127
76615
76619
  }
76616
76620
 
76617
76621
  // src/lib/config.ts
76618
- var MCP_WORDPRESS_REMOTE_VERSION = "0.5.3";
76622
+ var MCP_WORDPRESS_REMOTE_VERSION = "0.5.5";
76619
76623
  function parsePositiveIntEnv(value, defaultValue) {
76620
76624
  if (!value) {
76621
76625
  return defaultValue;
@@ -77139,6 +77143,26 @@ async function getAgentForUrl(url2) {
77139
77143
  return void 0;
77140
77144
  }
77141
77145
 
77146
+ // src/lib/node-web-stream.ts
77147
+ function nodeReadableToWeb(stream) {
77148
+ const chunks = stream[Symbol.asyncIterator]();
77149
+ let cancelled = false;
77150
+ return new ReadableStream({
77151
+ async pull(controller) {
77152
+ const { value, done } = await chunks.next();
77153
+ if (cancelled) return;
77154
+ if (done) controller.close();
77155
+ else
77156
+ controller.enqueue(typeof value === "string" ? Buffer.from(value) : value);
77157
+ },
77158
+ async cancel() {
77159
+ cancelled = true;
77160
+ stream.destroy();
77161
+ await chunks.return?.();
77162
+ }
77163
+ });
77164
+ }
77165
+
77142
77166
  // src/lib/fetch-utils.ts
77143
77167
  var PROXY_PRODUCT = `mcp-wordpress-remote/${MCP_WORDPRESS_REMOTE_VERSION}`;
77144
77168
  var clientProduct;
@@ -77180,14 +77204,17 @@ async function proxyFetch(url2, init) {
77180
77204
  const agent = await getAgentForUrl(url2);
77181
77205
  if (agent) {
77182
77206
  const nodeFetch = (await Promise.resolve().then(() => (init_src(), src_exports))).default;
77183
- return nodeFetch(url2, { ...init, agent });
77207
+ const response = await nodeFetch(url2, { ...init, agent });
77208
+ const body = response.body && ![204, 205, 304].includes(response.status) ? nodeReadableToWeb(response.body) : null;
77209
+ return new Response(body, {
77210
+ status: response.status,
77211
+ statusText: response.statusText,
77212
+ headers: [...response.headers]
77213
+ });
77184
77214
  }
77185
77215
  return fetch(url2, init);
77186
77216
  }
77187
77217
 
77188
- // src/lib/wordpress-transport.ts
77189
- import { Readable } from "node:stream";
77190
-
77191
77218
  // node_modules/@modelcontextprotocol/sdk/dist/esm/shared/mediaType.js
77192
77219
  var import_content_type = __toESM(require_content_type(), 1);
77193
77220
  function mediaTypeEssence(header) {
@@ -80163,9 +80190,7 @@ function createWordPressTransport(onFailure) {
80163
80190
  response.status
80164
80191
  );
80165
80192
  if (recovered) {
80166
- const unread = response.body;
80167
- if (typeof unread?.cancel === "function") await unread.cancel();
80168
- else unread?.destroy?.();
80193
+ await response.body?.cancel();
80169
80194
  cleanup();
80170
80195
  if (cancelled) return new Response(null, { status: 202 });
80171
80196
  return send(url2, init, true);
@@ -80175,8 +80200,7 @@ function createWordPressTransport(onFailure) {
80175
80200
  controller.abort();
80176
80201
  }, timeoutMs);
80177
80202
  }
80178
- const body = response.body && typeof response.body.getReader !== "function" ? Readable.toWeb(response.body) : response.body;
80179
- const reader = body?.getReader();
80203
+ const reader = response.body?.getReader();
80180
80204
  let released = false;
80181
80205
  const stream = reader ? new ReadableStream({
80182
80206
  async pull(output) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@automattic/mcp-wordpress-remote",
3
- "version": "0.5.3",
3
+ "version": "0.5.5",
4
4
  "description": "MCP WordPress Remote proxy server",
5
5
  "engines": {
6
6
  "node": ">=18.0.0"
@@ -75,18 +75,14 @@
75
75
  "@playwright/test": "^1.54.2",
76
76
  "@types/express": "^4.17.21",
77
77
  "@types/jest": "^29.5.12",
78
- "@types/mockdate": "^2.0.0",
79
78
  "@types/node": "^18.19.0",
80
79
  "@types/proper-lockfile": "^4.1.4",
81
- "@types/supertest": "^6.0.3",
82
80
  "@types/tmp": "^0.2.6",
83
81
  "esbuild": "0.25.2",
84
82
  "jest": "^29.7.0",
85
- "mockdate": "^3.0.5",
86
83
  "nock": "^14.0.9",
87
84
  "playwright": "^1.54.2",
88
85
  "prettier": "^3.2.5",
89
- "supertest": "^7.1.4",
90
86
  "tmp": "^0.2.5",
91
87
  "ts-jest": "^29.1.2",
92
88
  "tsup": "^8.0.2",