fix(tools, mcp): compose caller abort signal with fetch timeout (#1549)

This commit is contained in:
Aditya kumar singh 2026-09-17 16:24:02 +05:30
parent c927c98f2c
commit bb06538b69
3 changed files with 14 additions and 4 deletions

View file

@ -336,7 +336,12 @@ export class SupermemoryClient {
options?: { signal?: AbortSignal },
): Promise<DocumentsApiResponse> {
try {
const signal = options?.signal ?? AbortSignal.timeout(FETCH_TIMEOUT_MS)
const signal = options?.signal
? AbortSignal.any([
options.signal,
AbortSignal.timeout(FETCH_TIMEOUT_MS),
])
: AbortSignal.timeout(FETCH_TIMEOUT_MS)
const response = await fetch(`${this.apiUrl}/v3/documents/documents`, {
method: "POST",
headers: {

View file

@ -33,7 +33,9 @@ export async function forgetMemoryRequest(
Authorization: `Bearer ${apiKey}`,
},
body: JSON.stringify(params),
signal: options?.signal ?? AbortSignal.timeout(FETCH_TIMEOUT_MS),
signal: options?.signal
? AbortSignal.any([options.signal, AbortSignal.timeout(FETCH_TIMEOUT_MS)])
: AbortSignal.timeout(FETCH_TIMEOUT_MS),
})
if (!response.ok) {

View file

@ -180,7 +180,7 @@ describe("memoryForget", () => {
expect(init.signal).toBeInstanceOf(AbortSignal)
})
it("uses a caller-provided signal instead of creating a timeout", async () => {
it("composes a caller-provided signal with the timeout", async () => {
const fetchMock = stubFetch()
const controller = new AbortController()
@ -192,7 +192,10 @@ describe("memoryForget", () => {
)
const [, init] = fetchMock.mock.calls[0] as [string, RequestInit]
expect(init.signal).toBe(controller.signal)
expect(init.signal).toBeInstanceOf(AbortSignal)
expect(init.signal?.aborted).toBe(false)
controller.abort()
expect(init.signal?.aborted).toBe(true)
})
it("throws a descriptive error on non-2xx responses", async () => {