diff --git a/.eslintrc.json b/.eslintrc.json
index b2359795a..dd0b3054c 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -3,6 +3,7 @@
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"next/core-web-vitals",
+ "plugin:@tanstack/query/recommended",
"prettier"
],
"rules": {
diff --git a/.prettierrc.json b/.prettierrc.json
index d90ebd474..7ee127388 100644
--- a/.prettierrc.json
+++ b/.prettierrc.json
@@ -1,7 +1,7 @@
{
- "arrowParens:": "always",
+ "arrowParens": "always",
"bracketSpacing": true,
- "jsxBracketSameLine": false,
+ "bracketSameLine": false,
"printWidth": 80,
"proseWrap": "always",
"semi": true,
diff --git a/package.json b/package.json
index a8beab140..fedebbf56 100644
--- a/package.json
+++ b/package.json
@@ -59,6 +59,7 @@
"devDependencies": {
"@next/eslint-plugin-next": "^15.4.4",
"@playwright/test": "^1.57.0",
+ "@tanstack/eslint-plugin-query": "^5.101.1",
"@types/jest": "^30.0.0",
"@types/json-schema": "^7.0.15",
"@types/lodash": "^4.17.20",
@@ -66,7 +67,8 @@
"@types/papaparse": "^5.3.15",
"@types/react": "^19.1.9",
"@types/react-dom": "^19.1.7",
- "@typescript-eslint/eslint-plugin": "^8.30.1",
+ "@typescript-eslint/eslint-plugin": "^8.62.0",
+ "@typescript-eslint/parser": "^8.62.0",
"eslint": "^9.32.0",
"eslint-config-next": "15.4.4",
"eslint-config-prettier": "^10.1.8",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4e853b317..595f28c47 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -125,6 +125,9 @@ importers:
'@playwright/test':
specifier: ^1.57.0
version: 1.57.0
+ '@tanstack/eslint-plugin-query':
+ specifier: ^5.101.1
+ version: 5.101.1(eslint@9.35.0)(typescript@5.9.2)
'@types/jest':
specifier: ^30.0.0
version: 30.0.0
@@ -147,8 +150,11 @@ importers:
specifier: ^19.1.7
version: 19.1.9(@types/react@19.1.12)
'@typescript-eslint/eslint-plugin':
- specifier: ^8.30.1
- version: 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)
+ specifier: ^8.62.0
+ version: 8.62.0(@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/parser':
+ specifier: ^8.62.0
+ version: 8.62.0(eslint@9.35.0)(typescript@5.9.2)
eslint:
specifier: ^9.32.0
version: 9.35.0
@@ -487,10 +493,20 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ '@eslint-community/eslint-utils@4.9.1':
+ resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
'@eslint-community/regexpp@4.12.1':
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
'@eslint/config-array@0.21.0':
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -2399,6 +2415,7 @@ packages:
'@stellar/stellar-base@15.0.0':
resolution: {integrity: sha512-XQhxUr9BYiEcFcgc4oWcCMR9QJCny/GmmGsuwPKf/ieIcOeb5149KLHYx9mJCA0ea8QbucR2/GzV58QbXOTxQA==}
engines: {node: '>=20.0.0'}
+ deprecated: This package is now rolled into @stellar/stellar-sdk. Please use @stellar/stellar-sdk to continue receiving updates and support.
'@stellar/stellar-sdk@13.3.0':
resolution: {integrity: sha512-8+GHcZLp+mdin8gSjcgfb/Lb6sSMYRX6Nf/0LcSJxvjLQR0XHpjGzOiRbYb2jSXo51EnA6kAV5j+4Pzh5OUKUg==}
@@ -2422,6 +2439,15 @@ packages:
'@swc/helpers@0.5.22':
resolution: {integrity: sha512-/e2Ly3Docn9kYByap6TV4oquJ3wQuz3c+kC74riqtkwU9CwTMeuj6t2rW+bRr4pyOx/CYQM4wr0RgaKQwGEz0A==}
+ '@tanstack/eslint-plugin-query@5.101.1':
+ resolution: {integrity: sha512-gssErdsLIoeiJI6mbU1YTNlNxktj/Dt8r8QSXNxz8P4gBTnKl9xAPix84orbkIbd133ewAbqieRMZUQmxL+34w==}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: ^5.4.0 || ^6.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@tanstack/query-core@5.87.4':
resolution: {integrity: sha512-uNsg6zMxraEPDVO2Bn+F3/ctHi+Zsk+MMpcN8h6P7ozqD088F6mFY5TfGM7zuyIrL7HKpDyu6QHfLWiDxh3cuw==}
@@ -2832,63 +2858,63 @@ packages:
'@types/yargs@17.0.35':
resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
- '@typescript-eslint/eslint-plugin@8.43.0':
- resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==}
+ '@typescript-eslint/eslint-plugin@8.62.0':
+ resolution: {integrity: sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.43.0
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ '@typescript-eslint/parser': ^8.62.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/parser@8.43.0':
- resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==}
+ '@typescript-eslint/parser@8.62.0':
+ resolution: {integrity: sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/project-service@8.43.0':
- resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==}
+ '@typescript-eslint/project-service@8.62.0':
+ resolution: {integrity: sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/scope-manager@8.43.0':
- resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==}
+ '@typescript-eslint/scope-manager@8.62.0':
+ resolution: {integrity: sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.43.0':
- resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==}
+ '@typescript-eslint/tsconfig-utils@8.62.0':
+ resolution: {integrity: sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/type-utils@8.43.0':
- resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==}
+ '@typescript-eslint/type-utils@8.62.0':
+ resolution: {integrity: sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/types@8.43.0':
- resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==}
+ '@typescript-eslint/types@8.62.0':
+ resolution: {integrity: sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.43.0':
- resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==}
+ '@typescript-eslint/typescript-estree@8.62.0':
+ resolution: {integrity: sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/utils@8.43.0':
- resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==}
+ '@typescript-eslint/utils@8.62.0':
+ resolution: {integrity: sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
- '@typescript-eslint/visitor-keys@8.43.0':
- resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==}
+ '@typescript-eslint/visitor-keys@8.62.0':
+ resolution: {integrity: sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
@@ -3388,6 +3414,10 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
bare-addon-resolve@1.9.4:
resolution: {integrity: sha512-unn6Vy/Yke6F99vg/7tcrvM2KUvIhTNniaSqDbam4AWkd4NhvDVSrQiRYVlNzUV2P7SPobkCK7JFVxrJk9btCg==}
peerDependencies:
@@ -3501,6 +3531,10 @@ packages:
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ brace-expansion@5.0.6:
+ resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
+ engines: {node: 18 || 20 || >=22}
+
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
@@ -3822,6 +3856,15 @@ packages:
supports-color:
optional: true
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
@@ -4143,6 +4186,10 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
eslint@9.35.0:
resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -4244,10 +4291,6 @@ packages:
resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
engines: {node: '>=8.6.0'}
- fast-glob@3.3.3:
- resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
- engines: {node: '>=8.6.0'}
-
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
@@ -4433,9 +4476,6 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- graphemer@1.4.0:
- resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
h3@1.15.11:
resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==}
@@ -5184,6 +5224,10 @@ packages:
minimalistic-crypto-utils@1.0.1:
resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==}
+ minimatch@10.2.5:
+ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
+ engines: {node: 18 || 20 || >=22}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -6244,8 +6288,8 @@ packages:
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
- ts-api-utils@2.1.0:
- resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ ts-api-utils@2.5.0:
+ resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
@@ -7256,8 +7300,15 @@ snapshots:
eslint: 9.35.0
eslint-visitor-keys: 3.4.3
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.35.0)':
+ dependencies:
+ eslint: 9.35.0
+ eslint-visitor-keys: 3.4.3
+
'@eslint-community/regexpp@4.12.1': {}
+ '@eslint-community/regexpp@4.12.2': {}
+
'@eslint/config-array@0.21.0':
dependencies:
'@eslint/object-schema': 2.1.6
@@ -9956,6 +10007,15 @@ snapshots:
dependencies:
tslib: 2.8.1
+ '@tanstack/eslint-plugin-query@5.101.1(eslint@9.35.0)(typescript@5.9.2)':
+ dependencies:
+ '@typescript-eslint/utils': 8.62.0(eslint@9.35.0)(typescript@5.9.2)
+ eslint: 9.35.0
+ optionalDependencies:
+ typescript: 5.9.2
+ transitivePeerDependencies:
+ - supports-color
+
'@tanstack/query-core@5.87.4': {}
'@tanstack/query-devtools@5.87.3': {}
@@ -10664,98 +10724,96 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
- '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)':
+ '@typescript-eslint/eslint-plugin@8.62.0(@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)':
dependencies:
- '@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
- '@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
- '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
- '@typescript-eslint/visitor-keys': 8.43.0
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.62.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/scope-manager': 8.62.0
+ '@typescript-eslint/type-utils': 8.62.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.62.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/visitor-keys': 8.62.0
eslint: 9.35.0
- graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
- ts-api-utils: 2.1.0(typescript@5.9.2)
+ ts-api-utils: 2.5.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2)':
+ '@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/types': 8.43.0
- '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
- '@typescript-eslint/visitor-keys': 8.43.0
- debug: 4.4.1
+ '@typescript-eslint/scope-manager': 8.62.0
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.2)
+ '@typescript-eslint/visitor-keys': 8.62.0
+ debug: 4.4.3
eslint: 9.35.0
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.43.0(typescript@5.9.2)':
+ '@typescript-eslint/project-service@8.62.0(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2)
- '@typescript-eslint/types': 8.43.0
- debug: 4.4.1
+ '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.62.0
+ debug: 4.4.3
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.43.0':
+ '@typescript-eslint/scope-manager@8.62.0':
dependencies:
- '@typescript-eslint/types': 8.43.0
- '@typescript-eslint/visitor-keys': 8.43.0
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/visitor-keys': 8.62.0
- '@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)':
+ '@typescript-eslint/tsconfig-utils@8.62.0(typescript@5.9.2)':
dependencies:
typescript: 5.9.2
- '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0)(typescript@5.9.2)':
+ '@typescript-eslint/type-utils@8.62.0(eslint@9.35.0)(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/types': 8.43.0
- '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
- '@typescript-eslint/utils': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
- debug: 4.4.1
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.2)
+ '@typescript-eslint/utils': 8.62.0(eslint@9.35.0)(typescript@5.9.2)
+ debug: 4.4.3
eslint: 9.35.0
- ts-api-utils: 2.1.0(typescript@5.9.2)
+ ts-api-utils: 2.5.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.43.0': {}
+ '@typescript-eslint/types@8.62.0': {}
- '@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)':
+ '@typescript-eslint/typescript-estree@8.62.0(typescript@5.9.2)':
dependencies:
- '@typescript-eslint/project-service': 8.43.0(typescript@5.9.2)
- '@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2)
- '@typescript-eslint/types': 8.43.0
- '@typescript-eslint/visitor-keys': 8.43.0
- debug: 4.4.1
- fast-glob: 3.3.3
- is-glob: 4.0.3
- minimatch: 9.0.5
- semver: 7.7.4
- ts-api-utils: 2.1.0(typescript@5.9.2)
+ '@typescript-eslint/project-service': 8.62.0(typescript@5.9.2)
+ '@typescript-eslint/tsconfig-utils': 8.62.0(typescript@5.9.2)
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/visitor-keys': 8.62.0
+ debug: 4.4.3
+ minimatch: 10.2.5
+ semver: 7.8.1
+ tinyglobby: 0.2.15
+ ts-api-utils: 2.5.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.43.0(eslint@9.35.0)(typescript@5.9.2)':
+ '@typescript-eslint/utils@8.62.0(eslint@9.35.0)(typescript@5.9.2)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0)
- '@typescript-eslint/scope-manager': 8.43.0
- '@typescript-eslint/types': 8.43.0
- '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.35.0)
+ '@typescript-eslint/scope-manager': 8.62.0
+ '@typescript-eslint/types': 8.62.0
+ '@typescript-eslint/typescript-estree': 8.62.0(typescript@5.9.2)
eslint: 9.35.0
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.43.0':
+ '@typescript-eslint/visitor-keys@8.62.0':
dependencies:
- '@typescript-eslint/types': 8.43.0
- eslint-visitor-keys: 4.2.1
+ '@typescript-eslint/types': 8.62.0
+ eslint-visitor-keys: 5.0.1
'@ungap/structured-clone@1.3.0': {}
@@ -11717,6 +11775,8 @@ snapshots:
balanced-match@1.0.2: {}
+ balanced-match@4.0.4: {}
+
bare-addon-resolve@1.9.4(bare-url@2.2.2):
dependencies:
bare-module-resolve: 1.11.1(bare-url@2.2.2)
@@ -11819,6 +11879,10 @@ snapshots:
dependencies:
balanced-match: 1.0.2
+ brace-expansion@5.0.6:
+ dependencies:
+ balanced-match: 4.0.4
+
braces@3.0.3:
dependencies:
fill-range: 7.1.1
@@ -12187,6 +12251,10 @@ snapshots:
dependencies:
ms: 2.1.3
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
decamelize@1.2.0: {}
dedent@1.7.0: {}
@@ -12457,12 +12525,12 @@ snapshots:
dependencies:
'@next/eslint-plugin-next': 15.4.4
'@rushstack/eslint-patch': 1.12.0
- '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)
- '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/eslint-plugin': 8.62.0(@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2))(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.62.0(eslint@9.35.0)(typescript@5.9.2)
eslint: 9.35.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.35.0)
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0)
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.35.0)
eslint-plugin-react: 7.37.5(eslint@9.35.0)
eslint-plugin-react-hooks: 5.2.0(eslint@9.35.0)
@@ -12496,22 +12564,22 @@ snapshots:
tinyglobby: 0.2.15
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0)
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.62.0(eslint@9.35.0)(typescript@5.9.2)
eslint: 9.35.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.35.0)
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
@@ -12522,7 +12590,7 @@ snapshots:
doctrine: 2.1.0
eslint: 9.35.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.43.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0)
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.62.0(eslint@9.35.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0)
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -12534,7 +12602,7 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.43.0(eslint@9.35.0)(typescript@5.9.2)
+ '@typescript-eslint/parser': 8.62.0(eslint@9.35.0)(typescript@5.9.2)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -12599,6 +12667,8 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
+ eslint-visitor-keys@5.0.1: {}
+
eslint@9.35.0:
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0)
@@ -12736,14 +12806,6 @@ snapshots:
merge2: 1.4.1
micromatch: 4.0.8
- fast-glob@3.3.3:
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
-
fast-json-stable-stringify@2.1.0: {}
fast-levenshtein@2.0.6: {}
@@ -12926,8 +12988,6 @@ snapshots:
graceful-fs@4.2.11: {}
- graphemer@1.4.0: {}
-
h3@1.15.11:
dependencies:
cookie-es: 1.2.3
@@ -13924,6 +13984,10 @@ snapshots:
minimalistic-crypto-utils@1.0.1: {}
+ minimatch@10.2.5:
+ dependencies:
+ brace-expansion: 5.0.6
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -14700,7 +14764,8 @@ snapshots:
semver@7.7.3: {}
- semver@7.7.4: {}
+ semver@7.7.4:
+ optional: true
semver@7.8.1: {}
@@ -15110,7 +15175,7 @@ snapshots:
tr46@0.0.3: {}
- ts-api-utils@2.1.0(typescript@5.9.2):
+ ts-api-utils@2.5.0(typescript@5.9.2):
dependencies:
typescript: 5.9.2
diff --git a/src/app/(sidebar)/transactions-explorer/page.tsx b/src/app/(sidebar)/transactions-explorer/page.tsx
index 5fb3ba587..894e272a4 100644
--- a/src/app/(sidebar)/transactions-explorer/page.tsx
+++ b/src/app/(sidebar)/transactions-explorer/page.tsx
@@ -53,7 +53,11 @@ export default function Explorer() {
return map;
});
- const txsQuery = useGetRpcTxs({
+ const {
+ refetch: refetchTxs,
+ isError,
+ error,
+ } = useGetRpcTxs({
rpcUrl: network.rpcUrl,
headers: getNetworkHeaders(network, "rpc"),
startLedger,
@@ -104,10 +108,10 @@ export default function Explorer() {
}
try {
- await txsQuery.refetch();
+ const txsResult = await refetchTxs();
- if (txsQuery.data?.transactions && !txsQuery.error) {
- for (const txinfo of txsQuery.data.transactions) {
+ if (txsResult.data?.transactions && !txsResult.error) {
+ for (const txinfo of txsResult.data.transactions) {
const normalizedTx = await normalizeTransaction(txinfo);
if (normalizedTx) {
@@ -126,8 +130,8 @@ export default function Explorer() {
.splice(-500);
localStorage.setItem(localStorageKey, jsonStringify(txs)!);
- if (txsQuery.data.latestLedger) {
- setStartLedger(txsQuery.data.latestLedger);
+ if (txsResult.data.latestLedger) {
+ setStartLedger(txsResult.data.latestLedger);
}
}
} catch (e) {
@@ -144,16 +148,16 @@ export default function Explorer() {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
network?.rpcUrl,
- txsQuery,
+ refetchTxs,
iter,
nextFetchAt,
transactions,
localStorageKey,
]);
- const errorElement = txsQuery.isError ? (
+ const errorElement = isError ? (
- {txsQuery.error.message}
+ {error?.message}
) : null;
diff --git a/src/app/(sidebar)/xdr/view/page.tsx b/src/app/(sidebar)/xdr/view/page.tsx
index d5bdbc862..e52c9d864 100644
--- a/src/app/(sidebar)/xdr/view/page.tsx
+++ b/src/app/(sidebar)/xdr/view/page.tsx
@@ -53,11 +53,10 @@ export default function ViewXdr() {
isFetching: isLatestTxnFetching,
isLoading: isLatestTxnLoading,
refetch: fetchLatestTxn,
- } = useLatestTxn(
- network.rpcUrl,
- getNetworkHeaders(network, "rpc"),
- ["xdr", "latestTxn"],
- );
+ } = useLatestTxn(network.rpcUrl, getNetworkHeaders(network, "rpc"), [
+ "xdr",
+ "latestTxn",
+ ]);
const queryClient = useQueryClient();
@@ -208,7 +207,12 @@ export default function ViewXdr() {
if (latestTxn) {
// Reset query to clear old data
queryClient.resetQueries({
- queryKey: ["xdr", "latestTxn", network.rpcUrl],
+ queryKey: [
+ "xdr",
+ "latestTxn",
+ network.rpcUrl,
+ getNetworkHeaders(network, "rpc"),
+ ],
exact: true,
});
updateXdrBlob("");
diff --git a/src/helpers/errorUtils.ts b/src/helpers/errorUtils.ts
index 1d3cccb6c..e493c1a51 100644
--- a/src/helpers/errorUtils.ts
+++ b/src/helpers/errorUtils.ts
@@ -1,3 +1,25 @@
+/**
+ * Extracts a human-readable message from an unknown error value.
+ *
+ * Handles `Error` instances, raw strings, and arbitrary objects (falling back
+ * to `JSON.stringify`, then `String`).
+ */
+export const getErrorMessage = (error: unknown): string => {
+ if (error instanceof Error) {
+ return error.message;
+ }
+
+ if (typeof error === "string") {
+ return error;
+ }
+
+ try {
+ return JSON.stringify(error);
+ } catch {
+ return String(error);
+ }
+};
+
export const isExternalError = (error: Error) => {
const stack = error.stack || "";
diff --git a/src/query/external/useSEContractStorage.ts b/src/query/external/useSEContractStorage.ts
index ce76f05a3..aa62655ec 100644
--- a/src/query/external/useSEContractStorage.ts
+++ b/src/query/external/useSEContractStorage.ts
@@ -21,7 +21,12 @@ export const useSEContractStorage = ({
totalEntriesCount: number | undefined;
}) => {
const query = useQuery({
- queryKey: ["useSEContractStorage", networkId, contractId],
+ queryKey: [
+ "useSEContractStorage",
+ networkId,
+ contractId,
+ totalEntriesCount,
+ ],
queryFn: async () => {
// No entries
if (!totalEntriesCount) {
diff --git a/src/query/useAccountInfo.ts b/src/query/useAccountInfo.ts
index 78640a747..28c057219 100644
--- a/src/query/useAccountInfo.ts
+++ b/src/query/useAccountInfo.ts
@@ -1,3 +1,4 @@
+import { getErrorMessage } from "@/helpers/errorUtils";
import { NetworkHeaders } from "@/types/types";
import { useQuery } from "@tanstack/react-query";
@@ -11,7 +12,7 @@ export const useAccountInfo = ({
headers: NetworkHeaders;
}) => {
const query = useQuery({
- queryKey: ["accountInfo", publicKey],
+ queryKey: ["accountInfo", publicKey, horizonUrl, headers],
queryFn: async () => {
try {
const response = await fetch(`${horizonUrl}/accounts/${publicKey}`, {
@@ -31,8 +32,8 @@ export const useAccountInfo = ({
isFunded: true,
details: responseJson,
};
- } catch (e: any) {
- throw `Something went wrong. ${e}`;
+ } catch (error) {
+ throw new Error(`Something went wrong. ${getErrorMessage(error)}`);
}
},
enabled: false,
diff --git a/src/query/useAccountSequenceNumber.ts b/src/query/useAccountSequenceNumber.ts
index 1feb8b3c7..ccdec0193 100644
--- a/src/query/useAccountSequenceNumber.ts
+++ b/src/query/useAccountSequenceNumber.ts
@@ -16,7 +16,12 @@ export const useAccountSequenceNumber = ({
enabled?: boolean;
}) => {
const query = useQuery({
- queryKey: ["accountSequenceNumber", { publicKey, uniqueId }],
+ queryKey: [
+ "accountSequenceNumber",
+ { publicKey, uniqueId },
+ horizonUrl,
+ headers,
+ ],
queryFn: async () => {
let sourceAccount = publicKey;
diff --git a/src/query/useAddTrustline.ts b/src/query/useAddTrustline.ts
index 8f75c0bf4..c31fc2f43 100644
--- a/src/query/useAddTrustline.ts
+++ b/src/query/useAddTrustline.ts
@@ -24,7 +24,15 @@ export const useAddTrustline = ({
headers: NetworkHeaders;
}) => {
const query = useQuery({
- queryKey: ["addTrustline", publicKey],
+ queryKey: [
+ "addTrustline",
+ publicKey,
+ asset.assetCode,
+ asset.assetIssuer,
+ network.horizonUrl,
+ network.passphrase,
+ headers,
+ ],
queryFn: async () => {
if (!asset.assetCode || !asset.assetIssuer) {
throw new Error("Asset code and issuer are required");
diff --git a/src/query/useBuildRpcTransaction.ts b/src/query/useBuildRpcTransaction.ts
index 900cd0c4d..56e2e5ad4 100644
--- a/src/query/useBuildRpcTransaction.ts
+++ b/src/query/useBuildRpcTransaction.ts
@@ -30,7 +30,16 @@ export const useBuildRpcTransaction = ({
timeoutInSeconds?: number;
}) => {
const query = useQuery({
- queryKey: ["buildRpcTransaction", publicKey, operation],
+ queryKey: [
+ "buildRpcTransaction",
+ publicKey,
+ rpcUrl,
+ operation,
+ networkPassphrase,
+ timeoutInSeconds,
+ headers,
+ rpcUrl,
+ ],
queryFn: async () => {
if (!publicKey) {
throw "Public key is required.";
diff --git a/src/query/useBuildVerification.ts b/src/query/useBuildVerification.ts
index 1f214f398..c87296da5 100644
--- a/src/query/useBuildVerification.ts
+++ b/src/query/useBuildVerification.ts
@@ -13,7 +13,7 @@ export const useBuildVerification = ({
}) => {
const queries = useQueries({
queries: contractIds.map((contractId) => ({
- queryKey: ["buildVerification", contractId, rpcUrl],
+ queryKey: ["buildVerification", contractId, rpcUrl, headers],
queryFn: () =>
getBuildVerification({
contractId,
diff --git a/src/query/useCheckTxSignatures.ts b/src/query/useCheckTxSignatures.ts
index 67fd627f1..1d50e6f88 100644
--- a/src/query/useCheckTxSignatures.ts
+++ b/src/query/useCheckTxSignatures.ts
@@ -14,7 +14,7 @@ export const useCheckTxSignatures = ({
headers: NetworkHeaders;
}) => {
const query = useQuery({
- queryKey: ["tx", "signatures"],
+ queryKey: ["tx", "signatures", xdr, networkPassphrase, networkUrl, headers],
queryFn: async () => {
try {
return await fetchTxSignatures({
diff --git a/src/query/useEndpoint.ts b/src/query/useEndpoint.ts
index 3eda33752..58852fa33 100644
--- a/src/query/useEndpoint.ts
+++ b/src/query/useEndpoint.ts
@@ -12,7 +12,7 @@ export const useEndpoint = ({
headers: NetworkHeaders;
}) => {
const query = useQuery({
- queryKey: ["endpoint", "response", postData],
+ queryKey: ["endpoint", "response", postData, requestUrl, headers],
queryFn: async () => {
const endpointResponse = await fetch(sanitizeUrl(requestUrl), {
headers,
diff --git a/src/query/useFetchRpcTxDetails.ts b/src/query/useFetchRpcTxDetails.ts
index 422dc6c38..6dbf97731 100644
--- a/src/query/useFetchRpcTxDetails.ts
+++ b/src/query/useFetchRpcTxDetails.ts
@@ -11,7 +11,7 @@ export const useFetchRpcTxDetails = ({
txHash: string;
}) => {
const query = useQuery({
- queryKey: ["useFetchRpcTxDetails", rpcUrl, txHash],
+ queryKey: ["useFetchRpcTxDetails", rpcUrl, txHash, headers],
queryFn: async () => {
try {
const response = await fetch(rpcUrl, {
diff --git a/src/query/useFriendBot.ts b/src/query/useFriendBot.ts
index 2658100e8..a4aec6050 100644
--- a/src/query/useFriendBot.ts
+++ b/src/query/useFriendBot.ts
@@ -20,7 +20,14 @@ export const useFriendBot = ({
: "https://friendbot.stellar.org";
const query = useQuery({
- queryKey: ["friendBot", publicKey, key],
+ queryKey: [
+ "friendBot",
+ publicKey,
+ key,
+ network,
+ knownFriendbotURL,
+ headers,
+ ],
queryFn: async () => {
if (!network.horizonUrl) {
throw new Error(`Please use a network that supports Horizon`);
diff --git a/src/query/useGetContractDataFromRpcById.ts b/src/query/useGetContractDataFromRpcById.ts
index 044cbe198..3d8878837 100644
--- a/src/query/useGetContractDataFromRpcById.ts
+++ b/src/query/useGetContractDataFromRpcById.ts
@@ -24,7 +24,14 @@ export const useGetContractDataFromRpcById = ({
| null
| undefined
>({
- queryKey: ["useGetContractDataFromRpcById", contractId, rpcUrl],
+ queryKey: [
+ "useGetContractDataFromRpcById",
+ contractId,
+ rpcUrl,
+ execWasmType,
+ execStellarAssetType,
+ headers,
+ ],
queryFn: async () => {
if (!contractId || !rpcUrl) {
return null;
diff --git a/src/query/useGetRpcTxDetails.ts b/src/query/useGetRpcTxDetails.ts
index 9f90789a1..54f8679ec 100644
--- a/src/query/useGetRpcTxDetails.ts
+++ b/src/query/useGetRpcTxDetails.ts
@@ -13,7 +13,7 @@ export const useGetRpcTxDetails = ({
tx: string;
}) => {
const query = useQuery({
- queryKey: ["useGetRpcTxDetails", rpcUrl, tx],
+ queryKey: ["useGetRpcTxDetails", rpcUrl, tx, headers],
queryFn: async () => {
const rpcServer = new StellarRpc.Server(rpcUrl, {
headers,
diff --git a/src/query/useGetRpcTxs.ts b/src/query/useGetRpcTxs.ts
index b0a2f241f..c83e7c38e 100644
--- a/src/query/useGetRpcTxs.ts
+++ b/src/query/useGetRpcTxs.ts
@@ -1,3 +1,4 @@
+import { getErrorMessage } from "@/helpers/errorUtils";
import { NetworkHeaders } from "@/types/types";
import { rpc as StellarRpc } from "@stellar/stellar-sdk";
@@ -13,7 +14,7 @@ export const useGetRpcTxs = ({
startLedger: number;
}) => {
const query = useQuery({
- queryKey: ["useGetRpcTxs", rpcUrl, startLedger],
+ queryKey: ["useGetRpcTxs", rpcUrl, startLedger, headers],
queryFn: async () => {
const rpcServer = new StellarRpc.Server(rpcUrl, {
headers,
@@ -33,7 +34,9 @@ export const useGetRpcTxs = ({
params.startLedger = latestLedger.sequence;
}
} catch (error) {
- throw `there was an error with fetching latest ledger. e: ${error}`;
+ throw new Error(
+ `there was an error with fetching latest ledger. e: ${getErrorMessage(error)}`,
+ );
}
try {
@@ -41,7 +44,9 @@ export const useGetRpcTxs = ({
return response;
} catch (error) {
- throw `there was an error with fetching transactions. e: ${error}`;
+ throw new Error(
+ `there was an error with fetching transactions. e: ${getErrorMessage(error)}`,
+ );
}
},
enabled: false,
diff --git a/src/query/useHorizonHealthCheckUntilReady.ts b/src/query/useHorizonHealthCheckUntilReady.ts
index 4c19e5eea..1e0bdcd4d 100644
--- a/src/query/useHorizonHealthCheckUntilReady.ts
+++ b/src/query/useHorizonHealthCheckUntilReady.ts
@@ -10,7 +10,7 @@ export const useHorizonHealthCheckUntilReady = (
headers: AnyObject,
) => {
const query = useQuery({
- queryKey: ["useHorizonHealthCheckUntilReady", horizonUrl],
+ queryKey: ["useHorizonHealthCheckUntilReady", horizonUrl, headers],
queryFn: async () => {
if (!horizonUrl) {
return null;
diff --git a/src/query/useLatestLedger.ts b/src/query/useLatestLedger.ts
index 43b2df10d..6516bc6d5 100644
--- a/src/query/useLatestLedger.ts
+++ b/src/query/useLatestLedger.ts
@@ -11,7 +11,7 @@ export const useLatestLedger = ({
headers: NetworkHeaders;
}) => {
const query = useQuery({
- queryKey: ["latestLedger"],
+ queryKey: ["latestLedger", rpcUrl, headers],
queryFn: async () => {
const rpcServer = new StellarRpc.Server(rpcUrl, {
headers,
diff --git a/src/query/useLatestTxn.ts b/src/query/useLatestTxn.ts
index a22d677e0..476c003f2 100644
--- a/src/query/useLatestTxn.ts
+++ b/src/query/useLatestTxn.ts
@@ -8,7 +8,7 @@ export const useLatestTxn = (
queryKey: string[] = ["latestTxn"],
) => {
const query = useQuery({
- queryKey: [...queryKey, rpcUrl],
+ queryKey: [...queryKey, rpcUrl, headers],
queryFn: async () => {
try {
const rpcServer = new StellarRpc.Server(rpcUrl, {
diff --git a/src/query/useRpcHealthCheckUntilReady.ts b/src/query/useRpcHealthCheckUntilReady.ts
index 2d38abae9..b66e849a4 100644
--- a/src/query/useRpcHealthCheckUntilReady.ts
+++ b/src/query/useRpcHealthCheckUntilReady.ts
@@ -10,7 +10,7 @@ export const useRpcHealthCheckUntilReady = (
headers: AnyObject,
) => {
const query = useQuery({
- queryKey: ["useRpcHealthCheckUntilReady", rpcUrl],
+ queryKey: ["useRpcHealthCheckUntilReady", rpcUrl, headers],
queryFn: async () => {
if (!rpcUrl) {
return null;
diff --git a/src/query/useWasmBinaryFromRpc.ts b/src/query/useWasmBinaryFromRpc.ts
index ec0f9d742..3bcc838af 100644
--- a/src/query/useWasmBinaryFromRpc.ts
+++ b/src/query/useWasmBinaryFromRpc.ts
@@ -18,7 +18,7 @@ export const useWasmBinaryFromRpc = ({
headers?: NetworkHeaders;
}) => {
const query = useQuery({
- queryKey: ["useWasmBinaryFromRpc", wasmHash, rpcUrl],
+ queryKey: ["useWasmBinaryFromRpc", wasmHash, rpcUrl, headers],
queryFn: async () => {
if (!wasmHash || !rpcUrl) {
return null;
diff --git a/src/query/useWasmGitHubAttestation.ts b/src/query/useWasmGitHubAttestation.ts
index 180eb5468..8183896a5 100644
--- a/src/query/useWasmGitHubAttestation.ts
+++ b/src/query/useWasmGitHubAttestation.ts
@@ -18,7 +18,7 @@ export const useWasmGitHubAttestation = ({
headers?: NetworkHeaders;
}) => {
const query = useQuery({
- queryKey: ["useWasmGitHubAttestation", wasmHash, rpcUrl],
+ queryKey: ["useWasmGitHubAttestation", wasmHash, rpcUrl, headers],
queryFn: async () => {
if (!wasmHash || !rpcUrl) {
return null;