diff --git a/.gitignore b/.gitignore index 5ea6d0e..c192313 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,4 @@ target/ test/ .vercel +.env*.local diff --git a/app/api/session/route.ts b/app/api/session/route.ts index 7f9c2e7..c2320b8 100644 --- a/app/api/session/route.ts +++ b/app/api/session/route.ts @@ -1,5 +1,6 @@ -import { NextResponse } from "next/server"; import Browserbase from "@browserbasehq/sdk"; +import { getAll } from "@vercel/edge-config"; +import { NextResponse } from "next/server"; type BrowserbaseRegion = | "us-west-2" @@ -112,21 +113,41 @@ function getRegionFromTimezoneAbbr(timezoneAbbr?: string): BrowserbaseRegion { } } +interface EdgeConfig { + advancedStealth: boolean | undefined; + proxies: boolean | undefined; +} + async function createSession(timezone?: string) { const bb = new Browserbase({ apiKey: process.env.BROWSERBASE_API_KEY!, }); + const config = await getAll(); + + const { advancedStealth: advancedStealthConfig, proxies: proxiesConfig } = + config; + + const advancedStealth: boolean = advancedStealthConfig ?? false; + const proxies: boolean = proxiesConfig ?? true; + + // Build browserSettings conditionally const browserSettings: Browserbase.Sessions.SessionCreateParams.BrowserSettings = { viewport: { width: 2560, height: 1440, }, - //@ts-expect-error - not present in the types, but valid - os: "windows", blockAds: true, - advancedStealth: true, + advancedStealth, + // Only set os if advancedStealth is true + ...(advancedStealth + ? { + os: "mac", + } + : { + os: "linux", + }), }; // Use timezone abbreviation to determine base region @@ -140,7 +161,7 @@ async function createSession(timezone?: string) { const session = await bb.sessions.create({ projectId: process.env.BROWSERBASE_PROJECT_ID!, - proxies: true, + proxies, browserSettings, keepAlive: true, region: finalRegion, diff --git a/package.json b/package.json index e58f16e..d8ad895 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@browserbasehq/sdk": "^2.6.0", "@browserbasehq/stagehand": "file:./sdk/stagehand-ts", "@vercel/analytics": "^1.4.1", + "@vercel/edge-config": "^1.4.0", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "framer-motion": "^11.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a53d717..fda6cd2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: '@vercel/analytics': specifier: ^1.4.1 version: 1.5.0(next@15.1.6(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1) + '@vercel/edge-config': + specifier: ^1.4.0 + version: 1.4.0(@opentelemetry/api@1.9.0) class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -775,6 +778,18 @@ packages: vue-router: optional: true + '@vercel/edge-config-fs@0.1.0': + resolution: {integrity: sha512-NRIBwfcS0bUoUbRWlNGetqjvLSwgYH/BqKqDN7vK1g32p7dN96k0712COgaz6VFizAm9b0g6IG6hR6+hc0KCPg==} + + '@vercel/edge-config@1.4.0': + resolution: {integrity: sha512-69Wg5gw9DzwnyUmnjToSeLRm1nm8mCPgN0kflX8EHRHyqvzH80wPem5A8rI2LXPb2Y9tJNoqN3vXPcQhS2Wh5g==} + engines: {node: '>=14.6'} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -3525,6 +3540,14 @@ snapshots: next: 15.1.6(@opentelemetry/api@1.9.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: 19.1.1 + '@vercel/edge-config-fs@0.1.0': {} + + '@vercel/edge-config@1.4.0(@opentelemetry/api@1.9.0)': + dependencies: + '@vercel/edge-config-fs': 0.1.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1