claude-client
v1.1.3
Published
Production-ready TypeScript client for Anthropic Claude API with comprehensive features
Maintainers
Readme
Claude Client
A production-ready TypeScript client for Anthropic Claude API with comprehensive features.
Features
- TypeScript client for Claude Sonnet 4 (claude-sonnet-4-20250514)
- Synchronous and asynchronous responses
- Streaming response capability
- Token usage control and context window monitoring
- API key-based authentication
- Automatic retries with exponential backoff and jitter
- Complete npm package structure
- Conversation history management
- Prompt template support
- Express and Fastify framework integrations
- Comprehensive error handling with retry logic
- Circuit breaker patterns for production use
- Extensive TypeScript types and interfaces
- Latest TypeScript 5.8.3 and Node.js 22.x support Native TypeScript support with Node.js experimental features Production-ready error handling and logging OpenAPI 3.0 specification
Basic usage
import { ClaudeClient } from "@your-org/claude-client";
const client = new ClaudeClient({
apiKey: process.env.ANTHROPIC_API_KEY!,
model: "claude-sonnet-4-20250514",
maxTokens: 1024,
});
// Synchronous message
const response = await client.sendMessage([
{ role: "user", content: "Hello, Claude!" },
]);
console.log(response.content[0].text);
// Streaming message
for await (const chunk of client.streamMessage([
{ role: "user", content: "Tell me a story" },
])) {
process.stdout.write(chunk);
}
// Token counting
const tokenCount = await client.countTokens({
model: "claude-sonnet-4-20250514",
messages: [{ role: "user", content: "Hello" }],
});
console.log(`Tokens: ${tokenCount.input_tokens}`);Fastify integration
import Fastify from "fastify";
import claudePlugin from "@your-org/claude-client/fastify";
import { ClaudeClient } from "@your-org/claude-client";
const fastify = Fastify();
const client = new ClaudeClient({ apiKey: process.env.ANTHROPIC_API_KEY! });
await fastify.register(claudePlugin, {
client,
parseMessages: (request) => request.body.messages,
});
fastify.post("/chat", async (request, reply) => {
const response = await fastify.claude.sendMessage(request.claudeMessages);
return response;
});Express integration
import { ClaudeClient } from "@magj/claude-client";
const client = new ClaudeClient({
apiKey: process.env.ANTHROPIC_API_KEY!,
model: "claude-sonnet-4-20250514",
maxTokens: 1024,
});
// Synchronous message
const response = await client.sendMessage([
{ role: "user", content: "Hello, Claude!" },
]);
console.log(response.content[0].text);
// Streaming message
for await (const chunk of client.streamMessage([
{ role: "user", content: "Tell me a story" },
])) {
process.stdout.write(chunk);
}
// Token counting
const tokenCount = await client.countTokens({
model: "claude-sonnet-4-20250514",
messages: [{ role: "user", content: "Hello" }],
});
console.log(`Tokens: ${tokenCountinput_tokens}`);Local Development Setup
- Install and Link Locally
# Clone and setup
git clone <your-repo>
cd claude-client
npm install
# Build the package
npm run build
# Link locally for development
npm link
# In your project
npm link @your-org/claude-client- Development Workflow
# Watch mode for development
npm run dev
# Type checking
npm run type-check
# Run tests
npm test
# Lint and format
npm run lint:fix
npm run format
# Generate documentation
npm run docs:api
npm run docs:openapi- Testing
# Run all tests
npm test
# Run with coverage
npm run test:ci
# Watch mode
npm test -- --watchProduction Deployment
- Build and Publish
# Build production version
npm run build
# Validate OpenAPI spec
npm run validate
# Publish to npm
npm publish- Environment Variables
ANTHROPIC_API_KEY=your_api_key
ANTHROPIC_ORGANIZATION_ID=your_org_id # Optional