import './request-augmentation';
// Re-export the augmentation types so userland can refer to the marker
// surface explicitly when needed.
export type { StacksRequestExtensions, StacksRequestMacros, StacksRequestMarkers } from './request-augmentation';
export type { MiddlewareConfig, Request } from './middleware';
// Export route registry types — owned here rather than in app/Routes.ts
// so the path doesn't depend on a 5-level relative reach across the
// framework defaults tree (stacksjs/stacks#1863, T-10).
export type { RouteDefinition, RouteRegistry } from './route-types';
export type { PathParamRejection, SanitizePathParamOptions } from './path-sanitize';
export type { StreamOptions } from './stacks-router';
export type { SignedUrlOptions, SignedUrlVerifyResult } from './signed-url';
export type { EncryptedSessionStoreOptions } from './encrypted-session-store';
export type {
  RedisClient,
  SessionConfig,
  SessionData,
  SessionStore,
  StacksSessionConfig,
} from './session-factory';
// Re-export everything from bun-router (includes response factory)
export * from '@stacksjs/bun-router';
// Export Stacks-specific action resolver and URL helper
export { assertRouteMiddlewareResolvable, clearMiddlewareCache, createStacksRouter, findUnresolvableRouteMiddleware, installMiddlewareHotReload, route, serve, serverResponse, url, warnOnMultipleRouterInstances } from './stacks-router';
// Export request context helpers
export { cacheRequestQuery, getCurrentRequest, getTraceId, request, runWithRequest, setCurrentRequest, withTraceId } from './request-context';
// Export Middleware class for defining route middleware
export { Middleware } from './middleware';
// Export route loader
export { loadRoutes } from './route-loader';
// Export error handler utilities
export {
  clearTrackedQueries,
  createErrorResponse,
  createMiddlewareErrorResponse,
  createNotFoundResponse,
  createValidationErrorResponse,
  getQueryShapeCounts,
  trackQuery,
} from './error-handler';
// Export route introspection helpers
export { listRegisteredRoutes, routeParams } from './stacks-router';
// Export JSON-vs-HTML negotiation predicate so userland can short-circuit
// the same decision the framework makes in formatResult / error-handler.
export { isApiRequest, JSON_CONTENT_TYPE } from './api-shape';
// Export action-level rate limiting helpers
export { rateLimit, rateLimitStatus, clearRateLimit } from './rate-limit';
// Export path-param sanitization helper (stacksjs/stacks#1870 R-12).
// Defense-in-depth for actions that interpolate route params into
// filesystem paths; the helper enforces no-traversal / no-absolute /
// no-null-byte / length ceiling at a single chokepoint.
export { PathParamError, safePathParam, sanitizePathParam } from './path-sanitize';
// Export the streaming-response helper for SSE / NDJSON / chunked
// binary returns (stacksjs/stacks#1870 R-4). Actions can return
// `stream(asyncGen, { type: 'sse' })` and the router pipes it back
// with the right Content-Type + no-cache headers.
export { stream } from './stacks-router';
// Signed-URL helpers — HMAC over the URL + optional expiry so single-
// use links (email verify, password reset, unsubscribe) can be handed
// out without long-lived bearer tokens. Pair `signedUrl(...)` with the
// `signed` middleware (or call `verifySignedUrl(req.url)` directly).
// See stacksjs/stacks#1870 R-7.
export { signedUrl, signUrl, verifySignedUrl, verifySignedUrlMiddleware } from './signed-url';
// Encryption-at-rest wrapper for any bun-router SessionStore
// (stacksjs/stacks#1878 Se-4). Opt-in: wrap your existing store
// instance so session payloads are AES-GCM encrypted via APP_KEY
// before being persisted.
export { EncryptedSessionStore } from './encrypted-session-store';
// Session driver factory (stacksjs/stacks#1889, F-2 from #1874).
// Builds a SessionStore from the Stacks config — picks the right
// driver from `config.session.driver`, optionally wraps with
// EncryptedSessionStore. Re-exports all four bun-router store
// classes so callers can assemble custom stacks manually too.
export {
  createSessionStore,
  createStacksSessionStore,
  DatabaseSessionStore,
  FileSessionStore,
  MemorySessionStore,
  RedisSessionStore,
} from './session-factory';
