@exodus/headless 5.0.0-rc.66 → 5.0.0-rc.68
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 +22 -0
- package/package.json +31 -30
- package/redux/index.js +16 -16
- package/src/api/index.js +2 -2
- package/src/api/reporting.js +4 -5
- package/src/dependencies/adapters.js +1 -1
- package/src/dependencies/atoms.js +1 -1
- package/src/dependencies/configs.js +1 -1
- package/src/dependencies/index.js +6 -6
- package/src/dependencies/modules.js +2 -2
- package/src/dependencies/plugins.js +3 -3
- package/src/features/cached-sodium-encryptor-rpc/index.js +1 -1
- package/src/features/keychain-rpc/index.js +1 -1
- package/src/utils/promises.js +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
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
|
+
## [5.0.0-rc.68](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/headless@5.0.0-rc.67...@exodus/headless@5.0.0-rc.68) (2025-06-09)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- fix: don't use npm: aliases for lodash (#12861)
|
|
11
|
+
|
|
12
|
+
## [5.0.0-rc.67](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/headless@5.0.0-rc.65...@exodus/headless@5.0.0-rc.67) (2025-06-03)
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
- feat: export Safe Reports when locked (#12670)
|
|
17
|
+
|
|
18
|
+
- feat: support Zod Nullable safe parsing (#12280)
|
|
19
|
+
|
|
20
|
+
- feat: switch headless to ESM (#12553)
|
|
21
|
+
|
|
22
|
+
### Bug Fixes
|
|
23
|
+
|
|
24
|
+
- fix: clear reporting race timeout on finish in headless (#12480)
|
|
25
|
+
|
|
26
|
+
- fix: update @exodus/errors (#12627)
|
|
27
|
+
|
|
6
28
|
## [5.0.0-rc.66](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/headless@5.0.0-rc.65...@exodus/headless@5.0.0-rc.66) (2025-05-09)
|
|
7
29
|
|
|
8
30
|
### Features
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exodus/headless",
|
|
3
|
-
"version": "5.0.0-rc.
|
|
3
|
+
"version": "5.0.0-rc.68",
|
|
4
4
|
"description": "The platform-agnostic Exodus wallet SDK",
|
|
5
5
|
"author": "Exodus Movement, Inc.",
|
|
6
|
+
"type": "module",
|
|
6
7
|
"main": "src/index.js",
|
|
7
8
|
"repository": {
|
|
8
9
|
"type": "git",
|
|
@@ -24,10 +25,10 @@
|
|
|
24
25
|
"scripts": {
|
|
25
26
|
"lint": "run -T eslint .",
|
|
26
27
|
"lint:fix": "yarn lint --fix",
|
|
27
|
-
"test": "yarn test:types && yarn test:single-process
|
|
28
|
-
"test:integration": "
|
|
29
|
-
"test:single-process": "
|
|
30
|
-
"test:multi-process": "MULTI_PROCESS=1
|
|
28
|
+
"test": "yarn test:types && yarn test:single-process && yarn test:multi-process",
|
|
29
|
+
"test:integration": "RUN_TESTS=integration run test",
|
|
30
|
+
"test:single-process": "run -T exodus-test --jest",
|
|
31
|
+
"test:multi-process": "MULTI_PROCESS=1 run test:single-process",
|
|
31
32
|
"test:types": "run -T tsc --noEmit"
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
@@ -40,11 +41,11 @@
|
|
|
40
41
|
"@exodus/available-assets": "^8.4.0",
|
|
41
42
|
"@exodus/balances": "^13.7.1",
|
|
42
43
|
"@exodus/basic-utils": "^4.0.0",
|
|
43
|
-
"@exodus/blockchain-metadata": "^15.
|
|
44
|
+
"@exodus/blockchain-metadata": "^15.11.1",
|
|
44
45
|
"@exodus/cached-sodium-encryptor": "^1.0.0",
|
|
45
46
|
"@exodus/enabled-assets": "^10.9.1",
|
|
46
|
-
"@exodus/error-tracking": "^
|
|
47
|
-
"@exodus/errors": "^
|
|
47
|
+
"@exodus/error-tracking": "^2.0.0",
|
|
48
|
+
"@exodus/errors": "^3.0.0",
|
|
48
49
|
"@exodus/feature-flags": "^6.1.0",
|
|
49
50
|
"@exodus/fee-data-monitors": "^5.0.3",
|
|
50
51
|
"@exodus/filesystem": "^1.2.1",
|
|
@@ -56,60 +57,60 @@
|
|
|
56
57
|
"@exodus/message-signer": "^1.4.2",
|
|
57
58
|
"@exodus/pricing": "^1.10.0",
|
|
58
59
|
"@exodus/public-key-provider": "^4.1.1",
|
|
59
|
-
"@exodus/rates-monitor": "^4.
|
|
60
|
-
"@exodus/remote-config": "^3.0.
|
|
60
|
+
"@exodus/rates-monitor": "^4.14.3",
|
|
61
|
+
"@exodus/remote-config": "^3.0.1",
|
|
61
62
|
"@exodus/restore-progress-tracker": "^3.7.2",
|
|
62
63
|
"@exodus/startup-counter": "^1.1.0",
|
|
63
64
|
"@exodus/tx-log-monitors": "^2.4.2",
|
|
64
65
|
"@exodus/tx-signer": "^2.3.4",
|
|
65
66
|
"@exodus/typeforce": "^1.18.1",
|
|
66
67
|
"@exodus/wallet": "^15.1.0",
|
|
67
|
-
"@exodus/wallet-accounts": "^17.
|
|
68
|
-
"lodash": "
|
|
68
|
+
"@exodus/wallet-accounts": "^17.6.1",
|
|
69
|
+
"lodash": "^4.17.21",
|
|
69
70
|
"minimalistic-assert": "^1.0.1",
|
|
70
71
|
"ms": "^2.1.3"
|
|
71
72
|
},
|
|
72
73
|
"devDependencies": {
|
|
73
74
|
"@exodus/ab-testing": "^7.7.1",
|
|
74
75
|
"@exodus/algorand-lib": "^2.0.1",
|
|
75
|
-
"@exodus/algorand-meta": "^
|
|
76
|
-
"@exodus/analytics": "^15.
|
|
76
|
+
"@exodus/algorand-meta": "^2.0.0",
|
|
77
|
+
"@exodus/analytics": "^15.4.0",
|
|
77
78
|
"@exodus/announcements": "^3.0.0",
|
|
78
79
|
"@exodus/app-process-mobile": "^3.8.0",
|
|
79
|
-
"@exodus/apy-rates": "^3.
|
|
80
|
+
"@exodus/apy-rates": "^3.6.0",
|
|
80
81
|
"@exodus/bip32": "^4.0.2",
|
|
82
|
+
"@exodus/bip39": "^1.0.2",
|
|
81
83
|
"@exodus/bitcoin-plugin": "^1.0.14",
|
|
82
84
|
"@exodus/connected-origins": "^4.3.0",
|
|
83
|
-
"@exodus/crypto
|
|
85
|
+
"@exodus/crypto": "^1.0.0-rc.22",
|
|
86
|
+
"@exodus/crypto-news-monitor": "^5.1.1",
|
|
84
87
|
"@exodus/deferring-storage": "^1.0.2",
|
|
85
88
|
"@exodus/dependency-types": "^2.1.1",
|
|
86
|
-
"@exodus/domain-serialization": "^1.
|
|
89
|
+
"@exodus/domain-serialization": "^1.6.0",
|
|
87
90
|
"@exodus/ethereum-lib": "^5.0.0",
|
|
88
91
|
"@exodus/ethereum-meta": "^2.4.1",
|
|
89
92
|
"@exodus/event-log": "^2.7.0",
|
|
90
93
|
"@exodus/fetch": "^1.2.1",
|
|
91
|
-
"@exodus/fetch-factory": "^2.
|
|
92
|
-
"@exodus/fiat-ramp": "^
|
|
94
|
+
"@exodus/fetch-factory": "^2.3.0",
|
|
95
|
+
"@exodus/fiat-ramp": "^13.1.0",
|
|
93
96
|
"@exodus/key-identifier": "^1.2.1",
|
|
94
|
-
"@exodus/kyc": "^7.
|
|
97
|
+
"@exodus/kyc": "^7.1.0",
|
|
95
98
|
"@exodus/logger": "^1.2.3",
|
|
96
|
-
"@exodus/market-history": "^10.2.
|
|
97
|
-
"@exodus/models": "^12.
|
|
98
|
-
"@exodus/nfts": "^9.
|
|
99
|
+
"@exodus/market-history": "^10.2.2",
|
|
100
|
+
"@exodus/models": "^12.13.0",
|
|
101
|
+
"@exodus/nfts": "^9.6.0",
|
|
99
102
|
"@exodus/personal-notes": "^3.8.0",
|
|
100
103
|
"@exodus/referrals": "^8.9.7",
|
|
101
104
|
"@exodus/sdk-rpc": "^1.0.0",
|
|
102
|
-
"@exodus/sodium-crypto": "^3.2.0",
|
|
103
105
|
"@exodus/solana-lib": "^3.6.0",
|
|
104
|
-
"@exodus/solana-meta": "^
|
|
105
|
-
"@exodus/storage-encrypted": "^1.
|
|
106
|
+
"@exodus/solana-meta": "^2.0.0",
|
|
107
|
+
"@exodus/storage-encrypted": "^1.5.0",
|
|
106
108
|
"@exodus/storage-memory": "^2.2.2",
|
|
107
|
-
"@exodus/top-movers-monitor": "^4.
|
|
109
|
+
"@exodus/top-movers-monitor": "^4.4.0",
|
|
108
110
|
"@exodus/ui-config": "^3.13.0",
|
|
109
|
-
"@exodus/wallet-sdk": "^1.
|
|
111
|
+
"@exodus/wallet-sdk": "^1.3.0",
|
|
110
112
|
"@exodus/wild-emitter": "^1.0.0",
|
|
111
113
|
"@exodus/zod": "^3.24.3",
|
|
112
|
-
"bip39": "^2.6.0",
|
|
113
114
|
"buffer-json": "^2.0.0",
|
|
114
115
|
"deepmerge": "^4.2.2",
|
|
115
116
|
"delay": "^5.0.0",
|
|
@@ -135,5 +136,5 @@
|
|
|
135
136
|
"publishConfig": {
|
|
136
137
|
"access": "public"
|
|
137
138
|
},
|
|
138
|
-
"gitHead": "
|
|
139
|
+
"gitHead": "cf0f67fcfccbd5c09dd68c4e080694fb7833cfeb"
|
|
139
140
|
}
|
package/redux/index.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import applicationRedux from '@exodus/application/redux'
|
|
2
|
-
import createReduxIOC from '@exodus/argo/redux'
|
|
3
|
-
import assetsRedux from '@exodus/assets-feature/redux'
|
|
4
|
-
import availableAssetsRedux from '@exodus/available-assets/redux'
|
|
5
|
-
import balancesRedux from '@exodus/balances/redux'
|
|
6
|
-
import accountStatesRedux from '@exodus/blockchain-metadata/redux/account-states'
|
|
7
|
-
import txLogsRedux from '@exodus/blockchain-metadata/redux/tx-logs'
|
|
8
|
-
import enabledAssetsRedux from '@exodus/enabled-assets/redux'
|
|
9
|
-
import featureflagsRedux from '@exodus/feature-flags/redux'
|
|
10
|
-
import feeDataRedux from '@exodus/fee-data-monitors/redux'
|
|
11
|
-
import geolocationRedux from '@exodus/geolocation/redux'
|
|
12
|
-
import localeRedux from '@exodus/locale/redux'
|
|
13
|
-
import ratesRedux from '@exodus/rates-monitor/redux'
|
|
14
|
-
import remoteConfigRedux from '@exodus/remote-config/lib/redux'
|
|
15
|
-
import restoreProgressRedux from '@exodus/restore-progress-tracker/redux'
|
|
16
|
-
import startupCounterRedux from '@exodus/startup-counter/redux'
|
|
17
|
-
import createWalletAccountsRedux from '@exodus/wallet-accounts/redux'
|
|
2
|
+
import createReduxIOC from '@exodus/argo/redux/index.js'
|
|
3
|
+
import assetsRedux from '@exodus/assets-feature/redux/index.js'
|
|
4
|
+
import availableAssetsRedux from '@exodus/available-assets/redux/index.js'
|
|
5
|
+
import balancesRedux from '@exodus/balances/redux/index.js'
|
|
6
|
+
import accountStatesRedux from '@exodus/blockchain-metadata/redux/account-states/index.js'
|
|
7
|
+
import txLogsRedux from '@exodus/blockchain-metadata/redux/tx-logs/index.js'
|
|
8
|
+
import enabledAssetsRedux from '@exodus/enabled-assets/redux/index.js'
|
|
9
|
+
import featureflagsRedux from '@exodus/feature-flags/redux/index.js'
|
|
10
|
+
import feeDataRedux from '@exodus/fee-data-monitors/redux/index.js'
|
|
11
|
+
import geolocationRedux from '@exodus/geolocation/redux/index.js'
|
|
12
|
+
import localeRedux from '@exodus/locale/redux/index.js'
|
|
13
|
+
import ratesRedux from '@exodus/rates-monitor/redux/index.js'
|
|
14
|
+
import remoteConfigRedux from '@exodus/remote-config/lib/redux/index.js'
|
|
15
|
+
import restoreProgressRedux from '@exodus/restore-progress-tracker/redux/index.js'
|
|
16
|
+
import startupCounterRedux from '@exodus/startup-counter/redux/index.js'
|
|
17
|
+
import createWalletAccountsRedux from '@exodus/wallet-accounts/redux/index.js'
|
|
18
18
|
|
|
19
19
|
function createExodusRedux({ createLogger, enhancer, reducers, actionCreators }) {
|
|
20
20
|
const ioc = createReduxIOC({ createLogger, enhancer, reducers, actionCreators })
|
package/src/api/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import assert from 'minimalistic-assert'
|
|
2
2
|
|
|
3
|
-
import createDebug from './debug'
|
|
4
|
-
import createReporting from './reporting'
|
|
3
|
+
import createDebug from './debug.js'
|
|
4
|
+
import createReporting from './reporting.js'
|
|
5
5
|
import { mapValues } from '@exodus/basic-utils'
|
|
6
6
|
|
|
7
7
|
const asyncify = (fn) => {
|
package/src/api/reporting.js
CHANGED
|
@@ -27,9 +27,6 @@ const createReporting = ({ ioc, config: { exportTimeout = 5000 } = {} }) => {
|
|
|
27
27
|
|
|
28
28
|
const getReports = async () => {
|
|
29
29
|
const [exists, locked] = await Promise.all([wallet.exists(), lockedAtom.get()])
|
|
30
|
-
if (exists && locked) {
|
|
31
|
-
throw new Error('Unable to export when locked')
|
|
32
|
-
}
|
|
33
30
|
|
|
34
31
|
const reports = Object.values(nodes)
|
|
35
32
|
|
|
@@ -40,7 +37,7 @@ const createReporting = ({ ioc, config: { exportTimeout = 5000 } = {} }) => {
|
|
|
40
37
|
|
|
41
38
|
const exportReport = async (report) => {
|
|
42
39
|
const start = performance.now()
|
|
43
|
-
const unvalidatedExport = await report.export({ walletExists: exists })
|
|
40
|
+
const unvalidatedExport = await report.export({ walletExists: exists, isLocked: locked })
|
|
44
41
|
const schema = report.getSchema?.()
|
|
45
42
|
if (!schema) {
|
|
46
43
|
throw new Error(`Validation schema is missing for ${report.namespace}.`)
|
|
@@ -53,9 +50,11 @@ const createReporting = ({ ioc, config: { exportTimeout = 5000 } = {} }) => {
|
|
|
53
50
|
}
|
|
54
51
|
|
|
55
52
|
const resolvedReports = await Promise.allSettled(
|
|
56
|
-
reports.map((report) => Promise.race([exportReport(report), timeoutPromise]))
|
|
53
|
+
reports.map((report) => Promise.race([exportReport(report), timeoutPromise.promise]))
|
|
57
54
|
)
|
|
58
55
|
|
|
56
|
+
timeoutPromise.clear()
|
|
57
|
+
|
|
59
58
|
const namespaces = reports.map((report) => report.namespace)
|
|
60
59
|
const data = resolvedReports.map((outcome) =>
|
|
61
60
|
outcome.status === 'fulfilled' ? outcome.value : { error: SafeError.from(outcome.reason) }
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
|
|
4
4
|
import assert from 'minimalistic-assert'
|
|
5
5
|
|
|
6
|
-
import createAdapterDependencies from './adapters'
|
|
7
|
-
import createAtomDependencies from './atoms'
|
|
8
|
-
import createConfigDependencies from './configs'
|
|
9
|
-
import createModuleDependencies from './modules'
|
|
10
|
-
import createPluginDependencies from './plugins'
|
|
11
|
-
import { wrapConstant } from './utils'
|
|
6
|
+
import createAdapterDependencies from './adapters.js'
|
|
7
|
+
import createAtomDependencies from './atoms.js'
|
|
8
|
+
import createConfigDependencies from './configs.js'
|
|
9
|
+
import createModuleDependencies from './modules.js'
|
|
10
|
+
import createPluginDependencies from './plugins.js'
|
|
11
|
+
import { wrapConstant } from './utils.js'
|
|
12
12
|
|
|
13
13
|
const adapterKeys = ['createLogger', 'legacyPrivToPub', 'unsafeStorage', 'fetch', 'freeze']
|
|
14
14
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import unlockEncryptedStorageDefinition from '../unlock-encrypted-storage'
|
|
2
|
-
import { withType } from './utils'
|
|
1
|
+
import unlockEncryptedStorageDefinition from '../unlock-encrypted-storage.js'
|
|
2
|
+
import { withType } from './utils.js'
|
|
3
3
|
|
|
4
4
|
const createModuleDependencies = () =>
|
|
5
5
|
[{ definition: unlockEncryptedStorageDefinition }].map(withType('module'))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import headlessAnalyticsPluginDefinition from '../plugins/analytics'
|
|
2
|
-
import headlessUiLifecyclePluginDefinition from '../plugins/headless-ui'
|
|
3
|
-
import logLifecyclePluginDefinition from '../plugins/log-lifecycle'
|
|
1
|
+
import headlessAnalyticsPluginDefinition from '../plugins/analytics.js'
|
|
2
|
+
import headlessUiLifecyclePluginDefinition from '../plugins/headless-ui.js'
|
|
3
|
+
import logLifecyclePluginDefinition from '../plugins/log-lifecycle.js'
|
|
4
4
|
|
|
5
5
|
const createPluginDependencies = () => [
|
|
6
6
|
{ definition: logLifecyclePluginDefinition },
|
package/src/utils/promises.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export const rejectAfter = (ms, reason) => {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
let timeout
|
|
3
|
+
const promise = new Promise((_resolve, reject) => {
|
|
4
|
+
timeout = setTimeout(() => {
|
|
4
5
|
reject(new Error(reason))
|
|
5
6
|
}, ms)
|
|
6
|
-
)
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
return { promise, clear: () => clearTimeout(timeout) }
|
|
7
10
|
}
|