Skip to main content

Session Lifecycle

Connect → Use → Close
// 1. Connect
const session = await playwright.connect({ apiKey: '...' });

// 2. Use
await session.page.goto('https://example.com');

// 3. Close
await session.close();

Session Options

const session = await playwright.connect({
  apiKey: process.env.BCTRL_API_KEY,
  sessionOptions: {
    // Browser setup
    screen: { width: 1920, height: 1080 },
    timeoutMinutes: 30,

    // Stealth & anti-detection
    useStealth: true,
    humanize: true,

    // Proxy
    useProxy: true,
    proxyCountry: 'US'
  }
});

Browser Contexts (Playwright)

Contexts provide isolated browser environments:
const session = await playwright.connect({ apiKey: '...' });

// Default context
const defaultContext = session.context;

// Create new isolated context
const newContext = await session.browser.newContext();
const page = await newContext.newPage();

// Each context has separate:
// - Cookies
// - Local storage
// - Session storage

Multiple Pages

// Open multiple pages
const page1 = session.page;
const page2 = await session.context.newPage();

// Work with both
await page1.goto('https://site1.com');
await page2.goto('https://site2.com');

// Transfer data between pages
const data = await page1.evaluate(() => localStorage.getItem('token'));
await page2.evaluate((token) => localStorage.setItem('token', token), data);
// Add cookies
await session.context.addCookies([
  { name: 'session', value: 'abc123', domain: 'example.com' }
]);

// Get cookies
const cookies = await session.context.cookies();

// Clear cookies
await session.context.clearCookies();

// Get storage state (cookies + localStorage)
const state = await session.context.storageState();

Session Timeout

Sessions automatically close after the timeout period:
const session = await playwright.connect({
  apiKey: '...',
  sessionOptions: {
    timeoutMinutes: 60  // 1 hour
  }
});
Always call session.close() when done to free up resources immediately.