Skip to content

Configuration

Complete reference for configuring the BWS X SDK.

XTwitterClient Constructor

Creates a new instance of the X/Twitter SDK client.

Description

The XTwitterClient constructor initializes the SDK with your configuration. It supports both environment variables and programmatic configuration. The SDK automatically loads configuration from environment variables if no config object is provided.

Parameters

ParameterTypeRequiredDescription
configXTwitterConfigNoConfiguration object. If omitted, loads from environment variables

XTwitterConfig Interface

PropertyTypeRequiredDefaultDescription
apiAPIConfigNo-Twitter API configuration for posting and fallback
crawlerCrawlerConfigNo-Crawler configuration for cost-optimized scraping
proxyProxyConfigNo-Proxy configuration (Oxylabs, BrightData, custom)
mode'api' | 'crawler' | 'hybrid'No'hybrid'Operating mode
preferredMode'api' | 'crawler'No'crawler'Preferred mode for hybrid
fallbackOnRateLimitbooleanNotrueAuto-fallback when rate limited
kolCriteriaKOLCriteriaConfigNo-KOL identification criteria
claudeClaudeConfigNo-Claude AI configuration for KOL evaluation
loggingLoggingConfigNo-Logging configuration
retryRetryConfigNo-Retry configuration
webhookWebhookConfigNo-Webhook notification configuration

APIConfig Interface

PropertyTypeRequiredDescription
accountsAPIAccount[]YesArray of API account configurations
multiAccountbooleanNoEnable multi-account rotation (default: false)
searchAccountsAPIAccount[]NoSeparate accounts for search operations

APIAccount Interface

PropertyTypeRequiredDescription
namestringYesAccount identifier (e.g., 'main', 'search1')
apiKeystringNo*Twitter API Key (Consumer Key)
apiSecretstringNo*Twitter API Secret (Consumer Secret)
accessTokenstringNo*Twitter Access Token
accessSecretstringNo*Twitter Access Secret
bearerTokenstringNo*Bearer Token (alternative to OAuth)
countrystringNoCountry code for geo-targeted proxy

* Either OAuth credentials (apiKey + apiSecret + accessToken + accessSecret) OR bearerToken required

CrawlerConfig Interface

PropertyTypeRequiredDescription
accountsCrawlerAccount[]YesArray of crawler account configurations
rotationobjectNoAccount rotation settings
rotation.cooldownMinutesnumberNoCooldown between uses (default: 15)
rotation.maxUsesPerHournumberNoMax uses per hour per account (default: 20)

CrawlerAccount Interface

PropertyTypeRequiredDescription
idstringYesAccount identifier
usernamestringYesX/Twitter username (e.g., '@myaccount')
cookiesCrawlerCookiesYesAuthentication cookies
cookies.auth_tokenstringYesX auth_token cookie
cookies.ct0stringYesX ct0 (CSRF token) cookie
cookies.guest_idstringNoX guest_id cookie (optional)
countrystringNoCountry code for geo-targeted proxy
status'active' | 'suspended' | 'inactive'NoAccount status (default: 'active')

ProxyConfig Interface

PropertyTypeRequiredDescription
enabledbooleanNoEnable proxy (default: false, auto-enabled in CI/CD)
provider'oxylabs' | 'brightdata' | 'custom'NoProxy provider (default: 'oxylabs')
hoststringNoProxy host (default: 'pr.oxylabs.io')
portnumberNoProxy port (default: 7777)
usernamestringYes*Proxy username
passwordstringYes*Proxy password
countrystringNoDefault country code (default: 'us')
stickySessionbooleanNoUse sticky sessions (default: true)

* Required if enabled is true

WebhookConfig Interface

PropertyTypeRequiredDescription
enabledbooleanYesEnable webhook notifications
urlstringNo*Webhook endpoint URL
secretstringNo*Secret key for HMAC signature verification
headersRecord<string, string>NoCustom HTTP headers
eventsWebhookEventType[]NoEvent types to send (default: all)
retriesobjectNoRetry configuration
rateLimitobjectNoRate limiting configuration
dedupeobjectNoDeduplication configuration
debugbooleanNoEnable debug logging (default: false)

* Required if enabled is true

Returns

TypeDescription
XTwitterClientInitialized SDK client instance

Examples

Basic Usage (Environment Variables)

typescript
import { XTwitterClient } from '@blockchain-web-services/bws-x-sdk-node';

// Loads configuration from environment variables
const client = new XTwitterClient();

Programmatic Configuration

typescript
import { XTwitterClient } from '@blockchain-web-services/bws-x-sdk-node';

const client = new XTwitterClient({
  mode: 'hybrid',
  preferredMode: 'crawler',

  // API configuration (for posting and fallback)
  api: {
    accounts: [{
      name: 'main',
      apiKey: process.env.TWITTER_API_KEY!,
      apiSecret: process.env.TWITTER_API_SECRET!,
      accessToken: process.env.TWITTER_ACCESS_TOKEN!,
      accessSecret: process.env.TWITTER_ACCESS_SECRET!,
    }]
  },

  // Crawler configuration (primary for reading)
  crawler: {
    accounts: [{
      id: 'account1',
      username: '@mycrawleraccount',
      cookies: {
        auth_token: process.env.X_AUTH_TOKEN!,
        ct0: process.env.X_CT0!,
      }
    }],
    rotation: {
      cooldownMinutes: 15,
      maxUsesPerHour: 20,
    }
  },

  // Optional: Proxy configuration
  proxy: {
    enabled: true,
    provider: 'oxylabs',
    username: process.env.PROXY_USERNAME!,
    password: process.env.PROXY_PASSWORD!,
    country: 'us',
  },

  // Optional: Webhook notifications
  webhook: {
    enabled: true,
    url: process.env.WEBHOOK_URL!,
    secret: process.env.WEBHOOK_SECRET!,
    events: ['account_failure', 'api_rate_limit'],
  },

  // Optional: Logging
  logging: {
    level: 'info',
    silent: false,
  },
});

Environment Variables Configuration

Create a .env file:

bash
# Operating Mode
SDK_OPTIONS='{"mode":"hybrid","preferredMode":"crawler"}'

# API Accounts
TWITTER_ACCOUNTS='[{
  "name": "main",
  "apiKey": "your-api-key",
  "apiSecret": "your-api-secret",
  "accessToken": "your-access-token",
  "accessSecret": "your-access-secret"
}]'

# Crawler Accounts
X_ACCOUNTS='[{
  "id": "account1",
  "username": "@mycrawleraccount",
  "cookies": {
    "auth_token": "your-auth-token",
    "ct0": "your-ct0-token"
  }
}]'

# Proxy Configuration
PROXY_CONFIG='{"enabled":true,"provider":"oxylabs","username":"user","password":"pass"}'

# Webhook Configuration
WEBHOOK_CONFIG='{"enabled":true,"url":"https://your-webhook.com","secret":"your-secret"}'

# Claude AI (for KOL evaluation)
ANTHROPIC_API_KEY=your-anthropic-api-key

Then simply:

typescript
import { XTwitterClient } from '@blockchain-web-services/bws-x-sdk-node';
import 'dotenv/config';

// Auto-loads from .env
const client = new XTwitterClient();

API-Only Mode

typescript
const client = new XTwitterClient({
  mode: 'api',
  api: {
    accounts: [{
      name: 'main',
      bearerToken: process.env.TWITTER_BEARER_TOKEN!,
    }]
  }
});

Crawler-Only Mode

typescript
const client = new XTwitterClient({
  mode: 'crawler',
  crawler: {
    accounts: [
      {
        id: 'account1',
        username: '@account1',
        cookies: { auth_token: '...', ct0: '...' }
      },
      {
        id: 'account2',
        username: '@account2',
        cookies: { auth_token: '...', ct0: '...' }
      }
    ],
    rotation: {
      cooldownMinutes: 10,
      maxUsesPerHour: 30,
    }
  },
  proxy: {
    enabled: true,
    provider: 'oxylabs',
    username: process.env.PROXY_USERNAME!,
    password: process.env.PROXY_PASSWORD!,
  }
});

Configuration Priority

The SDK loads configuration in the following priority order:

  1. Constructor parameter - Highest priority
  2. Environment variables - Loaded if no constructor parameter
  3. Default values - Used for optional parameters

Environment Variable Format

All environment variables use JSON format:

  • SDK_OPTIONS - General SDK options
  • TWITTER_ACCOUNTS - API accounts array
  • X_ACCOUNTS - Crawler accounts array
  • PROXY_CONFIG - Proxy configuration
  • WEBHOOK_CONFIG - Webhook configuration
  • ANTHROPIC_API_KEY - Claude AI API key (plain string)

Best Practices

  1. Use Environment Variables - Keep credentials out of code
  2. Enable Webhooks - Monitor failures and rate limits in production
  3. Configure Multiple Accounts - Improve reliability with account rotation
  4. Use Hybrid Mode - Balance cost and reliability
  5. Enable Proxy - Required for web scraping in production
  6. Set Appropriate Cooldowns - Avoid rate limits with proper rotation

Released under the MIT License.