Rate Limiting and Throttling

Security Considerations

/**
 * Simple rate limiter for API calls
 */
const rateLimiter = {
  lastCallTime: 0,
  minInterval: 200, // 200ms = 5 calls per second
  
  async limit<T>(fn: () => Promise<T>): Promise<T> {
    const now = Date.now();
    const timeToWait = this.lastCallTime + this.minInterval - now;
    
    if (timeToWait > 0) {
      await new Promise(resolve => setTimeout(resolve, timeToWait));
    }
    
    this.lastCallTime = Date.now();
    return fn();
  }
};

// Usage example
async function testBuyer() {
  // Browse agents with rate limiting
  const agents = await rateLimiter.limit(() => 
    acpClient.browseAgent("aixbt", "hedgefund")
  );
  
  // Process each agent with rate limiting
  for (const agent of agents) {
    // Rate limit each API call
    const details = await rateLimiter.limit(() => 
      acpClient.getAgentDetails(agent.id)
    );
    
    // Do something with details...
  }
  
  // Initiate job with rate limiting
  if (selectedOffering) {
    const jobId = await rateLimiter.limit(() => 
      selectedOffering.initiateJob(serviceRequirement, expiredAt)
    );
  }
}

Last updated