From 48cf55596162f68833f4cea49364a9dd5a845362 Mon Sep 17 00:00:00 2001 From: Travis Vachon Date: Wed, 29 Nov 2023 03:00:01 -0800 Subject: [PATCH] fix: fix IndexedDB reset function (#1199) Thanks to @zhanleewo for the patch! I've added a test to verify this fixes the issue. --------- Co-authored-by: Edward <1725457+zhanleewo@users.noreply.github.com> --- packages/access-client/src/drivers/indexeddb.js | 4 +++- .../test/stores/store-indexeddb.browser.test.js | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/access-client/src/drivers/indexeddb.js b/packages/access-client/src/drivers/indexeddb.js index 2a77a0d8d..6991d4afe 100644 --- a/packages/access-client/src/drivers/indexeddb.js +++ b/packages/access-client/src/drivers/indexeddb.js @@ -142,7 +142,7 @@ export class IndexedDBDriver { async reset() { const db = await this.#getOpenDB() - withObjectStore(db, 'readwrite', this.#dbStoreName, (s) => { + const clear = withObjectStore(db, 'readwrite', this.#dbStoreName, (s) => { /** @type {import('p-defer').DeferredPromise} */ const { resolve, reject, promise } = defer() const req = s.clear() @@ -156,6 +156,8 @@ export class IndexedDBDriver { return promise }) + + await clear() } } diff --git a/packages/access-client/test/stores/store-indexeddb.browser.test.js b/packages/access-client/test/stores/store-indexeddb.browser.test.js index cb58dacea..06a4bb132 100644 --- a/packages/access-client/test/stores/store-indexeddb.browser.test.js +++ b/packages/access-client/test/stores/store-indexeddb.browser.test.js @@ -101,4 +101,20 @@ describe('IndexedDB store', () => { assert.equal(del1.capabilities[0].can, del0.capabilities[0].can) assert.equal(del1.capabilities[0].with, del0.capabilities[0].with) }) + + it('should be resettable', async () => { + const principal = await RSASigner.generate({ extractable: false }) + const data = await AgentData.create({ principal }) + + const store = new StoreIndexedDB('test-access-db-' + Date.now()) + await store.open() + await store.save(data.export()) + + const exportData = await store.load() + assert.equal(exportData?.principal.id, principal.did()) + + await store.reset() + const resetExportData = await store.load() + assert.equal(resetExportData?.principal.id, undefined) + }) })