From 7f4f5e8d69c94cf07a4c45c200f1cc7e7e1579ee Mon Sep 17 00:00:00 2001 From: ieow Date: Fri, 5 May 2023 15:30:44 +0800 Subject: [PATCH 1/2] feat: return device share; split function --- .../src/baseTypes/aggregateTypes.ts | 2 ++ packages/core/src/core.ts | 26 +++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index 84fb20ac..79c398c6 100644 --- a/packages/common-types/src/baseTypes/aggregateTypes.ts +++ b/packages/common-types/src/baseTypes/aggregateTypes.ts @@ -131,6 +131,8 @@ export type KeyDetails = { threshold: number; totalShares: number; shareDescriptions: ShareDescriptionMap; + deviceShare?: ShareStore; + userShare?: ShareStore; }; export type TKeyArgs = { diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index dec3aa07..0c5dd78b 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -252,9 +252,14 @@ class ThresholdKey implements ITKey { if (neverInitializeNewKey) { throw CoreError.default("key has not been generated yet"); } + + // no metadata set, assumes new user - await this._initializeNewKey({ initializeModules: true, importedKey: importKey, delete1OutOf1: p.delete1OutOf1 }); - return this.getKeyDetails(); + const newKeyDetails = await this._initializeNewKey({ initializeModules: true, importedKey: importKey, delete1OutOf1: p.delete1OutOf1 }); + const keyDetail = this.getKeyDetails(); + keyDetail.deviceShare = newKeyDetails.deviceShare; + keyDetail.userShare = newKeyDetails.userShare; + return keyDetail; } // else we continue with catching up share and metadata shareStore = ShareStore.fromJSON(rawServiceProviderShare); @@ -262,6 +267,23 @@ class ThresholdKey implements ITKey { throw CoreError.default("Input is not supported"); } + await this.postInit(shareStore, transitionMetadata, previouslyFetchedCloudMetadata, previousLocalMetadataTransitions); + } + + async postInit( + shareStore: ShareStore, + transitionMetadata?: Metadata, + previouslyFetchedCloudMetadata?: Metadata, + previousLocalMetadataTransitions?: LocalMetadataTransitions + ) { + const previousLocalMetadataTransitionsExists = + previousLocalMetadataTransitions && previousLocalMetadataTransitions[0].length > 0 && previousLocalMetadataTransitions[1].length > 0; + const reinitializing = transitionMetadata && previousLocalMetadataTransitionsExists; // are we reinitializing the SDK? + // in the case we're reinitializing whilst newKeyAssign has not been synced + const reinitializingWithNewKeyAssign = reinitializing && previouslyFetchedCloudMetadata === undefined; + + + // We determine the latest metadata on the SDK and if there has been // needed transitions to include let currentMetadata: Metadata; From bb7ba1334620e0f76311f0c681a519c693702e9b Mon Sep 17 00:00:00 2001 From: ieow Date: Fri, 5 May 2023 15:52:22 +0800 Subject: [PATCH 2/2] feat: remove opinionated storage --- .../src/baseTypes/aggregateTypes.ts | 1 - packages/core/src/core.ts | 18 ------------------ packages/web-storage/src/WebStorageModule.ts | 1 - 3 files changed, 20 deletions(-) diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index 79c398c6..b131f796 100644 --- a/packages/common-types/src/baseTypes/aggregateTypes.ts +++ b/packages/common-types/src/baseTypes/aggregateTypes.ts @@ -251,7 +251,6 @@ export interface ITKeyApi { }): Promise; _syncShareMetadata(adjustScopedStore?: (ss: unknown) => unknown): Promise; inputShareStoreSafe(shareStore: ShareStore, autoUpdateMetadata?: boolean): Promise; - _setDeviceStorage(storeDeviceStorage: (deviceShareStore: ShareStore) => Promise): void; addShareDescription(shareIndex: string, description: string, updateMetadata?: boolean): Promise; _addRefreshMiddleware( moduleName: string, diff --git a/packages/core/src/core.ts b/packages/core/src/core.ts index 0c5dd78b..95010ff4 100644 --- a/packages/core/src/core.ts +++ b/packages/core/src/core.ts @@ -81,8 +81,6 @@ class ThresholdKey implements ITKey { _shareSerializationMiddleware: ShareSerializationMiddleware; - storeDeviceShare: (deviceShareStore: ShareStore, customDeviceInfo?: StringifiedType) => Promise; - haveWriteMetadataLock: string; serverTimeOffset?: number = 0; @@ -99,7 +97,6 @@ class ThresholdKey implements ITKey { this._refreshMiddleware = {}; this._reconstructKeyMiddleware = {}; this._shareSerializationMiddleware = undefined; - this.storeDeviceShare = undefined; this._localMetadataTransitions = [[], []]; this.setModuleReferences(); // Providing ITKeyApi access to modules this.haveWriteMetadataLock = ""; @@ -252,7 +249,6 @@ class ThresholdKey implements ITKey { if (neverInitializeNewKey) { throw CoreError.default("key has not been generated yet"); } - // no metadata set, assumes new user const newKeyDetails = await this._initializeNewKey({ initializeModules: true, importedKey: importKey, delete1OutOf1: p.delete1OutOf1 }); @@ -282,8 +278,6 @@ class ThresholdKey implements ITKey { // in the case we're reinitializing whilst newKeyAssign has not been synced const reinitializingWithNewKeyAssign = reinitializing && previouslyFetchedCloudMetadata === undefined; - - // We determine the latest metadata on the SDK and if there has been // needed transitions to include let currentMetadata: Metadata; @@ -712,10 +706,6 @@ class ThresholdKey implements ITKey { this.inputShareStore(new ShareStore(shares[shareIndex.toString("hex")], poly.getPolynomialID())); } - if (this.storeDeviceShare) { - await this.storeDeviceShare(new ShareStore(shares[shareIndexes[1].toString("hex")], poly.getPolynomialID())); - } - const result = { privKey: this.privKey, deviceShare: new ShareStore(shares[shareIndexes[1].toString("hex")], poly.getPolynomialID()), @@ -1103,13 +1093,6 @@ class ThresholdKey implements ITKey { }; } - _setDeviceStorage(storeDeviceStorage: (deviceShareStore: ShareStore) => Promise): void { - if (this.storeDeviceShare) { - throw CoreError.default("storeDeviceShare already set"); - } - this.storeDeviceShare = storeDeviceStorage; - } - async addShareDescription(shareIndex: string, description: string, updateMetadata?: boolean): Promise { if (!this.metadata) { throw CoreError.metadataUndefined(); @@ -1327,7 +1310,6 @@ class ThresholdKey implements ITKey { outputShareStore: this.outputShareStore.bind(this), inputShare: this.inputShare.bind(this), outputShare: this.outputShare.bind(this), - _setDeviceStorage: this._setDeviceStorage.bind(this), encrypt: this.encrypt.bind(this), decrypt: this.decrypt.bind(this), getTKeyStore: this.getTKeyStore.bind(this), diff --git a/packages/web-storage/src/WebStorageModule.ts b/packages/web-storage/src/WebStorageModule.ts index b5b6de49..8c0a7d6e 100644 --- a/packages/web-storage/src/WebStorageModule.ts +++ b/packages/web-storage/src/WebStorageModule.ts @@ -42,7 +42,6 @@ class WebStorageModule implements IModule { setModuleReferences(tbSDK: ITKeyApi): void { this.tbSDK = tbSDK; - this.tbSDK._setDeviceStorage(this.storeDeviceShare.bind(this)); } // eslint-disable-next-line