From 26b5980579ef0efec0220aa820448cb75e7b4d83 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sun, 20 Jul 2025 23:29:42 -0700 Subject: [PATCH] Update rolodex add method. --- src/lib/rolodex.ts | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/lib/rolodex.ts b/src/lib/rolodex.ts index 73df66f..c33b1c9 100644 --- a/src/lib/rolodex.ts +++ b/src/lib/rolodex.ts @@ -46,8 +46,8 @@ export class Rolodex { .replaceAll('\\', '\\u005c') const account = Account.import(address) - const nameResult = await this.getName(account.address) - if (nameResult == null) { + const existingName = await this.getName(account.address) + if (existingName == null) { const { result } = await SafeWorker.assign({ method: 'store', store: 'Rolodex', @@ -55,22 +55,38 @@ export class Rolodex { [address]: utf8.toBytes(name).buffer }) return result - } - - const addresses = await this.getAddresses(name) - if (addresses.length > 0) { - addresses.push(account.address) - const addressesJson = JSON.stringify(addresses) - const { result } = await SafeWorker.assign({ + } else if (existingName !== name) { + const { result: isDestroyed } = await SafeWorker.assign({ + method: 'destroy', + store: 'Rolodex', + name: address + }) + if (!isDestroyed) { + throw new Error('Failed to replace existing rolodex entry') + } + const { result: isUpdated } = await SafeWorker.assign({ method: 'store', store: 'Rolodex', password: '', - [name]: utf8.toBytes(addressesJson).buffer + [address]: utf8.toBytes(name).buffer }) - return result + return isUpdated + } else { + const addresses = await this.getAddresses(name) + if (addresses.some(a => a === account.address)) { + return true + } else { + addresses.push(account.address) + const addressesJson = JSON.stringify(addresses) + const { result } = await SafeWorker.assign({ + method: 'store', + store: 'Rolodex', + password: '', + [name]: utf8.toBytes(addressesJson).buffer + }) + return result + } } - - return false } /** -- 2.47.3