Quickstart
Create a client, list and resolve commits, and verify your first webhook in minutes.
This guide takes you from an empty file to a working client that lists commits, resolves a ref, and verifies an incoming webhook.
1. Install
npm install repo-sdkpnpm add repo-sdkyarn add repo-sdkbun add repo-sdk2. Create a client
Import createClient from the package root and a provider factory from its subpath. Every provider
factory accepts an injectable fetch for testing.
Import and construct
import { createClient } from 'repo-sdk';
import { github } from 'repo-sdk/github';
const client = createClient({
provider: github({ auth: { token: process.env.GITHUB_TOKEN! } }),
});Resolve a ref to a commit
commits.get resolves a branch, tag, or SHA to a single normalized Commit.
const head = await client.commits.get({
repo: 'capawesome-team/repo-sdk',
ref: 'main',
});
console.log(head.sha, head.message);List commits
commits.list returns one page as { data, cursor }.
const { data: commits, cursor } = await client.commits.list({
repo: 'capawesome-team/repo-sdk',
ref: 'main',
limit: 20,
});3. Switch providers
Switching providers means swapping the provider — the rest of your code stays the same.
import { github } from 'repo-sdk/github';
const client = createClient({
provider: github({ auth: { token: process.env.GITHUB_TOKEN! } }),
});import { gitlab } from 'repo-sdk/gitlab';
const client = createClient({
provider: gitlab({ auth: { token: process.env.GITLAB_TOKEN! } }),
});import { bitbucket } from 'repo-sdk/bitbucket';
const client = createClient({
provider: bitbucket({
auth: {
email: process.env.BITBUCKET_EMAIL!,
apiToken: process.env.BITBUCKET_API_TOKEN!,
},
}),
});import { azureDevOps } from 'repo-sdk/azure-devops';
const client = createClient({
provider: azureDevOps({
organization: 'my-org',
auth: { pat: process.env.AZURE_PAT! },
}),
});import { gitea } from 'repo-sdk/gitea';
const client = createClient({
provider: gitea({ auth: { token: process.env.GITEA_TOKEN! } }),
});4. Receive a webhook
verifyWebhook and parseWebhookEvent are standalone exports on each provider subpath — no client
needed. They accept a Web-standard Request, so they drop straight into Next.js route handlers, Hono,
and workers.
import { verifyWebhook, parseWebhookEvent } from 'repo-sdk/github';
export async function POST(request: Request): Promise<Response> {
const valid = await verifyWebhook({ request, secret: process.env.WEBHOOK_SECRET! });
if (!valid) return new Response('invalid signature', { status: 401 });
const event = await parseWebhookEvent(request);
if (event.type === 'push') {
console.log(`push to ${event.repo} @ ${event.ref}`, event.commits);
}
return new Response('ok');
}