@denlabs/feedback-client
v0.1.0
Published
Typed client for the DenLabs Event Feedback Ops API
Readme
@denlabs/feedback-client
Typed client for the DenLabs Event Feedback Ops API.
Zero runtime dependencies — uses native fetch.
Install
pnpm add @denlabs/feedback-clientUsage
import { FeedbackClient } from '@denlabs/feedback-client'
const client = new FeedbackClient({
baseUrl: 'https://feedback-ops.vercel.app',
adminToken: process.env.EFO_ADMIN_TOKEN, // required for admin endpoints
})
// List labs
const { data: labs, meta } = await client.listLabs({ limit: 10 })
// Get a lab
const { data: lab } = await client.getLab('my-lab')
// Submit feedback (public, no admin token needed)
const publicClient = new FeedbackClient({
baseUrl: 'https://feedback-ops.vercel.app',
})
const { data: feedback } = await publicClient.submitFeedback('my-lab', {
message: 'The onboarding flow is confusing',
tags: ['ux', 'onboarding'],
route: '/labs/my-lab',
})
// Create a lab (admin)
const { data: newLab } = await client.createLab({
name: 'ETH Denver 2026',
startDate: '2026-02-23T00:00:00Z',
endDate: '2026-03-02T00:00:00Z',
surfacesToObserve: ['registration', 'schedule', 'networking'],
})
// Triage feedback (admin)
const { data: triaged } = await client.triageFeedback('my-lab', feedback.id, {
status: 'triaged',
priority: 'P1',
})Error Handling
import { FeedbackClient, FeedbackClientError } from '@denlabs/feedback-client'
try {
await client.getLab('nonexistent')
} catch (err) {
if (err instanceof FeedbackClientError) {
console.log(err.code) // 'NOT_FOUND'
console.log(err.status) // 404
console.log(err.message) // 'Lab not found'
}
}Error Codes
| Code | HTTP | Description |
|------|------|-------------|
| VALIDATION_ERROR | 400 | Invalid request parameters |
| UNAUTHORIZED | 401 | Missing or invalid admin token |
| NOT_FOUND | 404 | Resource not found |
| LAB_NOT_ACTIVE | 409 | Lab is not accepting feedback |
| SLUG_EXHAUSTED | 409 | Could not generate unique slug |
| RATE_LIMITED | 429 | Too many requests |
| INTERNAL_ERROR | 500 | Server error |
API Reference
| Method | Auth | Description |
|--------|------|-------------|
| listLabs(opts?) | Public | Paginated list of labs |
| createLab(input) | Admin | Create a new lab |
| getLab(slug) | Public | Get lab by slug |
| updateLabStatus(slug, input) | Admin | Update lab status |
| listFeedback(slug, opts?) | Public | Paginated feedback for a lab |
| submitFeedback(slug, input) | Public | Submit feedback |
| triageFeedback(slug, id, input) | Admin | Triage feedback |
License
MIT
