Repository: caravan-bitcoin/caravan
Pull request #258: migrated `caravan-bitcoin` to vitest
Author: login: narasimha-1511
Created: 2025-04-21T14:31:37Z | Merged: 2025-04-23T14:37:29Z

![Screenshot 2025-04-21 at 19 59 31](https://github.com/user-attachments/assets/97c525b5-530b-4169-85d2-8cece4b9f601)


Here there was a typo issue Jpub instead of Vpub that was giving an error while running tests eventhough there was no issue 




Diff:
diff --git a/package-lock.json b/package-lock.json
index d6d16b66f5..61aefbd044 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26738,17 +26738,13 @@
         "@babel/preset-typescript": "^7.12.7",
         "@caravan/eslint-config": "*",
         "@caravan/typescript-config": "*",
-        "@types/jest": "^29.5.12",
-        "@types/node": "^14.14.22",
+        "@types/node": "^22.14.1",
         "@typescript-eslint/eslint-plugin": "^7.0.2",
         "@typescript-eslint/parser": "^7.0.2",
         "bs58": "^4.0.1",
         "esbuild-plugin-polyfill-node": "^0.3.0",
         "eslint": "^8.57.0",
-        "eslint-plugin-jest": "^23.0.3",
         "eslint-plugin-prettier": "^5.1.3",
-        "jest": "^29.4.1",
-        "jest-junit": "^9.0.0",
         "lint-staged": "^13.1.2",
         "mocha": "^10.2.0",
         "prettier": "^3.2.5",
@@ -26811,57 +26807,14 @@
       "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
       "dev": true
     },
-    "packages/caravan-bitcoin/node_modules/@jest/types": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
-      "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "@types/istanbul-reports": "^1.1.1",
-        "@types/yargs": "^13.0.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "packages/caravan-bitcoin/node_modules/@types/istanbul-reports": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz",
-      "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/istanbul-lib-coverage": "*",
-        "@types/istanbul-lib-report": "*"
-      }
-    },
-    "packages/caravan-bitcoin/node_modules/@types/jest": {
-      "version": "29.5.14",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
-      "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "expect": "^29.0.0",
-        "pretty-format": "^29.0.0"
-      }
-    },
     "packages/caravan-bitcoin/node_modules/@types/node": {
-      "version": "14.18.63",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz",
-      "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==",
-      "dev": true
-    },
-    "packages/caravan-bitcoin/node_modules/@types/yargs": {
-      "version": "13.0.12",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz",
-      "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==",
+      "version": "22.14.1",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz",
+      "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/yargs-parser": "*"
+        "undici-types": "~6.21.0"
       }
     },
     "packages/caravan-bitcoin/node_modules/@typescript-eslint/eslint-plugin": {
@@ -27090,16 +27043,6 @@
         "node": ">=0.4.0"
       }
     },
-    "packages/caravan-bitcoin/node_modules/ansi-regex": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
-      "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "packages/caravan-bitcoin/node_modules/argparse": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -27173,6 +27116,24 @@
       "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
       "hasInstallScript": true
     },
+    "packages/caravan-bitcoin/node_modules/debug": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
+      "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
     "packages/caravan-bitcoin/node_modules/eslint": {
       "version": "8.57.0",
       "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
@@ -27374,87 +27335,6 @@
         "node": ">=8"
       }
     },
-    "packages/caravan-bitcoin/node_modules/jest-get-type": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz",
-      "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "packages/caravan-bitcoin/node_modules/jest-junit": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-9.0.0.tgz",
-      "integrity": "sha512-jnABGjL5pd2lhE1w3RIslZSufFbWQZGx8O3eluDES7qKxQuonXMtsPIi+4AKl4rtjb4DvMAjwLi4eHukc2FP/Q==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "jest-validate": "^24.9.0",
-        "mkdirp": "^0.5.1",
-        "strip-ansi": "^5.2.0",
-        "uuid": "^3.3.3",
-        "xml": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "packages/caravan-bitcoin/node_modules/jest-junit/node_modules/strip-ansi": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-      "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "packages/caravan-bitcoin/node_modules/jest-validate": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz",
-      "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/types": "^24.9.0",
-        "camelcase": "^5.3.1",
-        "chalk": "^2.0.1",
-        "jest-get-type": "^24.9.0",
-        "leven": "^3.1.0",
-        "pretty-format": "^24.9.0"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "packages/caravan-bitcoin/node_modules/jest-validate/node_modules/pretty-format": {
-      "version": "24.9.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
-      "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/types": "^24.9.0",
-        "ansi-regex": "^4.0.0",
-        "ansi-styles": "^3.2.0",
-        "react-is": "^16.8.4"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "packages/caravan-bitcoin/node_modules/jest-validate/node_modules/react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "packages/caravan-bitcoin/node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -27506,18 +27386,12 @@
         "node": "*"
       }
     },
-    "packages/caravan-bitcoin/node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+    "packages/caravan-bitcoin/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "minimist": "^1.2.6"
-      },
-      "bin": {
-        "mkdirp": "bin/cmd.js"
-      }
+      "license": "MIT"
     },
     "packages/caravan-bitcoin/node_modules/p-locate": {
       "version": "5.0.0",
@@ -27534,34 +27408,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "packages/caravan-bitcoin/node_modules/pretty-format": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
-      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jest/schemas": "^29.6.3",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^18.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "packages/caravan-bitcoin/node_modules/pretty-format/node_modules/ansi-styles": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
     "packages/caravan-bitcoin/node_modules/semver": {
       "version": "7.6.0",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
@@ -27630,6 +27476,13 @@
         "node": ">=4.2.0"
       }
     },
+    "packages/caravan-bitcoin/node_modules/undici-types": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "packages/caravan-bitcoin/node_modules/yallist": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
diff --git a/packages/caravan-bitcoin/.eslintrc.js b/packages/caravan-bitcoin/.eslintrc.js
index 737adcaa0e..48419a6f83 100644
--- a/packages/caravan-bitcoin/.eslintrc.js
+++ b/packages/caravan-bitcoin/.eslintrc.js
@@ -1,5 +1,5 @@
 module.exports = {
-  extends: ["@caravan/eslint-config/library.js"],
+  extends: ["@caravan/eslint-config/library.new.js"],
   rules: {
     "@typescript-eslint/no-duplicate-enum-values": "warn",
   }
diff --git a/packages/caravan-bitcoin/jest.config.js b/packages/caravan-bitcoin/jest.config.js
deleted file mode 100644
index b301498c70..0000000000
--- a/packages/caravan-bitcoin/jest.config.js
+++ /dev/null
@@ -1,188 +0,0 @@
-// For a detailed explanation regarding each configuration property, visit:
-// https://jestjs.io/docs/en/configuration.html
-
-module.exports = {
-  // All imported modules in your tests should be mocked automatically
-  // automock: false,
-
-  // Stop running tests after `n` failures
-  // bail: 0,
-
-  // Respect "browser" field in package.json when resolving modules
-  // browser: false,
-
-  // The directory where Jest should store its cached dependency information
-  // cacheDirectory: "/tmp/jest_rs",
-
-  // Automatically clear mock calls and instances between every test
-  clearMocks: true,
-
-  // Indicates whether the coverage information should be collected while executing the test
-  // collectCoverage: false,
-
-  // An array of glob patterns indicating a set of files for which coverage information should be collected
-  // collectCoverageFrom: null,
-
-  // The directory where Jest should output its coverage files
-  coverageDirectory: "coverage",
-
-  // An array of regexp pattern strings used to skip coverage collection
-  // coveragePathIgnorePatterns: [
-  //   "/node_modules/"
-  // ],
-
-  // A list of reporter names that Jest uses when writing coverage reports
-  // coverageReporters: [
-  //   "json",
-  //   "text",
-  //   "lcov",
-  //   "clover"
-  // ],
-
-  // An object that configures minimum threshold enforcement for coverage results
-  // coverageThreshold: null,
-
-  // A path to a custom dependency extractor
-  // dependencyExtractor: null,
-
-  // Make calling deprecated APIs throw helpful error messages
-  // errorOnDeprecated: false,
-
-  // Force coverage collection from ignored files using an array of glob patterns
-  // forceCoverageMatch: [],
-
-  // A path to a module which exports an async function that is triggered once before all test suites
-  // globalSetup: null,
-
-  // A path to a module which exports an async function that is triggered once after all test suites
-  // globalTeardown: null,
-
-  // A set of global variables that need to be available in all test environments
-  // globals: {},
-
-  // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
-  // maxWorkers: "50%",
-
-  // An array of directory names to be searched recursively up from the requiring module's location
-  // moduleDirectories: [
-  //   "node_modules"
-  // ],
-
-  // An array of file extensions your modules use
-  // moduleFileExtensions: [
-  //   "js",
-  //   "json",
-  //   "jsx",
-  //   "ts",
-  //   "tsx",
-  //   "node"
-  // ],
-
-  // A map from regular expressions to module names that allow to stub out resources with a single module
-  // moduleNameMapper: {},
-
-  // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
-  // modulePathIgnorePatterns: [],
-
-  // Activates notifications for test results
-  // notify: false,
-
-  // An enum that specifies notification mode. Requires { notify: true }
-  // notifyMode: "failure-change",
-
-  // A preset that is used as a base for Jest's configuration
-  // preset: null,
-
-  // Run tests from one or more projects
-  // projects: null,
-
-  // Use this configuration option to add custom reporters to Jest
-  // reporters: undefined,
-
-  // Automatically reset mock state between every test
-  // resetMocks: false,
-
-  // Reset the module registry before running each individual test
-  // resetModules: false,
-
-  // A path to a custom resolver
-  // resolver: null,
-
-  // Automatically restore mock state between every test
-  // restoreMocks: false,
-
-  // The root directory that Jest should scan for tests and modules within
-  // rootDir: null,
-
-  // A list of paths to directories that Jest should use to search for files in
-  // roots: [
-  //   "<rootDir>"
-  // ],
-
-  // Allows you to use a custom runner instead of Jest's default test runner
-  // runner: "jest-runner",
-
-  // The paths to modules that run some code to configure or set up the testing environment before each test
-  // setupFiles: [],
-
-  // A list of paths to modules that run some code to configure or set up the testing framework before each test
-  // setupFilesAfterEnv: [],
-
-  // A list of paths to snapshot serializer modules Jest should use for snapshot testing
-  // snapshotSerializers: [],
-
-  // The test environment that will be used for testing
-  testEnvironment: "node",
-
-  // Options that will be passed to the testEnvironment
-  // testEnvironmentOptions: {},
-
-  // Adds a location field to test results
-  // testLocationInResults: false,
-
-  // The glob patterns Jest uses to detect test files
-  // testMatch: [
-  //   "**/__tests__/**/*.[jt]s?(x)",
-  //   "**/?(*.)+(spec|test).[tj]s?(x)"
-  // ],
-
-  // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
-  // testPathIgnorePatterns: [
-  //   "/node_modules/"
-  // ],
-
-  // The regexp pattern or array of patterns that Jest uses to detect test files
-  // testRegex: [],
-
-  // This option allows the use of a custom results processor
-  // testResultsProcessor: null,
-
-  // This option allows use of a custom test runner
-  // testRunner: "jasmine2",
-
-  // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
-  // testURL: "http://localhost",
-
-  // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
-  // timers: "real",
-
-  // A map from regular expressions to paths to transformers
-  // transform: null,
-
-  // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
-  // transformIgnorePatterns: [
-  //   "/node_modules/"
-  // ],
-
-  // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
-  // unmockedModulePathPatterns: undefined,
-
-  // Indicates whether each individual test should be reported during the run
-  // verbose: null,
-
-  // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
-  // watchPathIgnorePatterns: [],
-
-  // Whether to use watchman for file crawling
-  // watchman: true,
-};
diff --git a/packages/caravan-bitcoin/package.json b/packages/caravan-bitcoin/package.json
index dee99525af..c7e3b1d6b9 100644
--- a/packages/caravan-bitcoin/package.json
+++ b/packages/caravan-bitcoin/package.json
@@ -44,17 +44,13 @@
     "@babel/preset-typescript": "^7.12.7",
     "@caravan/eslint-config": "*",
     "@caravan/typescript-config": "*",
-    "@types/jest": "^29.5.12",
-    "@types/node": "^14.14.22",
+    "@types/node": "^22.14.1",
     "@typescript-eslint/eslint-plugin": "^7.0.2",
     "@typescript-eslint/parser": "^7.0.2",
     "bs58": "^4.0.1",
     "esbuild-plugin-polyfill-node": "^0.3.0",
     "eslint": "^8.57.0",
-    "eslint-plugin-jest": "^23.0.3",
     "eslint-plugin-prettier": "^5.1.3",
-    "jest": "^29.4.1",
-    "jest-junit": "^9.0.0",
     "lint-staged": "^13.1.2",
     "mocha": "^10.2.0",
     "prettier": "^3.2.5",
@@ -65,9 +61,10 @@
     "build": "tsup src/index.ts --format cjs,esm --dts",
     "dev": "npm run build -- --watch",
     "lint": "eslint src/ --ext .ts",
+    "lint:fix": "eslint src/ --ext .ts --fix",
     "ci": "npm run lint && npm run test",
-    "test": "jest src",
-    "test:watch": "jest --watch src"
+    "test": "vitest run",
+    "test:watch": "vitest watch"
   },
   "bin": {},
   "dependencies": {
diff --git a/packages/caravan-bitcoin/src/braid.test.ts b/packages/caravan-bitcoin/src/braid.test.ts
index adb888aff3..4dc8fb2a15 100644
--- a/packages/caravan-bitcoin/src/braid.test.ts
+++ b/packages/caravan-bitcoin/src/braid.test.ts
@@ -1,4 +1,3 @@
-import { TEST_FIXTURES } from "./fixtures";
 import {
   Braid,
   braidAddressType,
@@ -16,6 +15,7 @@ import {
   generatePublicKeysAtPath,
   validateBip32PathForBraid,
 } from "./braid";
+import { TEST_FIXTURES } from "./fixtures";
 
 const BRAIDS = TEST_FIXTURES.braids;
 const MULTISIGS = TEST_FIXTURES.multisigs;
diff --git a/packages/caravan-bitcoin/src/braid.ts b/packages/caravan-bitcoin/src/braid.ts
index c912fd4e8c..06386c630c 100644
--- a/packages/caravan-bitcoin/src/braid.ts
+++ b/packages/caravan-bitcoin/src/braid.ts
@@ -5,23 +5,25 @@
  * view the traditional use of the word 'wallet' as a collection of Braids.
  */
 
-import { Struct } from "bufio";
 import assert from "assert";
+
+import { Struct } from "bufio";
+
 import {
-  bip32PathToSequence,
-  validateBIP32Index,
-  validateBIP32Path,
-} from "./paths";
-import { Network } from "./networks";
+  validateExtendedPublicKey,
+  deriveChildPublicKey,
+  extendedPublicKeyRootFingerprint,
+} from "./keys";
 import {
   MULTISIG_ADDRESS_TYPES,
   generateMultisigFromPublicKeys,
 } from "./multisig";
+import { Network } from "./networks";
 import {
-  validateExtendedPublicKey,
-  deriveChildPublicKey,
-  extendedPublicKeyRootFingerprint,
-} from "./keys";
+  bip32PathToSequence,
+  validateBIP32Index,
+  validateBIP32Path,
+} from "./paths";
 
 // In building the information objects that PSBTs want, one must include information
 // about the root fingerprint for the device. If that information is unknown, just fill
diff --git a/packages/caravan-bitcoin/src/fees.test.ts b/packages/caravan-bitcoin/src/fees.test.ts
index 205fa6a20f..03ef0dfc5a 100644
--- a/packages/caravan-bitcoin/src/fees.test.ts
+++ b/packages/caravan-bitcoin/src/fees.test.ts
@@ -1,6 +1,5 @@
 import BigNumber from "bignumber.js";
 
-import { FeeValidationError } from "./types";
 import {
   validateFeeRate,
   validateFee,
@@ -12,6 +11,7 @@ import {
 import { P2SH } from "./p2sh";
 import { P2SH_P2WSH } from "./p2sh_p2wsh";
 import { P2WSH } from "./p2wsh";
+import { FeeValidationError } from "./types";
 
 describe("fees", () => {
   describe("validateFeeRate", () => {
diff --git a/packages/caravan-bitcoin/src/fees.ts b/packages/caravan-bitcoin/src/fees.ts
index 2cdc9b842e..7265e1d7b8 100644
--- a/packages/caravan-bitcoin/src/fees.ts
+++ b/packages/caravan-bitcoin/src/fees.ts
@@ -5,7 +5,6 @@
 
 import BigNumber from "bignumber.js";
 
-import { FeeValidationError } from "./types";
 
 import { P2SH, estimateMultisigP2SHTransactionVSize } from "./p2sh";
 import {
@@ -13,6 +12,7 @@ import {
   estimateMultisigP2SH_P2WSHTransactionVSize,
 } from "./p2sh_p2wsh";
 import { P2WSH, estimateMultisigP2WSHTransactionVSize } from "./p2wsh";
+import { FeeValidationError } from "./types";
 import { ZERO } from "./utils";
 
 // Without this, BigNumber will report strings as exponentials. 16 places covers
diff --git a/packages/caravan-bitcoin/src/fixtures.ts b/packages/caravan-bitcoin/src/fixtures.ts
index cf618a1eb3..3e46d64fe2 100644
--- a/packages/caravan-bitcoin/src/fixtures.ts
+++ b/packages/caravan-bitcoin/src/fixtures.ts
@@ -22,17 +22,18 @@
  */
 
 import BigNumber from "bignumber.js";
+
+import { braidConfig } from "./braid";
+import { sortInputs } from "./inputs";
 import {
   generateMultisigFromPublicKeys,
   multisigRedeemScript,
   multisigWitnessScript,
 } from "./multisig";
-import { sortInputs } from "./inputs";
+import { Network } from "./networks";
 import { P2SH } from "./p2sh";
 import { P2SH_P2WSH } from "./p2sh_p2wsh";
 import { P2WSH } from "./p2wsh";
-import { Network } from "./networks";
-import { braidConfig } from "./braid";
 
 // Without this, BigNumber will report strings as exponentials. 16 places covers
 // all possible values in satoshis.
@@ -104,7 +105,7 @@ const NODES = {
     upub: "upub5DhVaiY2dTMshxGyE6dZpa6d1d18FoFhMDynSRqRguJge7uAdF7ZGRGAW8yewCq9iW87Pti4RHhXC4mFLf88rdXd7pXMjy3wAjFmK6jyHiX",
     vpub: "vpub5YXktPCwn8uMZFU64TRC2fC8Bb9aCRFCGLW1DpjK4ugZhDiPsuH7tUvJXLwEw7V589Ev9NJcsx455MNp4MY9esDDzADnKssRSTKQhgCrtoZ",
     Upub: "Upub5QbahxGUCQvF8XSMAm6YeeSRjR3PU9wHfVdTMh6y4g96GJU5PeVqMY86Jqw8Ve43wyC6GUiBJW62KEP1dtH617eHxHdm9NWw4TXdu1aWzdx",
-    Jpub: "Vpub5jRr1cwPM6TiypdU17tArjXvuPBqQmvnac9g95zrSgWyKQHJeJfPybnEL3tiVYhyMcJu1xJjmASaCWzaMah6oMKtpdLBjHLRLBbHHcy3jDH",
+    Vpub: "Vpub5jRr1cwPM6TiypdU17tArjXvuPBqQmvnac9g95zrSgWyKQHJeJfPybnEL3tiVYhyMcJu1xJjmASaCWzaMah6oMKtpdLBjHLRLBbHHcy3jDH",
     chaincode:
       "470bb034dbc8e7b5f5c0b19f747e3e768f0cc9ff298361b2741e1b7fd70d376d",
     parentFingerprint: 1240308660,
diff --git a/packages/caravan-bitcoin/src/inputs.ts b/packages/caravan-bitcoin/src/inputs.ts
index 6a4b5550d8..f4a29d1ab0 100644
--- a/packages/caravan-bitcoin/src/inputs.ts
+++ b/packages/caravan-bitcoin/src/inputs.ts
@@ -3,8 +3,8 @@
  * transaction inputs.
  */
 
-import { validateHex } from "./utils";
 import { multisigBraidDetails } from "./multisig";
+import { validateHex } from "./utils";
 
 /**
  * Represents a transaction input.
diff --git a/packages/caravan-bitcoin/src/keys.test.ts b/packages/caravan-bitcoin/src/keys.test.ts
index baa793c8cd..166d22bae9 100644
--- a/packages/caravan-bitcoin/src/keys.test.ts
+++ b/packages/caravan-bitcoin/src/keys.test.ts
@@ -1,6 +1,7 @@
-import bs58check from "bs58check";
 import bs58 from "bs58";
+import bs58check from "bs58check";
 
+import { TEST_FIXTURES } from "./fixtures";
 import {
   validateExtendedPublicKey,
   validatePublicKey,
@@ -19,11 +20,7 @@ import {
   validateExtendedPublicKeyForNetwork,
   getMaskedDerivation,
 } from "./keys";
-
 import { Network } from "./networks";
-
-import { TEST_FIXTURES } from "./fixtures";
-
 import { P2SH } from "./p2sh";
 import { P2SH_P2WSH } from "./p2sh_p2wsh";
 import { P2WSH } from "./p2wsh";
diff --git a/packages/caravan-bitcoin/src/keys.ts b/packages/caravan-bitcoin/src/keys.ts
index f205e3992d..8abfc7a86f 100644
--- a/packages/caravan-bitcoin/src/keys.ts
+++ b/packages/caravan-bitcoin/src/keys.ts
@@ -6,17 +6,19 @@
  * @module keys
  */
 
-import { ECPair } from "bitcoinjs-lib-v5";
+import assert from "assert";
+
 import * as bip32 from "bip32";
+import { ECPair } from "bitcoinjs-lib-v5";
 import bs58check from "bs58check";
 import { Struct, BufferWriter, BufferReader } from "bufio";
-import assert from "assert";
-import { validateHex, toHexString, hash160 } from "./utils";
-import { bip32PathToSequence, validateBIP32Path } from "./paths";
+
 import { Network, networkData } from "./networks";
 import { P2SH_P2WSH } from "./p2sh_p2wsh";
 import { P2WSH } from "./p2wsh";
+import { bip32PathToSequence, validateBIP32Path } from "./paths";
 import { BitcoinNetwork, KeyPrefix, KeyVersion } from "./types";
+import { validateHex, toHexString, hash160 } from "./utils";
 
 export const EXTENDED_PUBLIC_KEY_VERSIONS = {
   xpub: "0488b21e",
diff --git a/packages/caravan-bitcoin/src/multisig.test.ts b/packages/caravan-bitcoin/src/multisig.test.ts
index 49d08727af..0000fefc19 100644
--- a/packages/caravan-bitcoin/src/multisig.test.ts
+++ b/packages/caravan-bitcoin/src/multisig.test.ts
@@ -1,6 +1,5 @@
-import { P2SH } from "./p2sh";
-import { P2WSH } from "./p2wsh";
-import { scriptToHex } from "./script";
+import { braidConfig } from "./braid";
+import { TEST_FIXTURES } from "./fixtures";
 import {
   generateMultisigFromHex,
   generateMultisigFromPublicKeys,
@@ -14,8 +13,9 @@ import {
   multisigAddress,
   multisigBraidDetails,
 } from "./multisig";
-import { TEST_FIXTURES } from "./fixtures";
-import { braidConfig } from "./braid";
+import { P2SH } from "./p2sh";
+import { P2WSH } from "./p2wsh";
+import { scriptToHex } from "./script";
 
 const MULTISIGS = TEST_FIXTURES.multisigs;
 
diff --git a/packages/caravan-bitcoin/src/multisig.ts b/packages/caravan-bitcoin/src/multisig.ts
index 14ebb343e9..3340f73ef7 100644
--- a/packages/caravan-bitcoin/src/multisig.ts
+++ b/packages/caravan-bitcoin/src/multisig.ts
@@ -30,13 +30,14 @@
  * use the functions from API provided by this module.
  */
 
+import { payments } from "bitcoinjs-lib-v5";
+
 import { networkData } from "./networks";
 import { P2SH } from "./p2sh";
 import { P2SH_P2WSH } from "./p2sh_p2wsh";
 import { P2WSH } from "./p2wsh";
 import { toHexString } from "./utils";
 
-import { payments } from "bitcoinjs-lib-v5";
 
 /**
  * Describes the return type of several functions in the
diff --git a/packages/caravan-bitcoin/src/networks.test.ts b/packages/caravan-bitcoin/src/networks.test.ts
index 76aa4396d5..f6aa83aa1a 100644
--- a/packages/caravan-bitcoin/src/networks.test.ts
+++ b/packages/caravan-bitcoin/src/networks.test.ts
@@ -1,3 +1,5 @@
+import { networks } from "bitcoinjs-lib-v5";
+
 import {
   Network,
   networkLabel,
@@ -5,7 +7,6 @@ import {
   getNetworkFromPrefix,
 } from "./networks";
 
-import { networks } from "bitcoinjs-lib-v5";
 
 describe("networks", () => {
   describe("networkLabel", () => {
diff --git a/packages/caravan-bitcoin/src/outputs.test.ts b/packages/caravan-bitcoin/src/outputs.test.ts
index 61545644a7..eb14ff457a 100644
--- a/packages/caravan-bitcoin/src/outputs.test.ts
+++ b/packages/caravan-bitcoin/src/outputs.test.ts
@@ -1,10 +1,11 @@
+import BigNumber from "bignumber.js";
+
+import { Network } from "./networks";
 import {
   validateOutputs,
   validateOutput,
   validateOutputAmount,
 } from "./outputs";
-import { Network } from "./networks";
-import BigNumber from "bignumber.js";
 
 describe("outputs", () => {
   const validAddress = "2NE1LH35XT4YrdnEebk5oKMmRpGiYcUvpNR";
diff --git a/packages/caravan-bitcoin/src/outputs.ts b/packages/caravan-bitcoin/src/outputs.ts
index f07353aacb..4c2ce4138f 100644
--- a/packages/caravan-bitcoin/src/outputs.ts
+++ b/packages/caravan-bitcoin/src/outputs.ts
@@ -5,8 +5,8 @@
 
 import BigNumber from "bignumber.js";
 
-import { ZERO } from "./utils";
 import { validateAddress } from "./addresses";
+import { ZERO } from "./utils";
 
 /**
  * Represents an output in a transaction.
diff --git a/packages/caravan-bitcoin/src/paths.test.ts b/packages/caravan-bitcoin/src/paths.test.ts
index 1e5bdbe54c..8112329390 100644
--- a/packages/caravan-bitcoin/src/paths.test.ts
+++ b/packages/caravan-bitcoin/src/paths.test.ts
@@ -1,3 +1,7 @@
+import { Network } from "./networks";
+import { P2SH } from "./p2sh";
+import { P2SH_P2WSH } from "./p2sh_p2wsh";
+import { P2WSH } from "./p2wsh";
 import {
   hardenedBIP32Index,
   bip32PathToSequence,
@@ -9,10 +13,6 @@ import {
   getParentBIP32Path,
   getRelativeBIP32Path,
 } from "./paths";
-import { P2SH } from "./p2sh";
-import { P2SH_P2WSH } from "./p2sh_p2wsh";
-import { P2WSH } from "./p2wsh";
-import { Network } from "./networks";
 
 describe("paths", () => {
   describe("hardenedBIP32Index", () => {
diff --git a/packages/caravan-bitcoin/src/psbt.test.ts b/packages/caravan-bitcoin/src/psbt.test.ts
index 82c121097f..5bb80e9b73 100644
--- a/packages/caravan-bitcoin/src/psbt.test.ts
+++ b/packages/caravan-bitcoin/src/psbt.test.ts
@@ -1,3 +1,10 @@
+import { braidConfig } from "./braid";
+import { ROOT_FINGERPRINT, TEST_FIXTURES } from "./fixtures";
+import {
+  generateMultisigFromHex,
+  generateMultisigFromPublicKeys,
+} from "./multisig";
+import { P2WSH } from "./p2wsh";
 import {
   addSignaturesToPSBT,
   autoLoadPSBT,
@@ -7,13 +14,6 @@ import {
   psbtOutputFormatter,
   translatePSBT,
 } from "./psbt";
-import { ROOT_FINGERPRINT, TEST_FIXTURES } from "./fixtures";
-import {
-  generateMultisigFromHex,
-  generateMultisigFromPublicKeys,
-} from "./multisig";
-import { braidConfig } from "./braid";
-import { P2WSH } from "./p2wsh";
 
 const MULTISIGS = TEST_FIXTURES.multisigs;
 const TRANSACTIONS = TEST_FIXTURES.transactions;
diff --git a/packages/caravan-bitcoin/src/psbt.ts b/packages/caravan-bitcoin/src/psbt.ts
index 0756e4e02e..b63477c614 100644
--- a/packages/caravan-bitcoin/src/psbt.ts
+++ b/packages/caravan-bitcoin/src/psbt.ts
@@ -1,6 +1,8 @@
+import BigNumber from "bignumber.js";
 import { Psbt, Transaction } from "bitcoinjs-lib-v5";
 import { reverseBuffer } from "bitcoinjs-lib-v5/src/bufferutils.js";
-import { toHexString } from "./utils";
+
+import { generateBip32DerivationByIndex, generateBraid } from "./braid";
 import {
   generateMultisigFromHex,
   multisigAddressType,
@@ -8,13 +10,12 @@ import {
   multisigRedeemScript,
   multisigWitnessScript,
 } from "./multisig";
-import { bip32PathToSequence } from "./paths";
-import BigNumber from "bignumber.js";
+import { networkData } from "./networks";
 import { P2SH } from "./p2sh";
-import { P2WSH } from "./p2wsh";
 import { P2SH_P2WSH } from "./p2sh_p2wsh";
-import { generateBip32DerivationByIndex, generateBraid } from "./braid";
-import { networkData } from "./networks";
+import { P2WSH } from "./p2wsh";
+import { bip32PathToSequence } from "./paths";
+import { toHexString } from "./utils";
 
 /**
  * This module provides functions for interacting with PSBTs, see BIP174
diff --git a/packages/caravan-bitcoin/src/psbtv2.test.ts b/packages/caravan-bitcoin/src/psbtv2.test.ts
index 540ce9bc43..fc8e3fc7a1 100644
--- a/packages/caravan-bitcoin/src/psbtv2.test.ts
+++ b/packages/caravan-bitcoin/src/psbtv2.test.ts
@@ -1,7 +1,7 @@
-import { PsbtV2, getPsbtVersionNumber } from "./psbtv2";
-import { test } from "@jest/globals";
 import { silenceDescribe } from "react-silence";
 
+import { PsbtV2, getPsbtVersionNumber } from "./psbtv2";
+
 const BIP_370_VECTORS_INVALID_PSBT = [
   // Case: PSBTv0 but with PSBT_GLOBAL_VERSION set to 2.
   {
@@ -1018,7 +1018,7 @@ describe("PsbtV2.addPartialSig", () => {
 
   beforeEach(() => {
     psbt = new PsbtV2();
-    psbt.handleSighashType = jest.fn();
+    psbt.handleSighashType = vi.fn();
     // This has to be added so inputs can be added else addSig will fail since
     // the input at the index does not exist.
     psbt.PSBT_GLOBAL_TX_MODIFIABLE = ["INPUTS"];
@@ -1075,7 +1075,7 @@ describe("PsbtV2.removePartialSig", () => {
 
   beforeEach(() => {
     psbt = new PsbtV2();
-    psbt.handleSighashType = jest.fn();
+    psbt.handleSighashType = vi.fn();
     // This has to be added so inputs can be added else removeSig will fail
     // since the input at the index does not exist.
     psbt.PSBT_GLOBAL_TX_MODIFIABLE = ["INPUTS"];
diff --git a/packages/caravan-bitcoin/src/psbtv2.ts b/packages/caravan-bitcoin/src/psbtv2.ts
index 3e5714c1d7..8752f7e067 100644
--- a/packages/caravan-bitcoin/src/psbtv2.ts
+++ b/packages/caravan-bitcoin/src/psbtv2.ts
@@ -9,12 +9,12 @@
  * https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki
  */
 
-import { BufferReader, BufferWriter } from "bufio";
 import { Psbt } from "bitcoinjs-lib-v5";
+import { BufferReader, BufferWriter } from "bufio";
 
-import { validateHex, validBase64 } from "./utils";
 import { validateBIP32Path } from "./paths";
 import { PSBT_MAGIC_BYTES } from "./psbt";
+import { validateHex, validBase64 } from "./utils";
 
 /*
 Global Types
diff --git a/packages/caravan-bitcoin/src/script.test.ts b/packages/caravan-bitcoin/src/script.test.ts
index 57b742b8d7..6904ebef44 100644
--- a/packages/caravan-bitcoin/src/script.test.ts
+++ b/packages/caravan-bitcoin/src/script.test.ts
@@ -1,5 +1,5 @@
-import { scriptToOps, scriptToHex } from "./script";
 import { TEST_FIXTURES } from "./fixtures";
+import { scriptToOps, scriptToHex } from "./script";
 
 describe("scripts", () => {
   describe("scriptToOps", () => {
diff --git a/packages/caravan-bitcoin/src/signatures.test.ts b/packages/caravan-bitcoin/src/signatures.test.ts
index de23aa637a..d360dacc9e 100644
--- a/packages/caravan-bitcoin/src/signatures.test.ts
+++ b/packages/caravan-bitcoin/src/signatures.test.ts
@@ -1,12 +1,12 @@
-import {
-  validateMultisigSignature,
-} from './signatures';
 import {
   TEST_FIXTURES,
 } from "./fixtures";
+import {
+  validateMultisigSignature,
+} from './signatures';
 
 // FIXME: transactionbuilder is deprecating, but we know this. remove this after addressing.
-console.warn = jest.fn();
+console.warn = vi.fn();
 
 describe('signatures', () => {
 
diff --git a/packages/caravan-bitcoin/src/signatures.ts b/packages/caravan-bitcoin/src/signatures.ts
index c96e64efd4..c5d56e13ce 100644
--- a/packages/caravan-bitcoin/src/signatures.ts
+++ b/packages/caravan-bitcoin/src/signatures.ts
@@ -7,8 +7,6 @@ import BigNumber from "bignumber.js";
 import bip66 from "bip66";
 import { ECPair, Transaction } from "bitcoinjs-lib-v5";
 
-import { P2SH_P2WSH } from "./p2sh_p2wsh";
-import { P2WSH } from "./p2wsh";
 import {
   multisigAddressType,
   multisigRedeemScript,
@@ -16,6 +14,8 @@ import {
   multisigPublicKeys,
   multisigTotalSigners,
 } from "./multisig";
+import { P2SH_P2WSH } from "./p2sh_p2wsh";
+import { P2WSH } from "./p2wsh";
 import { unsignedMultisigTransaction } from "./transactions";
 
 /**
diff --git a/packages/caravan-bitcoin/src/transactions.test.ts b/packages/caravan-bitcoin/src/transactions.test.ts
index 77b23d6772..393e0cd291 100644
--- a/packages/caravan-bitcoin/src/transactions.test.ts
+++ b/packages/caravan-bitcoin/src/transactions.test.ts
@@ -1,4 +1,11 @@
+import { address } from "bitcoinjs-lib-v5";
+
+import { TEST_FIXTURES } from "./fixtures";
 import { generateMultisigFromHex } from "./multisig";
+import { networkData, Network } from "./networks";
+import { P2SH } from "./p2sh";
+import { P2SH_P2WSH } from "./p2sh_p2wsh";
+import { P2WSH } from "./p2wsh";
 import {
   unsignedMultisigTransaction,
   signedMultisigTransaction,
@@ -6,16 +13,10 @@ import {
   unsignedTransactionObjectFromPSBT,
 } from "./transactions";
 import { toHexString } from "./utils";
-import { P2SH } from "./p2sh";
-import { networkData, Network } from "./networks";
-import { TEST_FIXTURES } from "./fixtures";
-import { P2WSH } from "./p2wsh";
-import { P2SH_P2WSH } from "./p2sh_p2wsh";
 
-import { address } from "bitcoinjs-lib-v5";
 
 // FIXME: transactionbuilder is deprecating, but we know this. remove this after addressing.
-console.warn = jest.fn();
+console.warn = vi.fn();
 
 describe("transactions", () => {
   describe("unsignedMultisigTransaction", () => {
diff --git a/packages/caravan-bitcoin/src/transactions.ts b/packages/caravan-bitcoin/src/transactions.ts
index 567098ea0e..d40592014a 100644
--- a/packages/caravan-bitcoin/src/transactions.ts
+++ b/packages/caravan-bitcoin/src/transactions.ts
@@ -3,8 +3,9 @@
  * multisig transactions.
  */
 
-import BigNumber from "bignumber.js";
 import assert from "assert";
+
+import BigNumber from "bignumber.js";
 import {
   TransactionBuilder,
   Psbt,
@@ -12,9 +13,10 @@ import {
   script,
   payments,
 } from "bitcoinjs-lib-v5";
-import { networkData } from "./networks";
-import { P2SH_P2WSH } from "./p2sh_p2wsh";
-import { P2WSH } from "./p2wsh";
+
+import { Braid } from "./braid";
+import { validateMultisigInputs } from "./inputs";
+import { ExtendedPublicKey } from "./keys";
 import {
   multisigRequiredSigners,
   multisigPublicKeys,
@@ -23,16 +25,16 @@ import {
   multisigWitnessScript,
   generateMultisigFromRaw,
 } from "./multisig";
+import { networkData } from "./networks";
+import { validateOutputs } from "./outputs";
+import { P2SH_P2WSH } from "./p2sh_p2wsh";
+import { P2WSH } from "./p2wsh";
+import { psbtInputFormatter, psbtOutputFormatter } from "./psbt";
+import { scriptToHex } from "./script";
 import {
   validateMultisigSignature,
   signatureNoSighashType,
 } from "./signatures";
-import { validateMultisigInputs } from "./inputs";
-import { validateOutputs } from "./outputs";
-import { scriptToHex } from "./script";
-import { psbtInputFormatter, psbtOutputFormatter } from "./psbt";
-import { Braid } from "./braid";
-import { ExtendedPublicKey } from "./keys";
 
 /**
  * Create an unsigned bitcoin transaction based on the network, inputs
diff --git a/packages/caravan-bitcoin/tsconfig.json b/packages/caravan-bitcoin/tsconfig.json
index f49f0d71f5..a8395f3046 100644
--- a/packages/caravan-bitcoin/tsconfig.json
+++ b/packages/caravan-bitcoin/tsconfig.json
@@ -1,4 +1,5 @@
 {
+  "extends": "@caravan/typescript-config/base.json",
   "compilerOptions": {
     // Target latest version of ECMAScript.
     "target": "esnext",
diff --git a/packages/caravan-bitcoin/vitest.config.ts b/packages/caravan-bitcoin/vitest.config.ts
new file mode 100644
index 0000000000..c55c5cc976
--- /dev/null
+++ b/packages/caravan-bitcoin/vitest.config.ts
@@ -0,0 +1,8 @@
+import { defineConfig } from "vitest/config";
+
+export default defineConfig({
+  test: {
+    environment: "node",
+    globals: true,
+  },
+});


Reviews:
user: login: bucko13
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-23T05:00:36Z
user: login: bucko13
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-23T05:02:07Z
user: login: narasimha-1511
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-23T05:09:10Z
user: login: bucko13
body: Nice!
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-23T14:37:20Z

Review comments:
diff_hunk: @@ -104,7 +105,7 @@ const NODES = {
     upub: "upub5DhVaiY2dTMshxGyE6dZpa6d1d18FoFhMDynSRqRguJge7uAdF7ZGRGAW8yewCq9iW87Pti4RHhXC4mFLf88rdXd7pXMjy3wAjFmK6jyHiX",
     vpub: "vpub5YXktPCwn8uMZFU64TRC2fC8Bb9aCRFCGLW1DpjK4ugZhDiPsuH7tUvJXLwEw7V589Ev9NJcsx455MNp4MY9esDDzADnKssRSTKQhgCrtoZ",
     Upub: "Upub5QbahxGUCQvF8XSMAm6YeeSRjR3PU9wHfVdTMh6y4g96GJU5PeVqMY86Jqw8Ve43wyC6GUiBJW62KEP1dtH617eHxHdm9NWw4TXdu1aWzdx",
-    Jpub: "Vpub5jRr1cwPM6TiypdU17tArjXvuPBqQmvnac9g95zrSgWyKQHJeJfPybnEL3tiVYhyMcJu1xJjmASaCWzaMah6oMKtpdLBjHLRLBbHHcy3jDH",
path: packages/caravan-bitcoin/src/fixtures.ts
user: login: bucko13
body: nice catch!
created_at: 2025-04-23T05:00:35Z
author_association: CONTRIBUTOR
diff_hunk: @@ -44,30 +44,28 @@
     "@babel/preset-typescript": "^7.12.7",
     "@caravan/eslint-config": "*",
     "@caravan/typescript-config": "*",
-    "@types/jest": "^29.5.12",
-    "@types/node": "^14.14.22",
+    "@types/node": "^22.14.1",
     "@typescript-eslint/eslint-plugin": "^7.0.2",
     "@typescript-eslint/parser": "^7.0.2",
     "bs58": "^4.0.1",
     "esbuild-plugin-polyfill-node": "^0.3.0",
     "eslint": "^8.57.0",
-    "eslint-plugin-jest": "^23.0.3",
     "eslint-plugin-prettier": "^5.1.3",
-    "jest": "^29.4.1",
-    "jest-junit": "^9.0.0",
     "lint-staged": "^13.1.2",
     "mocha": "^10.2.0",
     "prettier": "^3.2.5",
     "tsup": "^7.2.0",
-    "typescript": "^4.1.3"
+    "typescript": "^4.1.3",
+    "vitest": "^3.1.2"
path: packages/caravan-bitcoin/package.json
user: login: bucko13
body: Don't need this as it's available in the root of the project. Other than that this looks good!
created_at: 2025-04-23T05:02:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -44,30 +44,28 @@
     "@babel/preset-typescript": "^7.12.7",
     "@caravan/eslint-config": "*",
     "@caravan/typescript-config": "*",
-    "@types/jest": "^29.5.12",
-    "@types/node": "^14.14.22",
+    "@types/node": "^22.14.1",
     "@typescript-eslint/eslint-plugin": "^7.0.2",
     "@typescript-eslint/parser": "^7.0.2",
     "bs58": "^4.0.1",
     "esbuild-plugin-polyfill-node": "^0.3.0",
     "eslint": "^8.57.0",
-    "eslint-plugin-jest": "^23.0.3",
     "eslint-plugin-prettier": "^5.1.3",
-    "jest": "^29.4.1",
-    "jest-junit": "^9.0.0",
     "lint-staged": "^13.1.2",
     "mocha": "^10.2.0",
     "prettier": "^3.2.5",
     "tsup": "^7.2.0",
-    "typescript": "^4.1.3"
+    "typescript": "^4.1.3",
+    "vitest": "^3.1.2"
path: packages/caravan-bitcoin/package.json
user: login: narasimha-1511
body: removed vitest from here
created_at: 2025-04-23T05:09:10Z
author_association: CONTRIBUTOR

PR comments:
user: login: changeset-bot[bot]
created_at: 2025-04-21T14:31:40Z
body: ###  ⚠️  No Changeset found

Latest commit: 1838f180835c22f069738535cc468ce3f3fbd0c2

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. **If these changes should result in a version bump, you need to add a changeset.**

<details><summary>This PR includes no changesets</summary>

  When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

</details>

[Click here to learn what changesets are, and how to add one](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).

[Click here if you're a maintainer who wants to add a changeset to this PR](https://github.com/narasimha-1511/caravan/new/caravan-to-vitest?filename=.changeset/smart-poets-switch.md&value=---%0A%22%40caravan%2Fbitcoin%22%3A%20patch%0A---%0A%0Amigrated%20%60caravan-bitcoin%60%20to%20vitest%0A)


author_association: NONE
user: login: vercel[bot]
created_at: 2025-04-21T14:31:41Z
body: [vc]: #Z7vjr3d1WyIfufjcsiyqdN72MmISfeebApcu4f1iZF8=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJjYXJhdmFuLWNvb3JkaW5hdG9yIiwicm9vdERpcmVjdG9yeSI6ImFwcHMvY29vcmRpbmF0b3IiLCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vdW5jaGFpbmVkL2NhcmF2YW4tY29vcmRpbmF0b3IvNDlqc1BtTWJDVkViRVYzczZnN3U1aXdTN0pGTiIsInByZXZpZXdVcmwiOiJjYXJhdmFuLWNvb3JkaW5hdG9yLWdpdC1mb3JrLW5hcmFzaW1oYS0xNTExLWNhLTdiNDA2YS11bmNoYWluZWQudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiOiJERVBMT1lFRCIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiJjYXJhdmFuLWNvb3JkaW5hdG9yLWdpdC1mb3JrLW5hcmFzaW1oYS0xNTExLWNhLTdiNDA2YS11bmNoYWluZWQudmVyY2VsLmFwcCJ9fV19
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **caravan-coordinator** | ✅ Ready ([Inspect](https://vercel.com/unchained/caravan-coordinator/49jsPmMbCVEbEV3s6g7u5iwS7JFN)) | [Visit Preview](https://caravan-coordinator-git-fork-narasimha-1511-ca-7b406a-unchained.vercel.app) | 💬 [**Add feedback**](https://vercel.live/open-feedback/caravan-coordinator-git-fork-narasimha-1511-ca-7b406a-unchained.vercel.app?via=pr-comment-feedback-link) | Apr 23, 2025 5:11am |


author_association: NONE