{"ast":null,"code":"import _asyncToGenerator from \"/home/mleku/src/orly.dev/next/signer/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { CryptoHelper, NostrHelper } from '@common';\nexport const addIdentity = /*#__PURE__*/function () {\n  var _ref = _asyncToGenerator(function* (data) {\n    this.assureIsInitialized();\n    const privkey = NostrHelper.getNostrPrivkeyObject(data.privkeyString.toLowerCase()).hex;\n    // Check if an identity with the same privkey already exists.\n    const existingIdentity = (this.getBrowserSessionHandler().browserSessionData?.identities ?? []).find(x => x.privkey === privkey);\n    if (existingIdentity) {\n      throw new Error(`An identity with the same private key already exists: ${existingIdentity.nick}`);\n    }\n    const browserSessionData = this.getBrowserSessionHandler().browserSessionData;\n    if (!browserSessionData) {\n      throw new Error('Browser session data is undefined.');\n    }\n    const decryptedIdentity = {\n      id: CryptoHelper.v4(),\n      nick: data.nick,\n      privkey,\n      createdAt: new Date().toISOString()\n    };\n    // Add the new identity to the session data.\n    browserSessionData.identities.push(decryptedIdentity);\n    let isFirstIdentity = false;\n    if (browserSessionData.identities.length === 1) {\n      isFirstIdentity = true;\n      browserSessionData.selectedIdentityId = decryptedIdentity.id;\n    }\n    this.getBrowserSessionHandler().saveFullData(browserSessionData);\n    // Encrypt the new identity and add it to the sync data.\n    const encryptedIdentity = yield encryptIdentity.call(this, decryptedIdentity);\n    const encryptedIdentities = [...(this.getBrowserSyncHandler().browserSyncData?.identities ?? []), encryptedIdentity];\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_Identities({\n      identities: encryptedIdentities\n    });\n    if (isFirstIdentity) {\n      yield this.getBrowserSyncHandler().saveAndSetPartialData_SelectedIdentityId({\n        selectedIdentityId: encryptedIdentity.id\n      });\n    }\n  });\n  return function addIdentity(_x) {\n    return _ref.apply(this, arguments);\n  };\n}();\nexport const deleteIdentity = /*#__PURE__*/function () {\n  var _ref2 = _asyncToGenerator(function* (identityId) {\n    this.assureIsInitialized();\n    if (!identityId) {\n      return;\n    }\n    const browserSessionData = this.getBrowserSessionHandler().browserSessionData;\n    const browserSyncData = this.getBrowserSyncHandler().browserSyncData;\n    if (!browserSessionData || !browserSyncData) {\n      throw new Error('Browser session or sync data is undefined.');\n    }\n    browserSessionData.identities = browserSessionData.identities.filter(x => x.id !== identityId);\n    browserSessionData.permissions = browserSessionData.permissions.filter(x => x.identityId !== identityId);\n    browserSessionData.relays = browserSessionData.relays.filter(x => x.identityId !== identityId);\n    if (browserSessionData.selectedIdentityId === identityId) {\n      // Choose another identity to be selected or null if there is none.\n      browserSessionData.selectedIdentityId = browserSessionData.identities.length > 0 ? browserSessionData.identities[0].id : null;\n    }\n    yield this.getBrowserSessionHandler().saveFullData(browserSessionData);\n    // Handle Sync data.\n    const encryptedIdentityId = yield this.encrypt(identityId);\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_Identities({\n      identities: browserSyncData.identities.filter(x => x.id !== encryptedIdentityId)\n    });\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_Permissions({\n      permissions: browserSyncData.permissions.filter(x => x.identityId !== encryptedIdentityId)\n    });\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_Relays({\n      relays: browserSyncData.relays.filter(x => x.identityId !== encryptedIdentityId)\n    });\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_SelectedIdentityId({\n      selectedIdentityId: browserSessionData.selectedIdentityId === null ? null : yield this.encrypt(browserSessionData.selectedIdentityId)\n    });\n  });\n  return function deleteIdentity(_x2) {\n    return _ref2.apply(this, arguments);\n  };\n}();\nexport const switchIdentity = /*#__PURE__*/function () {\n  var _ref3 = _asyncToGenerator(function* (identityId) {\n    this.assureIsInitialized();\n    // Check, if the identity really exists.\n    const browserSessionData = this.getBrowserSessionHandler().browserSessionData;\n    if (!browserSessionData?.identities.find(x => x.id === identityId)) {\n      return;\n    }\n    browserSessionData.selectedIdentityId = identityId;\n    yield this.getBrowserSessionHandler().saveFullData(browserSessionData);\n    const encryptedIdentityId = identityId === null ? null : yield this.encrypt(identityId);\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_SelectedIdentityId({\n      selectedIdentityId: encryptedIdentityId\n    });\n  });\n  return function switchIdentity(_x3) {\n    return _ref3.apply(this, arguments);\n  };\n}();\nexport const encryptIdentity = /*#__PURE__*/function () {\n  var _ref4 = _asyncToGenerator(function* (identity) {\n    const encryptedIdentity = {\n      id: yield this.encrypt(identity.id),\n      nick: yield this.encrypt(identity.nick),\n      createdAt: yield this.encrypt(identity.createdAt),\n      privkey: yield this.encrypt(identity.privkey)\n    };\n    return encryptedIdentity;\n  });\n  return function encryptIdentity(_x4) {\n    return _ref4.apply(this, arguments);\n  };\n}();\nexport const decryptIdentities = /*#__PURE__*/function () {\n  var _ref5 = _asyncToGenerator(function* (identities, withLockedVault = undefined) {\n    const decryptedIdentities = [];\n    for (const identity of identities) {\n      const decryptedIdentity = yield decryptIdentity.call(this, identity, withLockedVault);\n      decryptedIdentities.push(decryptedIdentity);\n    }\n    return decryptedIdentities;\n  });\n  return function decryptIdentities(_x5) {\n    return _ref5.apply(this, arguments);\n  };\n}();\nexport const decryptIdentity = /*#__PURE__*/function () {\n  var _ref6 = _asyncToGenerator(function* (identity, withLockedVault = undefined) {\n    if (typeof withLockedVault === 'undefined') {\n      const decryptedIdentity = {\n        id: yield this.decrypt(identity.id, 'string'),\n        nick: yield this.decrypt(identity.nick, 'string'),\n        createdAt: yield this.decrypt(identity.createdAt, 'string'),\n        privkey: yield this.decrypt(identity.privkey, 'string')\n      };\n      return decryptedIdentity;\n    }\n    // v2: Use pre-derived key\n    if (withLockedVault.keyBase64) {\n      const decryptedIdentity = {\n        id: yield this.decryptWithLockedVaultV2(identity.id, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        nick: yield this.decryptWithLockedVaultV2(identity.nick, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        createdAt: yield this.decryptWithLockedVaultV2(identity.createdAt, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        privkey: yield this.decryptWithLockedVaultV2(identity.privkey, 'string', withLockedVault.iv, withLockedVault.keyBase64)\n      };\n      return decryptedIdentity;\n    }\n    // v1: Use password (PBKDF2)\n    const decryptedIdentity = {\n      id: yield this.decryptWithLockedVault(identity.id, 'string', withLockedVault.iv, withLockedVault.password),\n      nick: yield this.decryptWithLockedVault(identity.nick, 'string', withLockedVault.iv, withLockedVault.password),\n      createdAt: yield this.decryptWithLockedVault(identity.createdAt, 'string', withLockedVault.iv, withLockedVault.password),\n      privkey: yield this.decryptWithLockedVault(identity.privkey, 'string', withLockedVault.iv, withLockedVault.password)\n    };\n    return decryptedIdentity;\n  });\n  return function decryptIdentity(_x6) {\n    return _ref6.apply(this, arguments);\n  };\n}();","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]}