Skip to content

Commit 35845b5

Browse files
authored
Merge pull request #1083 from input-output-hk/fix/wallet-manager-deactivate-emit-persist
fix(web-extension): delete active wallet from storage and emit null
2 parents dff9dcf + 64bf9c0 commit 35845b5

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

packages/web-extension/src/walletManager/walletManager.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ export class WalletManager<WalletMetadata extends { name: string }, AccountMetad
160160
/** Deactivate wallet. Wallet observable properties will emit only after a new wallet is {@link activate}ed. */
161161
async deactivate(): Promise<void> {
162162
this.#deactivateWallet();
163+
await this.#managerStorage.remove(this.#managerStorageKey);
164+
this.activeWalletId$.next(null);
163165
}
164166

165167
/** Deactivates the active. */

packages/web-extension/test/walletManager/walletManager.test.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { HexBlob, InvalidArgumentError, isNotNil } from '@cardano-sdk/util';
1616
import { MinimalRuntime } from '../../src/messaging';
1717
import { ObservableWallet, storage } from '@cardano-sdk/wallet';
1818
import { Storage } from 'webextension-polyfill';
19-
import { TimeoutError, filter, firstValueFrom, from, timeout } from 'rxjs';
19+
import { TimeoutError, filter, firstValueFrom, from, skip, timeout } from 'rxjs';
2020
import { logger } from '@cardano-sdk/util-dev';
2121
import pick from 'lodash/pick';
2222

@@ -33,6 +33,7 @@ jest.mock('../../src/messaging', () => {
3333
const createInMemoryStorage = () => {
3434
const store: Record<string, any> = {};
3535
return {
36+
clear: jest.fn(),
3637
get: async (keyOrKeys) =>
3738
typeof keyOrKeys === 'object'
3839
? Array.isArray(keyOrKeys)
@@ -41,6 +42,15 @@ const createInMemoryStorage = () => {
4142
: keyOrKeys
4243
? pick(store, keyOrKeys)
4344
: {},
45+
remove: jest.fn(async (keyOrKeys) => {
46+
if (Array.isArray(keyOrKeys)) {
47+
for (const key of keyOrKeys) {
48+
delete store[key];
49+
}
50+
} else {
51+
delete store[keyOrKeys];
52+
}
53+
}),
4454
set: async (items) => {
4555
Object.assign(store, items);
4656
}
@@ -230,6 +240,17 @@ describe('WalletManager', () => {
230240
});
231241
});
232242

243+
describe('deactivate', () => {
244+
it('deletes lastActivateProps from storage and emits null from activeWalletId$', async () => {
245+
walletManager = await createWalletManager();
246+
await walletManager.activate({ accountIndex: 0, chainId, walletId });
247+
const activeWalletId = firstValueFrom(walletManager.activeWallet$.pipe(skip(1)));
248+
await walletManager.deactivate();
249+
expect(managerStorage.remove).toBeCalledTimes(1);
250+
await expect(activeWalletId).resolves.toBeNull();
251+
});
252+
});
253+
233254
describe('initialize', () => {
234255
it('does nothing before wallet is activated for the 1st time', async () => {
235256
await walletManager.initialize();

0 commit comments

Comments
 (0)