diff --git a/apps/simple/openai.ts b/apps/simple/openai.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0977b8d359114b5b72c4af1c01c3e10421449085
--- /dev/null
+++ b/apps/simple/openai.ts
@@ -0,0 +1,18 @@
+import process from "node:process";
+import { Configuration, OpenAIWrapper } from "@llamaindex/core/src/openai";
+
+(async () => {
+  const configuration = new Configuration({
+    apiKey: process.env.OPENAI_API_KEY,
+  });
+
+  const openai = new OpenAIWrapper(configuration);
+
+  const { data } = await openai.createChatCompletion({
+    model: "gpt-3.5-turbo-0613",
+    messages: [{ role: "user", content: "Hello, world!" }],
+  });
+
+  console.log(data);
+  console.log(data.choices[0].message);
+})();
diff --git a/apps/simple/package.json b/apps/simple/package.json
index dfde9dc87f3273b3231492963d7dee66c5a5ecd0..a5a22b25e7d1608ad5298e6c35f1dd9abd9d4bcd 100644
--- a/apps/simple/package.json
+++ b/apps/simple/package.json
@@ -2,5 +2,8 @@
   "name": "simple",
   "dependencies": {
     "@llamaindex/core": "workspace:*"
+  },
+  "devDependencies": {
+    "@types/node": "^18"
   }
 }
diff --git a/packages/core/package.json b/packages/core/package.json
index 2ba2e98e147e376fb63dd77cdd3a434c929188d7..fe9910ac054a566b0d6ddffaf372ec97495539ad 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,7 @@
 {
   "name": "@llamaindex/core",
   "dependencies": {
+    "axios": "^0.26.1",
     "js-tiktoken": "^1.0.7",
     "openai": "^3.3.0"
   },
diff --git a/packages/core/src/fetchAdapter.d.ts b/packages/core/src/fetchAdapter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dbec1d1d938cbedbf37cb5e62bf960f21aa7d1be
--- /dev/null
+++ b/packages/core/src/fetchAdapter.d.ts
@@ -0,0 +1,3 @@
+import { AxiosRequestConfig, AxiosPromise } from "axios";
+
+export default function fetchAdapter(config: AxiosRequestConfig): AxiosPromise;
diff --git a/packages/core/src/fetchAdapter.js b/packages/core/src/fetchAdapter.js
new file mode 100644
index 0000000000000000000000000000000000000000..9b34eca10c9460112b45a62ac574f60c1a7b9000
--- /dev/null
+++ b/packages/core/src/fetchAdapter.js
@@ -0,0 +1,250 @@
+// Adapted from https://github.com/vespaiach/axios-fetch-adapter
+// Missing type: module
+
+// MIT License
+
+// Copyright (c) 2021 Vespaiach
+
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+
+// The above copyright notice and this permission notice shall be included in all
+// copies or substantial portions of the Software.
+
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+const axios = require("axios");
+const settle = require("axios/lib/core/settle");
+const buildURL = require("axios/lib/helpers/buildURL");
+const buildFullPath = require("axios/lib/core/buildFullPath");
+const {
+  isUndefined,
+  isStandardBrowserEnv,
+  isFormData,
+} = require("axios/lib/utils");
+
+/**
+ * - Create a request object
+ * - Get response body
+ * - Check if timeout
+ */
+module.exports = async function fetchAdapter(config) {
+  const request = createRequest(config);
+  const promiseChain = [getResponse(request, config)];
+
+  if (config.timeout && config.timeout > 0) {
+    promiseChain.push(
+      new Promise((res) => {
+        setTimeout(() => {
+          const message = config.timeoutErrorMessage
+            ? config.timeoutErrorMessage
+            : "timeout of " + config.timeout + "ms exceeded";
+          res(createError(message, config, "ECONNABORTED", request));
+        }, config.timeout);
+      })
+    );
+  }
+
+  const data = await Promise.race(promiseChain);
+  return new Promise((resolve, reject) => {
+    if (data instanceof Error) {
+      reject(data);
+    } else {
+      Object.prototype.toString.call(config.settle) === "[object Function]"
+        ? config.settle(resolve, reject, data)
+        : settle(resolve, reject, data);
+    }
+  });
+};
+
+/**
+ * Fetch API stage two is to get response body. This funtion tries to retrieve
+ * response body based on response's type
+ */
+async function getResponse(request, config) {
+  let stageOne;
+  try {
+    stageOne = await fetch(request);
+  } catch (e) {
+    return createError("Network Error", config, "ERR_NETWORK", request);
+  }
+
+  const response = {
+    ok: stageOne.ok,
+    status: stageOne.status,
+    statusText: stageOne.statusText,
+    headers: new Headers(stageOne.headers), // Make a copy of headers
+    config: config,
+    request,
+  };
+
+  if (stageOne.status >= 200 && stageOne.status !== 204) {
+    switch (config.responseType) {
+      case "arraybuffer":
+        response.data = await stageOne.arrayBuffer();
+        break;
+      case "blob":
+        response.data = await stageOne.blob();
+        break;
+      case "json":
+        response.data = await stageOne.json();
+        break;
+      case "formData":
+        response.data = await stageOne.formData();
+        break;
+      default:
+        response.data = await stageOne.text();
+        break;
+    }
+  }
+
+  return response;
+}
+
+/**
+ * This function will create a Request object based on configuration's axios
+ */
+function createRequest(config) {
+  const headers = new Headers(config.headers);
+
+  // HTTP basic authentication
+  if (config.auth) {
+    const username = config.auth.username || "";
+    const password = config.auth.password
+      ? decodeURI(encodeURIComponent(config.auth.password))
+      : "";
+    headers.set("Authorization", `Basic ${btoa(username + ":" + password)}`);
+  }
+
+  const method = config.method.toUpperCase();
+  const options = {
+    headers: headers,
+    method,
+  };
+  if (method !== "GET" && method !== "HEAD") {
+    options.body = config.data;
+
+    // In these cases the browser will automatically set the correct Content-Type,
+    // but only if that header hasn't been set yet. So that's why we're deleting it.
+    if (isFormData(options.body) && isStandardBrowserEnv()) {
+      headers.delete("Content-Type");
+    }
+  }
+  if (config.mode) {
+    options.mode = config.mode;
+  }
+  if (config.cache) {
+    options.cache = config.cache;
+  }
+  if (config.integrity) {
+    options.integrity = config.integrity;
+  }
+  if (config.redirect) {
+    options.redirect = config.redirect;
+  }
+  if (config.referrer) {
+    options.referrer = config.referrer;
+  }
+  // This config is similar to XHR’s withCredentials flag, but with three available values instead of two.
+  // So if withCredentials is not set, default value 'same-origin' will be used
+  if (!isUndefined(config.withCredentials)) {
+    options.credentials = config.withCredentials ? "include" : "omit";
+  }
+
+  const fullPath = buildFullPath(config.baseURL, config.url);
+  const url = buildURL(fullPath, config.params, config.paramsSerializer);
+
+  // Expected browser to throw error if there is any wrong configuration value
+  return new Request(url, options);
+}
+
+/**
+ * Note:
+ *
+ *   From version >= 0.27.0, createError function is replaced by AxiosError class.
+ *   So I copy the old createError function here for backward compatible.
+ *
+ *
+ *
+ * Create an Error with the specified message, config, error code, request and response.
+ *
+ * @param {string} message The error message.
+ * @param {Object} config The config.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ * @returns {Error} The created error.
+ */
+function createError(message, config, code, request, response) {
+  if (axios.AxiosError && typeof axios.AxiosError === "function") {
+    return new axios.AxiosError(
+      message,
+      axios.AxiosError[code],
+      config,
+      request,
+      response
+    );
+  }
+
+  var error = new Error(message);
+  return enhanceError(error, config, code, request, response);
+}
+
+/**
+ *
+ * Note:
+ *
+ *   This function is for backward compatible.
+ *
+ *
+ * Update an Error with the specified config, error code, and response.
+ *
+ * @param {Error} error The error to update.
+ * @param {Object} config The config.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ * @returns {Error} The error.
+ */
+function enhanceError(error, config, code, request, response) {
+  error.config = config;
+  if (code) {
+    error.code = code;
+  }
+
+  error.request = request;
+  error.response = response;
+  error.isAxiosError = true;
+
+  error.toJSON = function toJSON() {
+    return {
+      // Standard
+      message: this.message,
+      name: this.name,
+      // Microsoft
+      description: this.description,
+      number: this.number,
+      // Mozilla
+      fileName: this.fileName,
+      lineNumber: this.lineNumber,
+      columnNumber: this.columnNumber,
+      stack: this.stack,
+      // Axios
+      config: this.config,
+      code: this.code,
+      status:
+        this.response && this.response.status ? this.response.status : null,
+    };
+  };
+  return error;
+}
diff --git a/packages/core/src/openai.ts b/packages/core/src/openai.ts
index d22971cf6124f0852aae4018a300225628ae24ac..b300580cb16bc72251bc935931020dd14f7d1879 100644
--- a/packages/core/src/openai.ts
+++ b/packages/core/src/openai.ts
@@ -1,56 +1,33 @@
-const OPENAI_EMBEDDINGS_URL = "https://api.openai.com/v1/embeddings";
-const OPENAI_CHAT_COMPLETIONS_URL =
-  "https://api.openai.com/v1/chat/completions";
+import {
+  CreateCompletionRequest,
+  OpenAIApi,
+  CreateCompletionResponse,
+  CreateChatCompletionRequest,
+  CreateChatCompletionResponse,
+} from "openai";
+import { AxiosRequestConfig, AxiosResponse } from "axios";
+import fetchAdapter from "./fetchAdapter";
 
-const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
+export class OpenAIWrapper extends OpenAIApi {
+  createCompletion(
+    createCompletionRequest: CreateCompletionRequest,
+    options?: AxiosRequestConfig
+  ): Promise<AxiosResponse<CreateCompletionResponse, any>> {
+    return super.createCompletion(createCompletionRequest, {
+      adapter: fetchAdapter,
+      ...options,
+    });
+  }
 
-export const getEmbeddings = async (
-  text: string,
-  model = "text-embedding-ada-002"
-) => {
-  return await fetch(OPENAI_EMBEDDINGS_URL, {
-    method: "POST",
-    headers: {
-      "Content-Type": "application/json",
-      Authorization: `Bearer ${OPENAI_API_KEY}`,
-    },
-    body: JSON.stringify({ input: text, model: model }),
-  });
-};
-
-interface ChatMessage {
-  role: "system" | "user" | "assistant";
-  content: string;
-  name?: string;
-}
-
-interface FunctionMessage {
-  role: "function";
-  content?: string;
-  name: string;
-  function_call?: string;
-}
-
-export type Message = ChatMessage | FunctionMessage;
-
-interface Function {
-  name: string;
+  createChatCompletion(
+    createChatCompletionRequest: CreateChatCompletionRequest,
+    options?: AxiosRequestConfig<any> | undefined
+  ): Promise<AxiosResponse<CreateChatCompletionResponse, any>> {
+    return super.createChatCompletion(createChatCompletionRequest, {
+      adapter: fetchAdapter,
+      ...options,
+    });
+  }
 }
 
-export const getChatCompletions = async (
-  messages: Message[],
-  model = "gpt-3.5-turbo",
-  functions: Function[] | null = null
-) => {
-  return await fetch(OPENAI_CHAT_COMPLETIONS_URL, {
-    method: "POST",
-    headers: {
-      "Content-Type": "application/json",
-      Authorization: `Bearer ${OPENAI_API_KEY}`,
-    },
-    body: JSON.stringify({
-      model,
-      messages,
-    }),
-  });
-};
+export * from "openai";
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e82f10a3b6f4cda24770a8aa05cc4f8e669b567c..0dd717a424f7be485e041adf75188102f36f7b99 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -10,7 +10,7 @@ importers:
     devDependencies:
       '@turbo/gen':
         specifier: ^1.9.7
-        version: 1.9.7(@types/node@17.0.45)(typescript@4.9.5)
+        version: 1.9.7(@types/node@18.6.0)(typescript@4.9.5)
       '@types/jest':
         specifier: ^29.5.2
         version: 29.5.2
@@ -22,7 +22,7 @@ importers:
         version: link:packages/eslint-config-custom
       jest:
         specifier: ^29.5.0
-        version: 29.5.0(@types/node@17.0.45)
+        version: 29.5.0(@types/node@18.6.0)
       prettier:
         specifier: ^2.5.1
         version: 2.8.8
@@ -75,6 +75,10 @@ importers:
       '@llamaindex/core':
         specifier: workspace:*
         version: link:../../packages/core
+    devDependencies:
+      '@types/node':
+        specifier: ^18
+        version: 18.6.0
 
   apps/web:
     dependencies:
@@ -112,6 +116,12 @@ importers:
 
   packages/core:
     dependencies:
+      '@vespaiach/axios-fetch-adapter':
+        specifier: ^0.3.1
+        version: 0.3.1(axios@0.26.1)
+      axios:
+        specifier: ^0.26.1
+        version: 0.26.1
       js-tiktoken:
         specifier: ^1.0.7
         version: 1.0.7
@@ -570,7 +580,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       chalk: 4.1.2
       jest-message-util: 29.5.0
       jest-util: 29.5.0
@@ -591,14 +601,14 @@ packages:
       '@jest/test-result': 29.5.0
       '@jest/transform': 29.5.0
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       ansi-escapes: 4.3.2
       chalk: 4.1.2
       ci-info: 3.8.0
       exit: 0.1.2
       graceful-fs: 4.2.11
       jest-changed-files: 29.5.0
-      jest-config: 29.5.0(@types/node@17.0.45)
+      jest-config: 29.5.0(@types/node@18.6.0)
       jest-haste-map: 29.5.0
       jest-message-util: 29.5.0
       jest-regex-util: 29.4.3
@@ -625,7 +635,7 @@ packages:
     dependencies:
       '@jest/fake-timers': 29.5.0
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       jest-mock: 29.5.0
     dev: true
 
@@ -652,7 +662,7 @@ packages:
     dependencies:
       '@jest/types': 29.5.0
       '@sinonjs/fake-timers': 10.1.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       jest-message-util: 29.5.0
       jest-mock: 29.5.0
       jest-util: 29.5.0
@@ -685,7 +695,7 @@ packages:
       '@jest/transform': 29.5.0
       '@jest/types': 29.5.0
       '@jridgewell/trace-mapping': 0.3.18
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       chalk: 4.1.2
       collect-v8-coverage: 1.0.1
       exit: 0.1.2
@@ -773,7 +783,7 @@ packages:
       '@jest/schemas': 29.4.3
       '@types/istanbul-lib-coverage': 2.0.4
       '@types/istanbul-reports': 3.0.1
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       '@types/yargs': 17.0.24
       chalk: 4.1.2
     dev: true
@@ -981,7 +991,7 @@ packages:
     resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
     dev: true
 
-  /@turbo/gen@1.9.7(@types/node@17.0.45)(typescript@4.9.5):
+  /@turbo/gen@1.9.7(@types/node@18.6.0)(typescript@4.9.5):
     resolution: {integrity: sha512-mjenROdRNvYxZixNfamJY/XxwKMT+01PuQby8+qdRUUa5ZLBPOv4rw11n+II1O8ZnpFpBJIGGFJcnRNY+lCddw==}
     dependencies:
       chalk: 2.4.2
@@ -991,7 +1001,7 @@ packages:
       minimatch: 9.0.0
       node-plop: 0.26.3
       semver: 7.5.0
-      ts-node: 10.9.1(@types/node@17.0.45)(typescript@4.9.5)
+      ts-node: 10.9.1(@types/node@18.6.0)(typescript@4.9.5)
       update-check: 1.5.4
       validate-npm-package-name: 5.0.0
     transitivePeerDependencies:
@@ -1034,13 +1044,13 @@ packages:
     resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
     dependencies:
       '@types/minimatch': 5.1.2
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
     dev: true
 
   /@types/graceful-fs@4.1.6:
     resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
     dependencies:
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
     dev: true
 
   /@types/inquirer@6.5.0:
@@ -1085,6 +1095,10 @@ packages:
     resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
     dev: true
 
+  /@types/node@18.6.0:
+    resolution: {integrity: sha512-WZ/6I1GL0DNAo4bb01lGGKTHH8BHJyECepf11kWONg3OJoHq2WYOm16Es1V54Er7NTUXsbDCpKRKdmBc4X2xhA==}
+    dev: true
+
   /@types/prettier@2.7.3:
     resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==}
     dev: true
@@ -1118,7 +1132,7 @@ packages:
   /@types/through@0.0.30:
     resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
     dependencies:
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
     dev: true
 
   /@types/yargs-parser@21.0.0:
@@ -1193,6 +1207,14 @@ packages:
       eslint-visitor-keys: 3.4.0
     dev: false
 
+  /@vespaiach/axios-fetch-adapter@0.3.1(axios@0.26.1):
+    resolution: {integrity: sha512-+1F52VWXmQHSRFSv4/H0wtnxfvjRMPK5531e880MIjypPdUSX6QZuoDgEVeCE1vjhzDdxCVX7rOqkub7StEUwQ==}
+    peerDependencies:
+      axios: '>=0.26.0'
+    dependencies:
+      axios: 0.26.1
+    dev: false
+
   /acorn-jsx@5.3.2(acorn@7.4.1):
     resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
     peerDependencies:
@@ -3170,7 +3192,7 @@ packages:
       '@jest/expect': 29.5.0
       '@jest/test-result': 29.5.0
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       chalk: 4.1.2
       co: 4.6.0
       dedent: 0.7.0
@@ -3190,7 +3212,7 @@ packages:
       - supports-color
     dev: true
 
-  /jest-cli@29.5.0(@types/node@17.0.45):
+  /jest-cli@29.5.0(@types/node@18.6.0):
     resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
@@ -3207,7 +3229,7 @@ packages:
       exit: 0.1.2
       graceful-fs: 4.2.11
       import-local: 3.1.0
-      jest-config: 29.5.0(@types/node@17.0.45)
+      jest-config: 29.5.0(@types/node@18.6.0)
       jest-util: 29.5.0
       jest-validate: 29.5.0
       prompts: 2.4.2
@@ -3218,7 +3240,7 @@ packages:
       - ts-node
     dev: true
 
-  /jest-config@29.5.0(@types/node@17.0.45):
+  /jest-config@29.5.0(@types/node@18.6.0):
     resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
@@ -3233,7 +3255,7 @@ packages:
       '@babel/core': 7.22.5
       '@jest/test-sequencer': 29.5.0
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       babel-jest: 29.5.0(@babel/core@7.22.5)
       chalk: 4.1.2
       ci-info: 3.8.0
@@ -3292,7 +3314,7 @@ packages:
       '@jest/environment': 29.5.0
       '@jest/fake-timers': 29.5.0
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       jest-mock: 29.5.0
       jest-util: 29.5.0
     dev: true
@@ -3308,7 +3330,7 @@ packages:
     dependencies:
       '@jest/types': 29.5.0
       '@types/graceful-fs': 4.1.6
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       anymatch: 3.1.3
       fb-watchman: 2.0.2
       graceful-fs: 4.2.11
@@ -3359,7 +3381,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       jest-util: 29.5.0
     dev: true
 
@@ -3414,7 +3436,7 @@ packages:
       '@jest/test-result': 29.5.0
       '@jest/transform': 29.5.0
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       chalk: 4.1.2
       emittery: 0.13.1
       graceful-fs: 4.2.11
@@ -3445,7 +3467,7 @@ packages:
       '@jest/test-result': 29.5.0
       '@jest/transform': 29.5.0
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       chalk: 4.1.2
       cjs-module-lexer: 1.2.3
       collect-v8-coverage: 1.0.1
@@ -3500,7 +3522,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       chalk: 4.1.2
       ci-info: 3.8.0
       graceful-fs: 4.2.11
@@ -3525,7 +3547,7 @@ packages:
     dependencies:
       '@jest/test-result': 29.5.0
       '@jest/types': 29.5.0
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       ansi-escapes: 4.3.2
       chalk: 4.1.2
       emittery: 0.13.1
@@ -3537,13 +3559,13 @@ packages:
     resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       jest-util: 29.5.0
       merge-stream: 2.0.0
       supports-color: 8.1.1
     dev: true
 
-  /jest@29.5.0(@types/node@17.0.45):
+  /jest@29.5.0(@types/node@18.6.0):
     resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
@@ -3556,7 +3578,7 @@ packages:
       '@jest/core': 29.5.0
       '@jest/types': 29.5.0
       import-local: 3.1.0
-      jest-cli: 29.5.0(@types/node@17.0.45)
+      jest-cli: 29.5.0(@types/node@18.6.0)
     transitivePeerDependencies:
       - '@types/node'
       - supports-color
@@ -4798,7 +4820,7 @@ packages:
       '@babel/core': 7.22.5
       bs-logger: 0.2.6
       fast-json-stable-stringify: 2.1.0
-      jest: 29.5.0(@types/node@17.0.45)
+      jest: 29.5.0(@types/node@18.6.0)
       jest-util: 29.5.0
       json5: 2.2.3
       lodash.memoize: 4.1.2
@@ -4808,7 +4830,7 @@ packages:
       yargs-parser: 21.1.1
     dev: true
 
-  /ts-node@10.9.1(@types/node@17.0.45)(typescript@4.9.5):
+  /ts-node@10.9.1(@types/node@18.6.0)(typescript@4.9.5):
     resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
     hasBin: true
     peerDependencies:
@@ -4827,7 +4849,7 @@ packages:
       '@tsconfig/node12': 1.0.11
       '@tsconfig/node14': 1.0.3
       '@tsconfig/node16': 1.0.4
-      '@types/node': 17.0.45
+      '@types/node': 18.6.0
       acorn: 8.8.2
       acorn-walk: 8.2.0
       arg: 4.1.3