_deleteTKeyStoreItem cause error
- Dominant language
- TypeScript
- Stars
- 181
- Forks
- 53
- PR merge metrics
- No merged PRs in 30d
Description
### Step to reproduce
1. assumed login and reconstruct key successfully
2. create item: _setTKeyStoreItem(module: "A", {id: 1, data: ...})
2. create other item: _setTKeyStoreItem(module: "A", {id: 2, data: ...})
2. try delete one of them: _deleteTKeyStoreItem(module: "A", id: 2})
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
```js
async _deleteTKeyStoreItem(moduleName: string, id: string): Promise {
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
```js
async _deleteTKeyStoreItem(moduleName: string, id: string): Promise {
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();
}
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with _deleteTKeyStoreItem and reproduce the sequence using _setTKeyStoreItem, _deleteTKeyStoreItem, and getTKeyStore("A"). Compare the deleted-item flow with the suggested correction, then verify that deleting one item leaves the remaining item readable without the undefined-input error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- cryptography
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 35/100