Explorar el Código

chore: eslint yakshaving

benduran hace 3 semanas
padre
commit
dfcb87d16f
Se han modificado 54 ficheros con 567 adiciones y 646 borrados
  1. 12 1
      apps/hermes/client/js/eslint.config.js
  2. 11 1
      apps/hermes/client/js/package.json
  3. 1 3
      apps/hermes/client/js/src/examples/hermes-client.ts
  4. 1 1
      apps/hermes/client/js/src/hermes-client.ts
  5. 0 330
      apps/hermes/client/js/src/zod-schemas.ts
  6. 0 10
      apps/price_pusher/.eslintrc.js
  7. 12 0
      apps/price_pusher/eslint.config.js
  8. 3 2
      apps/price_pusher/package.json
  9. 0 6
      contract_manager/.eslintrc.js
  10. 12 0
      contract_manager/eslint.config.js
  11. 2 1
      contract_manager/package.json
  12. 19 17
      contract_manager/src/core/contracts/ton.ts
  13. 1 1
      lazer/contracts/sui/sdk/js/package.json
  14. 2 7
      lazer/contracts/sui/sdk/js/tsconfig.build.json
  15. 1 1
      lazer/sdk/js-solana/package.json
  16. 2 7
      lazer/sdk/js-solana/tsconfig.build.json
  17. 2 7
      lazer/sdk/js/tsconfig.build.json
  18. 1 1
      package.json
  19. 1 1
      packages/known-publishers/package.json
  20. 2 7
      packages/known-publishers/tsconfig.build.json
  21. 329 79
      pnpm-lock.yaml
  22. 0 11
      price_service/client/js/.eslintrc.js
  23. 7 0
      price_service/client/js/eslint.config.js
  24. 2 3
      price_service/client/js/package.json
  25. 0 3
      price_service/sdk/js/.eslintignore
  26. 5 1
      price_service/sdk/js/eslint.config.js
  27. 1 3
      price_service/sdk/js/src/AccumulatorUpdateData.ts
  28. 3 1
      price_service/sdk/js/src/__tests__/PriceFeed.test.ts
  29. 3 3
      price_service/sdk/js/src/schemas/PriceFeed.ts
  30. 0 9
      target_chains/aptos/sdk/js/.eslintrc.js
  31. 8 0
      target_chains/aptos/sdk/js/eslint.config.js
  32. 3 2
      target_chains/aptos/sdk/js/package.json
  33. 1 1
      target_chains/ethereum/entropy_sdk/solidity/package.json
  34. 1 1
      target_chains/ethereum/pulse_sdk/solidity/package.json
  35. 1 1
      target_chains/ethereum/sdk/solidity/package.json
  36. 0 6
      target_chains/fuel/sdk/js/.eslintrc.js
  37. 8 0
      target_chains/fuel/sdk/js/eslint.config.js
  38. 3 2
      target_chains/fuel/sdk/js/package.json
  39. 0 10
      target_chains/solana/sdk/js/pyth_solana_receiver/.eslintrc.js
  40. 8 0
      target_chains/solana/sdk/js/pyth_solana_receiver/eslint.config.js
  41. 3 4
      target_chains/solana/sdk/js/pyth_solana_receiver/package.json
  42. 4 1
      target_chains/solana/sdk/js/solana_utils/eslint.config.js
  43. 14 13
      target_chains/solana/sdk/js/solana_utils/src/__tests__/TransactionSize.test.ts
  44. 17 14
      target_chains/solana/sdk/js/solana_utils/src/jito.ts
  45. 31 37
      target_chains/solana/sdk/js/solana_utils/src/transaction.ts
  46. 1 1
      target_chains/starknet/sdk/js/package.json
  47. 0 9
      target_chains/sui/sdk/js-iota/.eslintrc.js
  48. 8 0
      target_chains/sui/sdk/js-iota/eslint.config.js
  49. 3 4
      target_chains/sui/sdk/js-iota/package.json
  50. 0 9
      target_chains/sui/sdk/js/.eslintrc.js
  51. 12 0
      target_chains/sui/sdk/js/eslint.config.js
  52. 3 2
      target_chains/sui/sdk/js/package.json
  53. 1 1
      target_chains/ton/sdk/js/package.json
  54. 2 11
      turbo.json

+ 12 - 1
apps/hermes/client/js/eslint.config.js

@@ -1 +1,12 @@
-export { base as default } from "@cprussin/eslint-config";
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["src/examples/**/*"]),
+  ...base,
+  {
+    rules: {
+      "unicorn/filename-case": "off",
+    },
+  },
+];

+ 11 - 1
apps/hermes/client/js/package.json

@@ -70,6 +70,16 @@
         "types": "./dist/esm/HermesClient.d.ts"
       }
     },
+    "./hermes-client": {
+      "require": {
+        "default": "./dist/cjs/hermes-client.js",
+        "types": "./dist/cjs/hermes-client.d.ts"
+      },
+      "import": {
+        "default": "./dist/esm/hermes-client.js",
+        "types": "./dist/esm/hermes-client.d.ts"
+      }
+    },
     ".": {
       "require": {
         "default": "./dist/cjs/index.js",
@@ -105,4 +115,4 @@
   "module": "./dist/esm/index.js",
   "types": "./dist/cjs/index.d.ts",
   "main": "./dist/cjs/index.js"
-}
+}

+ 1 - 3
apps/hermes/client/js/src/examples/hermes-client.ts

@@ -42,9 +42,7 @@ function extractBasicAuthorizationHeadersFromUrl(urlString: string): {
   const headers: HeadersInit = {};
 
   if (url.username && url.password) {
-    headers.Authorization = `Basic ${btoa(
-      `${url.username}:${url.password}`,
-    )}`;
+    headers.Authorization = `Basic ${btoa(`${url.username}:${url.password}`)}`;
     url.username = "";
     url.password = "";
   }

+ 1 - 1
apps/hermes/client/js/src/hermes-client.ts

@@ -5,7 +5,7 @@ import { EventSource } from "eventsource";
 import { z } from "zod";
 
 import { camelToSnakeCaseObject } from "./utils.js";
-import { schemas } from "./zod-schemas.js";
+import { schemas } from "./zodSchemas.js";
 
 // Accessing schema objects
 export type AssetType = z.infer<typeof schemas.AssetType>;

+ 0 - 330
apps/hermes/client/js/src/zod-schemas.ts

@@ -1,330 +0,0 @@
-import type { ZodiosOptions } from "@zodios/core";
-import { makeApi, Zodios } from "@zodios/core";
-import { z } from "zod";
-
-const AssetType = z.enum([
-  "crypto",
-  "fx",
-  "equity",
-  "metal",
-  "rates",
-  "crypto_redemption_rate",
-  "commodities",
-  "crypto_index",
-  "crypto_nav",
-]);
-const asset_type = AssetType.nullish();
-const RpcPriceIdentifier = z.string();
-const PriceFeedMetadata = z
-  .object({ attributes: z.record(z.string()), id: RpcPriceIdentifier })
-  .passthrough();
-const PriceIdInput = z.string();
-const EncodingType = z.enum(["hex", "base64"]);
-const BinaryUpdate = z
-  .object({ data: z.array(z.string()), encoding: EncodingType })
-  .passthrough();
-const RpcPrice = z
-  .object({
-    conf: z.string(),
-    expo: z.number().int(),
-    price: z.string(),
-    publish_time: z.number().int(),
-  })
-  .passthrough();
-const RpcPriceFeedMetadataV2 = z
-  .object({
-    prev_publish_time: z.number().int().nullable(),
-    proof_available_time: z.number().int().nullable(),
-    slot: z.number().int().gte(0).nullable(),
-  })
-  .partial()
-  .passthrough();
-const ParsedPriceUpdate = z
-  .object({
-    ema_price: RpcPrice,
-    id: RpcPriceIdentifier,
-    metadata: RpcPriceFeedMetadataV2,
-    price: RpcPrice,
-  })
-  .passthrough();
-const PriceUpdate = z
-  .object({
-    binary: BinaryUpdate,
-    parsed: z.array(ParsedPriceUpdate).nullish(),
-  })
-  .passthrough();
-const ParsedPublisherStakeCap = z
-  .object({ cap: z.number().int().gte(0), publisher: z.string() })
-  .passthrough();
-const ParsedPublisherStakeCapsUpdate = z
-  .object({ publisher_stake_caps: z.array(ParsedPublisherStakeCap) })
-  .passthrough();
-const LatestPublisherStakeCapsUpdateDataResponse = z
-  .object({
-    binary: BinaryUpdate,
-    parsed: z.array(ParsedPublisherStakeCapsUpdate).nullish(),
-  })
-  .passthrough();
-const ParsedPriceFeedTwap = z
-  .object({
-    down_slots_ratio: z.string(),
-    end_timestamp: z.number().int(),
-    id: RpcPriceIdentifier,
-    start_timestamp: z.number().int(),
-    twap: RpcPrice,
-  })
-  .passthrough();
-const TwapsResponse = z
-  .object({
-    binary: BinaryUpdate,
-    parsed: z.array(ParsedPriceFeedTwap).nullish(),
-  })
-  .passthrough();
-
-export const schemas = {
-  AssetType,
-  asset_type,
-  RpcPriceIdentifier,
-  PriceFeedMetadata,
-  PriceIdInput,
-  EncodingType,
-  BinaryUpdate,
-  RpcPrice,
-  RpcPriceFeedMetadataV2,
-  ParsedPriceUpdate,
-  PriceUpdate,
-  ParsedPublisherStakeCap,
-  ParsedPublisherStakeCapsUpdate,
-  LatestPublisherStakeCapsUpdateDataResponse,
-  ParsedPriceFeedTwap,
-  TwapsResponse,
-};
-
-const endpoints = makeApi([
-  {
-    method: "get",
-    path: "/v2/price_feeds",
-    alias: "price_feeds_metadata",
-    description: `Get the set of price feeds.
-
-This endpoint fetches all price feeds from the Pyth network. It can be filtered by asset type
-and query string.`,
-    requestFormat: "json",
-    parameters: [
-      {
-        name: "query",
-        type: "Query",
-        schema: z.string().nullish(),
-      },
-      {
-        name: "asset_type",
-        type: "Query",
-        schema: asset_type,
-      },
-    ],
-    response: z.array(PriceFeedMetadata),
-  },
-  {
-    method: "get",
-    path: "/v2/updates/price/:publish_time",
-    alias: "timestamp_price_updates",
-    description: `Get the latest price updates by price feed id.
-
-Given a collection of price feed ids, retrieve the latest Pyth price for each price feed.`,
-    requestFormat: "json",
-    parameters: [
-      {
-        name: "publish_time",
-        type: "Path",
-        schema: z.number().int(),
-      },
-      {
-        name: "ids[]",
-        type: "Query",
-        schema: z.array(PriceIdInput),
-      },
-      {
-        name: "encoding",
-        type: "Query",
-        schema: z.enum(["hex", "base64"]).optional(),
-      },
-      {
-        name: "parsed",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-      {
-        name: "ignore_invalid_price_ids",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-    ],
-    response: PriceUpdate,
-    errors: [
-      {
-        status: 404,
-        description: `Price ids not found`,
-        schema: z.void(),
-      },
-    ],
-  },
-  {
-    method: "get",
-    path: "/v2/updates/price/latest",
-    alias: "latest_price_updates",
-    description: `Get the latest price updates by price feed id.
-
-Given a collection of price feed ids, retrieve the latest Pyth price for each price feed.`,
-    requestFormat: "json",
-    parameters: [
-      {
-        name: "ids[]",
-        type: "Query",
-        schema: z.array(PriceIdInput),
-      },
-      {
-        name: "encoding",
-        type: "Query",
-        schema: z.enum(["hex", "base64"]).optional(),
-      },
-      {
-        name: "parsed",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-      {
-        name: "ignore_invalid_price_ids",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-    ],
-    response: PriceUpdate,
-    errors: [
-      {
-        status: 404,
-        description: `Price ids not found`,
-        schema: z.void(),
-      },
-    ],
-  },
-  {
-    method: "get",
-    path: "/v2/updates/price/stream",
-    alias: "price_stream_sse_handler",
-    description: `SSE route handler for streaming price updates.
-
-The connection will automatically close after 24 hours to prevent resource leaks.
-Clients should implement reconnection logic to maintain continuous price updates.`,
-    requestFormat: "json",
-    parameters: [
-      {
-        name: "ids[]",
-        type: "Query",
-        schema: z.array(PriceIdInput),
-      },
-      {
-        name: "encoding",
-        type: "Query",
-        schema: z.enum(["hex", "base64"]).optional(),
-      },
-      {
-        name: "parsed",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-      {
-        name: "allow_unordered",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-      {
-        name: "benchmarks_only",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-      {
-        name: "ignore_invalid_price_ids",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-    ],
-    response: PriceUpdate,
-    errors: [
-      {
-        status: 404,
-        description: `Price ids not found`,
-        schema: z.void(),
-      },
-    ],
-  },
-  {
-    method: "get",
-    path: "/v2/updates/publisher_stake_caps/latest",
-    alias: "latest_publisher_stake_caps",
-    description: `Get the most recent publisher stake caps update data.`,
-    requestFormat: "json",
-    parameters: [
-      {
-        name: "encoding",
-        type: "Query",
-        schema: z.enum(["hex", "base64"]).optional(),
-      },
-      {
-        name: "parsed",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-    ],
-    response: LatestPublisherStakeCapsUpdateDataResponse,
-  },
-  {
-    method: "get",
-    path: "/v2/updates/twap/:window_seconds/latest",
-    alias: "latest_twaps",
-    description: `Get the latest TWAP by price feed id with a custom time window.
-
-Given a collection of price feed ids, retrieve the latest Pyth TWAP price for each price feed.`,
-    requestFormat: "json",
-    parameters: [
-      {
-        name: "window_seconds",
-        type: "Path",
-        schema: z.number().int().gte(0),
-      },
-      {
-        name: "ids[]",
-        type: "Query",
-        schema: z.array(PriceIdInput),
-      },
-      {
-        name: "encoding",
-        type: "Query",
-        schema: z.enum(["hex", "base64"]).optional(),
-      },
-      {
-        name: "parsed",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-      {
-        name: "ignore_invalid_price_ids",
-        type: "Query",
-        schema: z.boolean().optional(),
-      },
-    ],
-    response: TwapsResponse,
-    errors: [
-      {
-        status: 404,
-        description: `Price ids not found`,
-        schema: z.void(),
-      },
-    ],
-  },
-]);
-
-export const api = new Zodios(endpoints);
-
-export function createApiClient(baseUrl: string, options?: ZodiosOptions) {
-  return new Zodios(baseUrl, endpoints, options);
-}

+ 0 - 10
apps/price_pusher/.eslintrc.js

@@ -1,10 +0,0 @@
-module.exports = {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  plugins: ["@typescript-eslint"],
-  extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
-  rules: {
-    "@typescript-eslint/no-explicit-any": "off",
-    "@typescript-eslint/no-non-null-assertion": "off",
-  },
-};

+ 12 - 0
apps/price_pusher/eslint.config.js

@@ -0,0 +1,12 @@
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["src/__tests__/**/*", "src/examples/**/*", "**/*.json"]),
+  ...base,
+  {
+    rules: {
+      "unicorn/filename-case": "off",
+    },
+  },
+];

+ 3 - 2
apps/price_pusher/package.json

@@ -45,13 +45,14 @@
   ],
   "license": "Apache-2.0",
   "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
     "@types/ethereum-protocol": "^1.0.2",
     "@types/express": "^4.17.21",
     "@types/jest": "^27.4.1",
     "@types/yargs": "^17.0.10",
     "@typescript-eslint/eslint-plugin": "^6.0.0",
     "@typescript-eslint/parser": "^6.0.0",
-    "eslint": "^8.13.0",
+    "eslint": "catalog:",
     "jest": "^29.7.0",
     "pino-pretty": "^11.2.1",
     "prettier": "catalog:",
@@ -232,4 +233,4 @@
     "./package.json": "./package.json"
   },
   "module": "./dist/esm/index.js"
-}
+}

+ 0 - 6
contract_manager/.eslintrc.js

@@ -1,6 +0,0 @@
-module.exports = {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  plugins: ["@typescript-eslint"],
-  extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
-};

+ 12 - 0
contract_manager/eslint.config.js

@@ -0,0 +1,12 @@
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["src/examples/**/*"]),
+  ...base,
+  {
+    rules: {
+      "unicorn/filename-case": "off",
+    },
+  },
+];

+ 2 - 1
contract_manager/package.json

@@ -279,10 +279,11 @@
     "web3-eth-contract": "^1.8.2"
   },
   "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
     "@pythnetwork/pyth-crosschain": "link:..",
     "@types/node": "catalog:",
     "@types/web3": "^1.2.2",
-    "eslint": "^8.0.0",
+    "eslint": "catalog:",
     "prettier": "catalog:",
     "typedoc": "^0.25.7"
   },

+ 19 - 17
contract_manager/src/core/contracts/ton.ts

@@ -1,18 +1,20 @@
-import { Chain, TonChain } from "../chains";
-import { WormholeContract } from "./wormhole";
-import {
-  type PriceFeed,
-  PriceFeedContract,
-  type PrivateKey,
-  type TxResult,
-} from "../base";
-import type { TokenQty } from "../token";
-import type { DataSource } from "@pythnetwork/xc-admin-common";
-import { Address, Cell, type OpenedContract } from "@ton/ton";
+/* eslint-disable @typescript-eslint/no-unsafe-return */
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
+/* eslint-disable @typescript-eslint/require-await */
+/* eslint-disable no-console */
 import {
   calculateUpdatePriceFeedsFee,
   PythContract,
 } from "@pythnetwork/pyth-ton-js";
+import type { DataSource } from "@pythnetwork/xc-admin-common";
+import type { OpenedContract } from "@ton/ton";
+import { Address, Cell } from "@ton/ton";
+
+import type { PriceFeed, PrivateKey, TxResult } from "../base";
+import { Chain, TonChain } from "../chains";
+import { WormholeContract } from "./wormhole";
+import { PriceFeedContract } from "../base";
+import type { TokenQty } from "../token";
 
 export class TonWormholeContract extends WormholeContract {
   static type = "TonWormholeContract";
@@ -47,7 +49,7 @@ export class TonWormholeContract extends WormholeContract {
     if (parsed.type !== TonWormholeContract.type)
       throw new Error("Invalid type");
     if (!(chain instanceof TonChain))
-      throw new Error(`Wrong chain type ${chain}`);
+      throw new Error(`Wrong chain type ${JSON.stringify(chain)}`);
     return new TonWormholeContract(chain, parsed.address);
   }
 
@@ -128,7 +130,7 @@ export class TonPriceFeedContract extends PriceFeedContract {
     if (parsed.type !== TonPriceFeedContract.type)
       throw new Error("Invalid type");
     if (!(chain instanceof TonChain))
-      throw new Error(`Wrong chain type ${chain}`);
+      throw new Error(`Wrong chain type ${JSON.stringify(chain)}`);
     return new TonPriceFeedContract(chain, parsed.address);
   }
 
@@ -188,8 +190,8 @@ export class TonPriceFeedContract extends PriceFeedContract {
           publishTime: emaPrice.publishTime.toString(),
         },
       };
-    } catch (e) {
-      console.error(e);
+    } catch (error) {
+      console.error(error);
       return undefined;
     }
   }
@@ -229,8 +231,8 @@ export class TonPriceFeedContract extends PriceFeedContract {
       throw new Error("Governance data source not found");
     }
     return {
-      emitterChain: result.emitterChain,
-      emitterAddress: result.emitterAddress,
+      emitterChain: result!.emitterChain,
+      emitterAddress: result!.emitterAddress,
     };
   }
 

+ 1 - 1
lazer/contracts/sui/sdk/js/package.json

@@ -52,4 +52,4 @@
     "access": "public"
   },
   "packageManager": "pnpm@10.19.0"
-}
+}

+ 2 - 7
lazer/contracts/sui/sdk/js/tsconfig.build.json

@@ -6,10 +6,5 @@
     "declaration": true,
     "isolatedModules": false
   },
-  "exclude": [
-    "node_modules",
-    "dist",
-    "examples/",
-    "**/__tests__/*"
-  ]
-}
+  "exclude": ["node_modules", "dist", "examples/", "**/__tests__/*"]
+}

+ 1 - 1
lazer/sdk/js-solana/package.json

@@ -87,4 +87,4 @@
   },
   "packageManager": "pnpm@10.19.0",
   "module": "./dist/esm/index.js"
-}
+}

+ 2 - 7
lazer/sdk/js-solana/tsconfig.build.json

@@ -8,10 +8,5 @@
     "outDir": "./dist/types",
     "isolatedModules": false
   },
-  "exclude": [
-    "node_modules",
-    "dist",
-    "examples/",
-    "**/__tests__/*"
-  ]
-}
+  "exclude": ["node_modules", "dist", "examples/", "**/__tests__/*"]
+}

+ 2 - 7
lazer/sdk/js/tsconfig.build.json

@@ -6,10 +6,5 @@
     "declaration": true,
     "isolatedModules": false
   },
-  "exclude": [
-    "node_modules",
-    "dist",
-    "examples/",
-    "**/__tests__/*"
-  ]
-}
+  "exclude": ["node_modules", "dist", "examples/", "**/__tests__/*"]
+}

+ 1 - 1
package.json

@@ -21,4 +21,4 @@
     "turbo": "catalog:",
     "typescript": "catalog:"
   }
-}
+}

+ 1 - 1
packages/known-publishers/package.json

@@ -33,4 +33,4 @@
     "pnpm": ">=10.19.0"
   },
   "packageManager": "pnpm@10.19.0"
-}
+}

+ 2 - 7
packages/known-publishers/tsconfig.build.json

@@ -5,10 +5,5 @@
     "incremental": false,
     "declaration": true
   },
-  "exclude": [
-    "node_modules",
-    "dist",
-    "examples/",
-    "**/__tests__/*"
-  ]
-}
+  "exclude": ["node_modules", "dist", "examples/", "**/__tests__/*"]
+}

+ 329 - 79
pnpm-lock.yaml

@@ -1097,6 +1097,9 @@ importers:
         specifier: ^17.5.1
         version: 17.7.2
     devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
       '@types/ethereum-protocol':
         specifier: ^1.0.2
         version: 1.0.5
@@ -1111,13 +1114,13 @@ importers:
         version: 17.0.33
       '@typescript-eslint/eslint-plugin':
         specifier: ^6.0.0
-        version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)
+        version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       '@typescript-eslint/parser':
         specifier: ^6.0.0
-        version: 6.21.0(eslint@8.56.0)(typescript@5.9.3)
+        version: 6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       eslint:
-        specifier: ^8.13.0
-        version: 8.56.0
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
       jest:
         specifier: ^29.7.0
         version: 29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))
@@ -1414,6 +1417,9 @@ importers:
         specifier: ^1.8.2
         version: 1.10.4(encoding@0.1.13)
     devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
       '@pythnetwork/pyth-crosschain':
         specifier: link:..
         version: link:..
@@ -1424,8 +1430,8 @@ importers:
         specifier: ^1.2.2
         version: 1.2.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)
       eslint:
-        specifier: ^8.0.0
-        version: 8.56.0
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
       prettier:
         specifier: 'catalog:'
         version: 3.5.3
@@ -2195,21 +2201,18 @@ importers:
         specifier: ^8.6.0
         version: 8.18.1(bufferutil@4.0.9)(utf-8-validate@6.0.3)
     devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
       '@types/jest':
         specifier: ^29.4.0
         version: 29.5.14
       '@types/yargs':
         specifier: ^17.0.10
         version: 17.0.33
-      '@typescript-eslint/eslint-plugin':
-        specifier: ^5.21.0
-        version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)
-      '@typescript-eslint/parser':
-        specifier: ^5.21.0
-        version: 5.62.0(eslint@8.56.0)(typescript@5.9.3)
       eslint:
-        specifier: ^8.14.0
-        version: 8.56.0
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
       jest:
         specifier: ^29.4.0
         version: 29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))
@@ -2334,6 +2337,9 @@ importers:
         specifier: ^6.0.3
         version: 6.0.3
     devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
       '@truffle/hdwallet-provider':
         specifier: ^2.1.5
         version: 2.1.15(@babel/core@7.27.1)(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)
@@ -2354,13 +2360,13 @@ importers:
         version: 17.0.33
       '@typescript-eslint/eslint-plugin':
         specifier: ^5.21.0
-        version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)
+        version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       '@typescript-eslint/parser':
         specifier: ^5.21.0
-        version: 5.62.0(eslint@8.56.0)(typescript@5.9.3)
+        version: 5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       eslint:
-        specifier: ^8.14.0
-        version: 8.56.0
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
       jest:
         specifier: ^29.4.1
         version: 29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))
@@ -2725,6 +2731,9 @@ importers:
         specifier: 'catalog:'
         version: 0.101.3(encoding@0.1.13)(vitest@3.0.9(@edge-runtime/vm@3.2.0)(@types/debug@4.1.12)(@types/node@22.14.0)(jiti@2.4.2)(jsdom@20.0.3(bufferutil@4.0.9)(utf-8-validate@6.0.3))(lightningcss@1.29.2)(sass@1.86.1)(terser@5.39.0)(yaml@2.8.0))
     devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
       '@pythnetwork/hermes-client':
         specifier: workspace:*
         version: link:../../../../apps/hermes/client/js
@@ -2733,16 +2742,16 @@ importers:
         version: 22.14.0
       '@typescript-eslint/eslint-plugin':
         specifier: ^7.7.0
-        version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)
+        version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       '@typescript-eslint/parser':
         specifier: ^7.7.0
-        version: 7.18.0(eslint@8.56.0)(typescript@5.9.3)
+        version: 7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       copyfiles:
         specifier: ^2.4.1
         version: 2.4.1
       eslint:
-        specifier: ^8.14.0
-        version: 8.56.0
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
       fast-glob:
         specifier: ^3.3.3
         version: 3.3.3
@@ -2771,6 +2780,9 @@ importers:
         specifier: ^1.90.0
         version: 1.98.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)
     devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
       '@pythnetwork/hermes-client':
         specifier: workspace:*
         version: link:../../../../../apps/hermes/client/js
@@ -2780,15 +2792,9 @@ importers:
       '@types/node':
         specifier: 'catalog:'
         version: 22.14.0
-      '@typescript-eslint/eslint-plugin':
-        specifier: ^5.20.0
-        version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)
-      '@typescript-eslint/parser':
-        specifier: ^5.20.0
-        version: 5.62.0(eslint@8.56.0)(typescript@5.9.3)
       eslint:
-        specifier: ^8.13.0
-        version: 8.56.0
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
       jest:
         specifier: ^29.4.0
         version: 29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))
@@ -2955,6 +2961,9 @@ importers:
         specifier: ^6.0.3
         version: 6.0.3
     devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
       '@truffle/hdwallet-provider':
         specifier: ^2.1.5
         version: 2.1.15(@babel/core@7.27.1)(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)
@@ -2975,13 +2984,13 @@ importers:
         version: 17.0.33
       '@typescript-eslint/eslint-plugin':
         specifier: ^6.0.0
-        version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)
+        version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       '@typescript-eslint/parser':
         specifier: ^6.0.0
-        version: 6.21.0(eslint@8.56.0)(typescript@5.9.3)
+        version: 6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       eslint:
-        specifier: ^8.14.0
-        version: 8.56.0
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
       jest:
         specifier: ^29.4.1
         version: 29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))
@@ -3010,6 +3019,9 @@ importers:
         specifier: ^6.0.3
         version: 6.0.3
     devDependencies:
+      '@cprussin/eslint-config':
+        specifier: 'catalog:'
+        version: 4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)
       '@truffle/hdwallet-provider':
         specifier: ^2.1.5
         version: 2.1.15(@babel/core@7.27.1)(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)
@@ -3028,15 +3040,9 @@ importers:
       '@types/yargs':
         specifier: ^17.0.20
         version: 17.0.33
-      '@typescript-eslint/eslint-plugin':
-        specifier: ^6.0.0
-        version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)
-      '@typescript-eslint/parser':
-        specifier: ^6.0.0
-        version: 6.21.0(eslint@8.56.0)(typescript@5.9.3)
       eslint:
-        specifier: ^8.14.0
-        version: 8.56.0
+        specifier: 'catalog:'
+        version: 9.23.0(jiti@2.4.2)
       jest:
         specifier: ^29.4.1
         version: 29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))
@@ -25055,6 +25061,80 @@ snapshots:
     transitivePeerDependencies:
       - debug
 
+  '@cprussin/eslint-config@4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)':
+    dependencies:
+      '@eslint/eslintrc': 3.3.1
+      '@eslint/js': 9.23.0
+      '@next/eslint-plugin-next': 15.2.4
+      eslint: 9.23.0(jiti@2.4.2)
+      eslint-config-prettier: 10.1.1(eslint@9.23.0(jiti@2.4.2))
+      eslint-config-turbo: 2.4.4(eslint@9.23.0(jiti@2.4.2))(turbo@2.5.8)
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jest: 28.11.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(typescript@5.9.3)
+      eslint-plugin-jest-dom: 5.5.0(@testing-library/dom@10.4.0)(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jsonc: 2.20.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jsx-a11y: 6.10.2(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-n: 17.17.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-react: 7.37.4(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-react-hooks: 5.2.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-storybook: 0.11.6(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint-plugin-tailwindcss: 3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))
+      eslint-plugin-testing-library: 7.1.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint-plugin-tsdoc: 0.4.0
+      eslint-plugin-unicorn: 57.0.0(eslint@9.23.0(jiti@2.4.2))
+      globals: 16.0.0
+      tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))
+      typescript-eslint: 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+    transitivePeerDependencies:
+      - '@eslint/json'
+      - '@testing-library/dom'
+      - '@typescript-eslint/eslint-plugin'
+      - '@typescript-eslint/parser'
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - jest
+      - supports-color
+      - ts-node
+      - turbo
+      - typescript
+
+  '@cprussin/eslint-config@4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)':
+    dependencies:
+      '@eslint/eslintrc': 3.3.1
+      '@eslint/js': 9.23.0
+      '@next/eslint-plugin-next': 15.2.4
+      eslint: 9.23.0(jiti@2.4.2)
+      eslint-config-prettier: 10.1.1(eslint@9.23.0(jiti@2.4.2))
+      eslint-config-turbo: 2.4.4(eslint@9.23.0(jiti@2.4.2))(turbo@2.5.8)
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jest: 28.11.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(typescript@5.9.3)
+      eslint-plugin-jest-dom: 5.5.0(@testing-library/dom@10.4.0)(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jsonc: 2.20.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jsx-a11y: 6.10.2(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-n: 17.17.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-react: 7.37.4(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-react-hooks: 5.2.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-storybook: 0.11.6(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint-plugin-tailwindcss: 3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))
+      eslint-plugin-testing-library: 7.1.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint-plugin-tsdoc: 0.4.0
+      eslint-plugin-unicorn: 57.0.0(eslint@9.23.0(jiti@2.4.2))
+      globals: 16.0.0
+      tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))
+      typescript-eslint: 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+    transitivePeerDependencies:
+      - '@eslint/json'
+      - '@testing-library/dom'
+      - '@typescript-eslint/eslint-plugin'
+      - '@typescript-eslint/parser'
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - jest
+      - supports-color
+      - ts-node
+      - turbo
+      - typescript
+
   '@cprussin/eslint-config@4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)':
     dependencies:
       '@eslint/eslintrc': 3.3.1
@@ -25092,6 +25172,43 @@ snapshots:
       - turbo
       - typescript
 
+  '@cprussin/eslint-config@4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)':
+    dependencies:
+      '@eslint/eslintrc': 3.3.1
+      '@eslint/js': 9.23.0
+      '@next/eslint-plugin-next': 15.2.4
+      eslint: 9.23.0(jiti@2.4.2)
+      eslint-config-prettier: 10.1.1(eslint@9.23.0(jiti@2.4.2))
+      eslint-config-turbo: 2.4.4(eslint@9.23.0(jiti@2.4.2))(turbo@2.5.8)
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jest: 28.11.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(typescript@5.9.3)
+      eslint-plugin-jest-dom: 5.5.0(@testing-library/dom@10.4.0)(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jsonc: 2.20.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-jsx-a11y: 6.10.2(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-n: 17.17.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-react: 7.37.4(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-react-hooks: 5.2.0(eslint@9.23.0(jiti@2.4.2))
+      eslint-plugin-storybook: 0.11.6(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint-plugin-tailwindcss: 3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))
+      eslint-plugin-testing-library: 7.1.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint-plugin-tsdoc: 0.4.0
+      eslint-plugin-unicorn: 57.0.0(eslint@9.23.0(jiti@2.4.2))
+      globals: 16.0.0
+      tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))
+      typescript-eslint: 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+    transitivePeerDependencies:
+      - '@eslint/json'
+      - '@testing-library/dom'
+      - '@typescript-eslint/eslint-plugin'
+      - '@typescript-eslint/parser'
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - jest
+      - supports-color
+      - ts-node
+      - turbo
+      - typescript
+
   '@cprussin/eslint-config@4.0.2(@testing-library/dom@10.4.0)(@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@16.18.126)(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@16.18.126)(typescript@5.9.3))(turbo@2.5.8)(typescript@5.9.3)':
     dependencies:
       '@eslint/eslintrc': 3.3.1
@@ -35642,21 +35759,20 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)':
+  '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.9.3)
-      '@typescript-eslint/scope-manager': 6.21.0
-      '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.9.3)
-      '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.9.3)
-      '@typescript-eslint/visitor-keys': 6.21.0
+      '@typescript-eslint/parser': 5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/type-utils': 5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      '@typescript-eslint/utils': 5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       debug: 4.4.0(supports-color@8.1.1)
-      eslint: 8.56.0
+      eslint: 9.23.0(jiti@2.4.2)
       graphemer: 1.4.0
       ignore: 5.3.2
-      natural-compare: 1.4.0
+      natural-compare-lite: 1.4.0
       semver: 7.7.1
-      ts-api-utils: 1.4.3(typescript@5.9.3)
+      tsutils: 3.21.0(typescript@5.9.3)
     optionalDependencies:
       typescript: 5.9.3
     transitivePeerDependencies:
@@ -35682,15 +35798,15 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0)(typescript@5.9.3)':
+  '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 7.18.0(eslint@8.56.0)(typescript@5.9.3)
+      '@typescript-eslint/parser': 7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       '@typescript-eslint/scope-manager': 7.18.0
-      '@typescript-eslint/type-utils': 7.18.0(eslint@8.56.0)(typescript@5.9.3)
-      '@typescript-eslint/utils': 7.18.0(eslint@8.56.0)(typescript@5.9.3)
+      '@typescript-eslint/type-utils': 7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      '@typescript-eslint/utils': 7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       '@typescript-eslint/visitor-keys': 7.18.0
-      eslint: 8.56.0
+      eslint: 9.23.0(jiti@2.4.2)
       graphemer: 1.4.0
       ignore: 5.3.2
       natural-compare: 1.4.0
@@ -35747,14 +35863,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.9.3)':
+  '@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
     dependencies:
-      '@typescript-eslint/scope-manager': 6.21.0
-      '@typescript-eslint/types': 6.21.0
-      '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
-      '@typescript-eslint/visitor-keys': 6.21.0
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.3)
       debug: 4.4.0(supports-color@8.1.1)
-      eslint: 8.56.0
+      eslint: 9.23.0(jiti@2.4.2)
     optionalDependencies:
       typescript: 5.9.3
     transitivePeerDependencies:
@@ -35773,14 +35888,14 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@7.18.0(eslint@8.56.0)(typescript@5.9.3)':
+  '@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
     dependencies:
       '@typescript-eslint/scope-manager': 7.18.0
       '@typescript-eslint/types': 7.18.0
       '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.9.3)
       '@typescript-eslint/visitor-keys': 7.18.0
       debug: 4.4.0(supports-color@8.1.1)
-      eslint: 8.56.0
+      eslint: 9.23.0(jiti@2.4.2)
     optionalDependencies:
       typescript: 5.9.3
     transitivePeerDependencies:
@@ -35842,13 +35957,13 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.9.3)':
+  '@typescript-eslint/type-utils@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
     dependencies:
-      '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
-      '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.9.3)
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.3)
+      '@typescript-eslint/utils': 5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
       debug: 4.4.0(supports-color@8.1.1)
-      eslint: 8.56.0
-      ts-api-utils: 1.4.3(typescript@5.9.3)
+      eslint: 9.23.0(jiti@2.4.2)
+      tsutils: 3.21.0(typescript@5.9.3)
     optionalDependencies:
       typescript: 5.9.3
     transitivePeerDependencies:
@@ -35878,6 +35993,18 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  '@typescript-eslint/type-utils@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
+    dependencies:
+      '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.9.3)
+      '@typescript-eslint/utils': 7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      debug: 4.4.0(supports-color@8.1.1)
+      eslint: 9.23.0(jiti@2.4.2)
+      ts-api-utils: 1.4.3(typescript@5.9.3)
+    optionalDependencies:
+      typescript: 5.9.3
+    transitivePeerDependencies:
+      - supports-color
+
   '@typescript-eslint/type-utils@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
     dependencies:
       '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.9.3)
@@ -35970,15 +36097,16 @@ snapshots:
       - supports-color
       - typescript
 
-  '@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.9.3)':
+  '@typescript-eslint/utils@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
     dependencies:
-      '@eslint-community/eslint-utils': 4.5.1(eslint@8.56.0)
+      '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2))
       '@types/json-schema': 7.0.15
       '@types/semver': 7.7.0
-      '@typescript-eslint/scope-manager': 6.21.0
-      '@typescript-eslint/types': 6.21.0
-      '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
-      eslint: 8.56.0
+      '@typescript-eslint/scope-manager': 5.62.0
+      '@typescript-eslint/types': 5.62.0
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.3)
+      eslint: 9.23.0(jiti@2.4.2)
+      eslint-scope: 5.1.1
       semver: 7.7.1
     transitivePeerDependencies:
       - supports-color
@@ -36009,6 +36137,17 @@ snapshots:
       - supports-color
       - typescript
 
+  '@typescript-eslint/utils@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
+    dependencies:
+      '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2))
+      '@typescript-eslint/scope-manager': 7.18.0
+      '@typescript-eslint/types': 7.18.0
+      '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.9.3)
+      eslint: 9.23.0(jiti@2.4.2)
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+
   '@typescript-eslint/utils@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)':
     dependencies:
       '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2))
@@ -40249,6 +40388,16 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  eslint-module-utils@2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.23.0(jiti@2.4.2)):
+    dependencies:
+      debug: 3.2.7
+    optionalDependencies:
+      '@typescript-eslint/parser': 5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint: 9.23.0(jiti@2.4.2)
+      eslint-import-resolver-node: 0.3.9
+    transitivePeerDependencies:
+      - supports-color
+
   eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.23.0(jiti@2.4.2)):
     dependencies:
       debug: 3.2.7
@@ -40259,6 +40408,16 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.23.0(jiti@2.4.2)):
+    dependencies:
+      debug: 3.2.7
+    optionalDependencies:
+      '@typescript-eslint/parser': 7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint: 9.23.0(jiti@2.4.2)
+      eslint-import-resolver-node: 0.3.9
+    transitivePeerDependencies:
+      - supports-color
+
   eslint-module-utils@2.12.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.23.0(jiti@2.4.2)):
     dependencies:
       debug: 3.2.7
@@ -40276,6 +40435,35 @@ snapshots:
       eslint: 9.23.0(jiti@2.4.2)
       eslint-compat-utils: 0.5.1(eslint@9.23.0(jiti@2.4.2))
 
+  eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2)):
+    dependencies:
+      '@rtsao/scc': 1.1.0
+      array-includes: 3.1.8
+      array.prototype.findlastindex: 1.2.6
+      array.prototype.flat: 1.3.3
+      array.prototype.flatmap: 1.3.3
+      debug: 3.2.7
+      doctrine: 2.1.0
+      eslint: 9.23.0(jiti@2.4.2)
+      eslint-import-resolver-node: 0.3.9
+      eslint-module-utils: 2.12.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.23.0(jiti@2.4.2))
+      hasown: 2.0.2
+      is-core-module: 2.16.1
+      is-glob: 4.0.3
+      minimatch: 3.1.2
+      object.fromentries: 2.0.8
+      object.groupby: 1.0.3
+      object.values: 1.2.1
+      semver: 6.3.1
+      string.prototype.trimend: 1.0.9
+      tsconfig-paths: 3.15.0
+    optionalDependencies:
+      '@typescript-eslint/parser': 5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+    transitivePeerDependencies:
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - supports-color
+
   eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2)):
     dependencies:
       '@rtsao/scc': 1.1.0
@@ -40305,6 +40493,35 @@ snapshots:
       - eslint-import-resolver-webpack
       - supports-color
 
+  eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2)):
+    dependencies:
+      '@rtsao/scc': 1.1.0
+      array-includes: 3.1.8
+      array.prototype.findlastindex: 1.2.6
+      array.prototype.flat: 1.3.3
+      array.prototype.flatmap: 1.3.3
+      debug: 3.2.7
+      doctrine: 2.1.0
+      eslint: 9.23.0(jiti@2.4.2)
+      eslint-import-resolver-node: 0.3.9
+      eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.23.0(jiti@2.4.2))
+      hasown: 2.0.2
+      is-core-module: 2.16.1
+      is-glob: 4.0.3
+      minimatch: 3.1.2
+      object.fromentries: 2.0.8
+      object.groupby: 1.0.3
+      object.values: 1.2.1
+      semver: 6.3.1
+      string.prototype.trimend: 1.0.9
+      tsconfig-paths: 3.15.0
+    optionalDependencies:
+      '@typescript-eslint/parser': 7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+    transitivePeerDependencies:
+      - eslint-import-resolver-typescript
+      - eslint-import-resolver-webpack
+      - supports-color
+
   eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.29.0(eslint@8.56.0)(typescript@5.9.3))(eslint@8.56.0):
     dependencies:
       '@rtsao/scc': 1.1.0
@@ -40371,6 +40588,28 @@ snapshots:
     optionalDependencies:
       '@testing-library/dom': 10.4.0
 
+  eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(typescript@5.9.3):
+    dependencies:
+      '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint: 9.23.0(jiti@2.4.2)
+    optionalDependencies:
+      '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      jest: 29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+
+  eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3)))(typescript@5.9.3):
+    dependencies:
+      '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint: 9.23.0(jiti@2.4.2)
+    optionalDependencies:
+      '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      jest: 29.7.0(@types/node@18.19.86)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+
   eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(typescript@5.9.3):
     dependencies:
       '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
@@ -40382,6 +40621,17 @@ snapshots:
       - supports-color
       - typescript
 
+  eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3)))(typescript@5.9.3):
+    dependencies:
+      '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      eslint: 9.23.0(jiti@2.4.2)
+    optionalDependencies:
+      '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
+      jest: 29.7.0(@types/node@22.14.0)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))
+    transitivePeerDependencies:
+      - supports-color
+      - typescript
+
   eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3))(eslint@9.23.0(jiti@2.4.2))(jest@29.7.0(@types/node@16.18.126)(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@16.18.126)(typescript@5.9.3)))(typescript@5.9.3):
     dependencies:
       '@typescript-eslint/utils': 8.29.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3)
@@ -40555,25 +40805,25 @@ snapshots:
   eslint-plugin-tailwindcss@3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@16.18.126)(typescript@5.9.3))):
     dependencies:
       fast-glob: 3.3.3
-      postcss: 8.5.3
+      postcss: 8.5.6
       tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@16.18.126)(typescript@5.9.3))
 
   eslint-plugin-tailwindcss@3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))):
     dependencies:
       fast-glob: 3.3.3
-      postcss: 8.5.3
+      postcss: 8.5.6
       tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@18.19.86)(typescript@5.9.3))
 
   eslint-plugin-tailwindcss@3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.30)(typescript@5.9.3))):
     dependencies:
       fast-glob: 3.3.3
-      postcss: 8.5.3
+      postcss: 8.5.6
       tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@20.17.30)(typescript@5.9.3))
 
   eslint-plugin-tailwindcss@3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))):
     dependencies:
       fast-glob: 3.3.3
-      postcss: 8.5.3
+      postcss: 8.5.6
       tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.13.5)(@types/node@22.14.0)(typescript@5.9.3))
 
   eslint-plugin-testing-library@7.1.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.9.3):

+ 0 - 11
price_service/client/js/.eslintrc.js

@@ -1,11 +0,0 @@
-export default {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  plugins: ["@typescript-eslint"],
-  extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
-  rules: {
-    "@typescript-eslint/no-explicit-any": "off",
-    "@typescript-eslint/no-non-null-assertion": "off",
-    "@typescript-eslint/no-empty-function": "off",
-  },
-};

+ 7 - 0
price_service/client/js/eslint.config.js

@@ -0,0 +1,7 @@
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["src/__tests__/**/*", "src/examples/**/*"]),
+  ...base,
+];

+ 2 - 3
price_service/client/js/package.json

@@ -39,11 +39,10 @@
   ],
   "license": "Apache-2.0",
   "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
     "@types/jest": "^29.4.0",
     "@types/yargs": "^17.0.10",
-    "@typescript-eslint/eslint-plugin": "^5.21.0",
-    "@typescript-eslint/parser": "^5.21.0",
-    "eslint": "^8.14.0",
+    "eslint": "catalog:",
     "jest": "^29.4.0",
     "prettier": "catalog:",
     "ts-jest": "^29.0.5",

+ 0 - 3
price_service/sdk/js/.eslintignore

@@ -1,3 +0,0 @@
-node_modules/
-dist/
-**/schemas

+ 5 - 1
price_service/sdk/js/eslint.config.js

@@ -1,4 +1,8 @@
 import { base } from "@cprussin/eslint-config";
 import { globalIgnores } from "eslint/config";
 
-export default [globalIgnores(["**/schemas/*"]), ...base];
+export default [
+  globalIgnores(["**/schemas/*", "**/__tests__/*"]),
+  ...base,
+  { rules: { "unicorn/filename-case": "off" } },
+];

+ 1 - 3
price_service/sdk/js/src/AccumulatorUpdateData.ts

@@ -198,9 +198,7 @@ export function parseAccumulatorUpdateData(
     cursor += 1;
     const proof = [];
     for (let j = 0; j < numProofs; j++) {
-      proof.push(
-        [...data.subarray(cursor, cursor + KECCAK160_HASH_SIZE)],
-      );
+      proof.push([...data.subarray(cursor, cursor + KECCAK160_HASH_SIZE)]);
       cursor += KECCAK160_HASH_SIZE;
     }
 

+ 3 - 1
price_service/sdk/js/src/__tests__/PriceFeed.test.ts

@@ -1,4 +1,6 @@
-import { Price, PriceFeed, PriceFeedMetadata } from "../index";
+/* eslint-disable unicorn/filename-case */
+
+import { Price, PriceFeed, PriceFeedMetadata } from "../index.js";
 
 beforeAll(() => {
   jest.useFakeTimers();

+ 3 - 3
price_service/sdk/js/src/schemas/PriceFeed.ts

@@ -31,7 +31,7 @@ export type PriceFeed = {
    * VAA of the price
    */
   vaa?: string;
-}
+};
 
 /**
  * Exponentially-weighted moving average Price
@@ -57,7 +57,7 @@ export type Price = {
    * Publish Time of the price
    */
   publish_time: number;
-}
+};
 
 /**
  * Metadata of the price
@@ -89,7 +89,7 @@ export type PriceFeedMetadata = {
    * Pythnet slot number of the price
    */
   slot?: number | undefined;
-}
+};
 
 // Converts JSON types to/from your types
 // and asserts the results at runtime

+ 0 - 9
target_chains/aptos/sdk/js/.eslintrc.js

@@ -1,9 +0,0 @@
-module.exports = {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  plugins: ["@typescript-eslint"],
-  extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
-  rules: {
-    "@typescript-eslint/no-explicit-any": "off",
-  },
-};

+ 8 - 0
target_chains/aptos/sdk/js/eslint.config.js

@@ -0,0 +1,8 @@
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["**/schemas/*", "**/__tests__/*"]),
+  ...base,
+  { rules: { "unicorn/filename-case": "off" } },
+];

+ 3 - 2
target_chains/aptos/sdk/js/package.json

@@ -37,6 +37,7 @@
   ],
   "license": "Apache-2.0",
   "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
     "@truffle/hdwallet-provider": "^2.1.5",
     "@types/ethereum-protocol": "^1.0.2",
     "@types/jest": "^29.4.0",
@@ -45,7 +46,7 @@
     "@types/yargs": "^17.0.10",
     "@typescript-eslint/eslint-plugin": "^5.21.0",
     "@typescript-eslint/parser": "^5.21.0",
-    "eslint": "^8.14.0",
+    "eslint": "catalog:",
     "jest": "^29.4.1",
     "prettier": "catalog:",
     "ts-jest": "^29.0.5",
@@ -74,4 +75,4 @@
     },
     "./package.json": "./package.json"
   }
-}
+}

+ 1 - 1
target_chains/ethereum/entropy_sdk/solidity/package.json

@@ -41,4 +41,4 @@
     "pnpm": ">=10.19.0"
   },
   "packageManager": "pnpm@10.19.0"
-}
+}

+ 1 - 1
target_chains/ethereum/pulse_sdk/solidity/package.json

@@ -45,4 +45,4 @@
     "pnpm": ">=10.19.0"
   },
   "packageManager": "pnpm@10.19.0"
-}
+}

+ 1 - 1
target_chains/ethereum/sdk/solidity/package.json

@@ -40,4 +40,4 @@
     "pnpm": ">=10.19.0"
   },
   "packageManager": "pnpm@10.19.0"
-}
+}

+ 0 - 6
target_chains/fuel/sdk/js/.eslintrc.js

@@ -1,6 +0,0 @@
-module.exports = {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  plugins: ["@typescript-eslint"],
-  extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
-};

+ 8 - 0
target_chains/fuel/sdk/js/eslint.config.js

@@ -0,0 +1,8 @@
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["**/schemas/*", "**/__tests__/*"]),
+  ...base,
+  { rules: { "unicorn/filename-case": "off" } },
+];

+ 3 - 2
target_chains/fuel/sdk/js/package.json

@@ -38,12 +38,13 @@
   ],
   "license": "Apache-2.0",
   "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
     "@pythnetwork/hermes-client": "workspace:*",
     "@types/node": "catalog:",
     "@typescript-eslint/eslint-plugin": "^7.7.0",
     "@typescript-eslint/parser": "^7.7.0",
     "copyfiles": "^2.4.1",
-    "eslint": "^8.14.0",
+    "eslint": "catalog:",
     "fast-glob": "^3.3.3",
     "prettier": "catalog:",
     "ts-node": "catalog:"
@@ -111,4 +112,4 @@
     "./package.json": "./package.json"
   },
   "module": "./dist/esm/index.js"
-}
+}

+ 0 - 10
target_chains/solana/sdk/js/pyth_solana_receiver/.eslintrc.js

@@ -1,10 +0,0 @@
-module.exports = {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  plugins: ["@typescript-eslint"],
-  extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
-  rules: {
-    "@typescript-eslint/no-explicit-any": "off",
-    "@typescript-eslint/ban-ts-comment": "off",
-  },
-};

+ 8 - 0
target_chains/solana/sdk/js/pyth_solana_receiver/eslint.config.js

@@ -0,0 +1,8 @@
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["**/schemas/*", "**/__tests__/*"]),
+  ...base,
+  { rules: { "unicorn/filename-case": "off" } },
+];

+ 3 - 4
target_chains/solana/sdk/js/pyth_solana_receiver/package.json

@@ -33,12 +33,11 @@
   ],
   "license": "Apache-2.0",
   "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
     "@pythnetwork/hermes-client": "workspace:*",
     "@types/jest": "^29.4.0",
     "@types/node": "catalog:",
-    "@typescript-eslint/eslint-plugin": "^5.20.0",
-    "@typescript-eslint/parser": "^5.20.0",
-    "eslint": "^8.13.0",
+    "eslint": "catalog:",
     "jest": "^29.4.0",
     "prettier": "catalog:",
     "quicktype": "^23.0.76",
@@ -94,4 +93,4 @@
     "./package.json": "./package.json"
   },
   "module": "./dist/esm/index.js"
-}
+}

+ 4 - 1
target_chains/solana/sdk/js/solana_utils/eslint.config.js

@@ -1 +1,4 @@
-export { base as default } from "@cprussin/eslint-config";
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [globalIgnores(["src/__tests__/**/*"]), ...base];

+ 14 - 13
target_chains/solana/sdk/js/solana_utils/src/__tests__/TransactionSize.test.ts

@@ -1,4 +1,4 @@
-import crypto from "crypto";
+import crypto from "node:crypto";
 // @ts-expect-error
 globalThis.crypto = crypto;
 
@@ -13,17 +13,18 @@ import {
   TransactionMessage,
   VersionedTransaction,
 } from "@solana/web3.js";
+
 import { getSizeOfCompressedU16, getSizeOfTransaction } from "..";
 
 it("Unit test compressed u16 size", async () => {
   expect(getSizeOfCompressedU16(127)).toBe(1);
   expect(getSizeOfCompressedU16(128)).toBe(2);
-  expect(getSizeOfCompressedU16(16383)).toBe(2);
-  expect(getSizeOfCompressedU16(16384)).toBe(3);
+  expect(getSizeOfCompressedU16(16_383)).toBe(2);
+  expect(getSizeOfCompressedU16(16_384)).toBe(3);
 });
 
 it("Unit test for getSizeOfTransaction", async () => {
-  jest.setTimeout(60000);
+  jest.setTimeout(60_000);
 
   const payer = new Keypair();
 
@@ -34,7 +35,7 @@ it("Unit test for getSizeOfTransaction", async () => {
       fromPubkey: payer.publicKey,
       newAccountPubkey: PublicKey.unique(),
       space: 100,
-      lamports: 1000000000,
+      lamports: 1_000_000_000,
       programId: SystemProgram.programId,
     }),
   );
@@ -46,7 +47,7 @@ it("Unit test for getSizeOfTransaction", async () => {
       seed: "seed",
       newAccountPubkey: PublicKey.unique(),
       space: 100,
-      lamports: 1000000000,
+      lamports: 1_000_000_000,
       programId: SystemProgram.programId,
     }),
   );
@@ -62,7 +63,7 @@ it("Unit test for getSizeOfTransaction", async () => {
   ixsToSend.push(ComputeBudgetProgram.setComputeUnitLimit({ units: 69 }));
 
   ixsToSend.push(
-    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1000000 }),
+    ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1_000_000 }),
   );
 
   const transaction = new Transaction();
@@ -72,7 +73,7 @@ it("Unit test for getSizeOfTransaction", async () => {
 
   transaction.recentBlockhash = "GqdFtdM7zzWw33YyHtBNwPhyBsdYKcfm9gT47bWnbHvs"; // Mock blockhash from devnet
   transaction.feePayer = payer.publicKey;
-  expect(transaction.serialize({ requireAllSignatures: false }).length).toBe(
+  expect(transaction.serialize({ requireAllSignatures: false })).toHaveLength(
     getSizeOfTransaction(ixsToSend, false),
   );
 
@@ -83,7 +84,7 @@ it("Unit test for getSizeOfTransaction", async () => {
       instructions: ixsToSend,
     }).compileToV0Message(),
   );
-  expect(versionedTransaction.serialize().length).toBe(
+  expect(versionedTransaction.serialize()).toHaveLength(
     getSizeOfTransaction(ixsToSend),
   );
 
@@ -97,9 +98,9 @@ it("Unit test for getSizeOfTransaction", async () => {
         addresses: [
           SystemProgram.programId,
           ComputeBudgetProgram.programId,
-          ...ixsToSend[0].keys.map((key) => key.pubkey),
-          ...ixsToSend[1].keys.map((key) => key.pubkey),
-          ...ixsToSend[2].keys.map((key) => key.pubkey),
+          ...ixsToSend[0]!.keys.map((key) => key.pubkey),
+          ...ixsToSend[1]!.keys.map((key) => key.pubkey),
+          ...ixsToSend[2]!.keys.map((key) => key.pubkey),
         ],
       },
     });
@@ -112,7 +113,7 @@ it("Unit test for getSizeOfTransaction", async () => {
     }).compileToV0Message([addressLookupTable]),
   );
 
-  expect(versionedTransactionWithAlt.serialize().length).toBe(
+  expect(versionedTransactionWithAlt.serialize()).toHaveLength(
     getSizeOfTransaction(ixsToSend, true, addressLookupTable),
   );
 });

+ 17 - 14
target_chains/solana/sdk/js/solana_utils/src/jito.ts

@@ -1,8 +1,10 @@
-import { dummyLogger, type Logger } from "ts-log";
+/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
+/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
 import { Wallet } from "@coral-xyz/anchor";
+import type { Signer } from "@solana/web3.js";
 import {
   PublicKey,
-  type Signer,
   SystemProgram,
   TransactionInstruction,
   VersionedTransaction,
@@ -10,6 +12,8 @@ import {
 import bs58 from "bs58";
 import { SearcherClient } from "jito-ts/dist/sdk/block-engine/searcher";
 import { Bundle } from "jito-ts/dist/sdk/block-engine/types";
+import type { Logger } from "ts-log";
+import { dummyLogger } from "ts-log";
 
 export const TIP_ACCOUNTS = [
   "HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe",
@@ -24,7 +28,7 @@ export const TIP_ACCOUNTS = [
 
 export function getRandomTipAccount(): PublicKey {
   const randomInt = Math.floor(Math.random() * TIP_ACCOUNTS.length);
-  return new PublicKey(TIP_ACCOUNTS[randomInt] ?? '');
+  return new PublicKey(TIP_ACCOUNTS[randomInt] ?? "");
 }
 
 export function buildJitoTipInstruction(
@@ -59,7 +63,7 @@ export async function sendTransactionsJito(
     throw new Error("No searcher clients provided");
   }
 
-  const maxRetryTimeMs = options.maxRetryTimeMs || 60000; // Default to 60 seconds
+  const maxRetryTimeMs = options.maxRetryTimeMs || 60_000; // Default to 60 seconds
   const delayBetweenCyclesMs = options.delayBetweenCyclesMs || 1000; // Default to 1 second
 
   const startTime = Date.now();
@@ -84,27 +88,26 @@ export async function sendTransactionsJito(
 
   const bundle = new Bundle(signedTransactions, 2);
 
-  let lastError: Error | null = null;
+  let lastError: Error | null | undefined;
   let totalAttempts = 0;
 
   while (Date.now() - startTime < maxRetryTimeMs) {
     // Try all clients in this cycle
-    for (let i = 0; i < clients.length; i++) {
-      const currentClient = clients[i];
+    for (const [i, currentClient] of clients.entries()) {
       totalAttempts++;
 
       try {
-        await currentClient?.sendBundle(bundle);
+        await currentClient.sendBundle(bundle);
         logger.info(
           { clientIndex: i, totalAttempts },
-          `Successfully sent bundle to Jito client after ${totalAttempts} attempts`,
+          `Successfully sent bundle to Jito client after ${totalAttempts.toString()} attempts`,
         );
         return firstTransactionSignature;
-      } catch (err: any) {
-        lastError = err;
+      } catch (error: unknown) {
+        lastError = error as Error;
         logger.error(
-          { clientIndex: i, totalAttempts, err: err.message },
-          `Attempt ${totalAttempts}: Error sending bundle to Jito client ${i}`,
+          { clientIndex: i, totalAttempts, err: lastError.message },
+          `Attempt ${totalAttempts.toString()}: Error sending bundle to Jito client ${i.toString()}`,
         );
       }
 
@@ -122,7 +125,7 @@ export async function sendTransactionsJito(
   }
 
   const totalTimeMs = Date.now() - startTime;
-  const errorMsg = `Failed to send transactions via JITO after ${totalAttempts} attempts over ${totalTimeMs}ms (max: ${maxRetryTimeMs}ms)`;
+  const errorMsg = `Failed to send transactions via JITO after ${totalAttempts.toString()} attempts over ${totalTimeMs.toString()}ms (max: ${maxRetryTimeMs.toString()}ms)`;
 
   logger.error(
     {

+ 31 - 37
target_chains/solana/sdk/js/solana_utils/src/transaction.ts

@@ -1,24 +1,28 @@
+/* eslint-disable no-console */
+/* eslint-disable unicorn/no-null */
+/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
+import type { AnchorWallet } from "@solana/wallet-adapter-react";
+import type { SignatureResult, Signer } from "@solana/web3.js";
 import {
   AddressLookupTableAccount,
   ComputeBudgetProgram,
   Connection,
   PACKET_DATA_SIZE,
   PublicKey,
-  type SignatureResult,
-  type Signer,
   Transaction,
   TransactionInstruction,
   TransactionMessage,
   VersionedTransaction,
 } from "@solana/web3.js";
 import bs58 from "bs58";
+
 import { buildJitoTipInstruction } from "./jito";
-import type { AnchorWallet } from "@solana/wallet-adapter-react";
 
 /**
  * If the transaction doesn't contain a `setComputeUnitLimit` instruction, the default compute budget is 200,000 units per instruction.
  */
-export const DEFAULT_COMPUTE_BUDGET_UNITS = 200000;
+export const DEFAULT_COMPUTE_BUDGET_UNITS = 200_000;
 
 /**
  * The maximum size of a Solana transaction, leaving some room for the compute budget instructions.
@@ -57,7 +61,7 @@ export type PriorityFeeConfig = {
  * A default priority fee configuration. Using a priority fee is helpful even when you're not writing to hot accounts.
  */
 export const DEFAULT_PRIORITY_FEE_CONFIG: PriorityFeeConfig = {
-  computeUnitPriceMicroLamports: 50000,
+  computeUnitPriceMicroLamports: 50_000,
 };
 
 /**
@@ -113,14 +117,12 @@ export function getSizeOfTransaction(
 
   let numberOfAddressLookups = 0;
   if (addressLookupTable) {
-    const lookupTableAddresses = addressLookupTable.state.addresses.map(
-      (address) => address.toBase58(),
+    const lookupTableAddresses = new Set(
+      addressLookupTable.state.addresses.map((address) => address.toBase58()),
     );
     const totalNumberOfAccounts = accounts.size;
     accounts = new Set(
-      [...accounts].filter(
-        (account) => !lookupTableAddresses.includes(account),
-      ),
+      [...accounts].filter((account) => !lookupTableAddresses.has(account)),
     );
     accounts = new Set([...accounts, ...programs, ...signers]);
     numberOfAddressLookups = totalNumberOfAccounts - accounts.size; // This number is equal to the number of accounts that are in the lookup table and are neither signers nor programs
@@ -146,7 +148,7 @@ export function getSizeOfTransaction(
  * Get the size of n in bytes when serialized as a CompressedU16. Compact arrays use a CompactU16 to store the length of the array.
  */
 export function getSizeOfCompressedU16(n: number) {
-  return 1 + Number(n >= 128) + Number(n >= 16384);
+  return 1 + Number(n >= 128) + Number(n >= 16_384);
 }
 
 /**
@@ -188,9 +190,7 @@ export class TransactionBuilder {
     } else {
       const sizeWithComputeUnits = getSizeOfTransaction(
         [
-          ...(this.transactionInstructions[
-            this.transactionInstructions.length - 1
-          ]?.instructions ?? []),
+          ...(this.transactionInstructions.at(-1)?.instructions ?? []),
           instruction,
           this.transactionInstructions.length % JITO_BUNDLE_SIZE === 0 // This transaction may be the first of a Jito bundle, so we leave room for a Jito tip transfer.
             ? buildJitoTipInstruction(this.payer, 1)
@@ -203,15 +203,9 @@ export class TransactionBuilder {
         this.addressLookupTable,
       );
       if (sizeWithComputeUnits <= PACKET_DATA_SIZE) {
-        this.transactionInstructions[
-          this.transactionInstructions.length - 1
-        ]?.instructions.push(instruction);
-        this.transactionInstructions[
-          this.transactionInstructions.length - 1
-        ]?.signers.push(...signers);
-        this.transactionInstructions[
-          this.transactionInstructions.length - 1
-        ]!.computeUnits += computeUnits ?? 0;
+        this.transactionInstructions.at(-1)?.instructions.push(instruction);
+        this.transactionInstructions.at(-1)?.signers.push(...signers);
+        this.transactionInstructions.at(-1)!.computeUnits += computeUnits ?? 0;
       } else
         this.transactionInstructions.push({
           instructions: [instruction],
@@ -236,10 +230,9 @@ export class TransactionBuilder {
   async buildVersionedTransactions(
     args: PriorityFeeConfig,
   ): Promise<{ tx: VersionedTransaction; signers: Signer[] }[]> {
-    const blockhash = (
-      await this.connection.getLatestBlockhash({ commitment: "confirmed" })
-    ).blockhash;
-
+    const { blockhash } = await this.connection.getLatestBlockhash({
+      commitment: "confirmed",
+    });
     return this.transactionInstructions.map(
       ({ instructions, signers, computeUnits }, index) => {
         const instructionsWithComputeBudget: TransactionInstruction[] = [
@@ -336,9 +329,9 @@ export class TransactionBuilder {
             false,
           );
           if (sizeWithInstruction > PACKET_DATA_SIZE) {
-            if (instructionsToSend.length == 0) {
+            if (instructionsToSend.length === 0) {
               throw new Error(
-                `An instruction is too big to be sent in a transaction (${sizeWithInstruction} > ${PACKET_DATA_SIZE} bytes)`,
+                `An instruction is too big to be sent in a transaction (${sizeWithInstruction.toString()} > ${PACKET_DATA_SIZE.toString()} bytes)`,
               );
             }
             break;
@@ -462,13 +455,13 @@ export async function sendTransactions(
     // In the following section, we wait and constantly check for the transaction to be confirmed
     // and resend the transaction if it is not confirmed within a certain time interval
     // thus handling tx retries on the client side rather than relying on the RPC
-    let confirmedTx: SignatureResult | null = null;
+    let confirmedTx: SignatureResult | null | undefined;
     let retryCount = 0;
 
     // Get the signature of the transaction with different logic for versioned transactions
     const txSignature = bs58.encode(
       isVersionedTransaction(tx)
-        ? tx.signatures?.[0] || new Uint8Array()
+        ? tx.signatures[0] || new Uint8Array()
         : (tx.signature ?? new Uint8Array()),
     );
 
@@ -481,11 +474,12 @@ export async function sendTransactions(
       "confirmed",
     );
 
-    confirmedTx = null;
+    confirmedTx = undefined;
+    // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
     while (!confirmedTx) {
       confirmedTx = await Promise.race([
         new Promise<SignatureResult>((resolve) => {
-          confirmTransactionPromise.then((result) => {
+          void confirmTransactionPromise.then((result) => {
             resolve(result.value);
           });
         }),
@@ -502,13 +496,13 @@ export async function sendTransactions(
         break;
       }
       console.log(
-        "Retrying transaction ",
+        "Retrying transaction",
         index,
-        " of ",
+        "of",
         transactions.length - 1,
-        " with signature: ",
+        "with signature:",
         txSignature,
-        " Retry count: ",
+        "Retry count:",
         retryCount,
       );
       retryCount++;

+ 1 - 1
target_chains/starknet/sdk/js/package.json

@@ -65,4 +65,4 @@
     "./package.json": "./package.json"
   },
   "module": "./dist/esm/index.js"
-}
+}

+ 0 - 9
target_chains/sui/sdk/js-iota/.eslintrc.js

@@ -1,9 +0,0 @@
-module.exports = {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  plugins: ["@typescript-eslint"],
-  extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
-  rules: {
-    "@typescript-eslint/no-explicit-any": "off",
-  },
-};

+ 8 - 0
target_chains/sui/sdk/js-iota/eslint.config.js

@@ -0,0 +1,8 @@
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["**/schemas/*", "**/__tests__/*"]),
+  ...base,
+  { rules: { "unicorn/filename-case": "off" } },
+];

+ 3 - 4
target_chains/sui/sdk/js-iota/package.json

@@ -38,15 +38,14 @@
   ],
   "license": "Apache-2.0",
   "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
     "@truffle/hdwallet-provider": "^2.1.5",
     "@types/ethereum-protocol": "^1.0.2",
     "@types/jest": "^29.4.0",
     "@types/node": "^18.11.18",
     "@types/web3-provider-engine": "^14.0.1",
     "@types/yargs": "^17.0.20",
-    "@typescript-eslint/eslint-plugin": "^6.0.0",
-    "@typescript-eslint/parser": "^6.0.0",
-    "eslint": "^8.14.0",
+    "eslint": "catalog:",
     "jest": "^29.4.1",
     "prettier": "catalog:",
     "ts-jest": "^29.0.5",
@@ -80,4 +79,4 @@
     "./package.json": "./package.json"
   },
   "module": "./dist/esm/index.js"
-}
+}

+ 0 - 9
target_chains/sui/sdk/js/.eslintrc.js

@@ -1,9 +0,0 @@
-module.exports = {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  plugins: ["@typescript-eslint"],
-  extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
-  rules: {
-    "@typescript-eslint/no-explicit-any": "off",
-  },
-};

+ 12 - 0
target_chains/sui/sdk/js/eslint.config.js

@@ -0,0 +1,12 @@
+import { base } from "@cprussin/eslint-config";
+import { globalIgnores } from "eslint/config";
+
+export default [
+  globalIgnores(["src/__tests__/**/*", "src/examples/**/*", "**/*.json"]),
+  ...base,
+  {
+    rules: {
+      "unicorn/filename-case": "off",
+    },
+  },
+];

+ 3 - 2
target_chains/sui/sdk/js/package.json

@@ -39,6 +39,7 @@
   ],
   "license": "Apache-2.0",
   "devDependencies": {
+    "@cprussin/eslint-config": "catalog:",
     "@truffle/hdwallet-provider": "^2.1.5",
     "@types/ethereum-protocol": "^1.0.2",
     "@types/jest": "^29.4.0",
@@ -47,7 +48,7 @@
     "@types/yargs": "^17.0.20",
     "@typescript-eslint/eslint-plugin": "^6.0.0",
     "@typescript-eslint/parser": "^6.0.0",
-    "eslint": "^8.14.0",
+    "eslint": "catalog:",
     "jest": "^29.4.1",
     "prettier": "catalog:",
     "ts-jest": "^29.0.5",
@@ -98,4 +99,4 @@
     "./package.json": "./package.json"
   },
   "module": "./dist/esm/index.js"
-}
+}

+ 1 - 1
target_chains/ton/sdk/js/package.json

@@ -67,4 +67,4 @@
     "./package.json": "./package.json"
   },
   "module": "./dist/esm/index.js"
-}
+}

+ 2 - 11
turbo.json

@@ -52,12 +52,7 @@
       "dependsOn": ["//#install:modules", "^build"]
     },
     "build": {
-      "dependsOn": [
-        "//#install:modules",
-        "pull:env",
-        "clean",
-        "^build"
-      ],
+      "dependsOn": ["//#install:modules", "pull:env", "clean", "^build"],
       "inputs": [
         "$TURBO_DEFAULT$",
         "!README.md",
@@ -70,11 +65,7 @@
       "outputs": ["lib/**", "dist/**", ".next/**", "!.next/cache/**"]
     },
     "build:vercel": {
-      "dependsOn": [
-        "//#install:modules",
-        "pull:env",
-        "^build"
-      ],
+      "dependsOn": ["//#install:modules", "pull:env", "^build"],
       "inputs": [
         "$TURBO_DEFAULT$",
         "!README.md",