.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<boolean>({
method: 'store',
store: '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<boolean>({
+ } else if (existingName !== name) {
+ const { result: isDestroyed } = await SafeWorker.assign<boolean>({
+ method: 'destroy',
+ store: 'Rolodex',
+ name: address
+ })
+ if (!isDestroyed) {
+ throw new Error('Failed to replace existing rolodex entry')
+ }
+ const { result: isUpdated } = await SafeWorker.assign<boolean>({
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<boolean>({
+ method: 'store',
+ store: 'Rolodex',
+ password: '',
+ [name]: utf8.toBytes(addressesJson).buffer
+ })
+ return result
+ }
}
-
- return false
}
/**