Skip to content
This repository was archived by the owner on Oct 7, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,7 @@ class KeyringController extends EventEmitter {
* Deallocates all currently managed keyrings and accounts.
* Used before initializing a new vault.
*/

/* eslint-disable require-await */
async clearKeyrings() {
// clear keyrings from memory
Expand Down Expand Up @@ -757,6 +758,24 @@ class KeyringController extends EventEmitter {
this.memStore.updateState({ isUnlocked: true });
this.emit('unlock');
}

/**
* Forget hardware keyring
*
* Forget hardware and update memorized state.
* @param {Keyring} keyring
*/
forgetKeyring(keyring) {
if (keyring.forgetDevice) {
keyring.forgetDevice();
this.persistAllKeyrings.bind(this)();
this._updateMemStoreKeyrings.bind(this)();
} else {
throw new Error(
`KeyringController - keyring does not have method "forgetDevice", keyring type: ${keyring.type}`,
);
}
}
}

module.exports = KeyringController;
23 changes: 23 additions & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -280,4 +280,27 @@ describe('KeyringController', function () {
expect(privateAppKey).not.toBe(privateKey);
});
});

describe('forgetHardwareDevice', function () {
it('throw when keyring is not hardware device', async function () {
const privateKey =
'0xb8a9c05beeedb25df85f8d641538cbffedf67216048de9c678ee26260eb91952';
const keyring = await keyringController.addNewKeyring('Simple Key Pair', [
privateKey,
]);
expect(keyringController.keyrings).toHaveLength(2);
expect(() => keyringController.forgetKeyring(keyring)).toThrow(
new Error(
'KeyringController - keyring does not have method "forgetDevice", keyring type: Simple Key Pair',
),
);
});

it('forget hardware device', async function () {
const hdKeyring = keyringController.getKeyringsByType('HD Key Tree');
hdKeyring.forgetDevice = sinon.spy();
keyringController.forgetKeyring(hdKeyring);
expect(hdKeyring.forgetDevice.calledOnce).toBe(true);
});
});
});