@loop/hono
Shared Hono utilities for building Loop Health API services. Provides app factory, middleware, response helpers, and checkout token management.
Installation
pnpm add @loop/honoApp Factory
import { createApp } from '@loop/hono';
const app = createApp();
// Pre-configured with: CORS, request ID, error handlerMiddleware
Authentication
import { requireAuth, optionalAuth, requireTier, requireRole } from '@loop/hono';
// Require authenticated user
app.use('/api/*', requireAuth);
// Optional auth (user may or may not be logged in)
app.use('/public/*', optionalAuth);
// Require specific tier
app.use('/premium/*', requireTier('pro'));
// Require specific role
app.use('/admin/*', requireRole('admin'));Rate Limiting
import { rateLimit } from '@loop/hono';
app.use('/*', rateLimit({ max: 100, window: 60 }));Validation
import { validator } from '@loop/hono';
import { z } from 'zod';
app.post('/profiles', validator('json', createProfileSchema), async (c) => {
const data = c.req.valid('json');
// data is fully typed from the Zod schema
});Request ID
import { requestId } from '@loop/hono';
app.use('/*', requestId);
// Adds X-Request-Id header to responsesError Handler
import { errorHandler } from '@loop/hono';
app.onError(errorHandler);
// Catches errors and returns consistent JSON error responsesResponse Helpers
import { success, error, paginated, created, noContent } from '@loop/hono';
// Success response
app.get('/users/:id', async (c) => {
const user = await getUser(c.req.param('id'));
return success(c, user);
});
// Created response (201)
app.post('/users', async (c) => {
const user = await createUser(data);
return created(c, user, `/users/${user.id}`);
});
// Paginated response
app.get('/users', async (c) => {
const { data, total } = await listUsers(query);
return paginated(c, data, { page: 1, limit: 20, total });
});
// No content (204)
app.delete('/users/:id', async (c) => {
await deleteUser(c.req.param('id'));
return noContent(c);
});
// Error response
app.get('/fail', async (c) => {
return error(c, 404, 'NOT_FOUND', 'User not found');
});Checkout Token
Secure checkout token generation and verification:
import { generateCheckoutToken, verifyCheckoutToken } from '@loop/hono/checkout-token';
const token = await generateCheckoutToken({ userId: 'user_123', cartId: 'cart_456' });
const payload = await verifyCheckoutToken(token);Used By
@loop/hono is used by lightweight API services built with Hono:
- @loop/call-booking — Hono middleware and response helpers
- @loop/embeddings-api — API middleware and error handling
- @loop/my-loop-health — Platform API routes