diff --git a/fern/docs.yml b/fern/docs.yml index aa5548f2..4c509b1c 100644 --- a/fern/docs.yml +++ b/fern/docs.yml @@ -185,6 +185,12 @@ navigation: - GET /v1/browser_sessions/{browser_session_id} - POST /v1/browser_sessions/{browser_session_id}/close - GET /v1/browser_sessions + - section: Browser Profiles + contents: + - POST /v1/browser_profiles + - GET /v1/browser_profiles + - GET /v1/browser_profiles/{profile_id} + - DELETE /v1/browser_profiles/{profile_id} - section: Credentials contents: - POST /v1/credentials diff --git a/skyvern/forge/sdk/routes/browser_profiles.py b/skyvern/forge/sdk/routes/browser_profiles.py index eb2008a4..073b2570 100644 --- a/skyvern/forge/sdk/routes/browser_profiles.py +++ b/skyvern/forge/sdk/routes/browser_profiles.py @@ -12,6 +12,16 @@ from skyvern.exceptions import ( WorkflowRunNotFound, ) from skyvern.forge import app +from skyvern.forge.sdk.routes.code_samples import ( + CREATE_BROWSER_PROFILE_CODE_SAMPLE_PYTHON, + CREATE_BROWSER_PROFILE_CODE_SAMPLE_TS, + DELETE_BROWSER_PROFILE_CODE_SAMPLE_PYTHON, + DELETE_BROWSER_PROFILE_CODE_SAMPLE_TS, + GET_BROWSER_PROFILE_CODE_SAMPLE_PYTHON, + GET_BROWSER_PROFILE_CODE_SAMPLE_TS, + GET_BROWSER_PROFILES_CODE_SAMPLE_PYTHON, + GET_BROWSER_PROFILES_CODE_SAMPLE_TS, +) from skyvern.forge.sdk.routes.routers import base_router from skyvern.forge.sdk.schemas.browser_profiles import ( BrowserProfile, @@ -41,6 +51,23 @@ def _handle_duplicate_profile_name(*, organization_id: str, name: str, exc: Inte response_model=BrowserProfile, tags=["Browser Profiles"], summary="Create a browser profile", + description="Create a browser profile from a persistent browser session or workflow run.", + openapi_extra={ + "x-fern-sdk-method-name": "create_browser_profile", + "x-fern-examples": [ + { + "code-samples": [ + {"sdk": "python", "code": CREATE_BROWSER_PROFILE_CODE_SAMPLE_PYTHON}, + {"sdk": "typescript", "code": CREATE_BROWSER_PROFILE_CODE_SAMPLE_TS}, + ] + } + ], + }, + responses={ + 200: {"description": "Successfully created browser profile"}, + 400: {"description": "Invalid request - missing source or source not found"}, + 409: {"description": "Browser profile name already exists"}, + }, ) @base_router.post( "/browser_profiles/", @@ -84,6 +111,20 @@ async def create_browser_profile( tags=["Browser Profiles"], summary="List browser profiles", description="Get all browser profiles for the organization", + openapi_extra={ + "x-fern-sdk-method-name": "list_browser_profiles", + "x-fern-examples": [ + { + "code-samples": [ + {"sdk": "python", "code": GET_BROWSER_PROFILES_CODE_SAMPLE_PYTHON}, + {"sdk": "typescript", "code": GET_BROWSER_PROFILES_CODE_SAMPLE_TS}, + ] + } + ], + }, + responses={ + 200: {"description": "Successfully retrieved browser profiles"}, + }, ) @base_router.get( "/browser_profiles/", @@ -125,6 +166,17 @@ async def list_browser_profiles( 200: {"description": "Successfully retrieved browser profile"}, 404: {"description": "Browser profile not found"}, }, + openapi_extra={ + "x-fern-sdk-method-name": "get_browser_profile", + "x-fern-examples": [ + { + "code-samples": [ + {"sdk": "python", "code": GET_BROWSER_PROFILE_CODE_SAMPLE_PYTHON}, + {"sdk": "typescript", "code": GET_BROWSER_PROFILE_CODE_SAMPLE_TS}, + ] + } + ], + }, ) @base_router.get( "/browser_profiles/{profile_id}/", @@ -178,6 +230,17 @@ async def get_browser_profile( 204: {"description": "Successfully deleted browser profile"}, 404: {"description": "Browser profile not found"}, }, + openapi_extra={ + "x-fern-sdk-method-name": "delete_browser_profile", + "x-fern-examples": [ + { + "code-samples": [ + {"sdk": "python", "code": DELETE_BROWSER_PROFILE_CODE_SAMPLE_PYTHON}, + {"sdk": "typescript", "code": DELETE_BROWSER_PROFILE_CODE_SAMPLE_TS}, + ] + } + ], + }, ) @base_router.delete( "/browser_profiles/{profile_id}/", diff --git a/skyvern/forge/sdk/routes/code_samples.py b/skyvern/forge/sdk/routes/code_samples.py index 382e8a5c..6caed929 100644 --- a/skyvern/forge/sdk/routes/code_samples.py +++ b/skyvern/forge/sdk/routes/code_samples.py @@ -835,3 +835,73 @@ const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); const browserSessions = await skyvern.getBrowserSessions(); console.log(browserSessions); """ + +# Browser Profiles +CREATE_BROWSER_PROFILE_CODE_SAMPLE_PYTHON = """from skyvern import Skyvern + +skyvern = Skyvern(api_key="YOUR_API_KEY") +# Create a browser profile from a persistent browser session +browser_profile = await skyvern.browser_profiles.create_browser_profile( + name="My Profile", + browser_session_id="pbs_123", +) +print(browser_profile) + +# Or create from a workflow run with persist_browser_session=True +browser_profile = await skyvern.browser_profiles.create_browser_profile( + name="My Profile", + workflow_run_id="wr_123", +) +print(browser_profile) +""" +CREATE_BROWSER_PROFILE_CODE_SAMPLE_TS = """import { SkyvernClient } from "@skyvern/client"; + +const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); +// Create a browser profile from a persistent browser session +const browserProfile = await skyvern.browserProfiles.createBrowserProfile({ + name: "My Profile", + browser_session_id: "pbs_123", +}); +console.log(browserProfile); + +// Or create from a workflow run with persist_browser_session=True +const browserProfile2 = await skyvern.browserProfiles.createBrowserProfile({ + name: "My Profile", + workflow_run_id: "wr_123", +}); +console.log(browserProfile2); +""" +GET_BROWSER_PROFILES_CODE_SAMPLE_PYTHON = """from skyvern import Skyvern + +skyvern = Skyvern(api_key="YOUR_API_KEY") +browser_profiles = await skyvern.browser_profiles.list_browser_profiles() +print(browser_profiles) +""" +GET_BROWSER_PROFILES_CODE_SAMPLE_TS = """import { SkyvernClient } from "@skyvern/client"; + +const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); +const browserProfiles = await skyvern.browserProfiles.listBrowserProfiles(); +console.log(browserProfiles); +""" +GET_BROWSER_PROFILE_CODE_SAMPLE_PYTHON = """from skyvern import Skyvern + +skyvern = Skyvern(api_key="YOUR_API_KEY") +browser_profile = await skyvern.browser_profiles.get_browser_profile("bp_123") +print(browser_profile) +""" +GET_BROWSER_PROFILE_CODE_SAMPLE_TS = """import { SkyvernClient } from "@skyvern/client"; + +const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); +const browserProfile = await skyvern.browserProfiles.getBrowserProfile("bp_123"); +console.log(browserProfile); +""" +DELETE_BROWSER_PROFILE_CODE_SAMPLE_PYTHON = """from skyvern import Skyvern + +skyvern = Skyvern(api_key="YOUR_API_KEY") +await skyvern.browser_profiles.delete_browser_profile("bp_123") +""" +DELETE_BROWSER_PROFILE_CODE_SAMPLE_TS = """import { SkyvernClient } from "@skyvern/client"; + +const skyvern = new SkyvernClient({ apiKey: "YOUR_API_KEY" }); +await skyvern.browserProfiles.deleteBrowserProfile("bp_123"); +"""