2645984d169442599b17316feccaad624613d53f28754e1191d0c4914c5f8397.json raw

   1  {"ast":null,"code":"import _asyncToGenerator from \"/home/mleku/src/orly.dev/next/signer/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { CryptoHelper } from '@common';\n/**\n * Parse a nostr+walletconnect:// URL into its components\n */\nexport function parseNwcUrl(url) {\n  try {\n    // Format: nostr+walletconnect://<pubkey>?relay=<url>&secret=<hex>&lud16=<optional>\n    const match = url.match(/^nostr\\+walletconnect:\\/\\/([a-f0-9]{64})\\?(.+)$/i);\n    if (!match) {\n      return null;\n    }\n    const walletPubkey = match[1].toLowerCase();\n    const params = new URLSearchParams(match[2]);\n    const relayUrl = params.get('relay');\n    const secret = params.get('secret');\n    const lud16 = params.get('lud16') || undefined;\n    if (!relayUrl || !secret) {\n      return null;\n    }\n    // Validate secret is 64-char hex\n    if (!/^[a-f0-9]{64}$/i.test(secret)) {\n      return null;\n    }\n    return {\n      walletPubkey,\n      relayUrl: decodeURIComponent(relayUrl),\n      secret: secret.toLowerCase(),\n      lud16\n    };\n  } catch {\n    return null;\n  }\n}\nexport const addNwcConnection = /*#__PURE__*/function () {\n  var _ref = _asyncToGenerator(function* (data) {\n    this.assureIsInitialized();\n    // Parse the NWC URL\n    const parsed = parseNwcUrl(data.connectionUrl);\n    if (!parsed) {\n      throw new Error('Invalid NWC URL format');\n    }\n    // Check if a connection with the same wallet pubkey already exists\n    const existingConnection = (this.getBrowserSessionHandler().browserSessionData?.nwcConnections ?? []).find(x => x.walletPubkey === parsed.walletPubkey);\n    if (existingConnection) {\n      throw new Error(`A connection to this wallet already exists: ${existingConnection.name}`);\n    }\n    const browserSessionData = this.getBrowserSessionHandler().browserSessionData;\n    if (!browserSessionData) {\n      throw new Error('Browser session data is undefined.');\n    }\n    const decryptedConnection = {\n      id: CryptoHelper.v4(),\n      name: data.name,\n      connectionUrl: data.connectionUrl,\n      walletPubkey: parsed.walletPubkey,\n      relayUrl: parsed.relayUrl,\n      secret: parsed.secret,\n      lud16: parsed.lud16,\n      createdAt: new Date().toISOString()\n    };\n    // Initialize array if needed\n    if (!browserSessionData.nwcConnections) {\n      browserSessionData.nwcConnections = [];\n    }\n    // Add the new connection to the session data\n    browserSessionData.nwcConnections.push(decryptedConnection);\n    this.getBrowserSessionHandler().saveFullData(browserSessionData);\n    // Encrypt the new connection and add it to the sync data\n    const encryptedConnection = yield encryptNwcConnection.call(this, decryptedConnection);\n    const encryptedConnections = [...(this.getBrowserSyncHandler().browserSyncData?.nwcConnections ?? []), encryptedConnection];\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_NwcConnections({\n      nwcConnections: encryptedConnections\n    });\n  });\n  return function addNwcConnection(_x) {\n    return _ref.apply(this, arguments);\n  };\n}();\nexport const deleteNwcConnection = /*#__PURE__*/function () {\n  var _ref2 = _asyncToGenerator(function* (connectionId) {\n    this.assureIsInitialized();\n    if (!connectionId) {\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    // Remove from session data\n    browserSessionData.nwcConnections = (browserSessionData.nwcConnections ?? []).filter(x => x.id !== connectionId);\n    yield this.getBrowserSessionHandler().saveFullData(browserSessionData);\n    // Handle Sync data\n    const encryptedConnectionId = yield this.encrypt(connectionId);\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_NwcConnections({\n      nwcConnections: (browserSyncData.nwcConnections ?? []).filter(x => x.id !== encryptedConnectionId)\n    });\n  });\n  return function deleteNwcConnection(_x2) {\n    return _ref2.apply(this, arguments);\n  };\n}();\nexport const updateNwcConnectionBalance = /*#__PURE__*/function () {\n  var _ref3 = _asyncToGenerator(function* (connectionId, balanceMillisats) {\n    this.assureIsInitialized();\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    const sessionConnection = (browserSessionData.nwcConnections ?? []).find(x => x.id === connectionId);\n    const encryptedConnectionId = yield this.encrypt(connectionId);\n    const syncConnection = (browserSyncData.nwcConnections ?? []).find(x => x.id === encryptedConnectionId);\n    if (!sessionConnection || !syncConnection) {\n      throw new Error('NWC connection not found for balance update.');\n    }\n    const now = new Date().toISOString();\n    // Update session data\n    sessionConnection.cachedBalance = balanceMillisats;\n    sessionConnection.cachedBalanceAt = now;\n    yield this.getBrowserSessionHandler().saveFullData(browserSessionData);\n    // Update sync data\n    syncConnection.cachedBalance = yield this.encrypt(balanceMillisats.toString());\n    syncConnection.cachedBalanceAt = yield this.encrypt(now);\n    yield this.getBrowserSyncHandler().saveAndSetPartialData_NwcConnections({\n      nwcConnections: browserSyncData.nwcConnections ?? []\n    });\n  });\n  return function updateNwcConnectionBalance(_x3, _x4) {\n    return _ref3.apply(this, arguments);\n  };\n}();\nexport const encryptNwcConnection = /*#__PURE__*/function () {\n  var _ref4 = _asyncToGenerator(function* (connection) {\n    const encrypted = {\n      id: yield this.encrypt(connection.id),\n      name: yield this.encrypt(connection.name),\n      connectionUrl: yield this.encrypt(connection.connectionUrl),\n      walletPubkey: yield this.encrypt(connection.walletPubkey),\n      relayUrl: yield this.encrypt(connection.relayUrl),\n      secret: yield this.encrypt(connection.secret),\n      createdAt: yield this.encrypt(connection.createdAt)\n    };\n    if (connection.lud16) {\n      encrypted.lud16 = yield this.encrypt(connection.lud16);\n    }\n    if (connection.cachedBalance !== undefined) {\n      encrypted.cachedBalance = yield this.encrypt(connection.cachedBalance.toString());\n    }\n    if (connection.cachedBalanceAt) {\n      encrypted.cachedBalanceAt = yield this.encrypt(connection.cachedBalanceAt);\n    }\n    return encrypted;\n  });\n  return function encryptNwcConnection(_x5) {\n    return _ref4.apply(this, arguments);\n  };\n}();\nexport const decryptNwcConnection = /*#__PURE__*/function () {\n  var _ref5 = _asyncToGenerator(function* (connection, withLockedVault = undefined) {\n    if (typeof withLockedVault === 'undefined') {\n      // Normal decryption with unlocked vault\n      const decrypted = {\n        id: yield this.decrypt(connection.id, 'string'),\n        name: yield this.decrypt(connection.name, 'string'),\n        connectionUrl: yield this.decrypt(connection.connectionUrl, 'string'),\n        walletPubkey: yield this.decrypt(connection.walletPubkey, 'string'),\n        relayUrl: yield this.decrypt(connection.relayUrl, 'string'),\n        secret: yield this.decrypt(connection.secret, 'string'),\n        createdAt: yield this.decrypt(connection.createdAt, 'string')\n      };\n      if (connection.lud16) {\n        decrypted.lud16 = yield this.decrypt(connection.lud16, 'string');\n      }\n      if (connection.cachedBalance) {\n        decrypted.cachedBalance = yield this.decrypt(connection.cachedBalance, 'number');\n      }\n      if (connection.cachedBalanceAt) {\n        decrypted.cachedBalanceAt = yield this.decrypt(connection.cachedBalanceAt, 'string');\n      }\n      return decrypted;\n    }\n    // v2: Use pre-derived key\n    if (withLockedVault.keyBase64) {\n      const decrypted = {\n        id: yield this.decryptWithLockedVaultV2(connection.id, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        name: yield this.decryptWithLockedVaultV2(connection.name, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        connectionUrl: yield this.decryptWithLockedVaultV2(connection.connectionUrl, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        walletPubkey: yield this.decryptWithLockedVaultV2(connection.walletPubkey, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        relayUrl: yield this.decryptWithLockedVaultV2(connection.relayUrl, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        secret: yield this.decryptWithLockedVaultV2(connection.secret, 'string', withLockedVault.iv, withLockedVault.keyBase64),\n        createdAt: yield this.decryptWithLockedVaultV2(connection.createdAt, 'string', withLockedVault.iv, withLockedVault.keyBase64)\n      };\n      if (connection.lud16) {\n        decrypted.lud16 = yield this.decryptWithLockedVaultV2(connection.lud16, 'string', withLockedVault.iv, withLockedVault.keyBase64);\n      }\n      if (connection.cachedBalance) {\n        decrypted.cachedBalance = yield this.decryptWithLockedVaultV2(connection.cachedBalance, 'number', withLockedVault.iv, withLockedVault.keyBase64);\n      }\n      if (connection.cachedBalanceAt) {\n        decrypted.cachedBalanceAt = yield this.decryptWithLockedVaultV2(connection.cachedBalanceAt, 'string', withLockedVault.iv, withLockedVault.keyBase64);\n      }\n      return decrypted;\n    }\n    // v1: Use password (PBKDF2)\n    const decrypted = {\n      id: yield this.decryptWithLockedVault(connection.id, 'string', withLockedVault.iv, withLockedVault.password),\n      name: yield this.decryptWithLockedVault(connection.name, 'string', withLockedVault.iv, withLockedVault.password),\n      connectionUrl: yield this.decryptWithLockedVault(connection.connectionUrl, 'string', withLockedVault.iv, withLockedVault.password),\n      walletPubkey: yield this.decryptWithLockedVault(connection.walletPubkey, 'string', withLockedVault.iv, withLockedVault.password),\n      relayUrl: yield this.decryptWithLockedVault(connection.relayUrl, 'string', withLockedVault.iv, withLockedVault.password),\n      secret: yield this.decryptWithLockedVault(connection.secret, 'string', withLockedVault.iv, withLockedVault.password),\n      createdAt: yield this.decryptWithLockedVault(connection.createdAt, 'string', withLockedVault.iv, withLockedVault.password)\n    };\n    if (connection.lud16) {\n      decrypted.lud16 = yield this.decryptWithLockedVault(connection.lud16, 'string', withLockedVault.iv, withLockedVault.password);\n    }\n    if (connection.cachedBalance) {\n      decrypted.cachedBalance = yield this.decryptWithLockedVault(connection.cachedBalance, 'number', withLockedVault.iv, withLockedVault.password);\n    }\n    if (connection.cachedBalanceAt) {\n      decrypted.cachedBalanceAt = yield this.decryptWithLockedVault(connection.cachedBalanceAt, 'string', withLockedVault.iv, withLockedVault.password);\n    }\n    return decrypted;\n  });\n  return function decryptNwcConnection(_x6) {\n    return _ref5.apply(this, arguments);\n  };\n}();\nexport const decryptNwcConnections = /*#__PURE__*/function () {\n  var _ref6 = _asyncToGenerator(function* (connections, withLockedVault = undefined) {\n    const decryptedConnections = [];\n    for (const connection of connections) {\n      const decryptedConnection = yield decryptNwcConnection.call(this, connection, withLockedVault);\n      decryptedConnections.push(decryptedConnection);\n    }\n    return decryptedConnections;\n  });\n  return function decryptNwcConnections(_x7) {\n    return _ref6.apply(this, arguments);\n  };\n}();","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]}