Installation & Setup
Initialize the client:
import { GitStorage } from "@pierre/storage";
const storage = new GitStorage({
name: "your-org", // Your organization identifier
key: env.privateKey,
});
In Go, SDK calls take a context.Context, and TTL values are time.Duration (for example time.Hour).
Need to generate JWTs yourself? See Authentication & security → Manual JWT generation.
Error Handling
The SDK surfaces API failures as ApiError and ref update failures as RefUpdateError.
import { ApiError, RefUpdateError, GitStorage } from "@pierre/storage";
const storage = new GitStorage({ name: "your-org", key: "your-private-key" });
try {
const repo = await storage.createRepo({ id: "existing" });
console.log(repo.id);
} catch (err) {
if (err instanceof ApiError) {
console.error("API error:", err.message);
console.error("Status code:", err.statusCode);
} else {
throw err;
}
}
const repo = await storage.findOne({ id: "repo-id" });
const builder = repo?.createCommit({
targetBranch: "main",
commitMessage: "Update docs",
author: { name: "Docs Bot", email: "docs@example.com" },
});
try {
const result = await builder
?.addFileFromString("docs/changelog.md", "# v2.0.1\n- add streaming SDK\n")
.send();
console.log(result?.commitSha);
} catch (err) {
if (err instanceof RefUpdateError) {
console.error("Ref update failed:", err.message);
console.error("Status:", err.status);
console.error("Reason:", err.reason);
console.error("Ref update:", err.refUpdate);
} else {
throw err;
}
}
Repository Properties
Once you have a repository instance from createRepo() or findOne(), these properties are available:
The repository identifier
The repository’s default branch name (e.g., main)
const repo = await store.findOne({ id: "my-repo" });
console.log(repo.id); // 'my-repo'
console.log(repo.defaultBranch); // 'main'
Complete Example
import { GitStorage } from "@pierre/storage";
const storage = new GitStorage({
name: "your-org",
key: "your-private-key",
});
async function setupRepository() {
// Create repository
const repo = await storage.createRepo({
id: "backend/api-service",
});
// Generate secure URL
const url = await repo.getRemoteURL({
permissions: ["git:read", "git:write"],
ttl: 31536000, // 1 year
});
// Use with Git
console.log(`git clone ${url}`);
return repo;
}