home / skills / jeremylongshore / claude-code-plugins-plus-skills / fireflies-sdk-patterns

This skill enforces production-ready Fireflies SDK usage by providing a singleton client, robust error handling, and exponential retry patterns.

npx playbooks add skill jeremylongshore/claude-code-plugins-plus-skills --skill fireflies-sdk-patterns

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.8 KB
---
name: fireflies-sdk-patterns
description: |
  Apply production-ready Fireflies.ai SDK patterns for TypeScript and Python.
  Use when implementing Fireflies.ai integrations, refactoring SDK usage,
  or establishing team coding standards for Fireflies.ai.
  Trigger with phrases like "fireflies SDK patterns", "fireflies best practices",
  "fireflies code patterns", "idiomatic fireflies".
allowed-tools: Read, Write, Edit
version: 1.0.0
license: MIT
author: Jeremy Longshore <[email protected]>
---

# Fireflies.ai SDK Patterns

## Overview
Production-ready patterns for Fireflies.ai SDK usage in TypeScript and Python.

## Prerequisites
- Completed `fireflies-install-auth` setup
- Familiarity with async/await patterns
- Understanding of error handling best practices

## Instructions

### Step 1: Implement Singleton Pattern (Recommended)
```typescript
// src/fireflies/client.ts
import { Fireflies.aiClient } from '@fireflies/sdk';

let instance: Fireflies.aiClient | null = null;

export function getFireflies.aiClient(): Fireflies.aiClient {
  if (!instance) {
    instance = new Fireflies.aiClient({
      apiKey: process.env.FIREFLIES_API_KEY!,
      // Additional options
    });
  }
  return instance;
}
```

### Step 2: Add Error Handling Wrapper
```typescript
import { Fireflies.aiError } from '@fireflies/sdk';

async function safeFireflies.aiCall<T>(
  operation: () => Promise<T>
): Promise<{ data: T | null; error: Error | null }> {
  try {
    const data = await operation();
    return { data, error: null };
  } catch (err) {
    if (err instanceof Fireflies.aiError) {
      console.error({
        code: err.code,
        message: err.message,
      });
    }
    return { data: null, error: err as Error };
  }
}
```

### Step 3: Implement Retry Logic
```typescript
async function withRetry<T>(
  operation: () => Promise<T>,
  maxRetries = 3,
  backoffMs = 1000
): Promise<T> {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      return await operation();
    } catch (err) {
      if (attempt === maxRetries) throw err;
      const delay = backoffMs * Math.pow(2, attempt - 1);
      await new Promise(r => setTimeout(r, delay));
    }
  }
  throw new Error('Unreachable');
}
```

## Output
- Type-safe client singleton
- Robust error handling with structured logging
- Automatic retry with exponential backoff
- Runtime validation for API responses

## Error Handling
| Pattern | Use Case | Benefit |
|---------|----------|---------|
| Safe wrapper | All API calls | Prevents uncaught exceptions |
| Retry logic | Transient failures | Improves reliability |
| Type guards | Response validation | Catches API changes |
| Logging | All operations | Debugging and monitoring |

## Examples

### Factory Pattern (Multi-tenant)
```typescript
const clients = new Map<string, Fireflies.aiClient>();

export function getClientForTenant(tenantId: string): Fireflies.aiClient {
  if (!clients.has(tenantId)) {
    const apiKey = getTenantApiKey(tenantId);
    clients.set(tenantId, new Fireflies.aiClient({ apiKey }));
  }
  return clients.get(tenantId)!;
}
```

### Python Context Manager
```python
from contextlib import asynccontextmanager
from fireflies import Fireflies.aiClient

@asynccontextmanager
async def get_fireflies_client():
    client = Fireflies.aiClient()
    try:
        yield client
    finally:
        await client.close()
```

### Zod Validation
```typescript
import { z } from 'zod';

const firefliesResponseSchema = z.object({
  id: z.string(),
  status: z.enum(['active', 'inactive']),
  createdAt: z.string().datetime(),
});
```

## Resources
- [Fireflies.ai SDK Reference](https://docs.fireflies.com/sdk)
- [Fireflies.ai API Types](https://docs.fireflies.com/types)
- [Zod Documentation](https://zod.dev/)

## Next Steps
Apply patterns in `fireflies-core-workflow-a` for real-world usage.

Overview

This skill provides production-ready Fireflies.ai SDK patterns for TypeScript and Python to build reliable integrations. It packages singleton and factory client strategies, safe error wrappers, retry/backoff utilities, and runtime response validation to reduce runtime incidents and simplify multi-tenant usage.

How this skill works

It supplies code patterns to create a single reusable client or tenant-specific clients, wraps SDK calls with a safe error handler that returns structured results, and adds a generic retry function with exponential backoff. It also recommends runtime validation (e.g., Zod/type guards) and a Python async context manager to manage client lifecycle and resource cleanup.

When to use it

  • Implementing new Fireflies.ai integrations in TypeScript or Python
  • Refactoring existing code to centralize SDK access and error handling
  • Onboarding multi-tenant or per-tenant API key management
  • Improving reliability for transient API failures with retries
  • Adding runtime validation to detect API contract changes early

Best practices

  • Expose a single getClient or factory function to centralize configuration and reuse connections
  • Wrap every SDK call in a safe wrapper that returns { data, error } to avoid uncaught exceptions
  • Use exponential backoff and a small fixed maxRetries for transient failures
  • Validate critical API responses with runtime schemas or type guards before using data
  • Log structured error details (codes, messages, context) for observability
  • Close or dispose clients in async context managers to prevent resource leaks

Example use cases

  • Server app: create a singleton client to reuse sockets and rate-limit API key usage
  • SaaS multi-tenant: use a tenant factory map to isolate API keys and quotas per customer
  • Batch job: wrap each API call in a retry utility to survive brief network outages
  • Webhook processor: validate incoming Fireflies.ai response payloads with Zod before processing
  • CLI or script: use a Python asynccontextmanager to ensure client.close() runs on completion

FAQ

Do I always need retries for Fireflies.ai API calls?

Use retries for idempotent operations and transient network errors. Limit retries and add exponential backoff to avoid amplifying load.

How should I validate API responses?

Apply runtime validation (Zod, type guards, or pydantic) for critical fields. Fail fast and log schema mismatches so you can adapt to API changes.