-
-
Notifications
You must be signed in to change notification settings - Fork 50
Open
Description
Step to reproduce
- assumed login and reconstruct key successfully
- create item: _setTKeyStoreItem(module: "A", {id: 1, data: ...})
- create other item: _setTKeyStoreItem(module: "A", {id: 2, data: ...})
- try delete one of them: _deleteTKeyStoreItem(module: "A", id: 2})
- execute getTKeyStore("A") cause error
Error
The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type undefined
Investigate
The following method cause error
async _deleteTKeyStoreItem(moduleName: string, id: string): Promise<void> {
if (!this.metadata) {
throw CoreError.metadataUndefined();
}
const rawTkeyStoreItems = (this.metadata.getTkeyStoreDomain(moduleName) as EncryptedMessage[]) || [];
const decryptedItems = await Promise.all(
rawTkeyStoreItems.map(async (x) => {
const decryptedItem = await this.decrypt(x);
return JSON.parse(decryptedItem.toString()) as TkeyStoreItemType;
})
);
const finalItems = decryptedItems.filter((x) => x.id !== id);
this.metadata.setTkeyStoreDomain(moduleName, finalItems);
await this._syncShareMetadata();
}Suggested Correction
async _deleteTKeyStoreItem(moduleName: string, id: string): Promise<void> {
if (!this.tKey.metadata) {
throw CoreError.metadataUndefined();
}
const rawTkeyStoreItems = (this.tKey.metadata.getTkeyStoreDomain(moduleName) as EncryptedMessage[]) || [];
const decryptedItems = await Promise.all(
rawTkeyStoreItems.map(async (x) => {
const decryptedItem = await this.tKey.decrypt(x);
return JSON.parse(decryptedItem.toString()) as TkeyStoreItemType;
})
);
const finalItems = decryptedItems.filter((x) => x.id !== id);
const finalRawTkeyStoreItems: EncryptedMessage[] = []
for (let i = 0; i < finalItems.length; i++) {
const encryptedData = await this.tKey.encrypt(Buffer.from(stringify(finalItems[i])));
finalRawTkeyStoreItems.push(encryptedData)
}
this.tKey.metadata.setTkeyStoreDomain(moduleName, finalRawTkeyStoreItems);
await this.tKey._syncShareMetadata();
}ecchochan
Metadata
Metadata
Assignees
Labels
No labels