AuthRailAuthRail

API Reference

Complete API surface of AuthRail.

This section documents the public API of AuthRail.


createRail

Signature
createRail<Ctx>(
  name: string,
  middleware: Middleware<Ctx>[],
  options?: {
    debug?: boolean;
  }
): Rail<Ctx>

Creates a new rail instance.

Parameters:

  • name — identifier used for debugging
  • middleware — ordered array of middleware
  • options.debug — enables console logging during evaluation

Returns:

Rail Interface
{
  name: string;
  evaluate(ctx: Ctx): Promise<RailResult<Ctx>>;
}

Rail.evaluate

Signature
rail.evaluate(context: Ctx): Promise<RailResult<Ctx>>

Evaluates middleware sequentially and returns:

RailResult
type RailResult<Ctx> = {
  decision: {
    type: "allow" | "deny" | "redirect";
    to?: string;
    reason?: string;
  };
  context: Ctx;
};

Evaluation is always asynchronous.


Middleware

Type Definition
type Middleware<Ctx> =
  | ((ctx: Readonly<Ctx>) =>
      | MiddlewareResult<Ctx>
      | void
      | Promise<MiddlewareResult<Ctx> | void>);
Result Type
type MiddlewareResult<Ctx> = {
  decision?: {
    type: "allow" | "deny" | "redirect";
    to?: string;
    reason?: string;
  };
  context?: Partial<Ctx>;
};

Rules:

  • Returning void continues execution.
  • Returning decision short-circuits execution.
  • Returning context enriches the working context.

requireAuth

Helper

ts requireAuth(redirectTo: string): Middleware

Redirects if ctx.user is falsy.


requireRole

Helper

ts requireRole(role: string): Middleware

Denies if ctx.user.role does not match.


allowIf

Helper
allowIf(predicate: (ctx: Ctx) => boolean): Middleware

Denies if predicate returns false.


blockIf

Helper
blockIf(predicate: (ctx: Ctx) => boolean): Middleware

Denies if predicate returns true.


React Utilities

These are optional helpers for React environments.

RailBoundary

Props
<RailBoundary
  rail={rail}
  context={ctx}
  fallback={ReactNode}
  denied={ReactNode}
  onRedirect={(to) => void}
>
  {children}
</RailBoundary>

Evaluates a rail and renders based on decision.


useRail

Hook Signature
useRail<Ctx>(rail: Rail<Ctx>, context: Ctx): {
  status: "idle" | "loading" | "done";
  decision: Decision | null;
  context: Ctx | null;
}

Hook for imperative evaluation inside React components.


protect

HOC Signature
protect<P>(
  rail: Rail<any>,
  getContext: (props: P) => any,
  onRedirect?: (to: string) => void,
  fallback?: ReactNode,
  denied?: ReactNode
): (Component: ComponentType<P>) => ComponentType<P>

Higher-order component wrapper for declarative route-level or component-level protection.

On this page