Skip to content Version [0.3.0]
Added
http/paginate.js declarative pagination middleware factory. Wraps lib/paginate.js
utilities into a pipeline-compatible middleware supporting offset and cursor strategies.
Placed in Stage 1 (Negotiation) after url. Reads parsed query from domainAcc.url.query
and stores structured pagination parameters at acc.paginate. (#114)
send() paginate option. When true, reads domainAcc.paginate and
responseAcc.paginate to auto-generate RFC 8288 Link headers (first, prev, next,
last) and X-Total-Count for offset pagination responses. Supports both offset and
cursor strategies. (#114)
'paginate' added to SEND_RESERVED to prevent pagination metadata from leaking as
RFC 9457 extension members. (#114)
errorFormatter option for send() and handler(). Pluggable error body formatter
for statusCode >= 400 responses. When provided, receives the RFC 9457 Problem Details
object (plain object) and {requestId, statusCode, method} context. The return value
becomes the response body, serialized as application/json instead of
application/problem+json. Applies to both the main error path and 412 conditional
responses (endWithProblem). Teams with existing error contracts can adopt ergo without
changing their client-facing error format. (#110)
redactErrors option for handler(). Controls whether caught 5xx exception messages
appear in the RFC 9457 response detail field. Defaults to true (secure — generic
status text only). Set to false during development to surface err.message in error
responses without exposing stack traces. (#109)
- Typed middleware options and results. All 21 middleware factory functions now have
hand-written
.d.ts overrides in types-override/http/ with named options interfaces
(AcceptsOptions, BodyOptions, CorsOptions, ValidateOptions, etc.) and precise
return types. Consumers get autocomplete and type-checking for factory parameters and
pipeline accumulator values without as any casts. Import options/result types from
@centralping/ergo/types. (#108)
- New result type interfaces:
AuthorizationResult, TracingResult, IdempotencyResult.
(#108)
- New utility types:
AjvFormatName (26-member string literal union tracking ajv-formats
3.x), AuthorizationStrategy, ValidateSchemas, CookieJar (now includes jar methods).
(#108)
types-override/http/main.d.ts override provides typed re-exports for all middleware,
httpErrors, fromConnect, and paginate namespace. (#108)
Changed
- Breaking:
paginate export from @centralping/ergo changed from lib/paginate.js
utility namespace ({parseOffsetParams, parseCursorParams, offsetResponse, cursorResponse})
to http/paginate.js factory function. Consumers using paginate.parseOffsetParams() must
switch to deep import: import {parseOffsetParams} from '@centralping/ergo/lib/paginate'.
(#114)
Fixed
envelope callback type signature corrected. Changed from
(body: unknown, statusCode: number) => unknown to
(body: unknown, ctx: {requestId: string; statusCode: number; method: string}) => unknown
to match the actual implementation which passes a context object, not a bare status code.
Affects SendOptions and HandlerOptions. (#110)
PreferResult now matches runtime. Corrected from {[k: string]: {value?: string}}
to {[k: string]: string | true} — the runtime returns flat preference values, not
wrapped objects. (#108)
CookieJar now includes jar methods. Added set(), get(), clear(), toHeader(),
size, and isJar to match the actual cookie jar API. Previously typed as a bare index
signature. (#108)
LogEntry now includes trace correlation fields. Added optional traceId and spanId
properties populated when the tracing middleware is active. (#108)
Removed
RateLimitResult removed. The rate-limit middleware only returns
{response: {headers}} — it never stores a domain accumulator value. The interface
described a shape that did not exist at runtime. (#108)