diff --git a/.changeset/thirty-hats-act.md b/.changeset/thirty-hats-act.md
new file mode 100644
index 0000000000000000000000000000000000000000..a1412267665aee6d39a210ee4507512fd09c0855
--- /dev/null
+++ b/.changeset/thirty-hats-act.md
@@ -0,0 +1,8 @@
+---
+"@llamaindex/cloud": patch
+"@llamaindex/community": patch
+"@llamaindex/core": patch
+"@llamaindex/readers": patch
+---
+
+fix: add retry handling logic to parser reader and fix lint issues
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 0e48c33f1407df2763a3e132b23a61dd338d8b82..e083d8d759c6d827168894427342ffafe168d017 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -50,6 +50,9 @@ export default tseslint.config(
       "**/lib/*",
       "**/deps/**",
       "**/.next/**",
+      "**/.source/**", // Ignore .source directories
+      "!.git", // Don't ignore .git directory
+      "**/.*", // Ignore all dot files and directories
       "**/node_modules/**",
       "**/build/**",
       "**/.docusaurus/**",
diff --git a/package.json b/package.json
index aac556342afb4a34a19a09bcb763ce030b8eeb00..4829195f5cca53f74f4fa6e4e02c9f666eed9205 100644
--- a/package.json
+++ b/package.json
@@ -46,5 +46,8 @@
     "*.{json,md,yml}": [
       "prettier --write"
     ]
+  },
+  "dependencies": {
+    "p-retry": "^6.2.1"
   }
 }
diff --git a/packages/cloud/src/reader.ts b/packages/cloud/src/reader.ts
index 5a7af156a50566dc3aa5ab5c9b9568cb76f7eb51..529f748533cbdfc4963d480a2d6ae5f828167fa4 100644
--- a/packages/cloud/src/reader.ts
+++ b/packages/cloud/src/reader.ts
@@ -1,6 +1,8 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
 import { type Client, createClient, createConfig } from "@hey-api/client-fetch";
 import { Document, FileReader } from "@llamaindex/core/schema";
 import { fs, getEnv, path } from "@llamaindex/env";
+import pRetry from "p-retry";
 import {
   type Body_upload_file_api_v1_parsing_upload_post,
   type ParserLanguages,
@@ -15,16 +17,18 @@ import {
 import { sleep } from "./utils";
 
 export type Language = ParserLanguages;
-
 export type ResultType = "text" | "markdown" | "json";
 
-//todo: should move into @llamaindex/env
+// Export the backoff pattern type.
+export type BackoffPattern = "constant" | "linear" | "exponential";
+
+// TODO: should move into @llamaindex/env
 type WriteStream = {
   write: (text: string) => void;
 };
 
 // Do not modify this variable or cause type errors
-// eslint-disable-next-line @typescript-eslint/no-explicit-any, no-var
+// eslint-disable-next-line no-var
 var process: any;
 
 /**
@@ -41,48 +45,57 @@ export class LlamaParseReader extends FileReader {
   // The result type for the parser.
   resultType: ResultType = "text";
   // The interval in seconds to check if the parsing is done.
-  checkInterval = 1;
+  checkInterval: number = 1;
   // The maximum timeout in seconds to wait for the parsing to finish.
   maxTimeout = 2000;
   // Whether to print the progress of the parsing.
   verbose = true;
-  // The language of the text to parse.
+  // The language to parse the file in.
   language: ParserLanguages[] = ["en"];
+
+  // New polling options:
+  // Controls the backoff mode: "constant", "linear", or "exponential".
+  backoffPattern: BackoffPattern = "linear";
+  // Maximum interval in seconds between polls.
+  maxCheckInterval: number = 5;
+  // Maximum number of retryable errors before giving up.
+  maxErrorCount: number = 4;
+
   // The parsing instruction for the parser. Backend default is an empty string.
   parsingInstruction?: string | undefined;
-  // Wether to ignore diagonal text (when the text rotation in degrees is not 0, 90, 180 or 270, so not a horizontal or vertical text). Backend default is false.
+  // Whether to ignore diagonal text (when the text rotation in degrees is not 0, 90, 180, or 270). Backend default is false.
   skipDiagonalText?: boolean | undefined;
-  // Wheter to ignore the cache and re-process the document. All documents are kept in cache for 48hours after the job was completed to avoid processing the same document twice. Backend default is false.
+  // Whether to ignore the cache and re-process the document. Documents are cached for 48 hours after job completion. Backend default is false.
   invalidateCache?: boolean | undefined;
-  // Wether the document should not be cached in the first place. Backend default is false.
+  // Whether the document should not be cached. Backend default is false.
   doNotCache?: boolean | undefined;
-  // Wether to use a faster mode to extract text from documents. This mode will skip OCR of images, and table/heading reconstruction. Note: Non-compatible with gpt4oMode. Backend default is false.
+  // Whether to use a faster mode to extract text (skipping OCR and table/heading reconstruction). Not compatible with gpt4oMode. Backend default is false.
   fastMode?: boolean | undefined;
-  // Wether to keep column in the text according to document layout. Reduce reconstruction accuracy, and LLM's/embedings performances in most cases.
+  // Whether to keep columns in the text according to document layout. May reduce reconstruction accuracy and LLM/embedings performance.
   doNotUnrollColumns?: boolean | undefined;
-  // A templated page separator to use to split the text. If the results contain `{page_number}` (e.g. JSON mode), it will be replaced by the next page number. If not set the default separator '\\n---\\n' will be used.
+  // A templated page separator for splitting text. If not set, default is "\n---\n".
   pageSeparator?: string | undefined;
-  //A templated prefix to add to the beginning of each page. If the results contain `{page_number}`, it will be replaced by the page number.>
+  // A templated prefix to add at the beginning of each page.
   pagePrefix?: string | undefined;
-  // A templated suffix to add to the end of each page. If the results contain `{page_number}`, it will be replaced by the page number.
+  // A templated suffix to add at the end of each page.
   pageSuffix?: string | undefined;
-  // Deprecated. Use vendorMultimodal params. Whether to use gpt-4o to extract text from documents.
+  // Deprecated. Use vendorMultimodal params. Whether to use gpt-4o to extract text.
   gpt4oMode: boolean = false;
-  // Deprecated. Use vendorMultimodal params. The API key for the GPT-4o API. Optional, lowers the cost of parsing. Can be set as an env variable: LLAMA_CLOUD_GPT4O_API_KEY.
+  // Deprecated. Use vendorMultimodal params. The API key for GPT-4o. Can be set via LLAMA_CLOUD_GPT4O_API_KEY.
   gpt4oApiKey?: string | undefined;
-  // The bounding box to use to extract text from documents. Describe as a string containing the bounding box margins.
+  // The bounding box margins as a string.
   boundingBox?: string | undefined;
-  // The target pages to extract text from documents. Describe as a comma separated list of page numbers. The first page of the document is page 0
+  // The target pages (comma separated list, starting at 0).
   targetPages?: string | undefined;
-  // Whether or not to ignore and skip errors raised during parsing.
+  // Whether to ignore errors during parsing.
   ignoreErrors: boolean = true;
-  // Whether to split by page using the pageSeparator or '\n---\n' as default.
+  // Whether to split by page using the pageSeparator (or "\n---\n" as default).
   splitByPage: boolean = true;
   // Whether to use the vendor multimodal API.
   useVendorMultimodalModel: boolean = false;
-  // The model name for the vendor multimodal API
+  // The model name for the vendor multimodal API.
   vendorMultimodalModelName?: string | undefined;
-  // The API key for the multimodal API. Can also be set as an env variable: LLAMA_CLOUD_VENDOR_MULTIMODAL_API_KEY
+  // The API key for the multimodal API. Can be set via LLAMA_CLOUD_VENDOR_MULTIMODAL_API_KEY.
   vendorMultimodalApiKey?: string | undefined;
 
   webhookUrl?: string | undefined;
@@ -173,7 +186,7 @@ export class LlamaParseReader extends FileReader {
     }
     this.apiKey = apiKey;
     if (this.baseUrl.endsWith("/")) {
-      this.baseUrl = this.baseUrl.slice(0, -"/".length);
+      this.baseUrl = this.baseUrl.slice(0, -1);
     }
     if (this.baseUrl.endsWith("/api/parsing")) {
       this.baseUrl = this.baseUrl.slice(0, -"/api/parsing".length);
@@ -203,13 +216,19 @@ export class LlamaParseReader extends FileReader {
     );
   }
 
-  // Create a job for the LlamaParse API
+  /**
+   * Creates a job for the LlamaParse API.
+   *
+   * @param data - The file data as a Uint8Array.
+   * @param filename - Optional filename for the file.
+   * @returns A Promise resolving to the job ID as a string.
+   */
   async #createJob(data: Uint8Array, filename?: string): Promise<string> {
     if (this.verbose) {
       console.log("Started uploading the file");
     }
 
-    // todo: remove Blob usage when we drop Node.js 18 support
+    // TODO: remove Blob usage when we drop Node.js 18 support
     const file: File | Blob =
       globalThis.File && filename
         ? new File([data], filename)
@@ -320,87 +339,124 @@ export class LlamaParseReader extends FileReader {
     return response.data.id;
   }
 
-  // Get the result of the job
+  /**
+   * Retrieves the result of a parsing job.
+   *
+   * Uses a polling loop with retry logic. Each API call is retried
+   * up to maxErrorCount times if it fails with a 5XX or socket error.
+   * The delay between polls increases according to the specified backoffPattern ("constant", "linear", or "exponential"),
+   * capped by maxCheckInterval.
+   *
+   * @param jobId - The job ID.
+   * @param resultType - The type of result to fetch ("text", "json", or "markdown").
+   * @returns A Promise resolving to the job result.
+   */
   private async getJobResult(
     jobId: string,
     resultType: "text" | "json" | "markdown",
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
   ): Promise<any> {
-    const signal = AbortSignal.timeout(this.maxTimeout * 1000);
     let tries = 0;
-    while (true) {
-      await sleep(this.checkInterval * 1000);
+    let currentInterval = this.checkInterval;
 
-      // Check the job status. If unsuccessful response, checks if maximum timeout has been reached. If reached, throws an error
-      const result = await getJobApiV1ParsingJobJobIdGet({
-        client: this.#client,
-        throwOnError: true,
-        path: {
-          job_id: jobId,
-        },
-        query: {
-          project_id: this.project_id ?? null,
-          organization_id: this.organization_id ?? null,
-        },
-        signal,
-      });
-      const { data } = result;
+    while (true) {
+      await sleep(currentInterval * 1000);
 
-      const status = (data as Record<string, unknown>)["status"];
-      // If job has completed, return the result
-      if (status === "SUCCESS") {
-        let result;
-        switch (resultType) {
-          case "json": {
-            result = await getJobJsonResultApiV1ParsingJobJobIdResultJsonGet({
+      // Wraps the API call in a retry
+      let result;
+      try {
+        result = await pRetry(
+          () =>
+            getJobApiV1ParsingJobJobIdGet({
               client: this.#client,
               throwOnError: true,
-              path: {
-                job_id: jobId,
-              },
+              path: { job_id: jobId },
               query: {
                 project_id: this.project_id ?? null,
                 organization_id: this.organization_id ?? null,
               },
-              signal,
-            });
+              signal: AbortSignal.timeout(this.maxTimeout * 1000),
+            }),
+          {
+            retries: this.maxErrorCount,
+            onFailedAttempt: (error) => {
+              // Retry only on 5XX or socket errors.
+              const status = (error.cause as any)?.response?.status;
+              if (
+                !(
+                  (status && status >= 500 && status < 600) ||
+                  ((error.cause as any)?.code &&
+                    ((error.cause as any).code === "ECONNRESET" ||
+                      (error.cause as any).code === "ETIMEDOUT" ||
+                      (error.cause as any).code === "ECONNREFUSED"))
+                )
+              ) {
+                throw error;
+              }
+              if (this.verbose) {
+                console.warn(
+                  `Attempting to get job ${jobId} result (attempt ${error.attemptNumber}) failed. Retrying...`,
+                );
+              }
+            },
+          },
+        );
+      } catch (e: any) {
+        throw new Error(
+          `Max error count reached for job ${jobId}: ${e.message}`,
+        );
+      }
+
+      const { data } = result;
+      const status = (data as Record<string, unknown>)["status"];
+
+      if (status === "SUCCESS") {
+        let resultData;
+        switch (resultType) {
+          case "json": {
+            resultData =
+              await getJobJsonResultApiV1ParsingJobJobIdResultJsonGet({
+                client: this.#client,
+                throwOnError: true,
+                path: { job_id: jobId },
+                query: {
+                  project_id: this.project_id ?? null,
+                  organization_id: this.organization_id ?? null,
+                },
+                signal: AbortSignal.timeout(this.maxTimeout * 1000),
+              });
             break;
           }
           case "markdown": {
-            result = await getJobResultApiV1ParsingJobJobIdResultMarkdownGet({
-              client: this.#client,
-              throwOnError: true,
-              path: {
-                job_id: jobId,
-              },
-              query: {
-                project_id: this.project_id ?? null,
-                organization_id: this.organization_id ?? null,
-              },
-              signal,
-            });
+            resultData =
+              await getJobResultApiV1ParsingJobJobIdResultMarkdownGet({
+                client: this.#client,
+                throwOnError: true,
+                path: { job_id: jobId },
+                query: {
+                  project_id: this.project_id ?? null,
+                  organization_id: this.organization_id ?? null,
+                },
+                signal: AbortSignal.timeout(this.maxTimeout * 1000),
+              });
             break;
           }
           case "text": {
-            result = await getJobTextResultApiV1ParsingJobJobIdResultTextGet({
-              client: this.#client,
-              throwOnError: true,
-              path: {
-                job_id: jobId,
-              },
-              query: {
-                project_id: this.project_id ?? null,
-                organization_id: this.organization_id ?? null,
-              },
-              signal,
-            });
+            resultData =
+              await getJobTextResultApiV1ParsingJobJobIdResultTextGet({
+                client: this.#client,
+                throwOnError: true,
+                path: { job_id: jobId },
+                query: {
+                  project_id: this.project_id ?? null,
+                  organization_id: this.organization_id ?? null,
+                },
+                signal: AbortSignal.timeout(this.maxTimeout * 1000),
+              });
             break;
           }
         }
-        return result.data;
-        // If job is still pending, check if maximum timeout has been reached. If reached, throws an error
+        return resultData.data;
       } else if (status === "PENDING") {
-        signal.throwIfAborted();
         if (this.verbose && tries % 10 === 0) {
           this.stdout?.write(".");
         }
@@ -408,23 +464,35 @@ export class LlamaParseReader extends FileReader {
       } else {
         if (this.verbose) {
           console.error(
-            `Recieved Error response ${status} for job ${jobId}.  Got Error Code: ${data.error_code} and Error Message: ${data.error_message}`,
+            `Received error response ${status} for job ${jobId}. Got Error Code: ${data.error_code} and Error Message: ${data.error_message}`,
           );
         }
         throw new Error(
           `Failed to parse the file: ${jobId}, status: ${status}`,
         );
       }
+
+      // Adjust the polling interval based on the backoff pattern.
+      if (this.backoffPattern === "exponential") {
+        currentInterval = Math.min(currentInterval * 2, this.maxCheckInterval);
+      } else if (this.backoffPattern === "linear") {
+        currentInterval = Math.min(
+          currentInterval + this.checkInterval,
+          this.maxCheckInterval,
+        );
+      } else if (this.backoffPattern === "constant") {
+        currentInterval = this.checkInterval;
+      }
     }
   }
 
   /**
    * Loads data from a file and returns an array of Document objects.
-   * To be used with resultType = "text" and "markdown"
+   * To be used with resultType "text" or "markdown".
    *
-   * @param {Uint8Array} fileContent - The content of the file to be loaded.
-   * @param {string} filename - The name of the file to be loaded.
-   * @return {Promise<Document[]>} A Promise object that resolves to an array of Document objects.
+   * @param fileContent - The content of the file as a Uint8Array.
+   * @param filename - Optional filename for the file.
+   * @returns A Promise that resolves to an array of Document objects.
    */
   async loadDataAsContent(
     fileContent: Uint8Array,
@@ -436,42 +504,38 @@ export class LlamaParseReader extends FileReader {
           console.log(`Started parsing the file under job id ${jobId}`);
         }
 
-        // Return results as Document objects
+        // Return results as Document objects.
         const jobResults = await this.getJobResult(jobId, this.resultType);
         const resultText = jobResults[this.resultType];
 
-        // Split the text by separator if splitByPage is true
+        // Split the text by separator if splitByPage is true.
         if (this.splitByPage) {
           return this.splitTextBySeparator(resultText);
         }
 
-        return [
-          new Document({
-            text: resultText,
-          }),
-        ];
+        return [new Document({ text: resultText })];
       })
       .catch((error) => {
+        console.warn(
+          `Error while parsing the file with: ${error.message ?? error.detail}`,
+        );
         if (this.ignoreErrors) {
-          console.warn(
-            `Error while parsing the file: ${error.message ?? error.detail}`,
-          );
           return [];
         } else {
           throw error;
         }
       });
   }
+
   /**
    * Loads data from a file and returns an array of JSON objects.
-   * To be used with resultType = "json"
+   * To be used with resultType "json".
    *
-   * @param {string} filePathOrContent - The file path to the file or the content of the file as a Buffer
-   * @return {Promise<Record<string, any>[]>} A Promise that resolves to an array of JSON objects.
+   * @param filePathOrContent - The file path or the file content as a Uint8Array.
+   * @returns A Promise that resolves to an array of JSON objects.
    */
   async loadJson(
     filePathOrContent: string | Uint8Array,
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
   ): Promise<Record<string, any>[]> {
     let jobId;
     const isFilePath = typeof filePathOrContent === "string";
@@ -479,7 +543,7 @@ export class LlamaParseReader extends FileReader {
       const data = isFilePath
         ? await fs.readFile(filePathOrContent)
         : filePathOrContent;
-      // Creates a job for the file
+      // Create a job for the file.
       jobId = await this.#createJob(
         data,
         isFilePath ? path.basename(filePathOrContent) : undefined,
@@ -488,14 +552,14 @@ export class LlamaParseReader extends FileReader {
         console.log(`Started parsing the file under job id ${jobId}`);
       }
 
-      // Return results as an array of JSON objects (same format as Python version of the reader)
+      // Return results as an array of JSON objects.
       const resultJson = await this.getJobResult(jobId, "json");
       resultJson.job_id = jobId;
       resultJson.file_path = isFilePath ? filePathOrContent : undefined;
       return [resultJson];
     } catch (e) {
+      console.error(`Error while parsing the file under job id ${jobId}`, e);
       if (this.ignoreErrors) {
-        console.error(`Error while parsing the file under job id ${jobId}`, e);
         return [];
       } else {
         throw e;
@@ -505,27 +569,24 @@ export class LlamaParseReader extends FileReader {
 
   /**
    * Downloads and saves images from a given JSON result to a specified download path.
-   * Currently only supports resultType = "json"
+   * Currently only supports resultType "json".
    *
-   * @param {Record<string, any>[]} jsonResult - The JSON result containing image information.
-   * @param {string} downloadPath - The path to save the downloaded images.
-   * @return {Promise<Record<string, any>[]>} A Promise that resolves to an array of image objects.
+   * @param jsonResult - The JSON result containing image information.
+   * @param downloadPath - The path where the downloaded images will be saved.
+   * @returns A Promise that resolves to an array of image objects.
    */
   async getImages(
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
     jsonResult: Record<string, any>[],
     downloadPath: string,
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
   ): Promise<Record<string, any>[]> {
     try {
-      // Create download directory if it doesn't exist (Actually check for write access, not existence, since fsPromises does not have a `existsSync` method)
+      // Create download directory if it doesn't exist (checks for write access).
       try {
         await fs.access(downloadPath);
       } catch {
         await fs.mkdir(downloadPath, { recursive: true });
       }
 
-      // eslint-disable-next-line @typescript-eslint/no-explicit-any
       const images: Record<string, any>[] = [];
       for (const result of jsonResult) {
         const jobId = result.job_id;
@@ -541,7 +602,7 @@ export class LlamaParseReader extends FileReader {
               imageName,
             );
             await this.fetchAndSaveImage(imageName, imagePath, jobId);
-            // Assign metadata to the image
+            // Assign metadata to the image.
             image.path = imagePath;
             image.job_id = jobId;
             image.original_pdf_path = result.file_path;
@@ -561,6 +622,14 @@ export class LlamaParseReader extends FileReader {
     }
   }
 
+  /**
+   * Constructs the file path for an image.
+   *
+   * @param downloadPath - The base download directory.
+   * @param jobId - The job ID.
+   * @param imageName - The image name.
+   * @returns A Promise that resolves to the full image path.
+   */
   private async getImagePath(
     downloadPath: string,
     jobId: string,
@@ -569,6 +638,13 @@ export class LlamaParseReader extends FileReader {
     return path.join(downloadPath, `${jobId}-${imageName}`);
   }
 
+  /**
+   * Fetches an image from the API and saves it to the specified path.
+   *
+   * @param imageName - The name of the image.
+   * @param imagePath - The local path to save the image.
+   * @param jobId - The associated job ID.
+   */
   private async fetchAndSaveImage(
     imageName: string,
     imagePath: string,
@@ -590,18 +666,21 @@ export class LlamaParseReader extends FileReader {
       throw new Error(`Failed to download image: ${response.error.detail}`);
     }
     const blob = (await response.data) as Blob;
-    // Write the image buffer to the specified imagePath
+    // Write the image buffer to the specified imagePath.
     await fs.writeFile(imagePath, new Uint8Array(await blob.arrayBuffer()));
   }
 
-  // Filters out invalid values (null, undefined, empty string) of specific params.
+  /**
+   * Filters out invalid values (null, undefined, empty string) for specific parameters.
+   *
+   * @param params - The parameters object.
+   * @param keysToCheck - The keys to check for valid values.
+   * @returns A new object with filtered parameters.
+   */
   private filterSpecificParams(
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
     params: Record<string, any>,
     keysToCheck: string[],
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
   ): Record<string, any> {
-    // eslint-disable-next-line @typescript-eslint/no-explicit-any
     const filteredParams: Record<string, any> = {};
     for (const [key, value] of Object.entries(params)) {
       if (keysToCheck.includes(key)) {
@@ -615,6 +694,12 @@ export class LlamaParseReader extends FileReader {
     return filteredParams;
   }
 
+  /**
+   * Splits text into Document objects using the page separator.
+   *
+   * @param text - The text to be split.
+   * @returns An array of Document objects.
+   */
   private splitTextBySeparator(text: string): Document[] {
     const separator = this.pageSeparator ?? "\n---\n";
     const textChunks = text.split(separator);
diff --git a/packages/community/src/llm/bedrock/amazon/provider.ts b/packages/community/src/llm/bedrock/amazon/provider.ts
index e4f30919bd9d01a8bb45730caad4270878150c67..d3a8544a884a298e6a698897793885a2730826b9 100644
--- a/packages/community/src/llm/bedrock/amazon/provider.ts
+++ b/packages/community/src/llm/bedrock/amazon/provider.ts
@@ -24,6 +24,7 @@ import {
 } from "./utils";
 
 export class AmazonProvider extends Provider<ConverseStreamOutput> {
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
   getResultFromResponse(response: Record<string, any>): ConverseResponse {
     return JSON.parse(toUtf8(response.body));
   }
@@ -52,7 +53,7 @@ export class AmazonProvider extends Provider<ConverseStreamOutput> {
   }
 
   getTextFromStreamResponse(response: ResponseStream): string {
-    let event: ConverseStreamOutput | undefined =
+    const event: ConverseStreamOutput | undefined =
       this.getStreamingEventResponse(response);
     if (!event || !event.contentBlockDelta) return "";
     const delta: ContentBlockDelta | undefined = event.contentBlockDelta.delta;
diff --git a/packages/community/src/llm/bedrock/amazon/utils.ts b/packages/community/src/llm/bedrock/amazon/utils.ts
index 9c1fe5e0e1e7bd2264a9668f68784a5f624f0edf..51833c6ed0458c535ee3c8965df782f120e89362 100644
--- a/packages/community/src/llm/bedrock/amazon/utils.ts
+++ b/packages/community/src/llm/bedrock/amazon/utils.ts
@@ -56,7 +56,7 @@ export const mapImageContent = (imageUrl: string): ImageBlock => {
         mimeType as keyof typeof ACCEPTED_IMAGE_MIME_TYPE_FORMAT_MAP
       ],
 
-    // @ts-ignore: there's a mistake in the "@aws-sdk/client-bedrock-runtime" compared to the actual api
+    // @ts-expect-error: there's a mistake in the "@aws-sdk/client-bedrock-runtime" compared to the actual api
     source: { bytes: data },
   };
 };
diff --git a/packages/core/src/global/constants.ts b/packages/core/src/global/constants.ts
index 442f5e684500df3a9dd3cb94eb65afdf1767aec7..f4d99fa6b18104942c551dc875eca471c8f013aa 100644
--- a/packages/core/src/global/constants.ts
+++ b/packages/core/src/global/constants.ts
@@ -20,4 +20,5 @@ export const DEFAULT_NAMESPACE = "docstore";
 //#region llama cloud
 export const DEFAULT_PROJECT_NAME = "Default";
 export const DEFAULT_BASE_URL = "https://api.cloud.llamaindex.ai";
+export const DEFAULT_EU_BASE_URL = "https://api.cloud.eu.llamaindex.ai";
 //#endregion
diff --git a/packages/readers/src/cosmosdb.ts b/packages/readers/src/cosmosdb.ts
index 6a8e4f6c44b825a1d5fd9635de8161123cb09740..7e0e93a5c54a5f44e958b8f1e4dbe9499af6442e 100644
--- a/packages/readers/src/cosmosdb.ts
+++ b/packages/readers/src/cosmosdb.ts
@@ -60,7 +60,7 @@ export class SimpleCosmosDBReader implements BaseReader {
     const metadataFields = config.metadataFields;
 
     try {
-      let res = await container.items.query(query).fetchAll();
+      const res = await container.items.query(query).fetchAll();
       const documents: Document[] = [];
 
       for (const item of res.resources) {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d8cc67c66890f7c76f181738b3c38797ffced9bd..4f41f8482e443712bcf100dafb9f47a8e73c710d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,6 +7,10 @@ settings:
 importers:
 
   .:
+    dependencies:
+      p-retry:
+        specifier: ^6.2.1
+        version: 6.2.1
     devDependencies:
       '@changesets/cli':
         specifier: ^2.27.5
@@ -1721,61 +1725,6 @@ importers:
         specifier: ^13.4.8
         version: 13.4.8
 
-  packages/server:
-    dependencies:
-      '@llamaindex/chat-ui':
-        specifier: 0.3.1
-        version: 0.3.1(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      ai:
-        specifier: ^4.0.3
-        version: 4.1.34(react@19.0.0)(zod@3.24.2)
-      llamaindex:
-        specifier: workspace:*
-        version: link:../llamaindex
-      next:
-        specifier: 15.2.3
-        version: 15.2.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      react:
-        specifier: ^19.0.0
-        version: 19.0.0
-      react-dom:
-        specifier: ^19.0.0
-        version: 19.0.0(react@19.0.0)
-    devDependencies:
-      '@eslint/eslintrc':
-        specifier: ^3
-        version: 3.3.0
-      '@tailwindcss/postcss':
-        specifier: ^4
-        version: 4.0.9
-      '@types/node':
-        specifier: ^22.9.0
-        version: 22.9.0
-      '@types/react':
-        specifier: ^19
-        version: 19.0.10
-      '@types/react-dom':
-        specifier: ^19
-        version: 19.0.4(@types/react@19.0.10)
-      bunchee:
-        specifier: 6.4.0
-        version: 6.4.0(typescript@5.7.3)
-      eslint:
-        specifier: ^9
-        version: 9.22.0(jiti@2.4.2)
-      eslint-config-next:
-        specifier: 15.2.3
-        version: 15.2.3(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
-      tailwindcss:
-        specifier: ^4
-        version: 4.0.9
-      tsx:
-        specifier: ^4.19.3
-        version: 4.19.3
-      vitest:
-        specifier: ^2.1.5
-        version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(lightningcss@1.29.1)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2)
-
   packages/tools:
     dependencies:
       '@apidevtools/swagger-parser':
@@ -3630,11 +3579,6 @@ packages:
     peerDependencies:
       react: ^18.2.0 || ^19.0.0 || ^19.0.0-rc
 
-  '@llamaindex/chat-ui@0.3.1':
-    resolution: {integrity: sha512-sF6axN9LviewAxvBbqkF3u3K0yvIt74prio7uiVruFVT/AYkRlIk721QXTPBscf+ZvyzAqjh0Nx0BoGiZUzBCw==}
-    peerDependencies:
-      react: ^18.2.0 || ^19.0.0 || ^19.0.0-rc
-
   '@llamaindex/pdf-viewer@1.3.0':
     resolution: {integrity: sha512-HJtjzmxn+erb3Vq89W5atPq0q6uyZMMCgzOnmstxudzaHW/Yj1dp1ojCuBh/wlP1tUnIRoe9RmvC0ahmqSwRUA==}
     peerDependencies:
@@ -3785,15 +3729,9 @@ packages:
   '@next/env@15.2.1':
     resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==}
 
-  '@next/env@15.2.3':
-    resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==}
-
   '@next/eslint-plugin-next@15.1.0':
     resolution: {integrity: sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==}
 
-  '@next/eslint-plugin-next@15.2.3':
-    resolution: {integrity: sha512-eNSOIMJtjs+dp4Ms1tB1PPPJUQHP3uZK+OQ7iFY9qXpGO6ojT6imCL+KcUOqE/GXGidWbBZJzYdgAdPHqeCEPA==}
-
   '@next/swc-darwin-arm64@15.2.0':
     resolution: {integrity: sha512-rlp22GZwNJjFCyL7h5wz9vtpBVuCt3ZYjFWpEPBGzG712/uL1bbSkS675rVAUCRZ4hjoTJ26Q7IKhr5DfJrHDA==}
     engines: {node: '>= 10'}
@@ -3806,12 +3744,6 @@ packages:
     cpu: [arm64]
     os: [darwin]
 
-  '@next/swc-darwin-arm64@15.2.3':
-    resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [darwin]
-
   '@next/swc-darwin-x64@15.2.0':
     resolution: {integrity: sha512-DiU85EqSHogCz80+sgsx90/ecygfCSGl5P3b4XDRVZpgujBm5lp4ts7YaHru7eVTyZMjHInzKr+w0/7+qDrvMA==}
     engines: {node: '>= 10'}
@@ -3824,12 +3756,6 @@ packages:
     cpu: [x64]
     os: [darwin]
 
-  '@next/swc-darwin-x64@15.2.3':
-    resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [darwin]
-
   '@next/swc-linux-arm64-gnu@15.2.0':
     resolution: {integrity: sha512-VnpoMaGukiNWVxeqKHwi8MN47yKGyki5q+7ql/7p/3ifuU2341i/gDwGK1rivk0pVYbdv5D8z63uu9yMw0QhpQ==}
     engines: {node: '>= 10'}
@@ -3842,12 +3768,6 @@ packages:
     cpu: [arm64]
     os: [linux]
 
-  '@next/swc-linux-arm64-gnu@15.2.3':
-    resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-
   '@next/swc-linux-arm64-musl@15.2.0':
     resolution: {integrity: sha512-ka97/ssYE5nPH4Qs+8bd8RlYeNeUVBhcnsNUmFM6VWEob4jfN9FTr0NBhXVi1XEJpj3cMfgSRW+LdE3SUZbPrw==}
     engines: {node: '>= 10'}
@@ -3860,12 +3780,6 @@ packages:
     cpu: [arm64]
     os: [linux]
 
-  '@next/swc-linux-arm64-musl@15.2.3':
-    resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-
   '@next/swc-linux-x64-gnu@15.2.0':
     resolution: {integrity: sha512-zY1JduE4B3q0k2ZCE+DAF/1efjTXUsKP+VXRtrt/rJCTgDlUyyryx7aOgYXNc1d8gobys/Lof9P9ze8IyRDn7Q==}
     engines: {node: '>= 10'}
@@ -3878,12 +3792,6 @@ packages:
     cpu: [x64]
     os: [linux]
 
-  '@next/swc-linux-x64-gnu@15.2.3':
-    resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-
   '@next/swc-linux-x64-musl@15.2.0':
     resolution: {integrity: sha512-QqvLZpurBD46RhaVaVBepkVQzh8xtlUN00RlG4Iq1sBheNugamUNPuZEH1r9X1YGQo1KqAe1iiShF0acva3jHQ==}
     engines: {node: '>= 10'}
@@ -3896,12 +3804,6 @@ packages:
     cpu: [x64]
     os: [linux]
 
-  '@next/swc-linux-x64-musl@15.2.3':
-    resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-
   '@next/swc-win32-arm64-msvc@15.2.0':
     resolution: {integrity: sha512-ODZ0r9WMyylTHAN6pLtvUtQlGXBL9voljv6ujSlcsjOxhtXPI1Ag6AhZK0SE8hEpR1374WZZ5w33ChpJd5fsjw==}
     engines: {node: '>= 10'}
@@ -3914,12 +3816,6 @@ packages:
     cpu: [arm64]
     os: [win32]
 
-  '@next/swc-win32-arm64-msvc@15.2.3':
-    resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [win32]
-
   '@next/swc-win32-x64-msvc@15.2.0':
     resolution: {integrity: sha512-8+4Z3Z7xa13NdUuUAcpVNA6o76lNPniBd9Xbo02bwXQXnZgFvEopwY2at5+z7yHl47X9qbZpvwatZ2BRo3EdZw==}
     engines: {node: '>= 10'}
@@ -3932,12 +3828,6 @@ packages:
     cpu: [x64]
     os: [win32]
 
-  '@next/swc-win32-x64-msvc@15.2.3':
-    resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [win32]
-
   '@nodelib/fs.scandir@2.1.5':
     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
     engines: {node: '>= 8'}
@@ -5642,6 +5532,9 @@ packages:
   '@types/resolve@1.20.2':
     resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
 
+  '@types/retry@0.12.2':
+    resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==}
+
   '@types/statuses@2.0.5':
     resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==}
 
@@ -7222,15 +7115,6 @@ packages:
       typescript:
         optional: true
 
-  eslint-config-next@15.2.3:
-    resolution: {integrity: sha512-VDQwbajhNMFmrhLWVyUXCqsGPN+zz5G8Ys/QwFubfsxTIrkqdx3N3x3QPW+pERz8bzGPP0IgEm8cNbZcd8PFRQ==}
-    peerDependencies:
-      eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
-      typescript: '>=3.3.1'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
-
   eslint-config-prettier@9.1.0:
     resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
     hasBin: true
@@ -8384,6 +8268,10 @@ packages:
   is-module@1.0.0:
     resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
 
+  is-network-error@1.1.0:
+    resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==}
+    engines: {node: '>=16'}
+
   is-node-process@1.2.0:
     resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
 
@@ -9640,27 +9528,6 @@ packages:
       sass:
         optional: true
 
-  next@15.2.3:
-    resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==}
-    engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
-    hasBin: true
-    peerDependencies:
-      '@opentelemetry/api': ^1.1.0
-      '@playwright/test': ^1.41.2
-      babel-plugin-react-compiler: '*'
-      react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
-      react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
-      sass: ^1.3.0
-    peerDependenciesMeta:
-      '@opentelemetry/api':
-        optional: true
-      '@playwright/test':
-        optional: true
-      babel-plugin-react-compiler:
-        optional: true
-      sass:
-        optional: true
-
   nice-grpc-client-middleware-retry@3.1.9:
     resolution: {integrity: sha512-BgbsNjuppxD6hoeCfO5gkBA/G69Tq5d9QX35QLdA46NSjKllelC+FlcgSPMlO9VQKCAPDfp4zzzDJZTNtbvzVw==}
 
@@ -9970,6 +9837,10 @@ packages:
     resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
     engines: {node: '>=6'}
 
+  p-retry@6.2.1:
+    resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==}
+    engines: {node: '>=16.17'}
+
   p-try@2.2.0:
     resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
     engines: {node: '>=6'}
@@ -10820,6 +10691,10 @@ packages:
     resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==}
     engines: {node: '>=14'}
 
+  retry@0.13.1:
+    resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
+    engines: {node: '>= 4'}
+
   reusify@1.0.4:
     resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
     engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -14542,36 +14417,6 @@ snapshots:
       - react-dom
       - supports-color
 
-  '@llamaindex/chat-ui@0.3.1(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
-    dependencies:
-      '@llamaindex/pdf-viewer': 1.3.0(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@radix-ui/react-hover-card': 1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@radix-ui/react-icons': 1.3.2(react@19.0.0)
-      '@radix-ui/react-progress': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@radix-ui/react-select': 2.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      '@radix-ui/react-slot': 1.1.2(@types/react@19.0.10)(react@19.0.0)
-      '@radix-ui/react-tabs': 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-      class-variance-authority: 0.7.1
-      clsx: 2.1.1
-      highlight.js: 11.11.1
-      katex: 0.16.21
-      lucide-react: 0.453.0(react@19.0.0)
-      react: 19.0.0
-      react-markdown: 8.0.7(@types/react@19.0.10)(react@19.0.0)
-      rehype-katex: 7.0.1
-      remark: 14.0.3
-      remark-code-import: 1.2.0
-      remark-gfm: 3.0.1
-      remark-math: 5.1.1
-      tailwind-merge: 2.6.0
-      vaul: 0.9.9(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
-    transitivePeerDependencies:
-      - '@types/react'
-      - '@types/react-dom'
-      - react-dom
-      - supports-color
-
   '@llamaindex/pdf-viewer@1.3.0(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
     dependencies:
       '@wojtekmaj/react-hooks': 1.17.2(react@19.0.0)
@@ -14756,88 +14601,58 @@ snapshots:
 
   '@next/env@15.2.1': {}
 
-  '@next/env@15.2.3': {}
-
   '@next/eslint-plugin-next@15.1.0':
     dependencies:
       fast-glob: 3.3.1
 
-  '@next/eslint-plugin-next@15.2.3':
-    dependencies:
-      fast-glob: 3.3.1
-
   '@next/swc-darwin-arm64@15.2.0':
     optional: true
 
   '@next/swc-darwin-arm64@15.2.1':
     optional: true
 
-  '@next/swc-darwin-arm64@15.2.3':
-    optional: true
-
   '@next/swc-darwin-x64@15.2.0':
     optional: true
 
   '@next/swc-darwin-x64@15.2.1':
     optional: true
 
-  '@next/swc-darwin-x64@15.2.3':
-    optional: true
-
   '@next/swc-linux-arm64-gnu@15.2.0':
     optional: true
 
   '@next/swc-linux-arm64-gnu@15.2.1':
     optional: true
 
-  '@next/swc-linux-arm64-gnu@15.2.3':
-    optional: true
-
   '@next/swc-linux-arm64-musl@15.2.0':
     optional: true
 
   '@next/swc-linux-arm64-musl@15.2.1':
     optional: true
 
-  '@next/swc-linux-arm64-musl@15.2.3':
-    optional: true
-
   '@next/swc-linux-x64-gnu@15.2.0':
     optional: true
 
   '@next/swc-linux-x64-gnu@15.2.1':
     optional: true
 
-  '@next/swc-linux-x64-gnu@15.2.3':
-    optional: true
-
   '@next/swc-linux-x64-musl@15.2.0':
     optional: true
 
   '@next/swc-linux-x64-musl@15.2.1':
     optional: true
 
-  '@next/swc-linux-x64-musl@15.2.3':
-    optional: true
-
   '@next/swc-win32-arm64-msvc@15.2.0':
     optional: true
 
   '@next/swc-win32-arm64-msvc@15.2.1':
     optional: true
 
-  '@next/swc-win32-arm64-msvc@15.2.3':
-    optional: true
-
   '@next/swc-win32-x64-msvc@15.2.0':
     optional: true
 
   '@next/swc-win32-x64-msvc@15.2.1':
     optional: true
 
-  '@next/swc-win32-x64-msvc@15.2.3':
-    optional: true
-
   '@nodelib/fs.scandir@2.1.5':
     dependencies:
       '@nodelib/fs.stat': 2.0.5
@@ -16808,6 +16623,8 @@ snapshots:
 
   '@types/resolve@1.20.2': {}
 
+  '@types/retry@0.12.2': {}
+
   '@types/statuses@2.0.5': {}
 
   '@types/tough-cookie@4.0.5': {}
@@ -16833,10 +16650,10 @@ snapshots:
       '@types/node': 22.9.0
     optional: true
 
-  '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)':
+  '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
+      '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
       '@typescript-eslint/scope-manager': 8.24.0
       '@typescript-eslint/type-utils': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
       '@typescript-eslint/utils': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
@@ -18754,12 +18571,12 @@ snapshots:
     dependencies:
       '@next/eslint-plugin-next': 15.1.0
       '@rushstack/eslint-patch': 1.10.5
-      '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
+      '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
       '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
       eslint: 9.16.0(jiti@2.4.2)
       eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2))
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2))
+      eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))
       eslint-plugin-jsx-a11y: 6.10.2(eslint@9.16.0(jiti@2.4.2))
       eslint-plugin-react: 7.37.2(eslint@9.16.0(jiti@2.4.2))
       eslint-plugin-react-hooks: 5.1.0(eslint@9.16.0(jiti@2.4.2))
@@ -18779,27 +18596,7 @@ snapshots:
       eslint: 9.22.0(jiti@2.4.2)
       eslint-import-resolver-node: 0.3.9
       eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2))
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2))
-      eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0(jiti@2.4.2))
-      eslint-plugin-react: 7.37.2(eslint@9.22.0(jiti@2.4.2))
-      eslint-plugin-react-hooks: 5.1.0(eslint@9.22.0(jiti@2.4.2))
-    optionalDependencies:
-      typescript: 5.7.3
-    transitivePeerDependencies:
-      - eslint-import-resolver-webpack
-      - eslint-plugin-import-x
-      - supports-color
-
-  eslint-config-next@15.2.3(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3):
-    dependencies:
-      '@next/eslint-plugin-next': 15.2.3
-      '@rushstack/eslint-patch': 1.10.5
-      '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
-      '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
-      eslint: 9.22.0(jiti@2.4.2)
-      eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2))
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2))
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))
       eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0(jiti@2.4.2))
       eslint-plugin-react: 7.37.2(eslint@9.22.0(jiti@2.4.2))
       eslint-plugin-react-hooks: 5.1.0(eslint@9.22.0(jiti@2.4.2))
@@ -18828,7 +18625,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)):
+  eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)):
     dependencies:
       '@nolyfill/is-core-module': 1.0.39
       debug: 4.4.0
@@ -18840,7 +18637,7 @@ snapshots:
       is-glob: 4.0.3
       stable-hash: 0.0.4
     optionalDependencies:
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2))
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))
     transitivePeerDependencies:
       - supports-color
 
@@ -18856,18 +18653,18 @@ snapshots:
       is-glob: 4.0.3
       stable-hash: 0.0.4
     optionalDependencies:
-      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2))
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))
     transitivePeerDependencies:
       - supports-color
 
-  eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)):
+  eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)):
     dependencies:
       debug: 3.2.7
     optionalDependencies:
-      '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
+      '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
       eslint: 9.16.0(jiti@2.4.2)
       eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2))
+      eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))
     transitivePeerDependencies:
       - supports-color
 
@@ -18882,7 +18679,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)):
+  eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)):
     dependencies:
       '@rtsao/scc': 1.1.0
       array-includes: 3.1.8
@@ -18893,7 +18690,7 @@ snapshots:
       doctrine: 2.1.0
       eslint: 9.16.0(jiti@2.4.2)
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2))
+      eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))
       hasown: 2.0.2
       is-core-module: 2.16.1
       is-glob: 4.0.3
@@ -18905,13 +18702,13 @@ snapshots:
       string.prototype.trimend: 1.0.9
       tsconfig-paths: 3.15.0
     optionalDependencies:
-      '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
+      '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
     transitivePeerDependencies:
       - eslint-import-resolver-typescript
       - eslint-import-resolver-webpack
       - supports-color
 
-  eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2)):
+  eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2)):
     dependencies:
       '@rtsao/scc': 1.1.0
       array-includes: 3.1.8
@@ -20527,6 +20324,8 @@ snapshots:
 
   is-module@1.0.0: {}
 
+  is-network-error@1.1.0: {}
+
   is-node-process@1.2.0: {}
 
   is-number-object@1.1.1:
@@ -22255,32 +22054,6 @@ snapshots:
       - '@babel/core'
       - babel-plugin-macros
 
-  next@15.2.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
-    dependencies:
-      '@next/env': 15.2.3
-      '@swc/counter': 0.1.3
-      '@swc/helpers': 0.5.15
-      busboy: 1.6.0
-      caniuse-lite: 1.0.30001701
-      postcss: 8.4.31
-      react: 19.0.0
-      react-dom: 19.0.0(react@19.0.0)
-      styled-jsx: 5.1.6(react@19.0.0)
-    optionalDependencies:
-      '@next/swc-darwin-arm64': 15.2.3
-      '@next/swc-darwin-x64': 15.2.3
-      '@next/swc-linux-arm64-gnu': 15.2.3
-      '@next/swc-linux-arm64-musl': 15.2.3
-      '@next/swc-linux-x64-gnu': 15.2.3
-      '@next/swc-linux-x64-musl': 15.2.3
-      '@next/swc-win32-arm64-msvc': 15.2.3
-      '@next/swc-win32-x64-msvc': 15.2.3
-      '@opentelemetry/api': 1.9.0
-      sharp: 0.33.5
-    transitivePeerDependencies:
-      - '@babel/core'
-      - babel-plugin-macros
-
   nice-grpc-client-middleware-retry@3.1.9:
     dependencies:
       abort-controller-x: 0.4.3
@@ -22645,6 +22418,12 @@ snapshots:
 
   p-map@2.1.0: {}
 
+  p-retry@6.2.1:
+    dependencies:
+      '@types/retry': 0.12.2
+      is-network-error: 1.1.0
+      retry: 0.13.1
+
   p-try@2.2.0: {}
 
   pac-proxy-agent@7.1.0:
@@ -23643,6 +23422,8 @@ snapshots:
       - encoding
       - supports-color
 
+  retry@0.13.1: {}
+
   reusify@1.0.4: {}
 
   rfdc@1.4.1: {}
@@ -25619,4 +25400,4 @@ snapshots:
 
   zod@3.24.2: {}
 
-  zwitch@2.0.4: {}
+  zwitch@2.0.4: {}
\ No newline at end of file