message: Clear the snapshot fetch timer once the snapshot is fetched/failed
  ## Description
  Clear the snapshot fetch timer once the snapshot is fetched/failed as it
  can cause a memory leak.
diff: @@ -196,14 +196,6 @@ async function fetchLatestSnapshotCore(
  const storageToken = await storageTokenFetcher(tokenFetchOptions, "TreesLatest", true);
  assert(storageToken !== null, 0x1e5 /* "Storage token should not be null" */);
  - let controller: AbortController | undefined;
  - if (snapshotOptions?.timeout !== undefined) {
  - controller = new AbortController();
  - setTimeout(
  - () => controller!.abort(),
  - snapshotOptions.timeout,
  - );
  - }
  const perfEvent = {
  eventName: "TreesLatest",
  attempts: tokenFetchOptions.refresh ? 2 : 1,
  @@ -223,12 +215,27 @@ async function fetchLatestSnapshotCore(
  logger,
  perfEvent,
  async (event) => {
  + let controller: AbortController | undefined;
  + let fetchTimeout: ReturnType<typeof setTimeout> | undefined;
  + if (snapshotOptions?.timeout !== undefined) {
  + controller = new AbortController();
  + fetchTimeout = setTimeout(
  + () => controller!.abort(),
  + snapshotOptions.timeout,
  + );
  + }
  const response = await snapshotDownloader(
  odspResolvedUrl,
  storageToken,
  snapshotOptions,
  controller,
  - );
  + ).finally(() => {
  + // Clear the fetchTimeout once the response is fetched.
  + if (fetchTimeout !== undefined) {
  + clearTimeout(fetchTimeout);
  + fetchTimeout = undefined;
  + }
  + });
  const odspResponse = response.odspResponse;
  const contentType = odspResponse.headers.get("content-type");
  