black/apricot homelan died 2026-06-27. Point everything at the DO store tier: - @lilith npm registry: forge.black.lan/npm.black.lan -> cocotte-forge Verdaccio (134.199.243.61:4873) across bunfig.toml scopes, all deploy.sh .npmrc writers, and package.json publishConfig. - Forgejo URL (git/CI): forge.black.lan -> 134.199.243.61:3000 / :2222. - quinn.www prod.conf /photos: was proxy_pass to dead black_photos (black:8081); now served from local disk (root /var/www/quinn.www/dist). Prevents a future deploy from re-breaking photos. (Phase G: repoint to DO Spaces/CDN later.) Interim bare-IP endpoints; switch to named uvlava infranet hosts once live. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| tsconfig.test.json | ||
| tsup.config.ts | ||
@lilith/provider-api-client
Type-safe HTTP client for the provider API public surface.
Base URL resolution
import.meta.env.VITE_QUINN_API_BASE_URL(Vite env override)localhost/127.0.0.1→http://localhost:3040- Otherwise →
https://api.quinn.apricot.lan
Exports
Types
BlogPostSummary, BlogPost, ContactChannel, ContactPayload, ContactResult, TouringPayload, TouringResult, TrackAvailability, RosterApplicationPayload, RosterApplicationResult, AnalyticsEventPayload
Error classes
ApiError, NotFoundError, RateLimitError, ValidationError, NetworkError
Endpoints
| Function | Method | Path |
|---|---|---|
fetchBlogPosts() |
GET | /www/blog |
fetchBlogPost(slug) |
GET | /www/blog/:slug |
submitContact(payload) |
POST | /public/contact |
subscribeToTouring(payload) |
POST | /public/touring/subscribe |
fetchAvailability() |
GET | /public/roster/availability |
fetchAvailabilityBySlug(slug) |
GET | /public/roster/availability/:slug |
submitRosterApplication(payload) |
POST | /public/roster/apply |
trackEvent(path, payload) |
POST | /public/analytics/track/* (fire-and-forget) |
Low-level
apiFetch<T>(url, init?) — typed fetch with automatic error mapping
resolveBaseUrl() — base URL resolution