@exodus/solana-api 3.32.1 → 3.32.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.32.2](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.32.1...@exodus/solana-api@3.32.2) (2026-05-06)
7
+
8
+ **Note:** Version bump only for package @exodus/solana-api
9
+
10
+
11
+
12
+
13
+
6
14
  ## [3.32.1](https://github.com/ExodusMovement/assets/compare/@exodus/solana-api@3.32.0...@exodus/solana-api@3.32.1) (2026-05-05)
7
15
 
8
16
  **Note:** Version bump only for package @exodus/solana-api
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exodus/solana-api",
3
- "version": "3.32.1",
3
+ "version": "3.32.2",
4
4
  "description": "Transaction monitors, fee monitors, RPC with the blockchain node, and other networking code for Solana",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -49,7 +49,7 @@
49
49
  "@exodus/assets-testing": "^1.0.0",
50
50
  "@exodus/solana-web3.js": "^1.63.1-exodus.9-rc3"
51
51
  },
52
- "gitHead": "581c0da1011334b39a69438bb6557caddf1015ec",
52
+ "gitHead": "f8f5a3f5a7f0b77c47f46343c6052a1795022a1c",
53
53
  "bugs": {
54
54
  "url": "https://github.com/ExodusMovement/assets/issues?q=is%3Aissue+is%3Aopen+label%3Asolana-api"
55
55
  },
@@ -431,23 +431,33 @@ export class SolanaWebsocketMonitor extends SolanaClarityMonitor {
431
431
  await this.#updateStateBatch({ newData: stakingStateUpdate, walletAccount })
432
432
  }
433
433
 
434
- await delay(12_000) // we introduce a delay to make sure the getStakingInfo RPC returns updated data
435
- // because we NEED at a certain point to have an updated stakingInfo in the state to know what's the new solana stake account address.
436
- const stakingInfo = await this.getStakingInfo({ address, accountState, walletAccount })
437
- const balance = this.#computeTotalBalance({
438
- amount: this.asset.currency.baseUnit(await this.clarityApi.getBalance(address)), // we needed the delay otherwise will never be updated right away.
439
- address,
440
- stakingInfo,
441
- walletAccount,
442
- })
443
-
444
- stakingTx.confirmations = 1 // mark tx as confirmed
434
+ stakingTx.confirmations = 1
445
435
  await this.#updateHistoryBatch({
446
436
  walletAccount,
447
437
  logItemsByAsset: clearedLogItems,
448
438
  refresh: false,
449
439
  })
450
- await this.#updateStateBatch({ newData: { balance, stakingInfo }, walletAccount })
440
+
441
+ await delay(12_000) // we introduce a delay to make sure the getStakingInfo RPC returns updated data
442
+ try {
443
+ // because we NEED at a certain point to have an updated stakingInfo in the state to know what's the new solana stake account address.
444
+ const stakingInfo = await this.getStakingInfo({ address, accountState, walletAccount })
445
+ const balance = this.#computeTotalBalance({
446
+ amount: this.asset.currency.baseUnit(await this.clarityApi.getBalance(address)), // we needed the delay otherwise will never be updated right away.
447
+ address,
448
+ stakingInfo,
449
+ walletAccount,
450
+ })
451
+
452
+ await this.#updateStateBatch({ newData: { balance, stakingInfo }, walletAccount })
453
+ } catch (error) {
454
+ console.warn('SolanaWebsocketMonitor staking refresh failed after confirmed tx', {
455
+ address,
456
+ walletAccount,
457
+ txId: stakingTx.txId,
458
+ error,
459
+ })
460
+ }
451
461
 
452
462
  return
453
463
  }
package/src/tx-parser.js CHANGED
@@ -27,6 +27,7 @@ export const parseTransaction = (
27
27
  const ownerIsFeePayer = feePayerPubkey === ownerAddress
28
28
  const signers = accountKeys.filter((key) => key.signer).map((key) => key.pubkey)
29
29
  const txId = txDetails.transaction.signatures[0]
30
+ const transactionHasError = txDetails.meta.err != null
30
31
 
31
32
  const getUnparsedTx = () => {
32
33
  const ownerIndex = accountKeys.findIndex((accountKey) => accountKey.pubkey === ownerAddress)
@@ -87,7 +88,7 @@ export const parseTransaction = (
87
88
  return {
88
89
  id: txId,
89
90
  slot: txDetails.slot,
90
- error: !(txDetails.meta.err === null),
91
+ error: transactionHasError,
91
92
  ownerIsFeePayer,
92
93
  signers,
93
94
  owner,
@@ -365,7 +366,7 @@ export const parseTransaction = (
365
366
  tx.tokenTxs = tokenTxs.map((tx) => ({
366
367
  id: txId,
367
368
  slot: txDetails.slot,
368
- error: !(txDetails.meta.err === null),
369
+ error: transactionHasError,
369
370
  ownerIsFeePayer,
370
371
  signers,
371
372
  ...tx,
@@ -434,7 +435,7 @@ export const parseTransaction = (
434
435
  return {
435
436
  id: txId,
436
437
  slot: txDetails.slot,
437
- error: !(txDetails.meta.err === null),
438
+ error: transactionHasError,
438
439
  ownerIsFeePayer,
439
440
  signers,
440
441
  ...tx,