@brew.new/sdk
v0.1.0
Published
Official TypeScript SDK for the Brew public API.
Downloads
48
Readme
@brew.new/sdk
Official TypeScript SDK for the Brew public API.
- Resource-oriented surface —
brew.contacts.upsert(...)instead of raw HTTP plumbing. - One typed error class (
BrewApiError) for every non-2xx path. - Safe retries with exponential backoff + jitter.
- Auto-generated
Idempotency-Keyon POST so retries never double-write. - Node 20+, server-first. API keys are secrets — do not use this SDK directly in a browser.
Install
bun add @brew.new/sdk
# or
npm install @brew.new/sdkQuick start
import { createBrewClient } from '@brew.new/sdk'
const brew = createBrewClient({
apiKey: process.env.BREW_API_KEY!,
})
const contact = await brew.contacts.upsert({
email: '[email protected]',
firstName: 'Jane',
customFields: { plan: 'enterprise' },
})
const found = await brew.contacts.getByEmail({ email: '[email protected]' })That's the whole shape. Every other method follows the same pattern.
Pointing at a different environment
baseUrl is configurable. By default it points at production
(https://brew.new/api), but you can override it for staging, local
development, or a custom proxy:
const brew = createBrewClient({
apiKey: process.env.BREW_API_KEY!,
baseUrl: process.env.BREW_API_URL ?? 'https://brew.new/api',
})Common values:
https://brew.new/api— production (default)https://staging.brew.new/api— staginghttp://localhost:3000/api— your own dev server
Trailing slashes are normalized either way. See
docs/configuration.md for the full list of
config options (timeoutMs, maxRetries, userAgent, custom fetch,
etc.).
Documentation
| Topic | File |
| -------------------------- | ---------------------------------------------------------------------- |
| Client configuration | docs/configuration.md |
| Contacts resource | docs/contacts.md |
| Fields resource | docs/fields.md |
| Error handling | docs/errors.md |
| Retries + idempotency | docs/retries-and-idempotency.md |
| Development + OpenAPI sync | docs/development.md |
Development
bun install
bun tsc # typecheck
bun lint # eslint
bun run format # prettier
bun run test # vitest — NOT `bun test`, that hits Bun's built-in runner and bypasses MSW setup
bun run build # tsup: dist/ with esm + cjs + .d.tsFull contribution + testing conventions live in AGENTS.md.
The big one: every change is driven red → green via vitest + MSW, no
exceptions for "trivial" pure functions.
License
MIT
