Update handling of aborted attachment download jobs

This commit is contained in:
trevor-signal 2025-09-23 09:49:15 -04:00 committed by GitHub
commit 6e8928b3c5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 178 additions and 32 deletions

View file

@ -100,6 +100,7 @@ import { subscriptionConfigurationCurrencyZod } from '../types/Donations.js';
import type { StripeDonationAmount, CardDetail } from '../types/Donations.js';
import { badgeFromServerSchema } from '../badges/parseBadgesFromServer.js';
import { ZERO_DECIMAL_CURRENCIES } from '../util/currency.js';
import type { JobCancelReason } from '../jobs/types.js';
const { escapeRegExp, isNumber, isString, isObject, throttle } = lodash;
@ -1550,7 +1551,7 @@ export type SubscriptionResponseType = z.infer<
export type WebAPIType = {
startRegistration(): unknown;
finishRegistration(baton: unknown): void;
cancelInflightRequests: (reason: string) => void;
cancelInflightRequests: (reason: JobCancelReason) => void;
cdsLookup: (options: CdsLookupOptionsType) => Promise<CDSResponseType>;
createAccount: (
options: CreateAccountOptionsType
@ -1944,7 +1945,7 @@ export type TopLevelType = {
initialize: (options: InitializeOptionsType) => WebAPIConnectType;
};
type InflightCallback = (error: Error) => unknown;
type InflightCallback = (cancelReason: string) => unknown;
const libsignalNet = getLibsignalNet();
@ -2110,7 +2111,7 @@ export function initialize({
},
});
const inflightRequests = new Set<(error: Error) => unknown>();
const inflightRequests = new Set<InflightCallback>();
function registerInflightRequest(request: InflightCallback) {
inflightRequests.add(request);
}
@ -2122,7 +2123,7 @@ export function initialize({
log.warn(`${logId}: Canceling ${inflightRequests.size} requests`);
for (const request of inflightRequests) {
try {
request(new Error(`${logId}: Canceled!`));
request(reason);
} catch (error: unknown) {
log.error(
`${logId}: Failed to cancel request: ${toLogFormat(error)}`
@ -4304,11 +4305,13 @@ export function initialize({
let streamWithDetails: StreamWithDetailsType | undefined;
const cancelRequest = () => {
abortController.abort();
const cancelRequest = (reason: unknown) => {
abortController.abort(reason);
};
options?.abortSignal?.addEventListener('abort', cancelRequest);
options?.abortSignal?.addEventListener('abort', () =>
cancelRequest(options.abortSignal?.reason)
);
registerInflightRequest(cancelRequest);