Resync Bitwarden early when credential is added (#3649)

This commit is contained in:
Stanislav Novosad
2025-10-08 14:39:15 -06:00
committed by GitHub
parent fc0f2b87ca
commit f8e76162d0

View File

@@ -1,5 +1,5 @@
import structlog
from fastapi import Body, Depends, HTTPException, Path, Query
from fastapi import BackgroundTasks, Body, Depends, HTTPException, Path, Query
from skyvern.forge import app
from skyvern.forge.prompts import prompt_engine
@@ -34,6 +34,19 @@ from skyvern.forge.sdk.services.bitwarden import BitwardenService
LOG = structlog.get_logger()
async def fetch_credential_item_background(item_id: str) -> None:
"""
Background task to fetch the recently added credential item from Bitwarden.
This triggers Bitwarden to sync the vault earlier so the next request does not have to wait for the sync.
"""
try:
LOG.info("Pre-fetching credential item from Bitwarden in background", item_id=item_id)
credential_item = await BitwardenService.get_credential_item(item_id)
LOG.info("Successfully fetched credential item from Bitwarden", item_id=item_id, name=credential_item.name)
except Exception as e:
LOG.exception("Failed to fetch credential item from Bitwarden in background", item_id=item_id, error=str(e))
async def parse_totp_code(content: str, organization_id: str) -> str | None:
prompt = prompt_engine.load_prompt("parse-verification-code", content=content)
code_resp = await app.SECONDARY_LLM_API_HANDLER(
@@ -129,6 +142,7 @@ async def send_totp_code(
include_in_schema=False,
)
async def create_credential(
background_tasks: BackgroundTasks,
data: CreateCredentialRequest = Body(
...,
description="The credential data to create",
@@ -170,6 +184,9 @@ async def create_credential(
totp_type=data.credential.totp_type if hasattr(data.credential, "totp_type") else "none",
)
# Early resyncing the Bitwarden vault
background_tasks.add_task(fetch_credential_item_background, item_id)
if data.credential_type == CredentialType.PASSWORD:
credential_response = PasswordCredentialResponse(
username=data.credential.username,