diff --git a/extensions/matrix/src/matrix/sdk/transport-runtime-api.ts b/extensions/matrix/src/matrix/sdk/transport-runtime-api.ts index d964cbf6ccf..fcb98da6653 100644 --- a/extensions/matrix/src/matrix/sdk/transport-runtime-api.ts +++ b/extensions/matrix/src/matrix/sdk/transport-runtime-api.ts @@ -1,4 +1,4 @@ -import { fetchWithRuntimeDispatcher } from "openclaw/plugin-sdk/runtime-fetch"; +import { fetchWithRuntimeDispatcher, isMockedFetch } from "openclaw/plugin-sdk/runtime-fetch"; import { closeDispatcher, createPinnedDispatcher, @@ -11,6 +11,7 @@ export { closeDispatcher, createPinnedDispatcher, fetchWithRuntimeDispatcher, + isMockedFetch, resolvePinnedHostnameWithPolicy, type PinnedDispatcherPolicy, type SsrFPolicy, diff --git a/extensions/matrix/src/matrix/sdk/transport.ts b/extensions/matrix/src/matrix/sdk/transport.ts index f3dc802bbdf..9b4124ec06d 100644 --- a/extensions/matrix/src/matrix/sdk/transport.ts +++ b/extensions/matrix/src/matrix/sdk/transport.ts @@ -5,6 +5,7 @@ import { closeDispatcher, createPinnedDispatcher, resolvePinnedHostnameWithPolicy, + isMockedFetch, type SsrFPolicy, fetchWithRuntimeDispatcher, type PinnedDispatcherPolicy, @@ -93,6 +94,9 @@ async function fetchWithMatrixDispatcher(params: { url: string; init: MatrixDispatcherRequestInit; }): Promise { + if (isMockedFetch(globalThis.fetch)) { + return await globalThis.fetch(params.url, params.init); + } // Keep this dispatcher-routing logic local to Matrix transport. Shared SSRF // fetches must stay fail-closed unless a retry path can preserve the // validated pinned-address binding. Route dispatcher-attached requests diff --git a/src/plugin-sdk/runtime-fetch.ts b/src/plugin-sdk/runtime-fetch.ts index 0d1dc85a811..7e5c999f513 100644 --- a/src/plugin-sdk/runtime-fetch.ts +++ b/src/plugin-sdk/runtime-fetch.ts @@ -3,5 +3,6 @@ export { fetchWithRuntimeDispatcher, + isMockedFetch, type DispatcherAwareRequestInit, } from "../infra/net/runtime-fetch.js";