@exodus/assets-feature 9.0.0 → 9.1.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 +16 -0
- package/api/index.d.ts +1 -0
- package/client/asset-client-interface.js +9 -0
- package/index.d.ts +1 -0
- package/module/assets-module.d.ts +37 -0
- package/module/assets-module.js +27 -3
- package/package.json +15 -14
- package/plugin/index.js +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
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
|
+
## [9.1.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/assets-feature@9.0.1...@exodus/assets-feature@9.1.0) (2026-04-14)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- feat(assets): add tags parameter to searchTokens (#15984)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- fix: add protection from malformed remote asset config during startup (#15650)
|
|
15
|
+
|
|
16
|
+
## [9.0.1](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/assets-feature@9.0.0...@exodus/assets-feature@9.0.1) (2026-02-20)
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
- fix(assets-feature): skip gap limit scanning for freshly created wallets (#15311)
|
|
21
|
+
|
|
6
22
|
## [9.0.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/assets-feature@8.8.0...@exodus/assets-feature@9.0.0) (2026-02-16)
|
|
7
23
|
|
|
8
24
|
### Features
|
package/api/index.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ class AssetClientInterface {
|
|
|
19
19
|
#transactionSigner
|
|
20
20
|
#walletAccountsAtom
|
|
21
21
|
#multisigAtom
|
|
22
|
+
#freshlyCreated = false
|
|
22
23
|
|
|
23
24
|
constructor({
|
|
24
25
|
addressProvider,
|
|
@@ -50,6 +51,10 @@ class AssetClientInterface {
|
|
|
50
51
|
this.#multisigAtom = multisigAtom
|
|
51
52
|
}
|
|
52
53
|
|
|
54
|
+
setFreshlyCreated = (value) => {
|
|
55
|
+
this.#freshlyCreated = value
|
|
56
|
+
}
|
|
57
|
+
|
|
53
58
|
createLogger = (namespace) => {
|
|
54
59
|
return this.#createLogger(namespace)
|
|
55
60
|
}
|
|
@@ -176,6 +181,10 @@ class AssetClientInterface {
|
|
|
176
181
|
const confirmationsNumber = await this.getConfirmationsNumber({ assetName })
|
|
177
182
|
const out = { confirmationsNumber }
|
|
178
183
|
|
|
184
|
+
if (this.#freshlyCreated) {
|
|
185
|
+
out.gapLimit = 0
|
|
186
|
+
}
|
|
187
|
+
|
|
179
188
|
const gapLimit =
|
|
180
189
|
this.#config?.compatibilityModeGapLimits?.[walletAccountInstance.compatibilityMode]
|
|
181
190
|
if (typeof gapLimit === 'number') {
|
package/index.d.ts
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { BaseAsset, TokenAsset, CombinedAsset } from '@exodus/asset-types'
|
|
2
|
+
|
|
3
|
+
type Asset = BaseAsset | TokenAsset | CombinedAsset
|
|
4
|
+
type TokenDefinition = Record<string, unknown>
|
|
5
|
+
|
|
6
|
+
export declare class AssetsModule {
|
|
7
|
+
initialize(params: {
|
|
8
|
+
assetClientInterface: unknown
|
|
9
|
+
assetsConfig?: Record<string, { config?: Record<string, unknown> }>
|
|
10
|
+
}): void
|
|
11
|
+
|
|
12
|
+
getAssets(): Record<string, Asset>
|
|
13
|
+
|
|
14
|
+
getAsset(assetName: string): Asset | undefined
|
|
15
|
+
|
|
16
|
+
getTokenNames(baseAssetName: string): string[]
|
|
17
|
+
|
|
18
|
+
getBaseAssetNames(): string[]
|
|
19
|
+
|
|
20
|
+
load(): Promise<void>
|
|
21
|
+
|
|
22
|
+
fetchToken(assetId: string, baseAssetName: string): Promise<TokenDefinition>
|
|
23
|
+
|
|
24
|
+
fetchTokens(assetDescriptors: { assetId: string; baseAssetName: string }[]): Promise<Asset[]>
|
|
25
|
+
|
|
26
|
+
addToken(assetId: string, baseAssetName: string): Promise<Asset>
|
|
27
|
+
|
|
28
|
+
addTokens(params: {
|
|
29
|
+
assetIds: string[]
|
|
30
|
+
baseAssetName: string
|
|
31
|
+
allowedStatusList?: string[]
|
|
32
|
+
}): Promise<Asset[]>
|
|
33
|
+
|
|
34
|
+
addRemoteTokens(params: { tokenNames: string[]; allowedStatusList?: string[] }): Promise<string[]>
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export default AssetsModule
|
package/module/assets-module.js
CHANGED
|
@@ -140,8 +140,23 @@ export class AssetsModule {
|
|
|
140
140
|
const { assetsConfig: defaultAssetsConfig = Object.create(null) } = this.#config
|
|
141
141
|
const assetsList = Object.entries(this.#assetPlugins)
|
|
142
142
|
.map(([name, assetPlugin]) => {
|
|
143
|
-
|
|
144
|
-
|
|
143
|
+
let asset
|
|
144
|
+
|
|
145
|
+
try {
|
|
146
|
+
const config = { ...defaultAssetsConfig[name], ...assetsConfig?.[name]?.config }
|
|
147
|
+
asset = assetPlugin.createAsset({ assetClientInterface, config })
|
|
148
|
+
} catch (e) {
|
|
149
|
+
this.#logger.error(
|
|
150
|
+
`failed to createAsset ${name} using custom assetsConfig: ${e.message}, using default configuration`,
|
|
151
|
+
e
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
asset = assetPlugin.createAsset({
|
|
155
|
+
assetClientInterface,
|
|
156
|
+
config: defaultAssetsConfig[name],
|
|
157
|
+
})
|
|
158
|
+
}
|
|
159
|
+
|
|
145
160
|
if (asset.name === name) return asset
|
|
146
161
|
console.warn(`Incorrectly referenced supported asset ${name}. Expected ${asset.name}.`)
|
|
147
162
|
})
|
|
@@ -460,6 +475,7 @@ export class AssetsModule {
|
|
|
460
475
|
baseAssetName,
|
|
461
476
|
lifecycleStatus,
|
|
462
477
|
query,
|
|
478
|
+
tags,
|
|
463
479
|
excludeTags = ['offensive'],
|
|
464
480
|
pageNumber,
|
|
465
481
|
pageSize,
|
|
@@ -482,7 +498,15 @@ export class AssetsModule {
|
|
|
482
498
|
|
|
483
499
|
const tokens = await this.#fetch(
|
|
484
500
|
'search',
|
|
485
|
-
{
|
|
501
|
+
{
|
|
502
|
+
baseAssetName: baseAssetNames,
|
|
503
|
+
lifecycleStatus,
|
|
504
|
+
query,
|
|
505
|
+
tags,
|
|
506
|
+
excludeTags,
|
|
507
|
+
pageNumber,
|
|
508
|
+
pageSize,
|
|
509
|
+
},
|
|
486
510
|
'tokens'
|
|
487
511
|
)
|
|
488
512
|
const validTokens = tokens.filter(this.#isValidCustomToken)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exodus/assets-feature",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.1.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "This Exodus SDK feature provides access to instances of all blockchain asset adapters supported by the wallet, and enables you to search for and add custom tokens at runtime.",
|
|
6
6
|
"type": "module",
|
|
@@ -37,10 +37,11 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@exodus/asset-legacy-token-name-mapping": "^1.4.0",
|
|
39
39
|
"@exodus/asset-lib": "^5.3.0",
|
|
40
|
-
"@exodus/asset-schema-validation": "^1.0
|
|
40
|
+
"@exodus/asset-schema-validation": "^1.2.0",
|
|
41
|
+
"@exodus/asset-types": "^0.3.0",
|
|
41
42
|
"@exodus/assets": "^11.3.0",
|
|
42
|
-
"@exodus/atoms": "^
|
|
43
|
-
"@exodus/basic-utils": "^
|
|
43
|
+
"@exodus/atoms": "^10.3.3",
|
|
44
|
+
"@exodus/basic-utils": "^5.0.0",
|
|
44
45
|
"@exodus/fetch": "^1.3.0",
|
|
45
46
|
"@exodus/fusion-atoms": "^1.4.0",
|
|
46
47
|
"@exodus/timer": "^1.1.2",
|
|
@@ -55,12 +56,12 @@
|
|
|
55
56
|
"@exodus/bip39": "^1.1.0",
|
|
56
57
|
"@exodus/bip44-constants": "^195.0.0",
|
|
57
58
|
"@exodus/bitcoin-meta": "^2.0.0",
|
|
58
|
-
"@exodus/bitcoin-plugin": "^
|
|
59
|
-
"@exodus/bitcoinregtest-plugin": "^
|
|
60
|
-
"@exodus/bitcointestnet-plugin": "^
|
|
61
|
-
"@exodus/blockchain-metadata": "^17.1.
|
|
59
|
+
"@exodus/bitcoin-plugin": "^2.0.0",
|
|
60
|
+
"@exodus/bitcoinregtest-plugin": "^2.0.0",
|
|
61
|
+
"@exodus/bitcointestnet-plugin": "^2.0.0",
|
|
62
|
+
"@exodus/blockchain-metadata": "^17.1.1",
|
|
62
63
|
"@exodus/cardano-lib": "^4.0.0",
|
|
63
|
-
"@exodus/combined-assets-meta": "^3.
|
|
64
|
+
"@exodus/combined-assets-meta": "^3.7.0",
|
|
64
65
|
"@exodus/cosmos-plugin": "^1.3.3",
|
|
65
66
|
"@exodus/ethereum-lib": "^5.0.0",
|
|
66
67
|
"@exodus/ethereum-meta": "^2.0.0",
|
|
@@ -68,12 +69,12 @@
|
|
|
68
69
|
"@exodus/fusion-local": "^2.1.0",
|
|
69
70
|
"@exodus/keychain": "^9.0.3",
|
|
70
71
|
"@exodus/logger": "^1.2.3",
|
|
71
|
-
"@exodus/models": "^
|
|
72
|
+
"@exodus/models": "^13.2.0",
|
|
72
73
|
"@exodus/osmosis-plugin": "^1.3.3",
|
|
73
74
|
"@exodus/public-key-provider": "^4.2.1",
|
|
74
|
-
"@exodus/redux-dependency-injection": "^4.
|
|
75
|
-
"@exodus/storage-memory": "^2.
|
|
76
|
-
"@exodus/wallet-accounts": "^20.
|
|
75
|
+
"@exodus/redux-dependency-injection": "^4.2.0",
|
|
76
|
+
"@exodus/storage-memory": "^2.4.0",
|
|
77
|
+
"@exodus/wallet-accounts": "^20.4.3",
|
|
77
78
|
"@exodus/wild-emitter": "^1.0.0",
|
|
78
79
|
"events": "^3.3.0",
|
|
79
80
|
"msw": "^2.0.0",
|
|
@@ -83,5 +84,5 @@
|
|
|
83
84
|
"access": "public",
|
|
84
85
|
"provenance": false
|
|
85
86
|
},
|
|
86
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "b58f4d5c33731861e8613ff3321f55a54463267b"
|
|
87
88
|
}
|
package/plugin/index.js
CHANGED
|
@@ -43,7 +43,12 @@ const createAssetsPlugin = ({
|
|
|
43
43
|
return result?.config?.assets
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
const onCreate = () => {
|
|
47
|
+
assetClientInterface.setFreshlyCreated(true)
|
|
48
|
+
}
|
|
49
|
+
|
|
46
50
|
const onImport = async () => {
|
|
51
|
+
assetClientInterface.setFreshlyCreated(false)
|
|
47
52
|
const assetsConfig = await getRemoteAssetsConfig()
|
|
48
53
|
assetsModule.initialize({ assetClientInterface, assetsConfig })
|
|
49
54
|
}
|
|
@@ -103,6 +108,7 @@ const createAssetsPlugin = ({
|
|
|
103
108
|
}
|
|
104
109
|
|
|
105
110
|
return {
|
|
111
|
+
onCreate,
|
|
106
112
|
onImport: Object.defineProperty(onImport, 'priority', { value: 1, writable: false }),
|
|
107
113
|
onStart: Object.defineProperty(onStart, 'priority', { value: 1, writable: false }),
|
|
108
114
|
onLoad,
|