Spaces:
Sleeping
Sleeping
| import asyncio | |
| import logging | |
| import os | |
| import sys | |
| sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| from onepassword.client import Client # type: ignore # pip install onepassword-sdk | |
| from browser_use import ActionResult, Agent, ChatOpenAI, Tools | |
| # Set up logging | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| OP_SERVICE_ACCOUNT_TOKEN = os.getenv('OP_SERVICE_ACCOUNT_TOKEN') | |
| OP_ITEM_ID = os.getenv('OP_ITEM_ID') # Go to 1Password, right click on the item, click "Copy Secret Reference" | |
| tools = Tools() | |
| async def get_1password_2fa() -> ActionResult: | |
| """ | |
| Custom action to retrieve 2FA/MFA code from 1Password using onepassword.client SDK. | |
| """ | |
| client = await Client.authenticate( | |
| # setup instructions: https://github.com/1Password/onepassword-sdk-python/#-get-started | |
| auth=OP_SERVICE_ACCOUNT_TOKEN, | |
| integration_name='Browser-Use', | |
| integration_version='v1.0.0', | |
| ) | |
| mfa_code = await client.secrets.resolve(f'op://Private/{OP_ITEM_ID}/One-time passcode') | |
| return ActionResult(extracted_content=mfa_code) | |
| async def main(): | |
| # Example task using the 1Password 2FA action | |
| task = 'Go to account.google.com, enter username and password, then if prompted for 2FA code, get 2FA code from 1Password for and enter it' | |
| model = ChatOpenAI(model='gpt-4.1-mini') | |
| agent = Agent(task=task, llm=model, tools=tools) | |
| result = await agent.run() | |
| print(f'Task completed with result: {result}') | |
| if __name__ == '__main__': | |
| asyncio.run(main()) | |