@exodus/balances 4.0.0 → 6.0.0

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,27 @@
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
+ ## [6.0.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/balances@5.0.0...@exodus/balances@6.0.0) (2023-04-25)
7
+
8
+ ### ⚠ BREAKING CHANGES
9
+
10
+ - replace emit with atom in balances module (#1349)
11
+
12
+ ### Features
13
+
14
+ - add balancesAtom definition ([#1362](https://github.com/ExodusMovement/exodus-hydra/issues/1362)) ([4d126ef](https://github.com/ExodusMovement/exodus-hydra/commit/4d126efef79655178ec1e1faf65b347497ad8647))
15
+ - replace emit with atom in balances module ([#1349](https://github.com/ExodusMovement/exodus-hydra/issues/1349)) ([f9110f8](https://github.com/ExodusMovement/exodus-hydra/commit/f9110f8e9e76b8b199bc4d40461cb1bed3a5be1e))
16
+
17
+ ## [5.0.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/balances@4.0.0...@exodus/balances@5.0.0) (2023-03-14)
18
+
19
+ ### ⚠ BREAKING CHANGES
20
+
21
+ - **blockchain-metadata:** export from `module` (#911)
22
+
23
+ ### Code Refactoring
24
+
25
+ - **blockchain-metadata:** export from `module` ([#911](https://github.com/ExodusMovement/exodus-hydra/issues/911)) ([4061ee9](https://github.com/ExodusMovement/exodus-hydra/commit/4061ee96c11cabd841e51a96daf302cca1240fbc))
26
+
6
27
  ## [4.0.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/balances@3.0.0...@exodus/balances@4.0.0) (2023-02-02)
7
28
 
8
29
  ### ⚠ BREAKING CHANGES
@@ -0,0 +1,5 @@
1
+ import { createInMemoryAtom } from '@exodus/atoms'
2
+
3
+ const createBalancesAtom = () => createInMemoryAtom()
4
+
5
+ export default createBalancesAtom
package/atoms/index.js ADDED
@@ -0,0 +1,8 @@
1
+ import createBalancesAtom from './balances'
2
+
3
+ export const balancesAtomDefinition = {
4
+ id: 'balancesAtom',
5
+ type: 'atom',
6
+ factory: createBalancesAtom,
7
+ dependencies: [],
8
+ }
package/module/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { isNumberUnit } from '@exodus/currency'
2
2
  import { TxSet } from '@exodus/models'
3
3
  import ExodusModule from '@exodus/module'
4
- import { cloneDeepWith, difference, isEmpty, merge, set, zipObject } from 'lodash'
4
+ import { cloneDeepWith, isEmpty, merge, set, zipObject } from 'lodash'
5
+ import { difference, flattenToPaths } from '@exodus/basic-utils'
5
6
  import makeConcurrent from 'make-concurrent'
6
7
  import getConfirmedBalance from './confirmed-balance'
7
- import { assetSourceEntries } from '@exodus/blockchain-metadata'
8
8
 
9
9
  const cloneBalances = (balances) =>
10
10
  cloneDeepWith(balances, (val) => {
@@ -23,11 +23,12 @@ class Balances extends ExodusModule {
23
23
  #assetsModule
24
24
  #blockchainMetadata
25
25
  #balanceFields
26
- #walletAccounts = null // string[]
26
+ #walletAccounts = [] // string[]
27
27
  #ready = false
28
28
 
29
29
  #oldBalances = Object.create(null)
30
30
  #balances = Object.create(null)
31
+ #balancesAtom
31
32
 
32
33
  constructor({
33
34
  assetsModule,
@@ -35,12 +36,14 @@ class Balances extends ExodusModule {
35
36
  walletAccountsAtom,
36
37
  config: { balanceFields },
37
38
  logger,
39
+ balancesAtom,
38
40
  }) {
39
41
  super({ name: MODULE_ID, logger })
40
42
 
41
43
  this.#assetsModule = assetsModule
42
44
  this.#blockchainMetadata = blockchainMetadata
43
45
  this.#balanceFields = balanceFields
46
+ this.#balancesAtom = balancesAtom
44
47
 
45
48
  const shareQueue =
46
49
  (fn) =>
@@ -64,10 +67,14 @@ class Balances extends ExodusModule {
64
67
  })
65
68
 
66
69
  blockchainMetadata.on('account-states-update', (payload) =>
67
- assetSourceEntries(payload, 'account-state').forEach(this.#handleAccountStateUpdate)
70
+ flattenToPaths(payload).forEach(([walletAccount, assetName, accountState]) =>
71
+ this.#handleAccountStateUpdate({ walletAccount, assetName, accountState })
72
+ )
68
73
  )
69
74
  blockchainMetadata.on('tx-logs-update', (payload) =>
70
- assetSourceEntries(payload, 'tx-log').forEach(this.#handleTxLogUpdate)
75
+ flattenToPaths(payload).forEach(([walletAccount, assetName, txLog]) =>
76
+ this.#handleTxLogUpdate({ walletAccount, assetName, txLog })
77
+ )
71
78
  )
72
79
  })
73
80
 
@@ -185,7 +192,7 @@ class Balances extends ExodusModule {
185
192
  this._logger.log('recomputing after adding walletAccounts', added)
186
193
  this.#recompute({ walletAccounts: added })
187
194
  } else {
188
- this.sync()
195
+ this.#flush()
189
196
  }
190
197
  }
191
198
 
@@ -264,7 +271,7 @@ class Balances extends ExodusModule {
264
271
  })
265
272
 
266
273
  const changes = Object.create(null)
267
- for (let subAssetName in newBalances) {
274
+ for (const subAssetName in newBalances) {
268
275
  const { currency } = this.#getAsset(subAssetName)
269
276
  const newAssetBalances = newBalances?.[subAssetName]
270
277
  // e.g. totalBalance or spendableBalance
@@ -284,23 +291,23 @@ class Balances extends ExodusModule {
284
291
  }
285
292
  }
286
293
 
287
- if (!isEmpty(changes)) this.sync({ changes })
294
+ if (!isEmpty(changes)) this.#flush({ changes })
288
295
  }
289
296
 
290
297
  #recompute = async ({ walletAccounts = this.#walletAccounts } = {}) => {
291
298
  this.#reset({ walletAccounts })
292
299
  await Promise.all(walletAccounts.map((walletAccount) => this.#load({ walletAccount })))
293
- this.sync()
300
+ this.#flush()
294
301
  }
295
302
 
296
- sync = ({ changes } = {}) => {
303
+ #flush = ({ changes } = {}) => {
297
304
  const oldBalances = this.#oldBalances
298
305
  const balances = cloneBalances(this.#balances)
299
306
 
300
307
  if (Object.keys(balances).length === 0) return // wait till `load` finished
301
308
 
302
309
  this._logger.log('balances updated')
303
- this.emit('balances', {
310
+ this.#balancesAtom.set({
304
311
  balances,
305
312
  oldBalances,
306
313
  changes,
@@ -316,5 +323,12 @@ export default {
316
323
  id: MODULE_ID,
317
324
  type: 'module',
318
325
  factory: createBalances,
319
- dependencies: ['assetsModule', 'blockchainMetadata', 'walletAccountsAtom', 'config', 'logger'],
326
+ dependencies: [
327
+ 'assetsModule',
328
+ 'blockchainMetadata',
329
+ 'walletAccountsAtom',
330
+ 'config',
331
+ 'logger',
332
+ 'balancesAtom',
333
+ ],
320
334
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exodus/balances",
3
- "version": "4.0.0",
3
+ "version": "6.0.0",
4
4
  "description": "balances",
5
5
  "author": "Exodus Movement Inc",
6
6
  "license": "UNLICENSED",
@@ -25,18 +25,18 @@
25
25
  "url": "https://github.com/ExodusMovement/exodus-hydra/issues?q=is%3Aissue+is%3Aopen+label%3Abalances"
26
26
  },
27
27
  "dependencies": {
28
+ "@exodus/atoms": "^3.5.0",
29
+ "@exodus/basic-utils": "^2.0.0",
28
30
  "@exodus/currency": "^2.1.2",
29
31
  "@exodus/module": "^1.1.0",
30
32
  "lodash": "^4.17.21",
31
33
  "make-concurrent": "^4.0.0"
32
34
  },
33
35
  "peerDependencies": {
34
- "@exodus/blockchain-metadata": "*"
36
+ "@exodus/blockchain-metadata": "^6.0.0"
35
37
  },
36
38
  "devDependencies": {
37
- "@exodus/atoms": "^2.3.0",
38
- "@exodus/basic-utils": "^1.0.0",
39
- "@exodus/blockchain-metadata": "*",
39
+ "@exodus/blockchain-metadata": "^8.0.0",
40
40
  "@exodus/models": "^8.9.0",
41
41
  "@exodus/storage-memory": "*",
42
42
  "@exodus/wallet-accounts": "*",
@@ -44,5 +44,5 @@
44
44
  "events": "^3.3.0",
45
45
  "jest": "^29.1.2"
46
46
  },
47
- "gitHead": "a72d79cc75c6c02876d745a498bf28b256d7f99e"
47
+ "gitHead": "6ecd3fa19c39610e7147b2d060ea64709f6c8c6e"
48
48
  }