import type { FastifyInstance } from "fastify"; /** Whether any entry in an `If-None-Match` header matches. The header is a comma-separated list, * and `*` matches any existing representation (RFC 9110 ยง13.1.2). */ export declare function ifNoneMatchSatisfied(header: string | undefined, etag: string): boolean; /** * Content-derived `ETag` on every successful GET, and a 304 when the client already has it. * * Derived from the response body rather than from the graph's `resolvedAt`, and that is the whole * design. `resolvedAt` changes on every reload โ€” every `--watch` trigger, every `POST /reload`, * every SIGHUP โ€” including the overwhelmingly common reload where a document was touched and * nothing a given endpoint returns actually changed. A timestamp validator would invalidate every * client's cache on every reload, which is the same as having no validator. Hashing the body means * the org graph can be re-resolved a hundred times and `/teams` keeps the same ETag until `/teams` * genuinely differs. * * What this saves is the network, not the computation: the payload is still built before it is * hashed. That is the right trade here โ€” building it is pure in-memory work over an already * resolved graph, while `/graph` on a large org is megabytes over the wire, repeatedly, to * dashboards and CI jobs polling for changes. * * Registered as an `onSend` hook rather than per route, so a route added later is covered by * existing rather than by remembering. */ export declare function registerEtag(app: FastifyInstance): void; //# sourceMappingURL=etag.d.ts.map