mirror of
https://github.com/hanzoai/status.git
synced 2026-10-30 18:21:48 +00:00
zip (a fiber v3 fork) is the fleet-wide Go web framework. Handlers are now func(c *zip.Ctx) error; routes, groups and middleware move to the zip surface. The published API is byte-for-byte unchanged. All 20 declared routes keep their method, path, status codes and response bodies; the route table was dumped from both trees and diffed to prove it, and is now pinned by declaredRoutes in api/routes_test.go so no future refactor can move it silently. Three deltas the framework bump would otherwise have shipped, and how each is held: - fiber v3's c.JSON() tags bodies "application/json; charset=utf-8"; v2 sent bare "application/json". api.writeJSON restores it — one helper, six sites. - fiber v2 listed auto-HEAD mirrors as routes; v3 generates them lazily at first serve. HEAD still answers 200 on every GET route, pinned by a new test. - zip.Config exposes no Immutable knob, so request-scoped strings are no longer copied on read. Audited every param/query/header/cookie read: the only value that outlives its handler is the external-endpoint error string, which lands in the store, so it is now explicitly cloned. Every other key flows into a map lookup or a SQL arg and is never retained. Bridges rather than rewrites, so nothing is reimplemented badly: - zipx.Wrap is the single fiber.Handler -> zip.Handler adapter, used for the cors/recover/compress/redirect/static middleware and for basicauth. - zip.AdaptNetHTTP fronts the Prometheus metrics handler; AdaptNetHTTPFunc the OIDC callback; AdaptNetHTTPMiddleware the g8 session gate. - security.Router is the narrow slice of zip's router surface that package needs, so *zip.App and a Group both satisfy it. - controller.Handle listens via app.Fiber().Listen(addr, fiber.ListenConfig) — TLS as a value in one listen path, because zip.Listen carries no TLS or dual-stack knob. This is the only escape from the zip surface. Route-level coverage added where there was none: the pinned route table, a walk asserting every route dispatches to a handler, HEAD mirroring, and the 404 tail of the static fallback chain. client, config/endpoint and metrics fail identically before and after this change (network-dependent tests and a pre-existing metrics_test build break); verified by stashing and re-running. Co-authored-by: Hanzo Dev <[email protected]>
20 lines
730 B
Go
20 lines
730 B
Go
// Package zipx is the single bridge between fiber-native middleware and zip's
|
|
// handler signature.
|
|
//
|
|
// zip owns the handler type (func(*zip.Ctx) error) and ships adapters for
|
|
// net/http (zip.AdaptNetHTTP*), but the fiber middleware catalogue it is built
|
|
// on speaks fiber.Handler. Wrap is the one place that crossing happens, so no
|
|
// call site has to reach for c.Fiber() itself.
|
|
package zipx
|
|
|
|
import (
|
|
fiber "github.com/zap-proto/fiber/v3"
|
|
"github.com/zap-proto/zip"
|
|
)
|
|
|
|
// Wrap adapts a fiber.Handler — any fiber v3 middleware — to a zip.Handler so
|
|
// it registers with app.Use / router.Use like native zip middleware.
|
|
func Wrap(h fiber.Handler) zip.Handler {
|
|
return func(c *zip.Ctx) error { return h(c.Fiber()) }
|
|
}
|