{"ast":null,"code":"import _asyncToGenerator from \"/home/mleku/src/orly.dev/next/signer/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\n/**\n * Implementation of PermissionRepository using browser storage.\n */\nexport class BrowserPermissionRepository {\n  storage;\n  encryption;\n  constructor(storage, encryption) {\n    this.storage = storage;\n    this.encryption = encryption;\n  }\n  findById(id) {\n    var _this = this;\n    return _asyncToGenerator(function* () {\n      const permissions = _this.storage.getSessionPermissions();\n      return permissions.find(p => p.id === id.value);\n    })();\n  }\n  find(query) {\n    var _this2 = this;\n    return _asyncToGenerator(function* () {\n      let permissions = _this2.storage.getSessionPermissions();\n      if (query.identityId) {\n        const identityIdValue = query.identityId.value;\n        permissions = permissions.filter(p => p.identityId === identityIdValue);\n      }\n      if (query.host) {\n        const host = query.host;\n        permissions = permissions.filter(p => p.host === host);\n      }\n      if (query.method) {\n        const method = query.method;\n        permissions = permissions.filter(p => p.method === method);\n      }\n      if (query.kind !== undefined) {\n        const kind = query.kind;\n        permissions = permissions.filter(p => p.kind === kind);\n      }\n      return permissions;\n    })();\n  }\n  findExact(identityId, host, method, kind) {\n    var _this3 = this;\n    return _asyncToGenerator(function* () {\n      const permissions = _this3.storage.getSessionPermissions();\n      return permissions.find(p => p.identityId === identityId.value && p.host === host && p.method === method && (kind === undefined ? p.kind === undefined : p.kind === kind));\n    })();\n  }\n  findByIdentity(identityId) {\n    var _this4 = this;\n    return _asyncToGenerator(function* () {\n      const permissions = _this4.storage.getSessionPermissions();\n      return permissions.filter(p => p.identityId === identityId.value);\n    })();\n  }\n  findAll() {\n    var _this5 = this;\n    return _asyncToGenerator(function* () {\n      return _this5.storage.getSessionPermissions();\n    })();\n  }\n  save(permission) {\n    var _this6 = this;\n    return _asyncToGenerator(function* () {\n      const sessionPermissions = _this6.storage.getSessionPermissions();\n      const existingIndex = sessionPermissions.findIndex(p => p.id === permission.id);\n      if (existingIndex >= 0) {\n        sessionPermissions[existingIndex] = permission;\n      } else {\n        sessionPermissions.push(permission);\n      }\n      _this6.storage.setSessionPermissions(sessionPermissions);\n      yield _this6.storage.saveSessionData();\n      // Encrypt and save to sync storage\n      const encryptedPermission = yield _this6.encryptPermission(permission);\n      const syncPermissions = _this6.storage.getSyncPermissions();\n      // Find by decrypting IDs (expensive but necessary for updates)\n      let syncIndex = -1;\n      for (let i = 0; i < syncPermissions.length; i++) {\n        try {\n          const decryptedId = yield _this6.encryption.decryptString(syncPermissions[i].id);\n          if (decryptedId === permission.id) {\n            syncIndex = i;\n            break;\n          }\n        } catch {\n          // Skip corrupted entries\n        }\n      }\n      if (syncIndex >= 0) {\n        syncPermissions[syncIndex] = encryptedPermission;\n      } else {\n        syncPermissions.push(encryptedPermission);\n      }\n      yield _this6.storage.saveSyncPermissions(syncPermissions);\n    })();\n  }\n  delete(id) {\n    var _this7 = this;\n    return _asyncToGenerator(function* () {\n      const sessionPermissions = _this7.storage.getSessionPermissions();\n      const initialLength = sessionPermissions.length;\n      const filtered = sessionPermissions.filter(p => p.id !== id.value);\n      if (filtered.length === initialLength) {\n        return false;\n      }\n      _this7.storage.setSessionPermissions(filtered);\n      yield _this7.storage.saveSessionData();\n      // Remove from sync storage\n      const encryptedId = yield _this7.encryption.encryptString(id.value);\n      const syncPermissions = _this7.storage.getSyncPermissions();\n      const filteredSync = syncPermissions.filter(p => p.id !== encryptedId);\n      yield _this7.storage.saveSyncPermissions(filteredSync);\n      return true;\n    })();\n  }\n  deleteByIdentity(identityId) {\n    var _this8 = this;\n    return _asyncToGenerator(function* () {\n      const sessionPermissions = _this8.storage.getSessionPermissions();\n      const initialLength = sessionPermissions.length;\n      const filtered = sessionPermissions.filter(p => p.identityId !== identityId.value);\n      const deletedCount = initialLength - filtered.length;\n      if (deletedCount === 0) {\n        return 0;\n      }\n      _this8.storage.setSessionPermissions(filtered);\n      yield _this8.storage.saveSessionData();\n      // Remove from sync storage\n      const encryptedIdentityId = yield _this8.encryption.encryptString(identityId.value);\n      const syncPermissions = _this8.storage.getSyncPermissions();\n      const filteredSync = syncPermissions.filter(p => p.identityId !== encryptedIdentityId);\n      yield _this8.storage.saveSyncPermissions(filteredSync);\n      return deletedCount;\n    })();\n  }\n  count(query) {\n    var _this9 = this;\n    return _asyncToGenerator(function* () {\n      if (query) {\n        const results = yield _this9.find(query);\n        return results.length;\n      }\n      return _this9.storage.getSessionPermissions().length;\n    })();\n  }\n  // ─────────────────────────────────────────────────────────────────────────\n  // Private helpers\n  // ─────────────────────────────────────────────────────────────────────────\n  encryptPermission(permission) {\n    var _this0 = this;\n    return _asyncToGenerator(function* () {\n      const encrypted = {\n        id: yield _this0.encryption.encryptString(permission.id),\n        identityId: yield _this0.encryption.encryptString(permission.identityId),\n        host: yield _this0.encryption.encryptString(permission.host),\n        method: yield _this0.encryption.encryptString(permission.method),\n        methodPolicy: yield _this0.encryption.encryptString(permission.methodPolicy)\n      };\n      if (permission.kind !== undefined) {\n        encrypted.kind = yield _this0.encryption.encryptNumber(permission.kind);\n      }\n      return encrypted;\n    })();\n  }\n}\n/**\n * Factory function to create a BrowserPermissionRepository.\n */\nexport function createPermissionRepository(storage, encryption) {\n  return new BrowserPermissionRepository(storage, encryption);\n}","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]}