From 5a1fe35f6d60e4336debc44ee2750347b62a67d9 Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 5 May 2026 19:26:43 +0100 Subject: [PATCH 1/2] chore: remove `abort-controller` polyfill --- package.json | 1 - src/apiv2.spec.ts | 1 - src/apiv2.ts | 2 -- src/deploy/hosting/uploader.ts | 1 - src/emulator/auth/operations.ts | 1 - src/emulator/taskQueue.ts | 1 - src/profiler.ts | 1 - 7 files changed, 8 deletions(-) diff --git a/package.json b/package.json index 4b968a577d0..796d4a03200 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,6 @@ "@google-cloud/pubsub": "^5.2.0", "@inquirer/prompts": "^7.10.1", "@modelcontextprotocol/sdk": "^1.24.0", - "abort-controller": "^3.0.0", "ajv": "^8.17.1", "ajv-formats": "3.0.1", "archiver": "^7.0.0", diff --git a/src/apiv2.spec.ts b/src/apiv2.spec.ts index 96652879b6f..3427694f150 100644 --- a/src/apiv2.spec.ts +++ b/src/apiv2.spec.ts @@ -1,7 +1,6 @@ import { createServer, Server } from "http"; import { expect } from "chai"; import * as nock from "nock"; -import AbortController from "abort-controller"; const proxySetup = require("proxy"); import { Client, CLI_OAUTH_PROJECT_NUMBER } from "./apiv2"; diff --git a/src/apiv2.ts b/src/apiv2.ts index c9b716f9609..be306588a2d 100644 --- a/src/apiv2.ts +++ b/src/apiv2.ts @@ -1,9 +1,7 @@ -import { AbortSignal } from "abort-controller"; import { URL, URLSearchParams } from "url"; import { Readable } from "stream"; import { ProxyAgent } from "proxy-agent"; import * as retry from "retry"; -import AbortController from "abort-controller"; import fetch, { HeadersInit, Response, RequestInit, Headers } from "node-fetch"; import util from "util"; diff --git a/src/deploy/hosting/uploader.ts b/src/deploy/hosting/uploader.ts index 3cf1061afb3..7c8ef266f3d 100644 --- a/src/deploy/hosting/uploader.ts +++ b/src/deploy/hosting/uploader.ts @@ -1,5 +1,4 @@ import { size } from "lodash"; -import AbortController from "abort-controller"; import * as clc from "colorette"; import * as crypto from "crypto"; import * as fs from "fs"; diff --git a/src/emulator/auth/operations.ts b/src/emulator/auth/operations.ts index bb77fbf8312..6e12deb3681 100644 --- a/src/emulator/auth/operations.ts +++ b/src/emulator/auth/operations.ts @@ -2,7 +2,6 @@ import { URLSearchParams } from "url"; import { decode as decodeJwt, sign as signJwt, JwtHeader } from "jsonwebtoken"; import * as express from "express"; import fetch from "node-fetch"; -import AbortController from "abort-controller"; import { ExegesisContext } from "exegesis-express"; import { toUnixTimestamp, diff --git a/src/emulator/taskQueue.ts b/src/emulator/taskQueue.ts index 58d4de0c6e9..7509bc717e9 100644 --- a/src/emulator/taskQueue.ts +++ b/src/emulator/taskQueue.ts @@ -1,4 +1,3 @@ -import AbortController from "abort-controller"; import { EmulatorLogger } from "./emulatorLogger"; import { RetryConfig, Task, TaskQueueConfig } from "./tasksEmulator"; import { Emulators } from "./types"; diff --git a/src/profiler.ts b/src/profiler.ts index a7df6d28568..7f560e319d0 100644 --- a/src/profiler.ts +++ b/src/profiler.ts @@ -2,7 +2,6 @@ import * as fs from "fs"; import * as ora from "ora"; import * as readline from "readline"; import * as tmp from "tmp"; -import AbortController from "abort-controller"; import { Client } from "./apiv2"; import { realtimeOriginOrEmulatorOrCustomUrl } from "./database/api"; From 0e11bc494a24aab0f88c7ec05816b80fb7c40c4f Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 5 May 2026 19:41:12 +0100 Subject: [PATCH 2/2] fix: address code review --- src/apiv2.ts | 16 +++------------- src/emulator/auth/operations.ts | 8 ++------ src/emulator/taskQueue.ts | 8 ++------ 3 files changed, 7 insertions(+), 25 deletions(-) diff --git a/src/apiv2.ts b/src/apiv2.ts index be306588a2d..682fa0a87f0 100644 --- a/src/apiv2.ts +++ b/src/apiv2.ts @@ -384,26 +384,16 @@ export class Client { } if (options.signal) { - const signal = options.signal as any; - signal.reason = ""; - signal.throwIfAborted = () => { - throw new FirebaseError("Aborted"); - }; - fetchOptions.signal = signal; + fetchOptions.signal = options.signal; } let reqTimeout: NodeJS.Timeout | undefined; if (options.timeout) { const controller = new AbortController(); reqTimeout = setTimeout(() => { - controller.abort(); + controller.abort(new FirebaseError("Aborted")); }, options.timeout); - const signal = controller.signal as any; - signal.reason = ""; - signal.throwIfAborted = () => { - throw new FirebaseError("Aborted"); - }; - fetchOptions.signal = signal; + fetchOptions.signal = controller.signal; } if (typeof options.body === "string" || isStream(options.body)) { diff --git a/src/emulator/auth/operations.ts b/src/emulator/auth/operations.ts index 6e12deb3681..7890338117f 100644 --- a/src/emulator/auth/operations.ts +++ b/src/emulator/auth/operations.ts @@ -3133,7 +3133,7 @@ async function fetchBlockingFunction( const controller = new AbortController(); const timeout = setTimeout(() => { - controller.abort(); + controller.abort(new FirebaseError("Aborted")); }, timeoutMs); let response: BlockingFunctionResponsePayload; @@ -3141,11 +3141,7 @@ async function fetchBlockingFunction( let status: number; let text: string; try { - const signal = controller.signal as any; - signal.reason = ""; - signal.throwIfAborted = () => { - throw new FirebaseError("Aborted"); - }; + const signal = controller.signal; const res = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, diff --git a/src/emulator/taskQueue.ts b/src/emulator/taskQueue.ts index 7509bc717e9..b0de535a58f 100644 --- a/src/emulator/taskQueue.ts +++ b/src/emulator/taskQueue.ts @@ -293,11 +293,7 @@ export class TaskQueue { headers["X-CloudTasks-TaskPreviousResponse"] = `${emulatedTask.metadata.previousResponse}`; } const controller = new AbortController(); - const signal = controller.signal as any; - signal.reason = ""; - signal.throwIfAborted = () => { - throw new FirebaseError("Aborted"); - }; + const signal = controller.signal; const request = fetch(emulatedTask.task.httpRequest.url, { method: "POST", headers: headers, @@ -312,7 +308,7 @@ export class TaskQueue { const abortId = setTimeout(() => { // TODO: Set X-CloudTasks-TaskRetryReason - controller.abort(); + controller.abort(new FirebaseError("Aborted")); }, dispatchDeadlineSeconds * 1000); const response = await request;