@exodus/headless 3.1.0 → 3.1.1

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,12 @@
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.1.1](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/headless@3.1.0...@exodus/headless@3.1.1) (2024-01-29)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **headless:** lockedAtom writes ([#5555](https://github.com/ExodusMovement/exodus-hydra/issues/5555)) ([aa24ca0](https://github.com/ExodusMovement/exodus-hydra/commit/aa24ca03d07e5b47ef2d1bd08de22a569496c6a2))
11
+
6
12
  ## [3.1.0](https://github.com/ExodusMovement/exodus-hydra/compare/@exodus/headless@3.0.0...@exodus/headless@3.1.0) (2024-01-27)
7
13
 
8
14
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exodus/headless",
3
- "version": "3.1.0",
3
+ "version": "3.1.1",
4
4
  "description": "The platform-agnostic Exodus wallet SDK",
5
5
  "author": "Exodus Movement Inc.",
6
6
  "main": "src/index.js",
@@ -44,7 +44,7 @@
44
44
  "@exodus/geolocation": "^4.1.0",
45
45
  "@exodus/hd-key-slip-10": "^2.0.0",
46
46
  "@exodus/key-identifier-provider": "^1.4.0",
47
- "@exodus/keychain": "^4.3.0",
47
+ "@exodus/keychain": "^5.0.1",
48
48
  "@exodus/locale": "^2.0.2",
49
49
  "@exodus/module": "^1.2.2",
50
50
  "@exodus/pricing": "^1.1.0",
@@ -102,5 +102,5 @@
102
102
  "msw": "^2.0.0",
103
103
  "p-defer": "^4.0.0"
104
104
  },
105
- "gitHead": "38053d333d27638496b513254340e94a230d86fc"
105
+ "gitHead": "5f285cee06abaf98437619a5a8aa5381b8eefc36"
106
106
  }
@@ -33,6 +33,7 @@ class Application extends ExodusModule {
33
33
  #hooks = {}
34
34
  #wallet = null
35
35
  #storage = null
36
+ #lockedAtom = null
36
37
  #backedUpAtom = null
37
38
  #passphraseCache = null
38
39
  #applicationStarted = null
@@ -41,6 +42,7 @@ class Application extends ExodusModule {
41
42
  constructor({
42
43
  wallet,
43
44
  unsafeStorage,
45
+ lockedAtom,
44
46
  backedUpAtom,
45
47
  passphraseCache = passphraseCachePlaceholder,
46
48
  logger,
@@ -48,6 +50,7 @@ class Application extends ExodusModule {
48
50
  super({ name: 'Application', logger })
49
51
 
50
52
  this.#wallet = wallet
53
+ this.#lockedAtom = lockedAtom
51
54
  this.#backedUpAtom = backedUpAtom
52
55
  this.#passphraseCache = passphraseCache
53
56
  this.#storage = unsafeStorage.namespace('flags')
@@ -216,6 +219,7 @@ class Application extends ExodusModule {
216
219
 
217
220
  await this.#applicationStarted
218
221
  await this.#wallet.lock(opts)
222
+ await this.#lockedAtom.set(true)
219
223
  await this.#passphraseCache.clear()
220
224
  await this.fire(Hook.Lock)
221
225
 
@@ -251,6 +255,7 @@ class Application extends ExodusModule {
251
255
  this._logger.log('unlocking with cache')
252
256
 
253
257
  await this.#wallet.unlock({ passphrase })
258
+ await this.#lockedAtom.set(false)
254
259
 
255
260
  await this.fire(Hook.Migrate)
256
261
  await this.fire(Hook.Unlock)
@@ -268,6 +273,7 @@ class Application extends ExodusModule {
268
273
 
269
274
  await this.#applicationStarted
270
275
  await this.#wallet.unlock({ passphrase })
276
+ await this.#lockedAtom.set(false)
271
277
 
272
278
  await this.fire(Hook.Migrate)
273
279
  await this.fire(Hook.Unlock)
@@ -4,7 +4,14 @@ const applicationDefinition = {
4
4
  id: 'application',
5
5
  type: 'module',
6
6
  factory: createApplication,
7
- dependencies: ['unsafeStorage', 'backedUpAtom', 'passphraseCache?', 'wallet', 'logger'],
7
+ dependencies: [
8
+ 'unsafeStorage',
9
+ 'backedUpAtom',
10
+ 'lockedAtom',
11
+ 'passphraseCache?',
12
+ 'wallet',
13
+ 'logger',
14
+ ],
8
15
  }
9
16
 
10
17
  export default applicationDefinition
@@ -30,14 +30,6 @@ const applicationLifecyclePlugin = ({
30
30
  await restoreAtom.set(false)
31
31
  }
32
32
 
33
- const onLock = async () => {
34
- await lockedAtom.set(true)
35
- }
36
-
37
- const onUnlock = async () => {
38
- await lockedAtom.set(false)
39
- }
40
-
41
33
  const onBackup = async () => {
42
34
  await backedUpAtom.set(true)
43
35
  }
@@ -50,7 +42,7 @@ const applicationLifecyclePlugin = ({
50
42
  await backedUpAtom.set(undefined)
51
43
  }
52
44
 
53
- return { onStart, onLoad, onImport, onAssetsSynced, onLock, onUnlock, onBackup, onStop, onClear }
45
+ return { onStart, onLoad, onImport, onAssetsSynced, onBackup, onStop, onClear }
54
46
  }
55
47
 
56
48
  const applicationLifecyclePluginDefinition = {
package/src/index.js CHANGED
@@ -22,6 +22,7 @@ import walletAccounts from '@exodus/wallet-accounts'
22
22
 
23
23
  import createApi from './api'
24
24
  import application from './application'
25
+ import createDependencies from './dependencies'
25
26
  import createIOC from './ioc'
26
27
  import attachMigrations from './migrations/attach'
27
28
  import attachPlugins from './plugins/attach'
@@ -52,6 +53,7 @@ const createExodus = ({ adapters, config, port, debug = false }) => {
52
53
  ioc.use(wallet())
53
54
  ioc.use(walletAccounts())
54
55
 
56
+ ioc.registerMultiple(createDependencies({ adapters, config }))
55
57
  ioc.register({ definition: { id: 'port', type: 'port', factory: () => port } })
56
58
 
57
59
  const resolve = () => {
package/src/ioc.js CHANGED
@@ -11,8 +11,6 @@ import performanceMonitor from '@exodus/dependency-preprocessors/src/preprocesso
11
11
  import readOnlyAtoms from '@exodus/dependency-preprocessors/src/preprocessors/read-only-atoms'
12
12
  import assert from 'minimalistic-assert'
13
13
 
14
- import createDependencies from './dependencies'
15
-
16
14
  const createIOC = ({ adapters, config, debug }) => {
17
15
  const { createLogger, unsafeStorage, performance = {} } = adapters
18
16
  const {
@@ -52,7 +50,7 @@ const createIOC = ({ adapters, config, debug }) => {
52
50
  debuggerPreprocessor({ debug, unsafeStorage }),
53
51
  ].filter(Boolean)
54
52
 
55
- const nodes = createDependencies({ adapters, config })
53
+ const nodes = []
56
54
 
57
55
  const registerMultiple = (dependencies) => {
58
56
  nodes.push(...dependencies)
@@ -1,13 +1,17 @@
1
1
  import { EXODUS_KEY_IDS } from '@exodus/keychain/module'
2
+ import sodium from '@exodus/sodium-crypto'
3
+
4
+ const WALLET_INFO_KEY = EXODUS_KEY_IDS.WALLET_INFO
2
5
 
3
6
  const createUnlockEncryptedStorage = ({ keychain }) => {
4
7
  return async (encryptedStorage) => {
5
- // should the key id be part of a `config` dep?
6
- const sodiumEncryptor = keychain.createSodiumEncryptor(EXODUS_KEY_IDS.WALLET_INFO)
8
+ // Fusion might write on storage even after keychain is locked, so we get keys
9
+ // directly instead of creating encryptor that does not preserves it anymore
10
+ const { privateKey } = await keychain.exportKey(WALLET_INFO_KEY, { exportPrivate: true })
7
11
 
8
12
  await encryptedStorage.unlock({
9
- encrypt: (data) => sodiumEncryptor.encryptSecretBox({ data }),
10
- decrypt: (data) => sodiumEncryptor.decryptSecretBox({ data }),
13
+ encrypt: (data) => sodium.encryptSecret(data, privateKey),
14
+ decrypt: (data) => sodium.decryptSecret(data, privateKey),
11
15
  })
12
16
  }
13
17
  }