JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 16
  • Score
    100M100P100Q68894F

TypeScript SDK for Brave APIs.

Package Exports

  • @microfox/brave
  • @microfox/brave/package.json

Readme

Brave SDK

TypeScript SDK for Brave Search APIs.

Installation

npm install @microfox/brave

Environment Variables

To use this package, you need to set the following environment variables:

  • BRAVE_API_KEY: Your Brave Search API key. Obtain this by subscribing to a plan (including the free plan) at https://brave.com/search/api/. (Required)

Quick Start

import { createBraveSDK } from '@microfox/brave';

// Initialize with API key
const braveSDK = createBraveSDK({
  apiKey: process.env.BRAVE_API_KEY,
});

// Or use environment variable
const braveSDK = createBraveSDK(); // Uses BRAVE_API_KEY from environment

Batch Requests ( DO NOT USE PROMISE.All )

  • Free Plan Ratelimit: 1 request per second
  • Pro Plan Ratelimit: 20 requests per second

When making multiple requests, use sequential processing instead to avoid hitting rate limits, generally using a await new Promise(resolve => setTimeout(resolve, 1000)) is a good patternt o delay in bettween requests.

const queries = ['search query 1', 'search query 2'];

// ❌ Don't do this ( Promise.all will hit 429 due to rate limiting. )
const contentPromises = userTopics.topics.map(async topic => {
  const results = await braveSDK.webSearch({ q: topic, count: 5 });
  return results.search?.results || [];
});
const contentResults = await Promise.all(contentPromises);

// ✅ Do this instead ( use batchWebSearch )
const contentResults = await braveSdk.batchWebSearch(
  userTopics.topics.map(topic => ({
    q: topic,
    count: 5,
  })),
); // deafault delay of 1 second

// ✅ or Do this instead
const contentResults = [];
for (const topic of topics) {
  const results = await braveSDK.webSearch({ q: topic, count: 5 });
  await new Promise(resolve => setTimeout(resolve, 1000)); // delay by 1 seconds
  contentResults.push({ query: topic, results: results.web?.results });
}

API Reference

For detailed documentation on all available functions and their parameters, please refer to the following files:

Best Practices

  1. Always use sequential processing for multiple requests to respect rate limits
  2. Handle API errors appropriately
  3. Consider caching responses when appropriate
  4. Monitor rate limit headers in responses for quota management