{"version":3,"sources":["../src/types.ts"],"names":[],"mappings":";;;AAoSO,IAAM,gBAAA,GAAN,cAA+B,KAAA,CAAM;AAAA,EAC1C,YACE,OAAA,EACO,UAAA,GAAqB,GAAA,EACrB,IAAA,GAAe,kBACf,OAAA,EACP;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJN,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACd;AACF;AAEO,IAAM,eAAA,GAAN,cAA8B,gBAAA,CAAiB;AAAA,EACpD,WAAA,CAAY,SAAiB,OAAA,EAAe;AAC1C,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,kBAAA,EAAoB,OAAO,CAAA;AAC/C,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACd;AACF;AAEO,IAAM,mBAAA,GAAN,cAAkC,gBAAA,CAAiB;AAAA,EACxD,WAAA,CAAY,SAAiB,OAAA,EAAe;AAC1C,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,sBAAA,EAAwB,OAAO,CAAA;AACnD,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF;AAEO,IAAM,kBAAA,GAAN,cAAiC,gBAAA,CAAiB;AAAA,EACvD,WAAA,CAAY,SAAiB,OAAA,EAAe;AAC1C,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,qBAAA,EAAuB,OAAO,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EACd;AACF;AAEO,IAAM,aAAA,GAAN,cAA4B,gBAAA,CAAiB;AAAA,EAClD,WAAA,CAAY,SAAiB,OAAA,EAAe;AAC1C,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,WAAA,EAAa,OAAO,CAAA;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;AAEO,IAAM,cAAA,GAAN,cAA6B,gBAAA,CAAiB;AAAA,EACnD,WAAA,CAAY,SAAiB,OAAA,EAAe;AAC1C,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,qBAAA,EAAuB,OAAO,CAAA;AAClD,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AACF","file":"types.cjs","sourcesContent":["import { AuthOutput, ReAuthEngine, Token } from '@re-auth/reauth';\nimport { ReAuthJWTPayload } from '@re-auth/reauth/services';\nimport { CookiePrefixOptions } from 'hono/utils/cookie';\n\n// Base HTTP adapter configuration\nexport interface HttpAdapterConfig {\n  engine: ReAuthEngine;\n  basePath?: string;\n  cors?: CorsConfig;\n  rateLimit?: RateLimitConfig;\n  security?: SecurityConfig;\n  validation?: ValidationConfig;\n  cookie?: {\n    name: string;\n    refreshTokenName?: string;\n    options: {\n      httpOnly?: boolean;\n      secure?: boolean;\n      sameSite?: 'lax' | 'strict' | 'none';\n      path?: string;\n      domain?: string;\n      maxAge?: number; // in seconds\n      expires?: Date;\n      partitioned?: boolean;\n      prefix?: CookiePrefixOptions;\n      priority?: 'low' | 'medium' | 'high';\n    };\n    refreshOptions?: {\n      httpOnly?: boolean;\n      secure?: boolean;\n      sameSite?: 'lax' | 'strict' | 'none';\n      path?: string;\n      domain?: string;\n      maxAge?: number; // in seconds\n      expires?: Date;\n      partitioned?: boolean;\n      prefix?: CookiePrefixOptions;\n      priority?: 'low' | 'medium' | 'high';\n    };\n  };\n  headerToken?: {\n    accesssTokenHeader: string;\n    refreshTokenHeader?: string;\n  };\n}\n\n// CORS configuration\nexport interface CorsConfig {\n  origin?:\n    | string\n    | string[]\n    | boolean\n    | ((\n        origin: string | undefined,\n        callback: (err: Error | null, allow?: boolean) => void,\n      ) => void);\n  credentials?: boolean;\n  allowedHeaders?: string[];\n  exposedHeaders?: string[];\n  methods?: string[];\n  preflightContinue?: boolean;\n  optionsSuccessStatus?: number;\n}\n\n// Rate limiting configuration\nexport interface RateLimitConfig {\n  windowMs?: number;\n  max?: number;\n  message?: string;\n  standardHeaders?: boolean;\n  legacyHeaders?: boolean;\n  skipSuccessfulRequests?: boolean;\n  skipFailedRequests?: boolean;\n  keyGenerator?: (request: any) => string;\n}\n\n// Security configuration\nexport interface SecurityConfig {\n  helmet?: boolean | HelmetConfig;\n  csrf?: boolean | CsrfConfig;\n  sanitizeInput?: boolean;\n  sanitizeOutput?: boolean;\n}\n\nexport interface HelmetConfig {\n  contentSecurityPolicy?: boolean | object;\n  crossOriginEmbedderPolicy?: boolean;\n  crossOriginOpenerPolicy?: boolean;\n  crossOriginResourcePolicy?: boolean;\n  dnsPrefetchControl?: boolean;\n  frameguard?: boolean | object;\n  hidePoweredBy?: boolean;\n  hsts?: boolean | object;\n  ieNoOpen?: boolean;\n  noSniff?: boolean;\n  originAgentCluster?: boolean;\n  permittedCrossDomainPolicies?: boolean;\n  referrerPolicy?: boolean | object;\n  xssFilter?: boolean;\n}\n\nexport interface CsrfConfig {\n  secret?: string;\n  cookie?: boolean | object;\n  sessionKey?: string;\n  value?: (req: any) => string;\n}\n\n// Input validation configuration\nexport interface ValidationConfig {\n  validateInput?: boolean;\n  validateOutput?: boolean;\n  maxPayloadSize?: number;\n  allowedFields?: string[];\n  sanitizeFields?: string[];\n}\n\n// HTTP request/response types for framework abstraction\nexport interface HttpRequest {\n  method: string;\n  url: string;\n  path: string;\n  query: Record<string, any>;\n  params: Record<string, string>;\n  body: any;\n  headers: Record<string, string>;\n  cookies?: Record<string, string>;\n  ip?: string;\n  userAgent?: string;\n  // Current authenticated user information\n  user?: AuthenticatedUser | null;\n}\n\n// Authenticated user information from session\nexport interface AuthenticatedUser {\n  /** The authenticated subject from the session */\n  subject: any;\n  /** The session token */\n  token: Token;\n  /** Whether the session is valid */\n  valid: boolean;\n  /** Session metadata */\n  metadata?: {\n    payload?: ReAuthJWTPayload;\n    type?: 'jwt' | 'legacy' | undefined;\n    // Add any other metadata fields as needed\n    [key: string]: any;\n  };\n}\n\nexport interface HttpResponse {\n  status(code: number): this;\n  json(data: any): this;\n  send(data: any): this;\n  header(name: string, value: string): this;\n  cookie(name: string, value: string, options?: any): this;\n  clearCookie(name: string, options?: any): this;\n}\n\n// Framework adapter interface\nexport interface FrameworkAdapter<\n  TRequest = any,\n  TResponse = any,\n  TNext = any,\n> {\n  name: string;\n  createMiddleware(): (\n    req: TRequest,\n    res: TResponse,\n    next: TNext,\n  ) => Promise<void> | void;\n  createUserMiddleware(): (\n    req: TRequest,\n    res: TResponse,\n    next: TNext,\n  ) => Promise<void> | void;\n  extractRequest(req: TRequest): HttpRequest;\n  sendResponse(res: TResponse, data: any, statusCode?: number): void;\n  handleError(res: TResponse, error: Error, statusCode?: number): void;\n  getCurrentUser(req: TRequest): Promise<AuthenticatedUser | null>;\n}\n\n// Route handler types\nexport interface RouteHandler {\n  (req: HttpRequest, res: HttpResponse): Promise<any> | any;\n}\n\nexport interface AuthStepRequest extends HttpRequest {\n  params: Record<string, string>;\n  plugin: {\n    name: string;\n    step: string;\n  };\n}\n\nexport interface SessionRequest extends HttpRequest {\n  headers: Record<string, string> & {\n    authorization?: string;\n  };\n}\n\n// Plugin endpoint metadata\nexport interface PluginEndpoint {\n  pluginName: string;\n  stepName: string;\n  path: string;\n  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n  requiresAuth: boolean;\n  description?: string;\n  inputSchema?: any;\n  outputSchema?: any;\n}\n\n// HTTP adapter response types\nexport interface ApiResponse<T = any> {\n  success: boolean;\n  data?: T;\n  error?: {\n    code: string;\n    message: string;\n    details?: any;\n  };\n  meta?: {\n    timestamp: string;\n    requestId?: string;\n    pagination?: {\n      page: number;\n      limit: number;\n      total: number;\n    };\n  };\n}\n\nexport interface AuthStepResponse extends ApiResponse<AuthOutput> {\n  data?: AuthOutput & {\n    nextStep?: string;\n    requiresRedirect?: boolean;\n    sessionToken?: Token;\n  };\n  status: number;\n  /** Redirect URL for OAuth flows */\n  redirect?: string;\n  /** Secret data (cookies) to set for OAuth flows */\n  secret?: Record<string, string>;\n}\n\nexport interface SessionResponse extends ApiResponse {\n  data?: {\n    valid: boolean;\n    subject?: any;\n    token?: Token;\n    expiresAt?: string;\n    metadata?: {\n      payload?: ReAuthJWTPayload;\n      type?: 'jwt' | 'legacy' | undefined;\n      // Add any other metadata fields as needed\n      [key: string]: any;\n    };\n  };\n}\n\nexport interface PluginListResponse extends ApiResponse {\n  data?: Array<{\n    name: string;\n    description: string;\n    steps: Array<{\n      name: string;\n      description?: string;\n      method: string;\n      path: string;\n      requiresAuth: boolean;\n    }>;\n  }>;\n}\n\n// Middleware types\nexport interface MiddlewareFunction<\n  TRequest = any,\n  TResponse = any,\n  TNext = any,\n> {\n  (req: TRequest, res: TResponse, next: TNext): Promise<void> | void;\n}\n\nexport interface SecurityMiddleware {\n  cors(): MiddlewareFunction;\n  rateLimit(): MiddlewareFunction;\n  helmet(): MiddlewareFunction;\n  validation(): MiddlewareFunction;\n}\n\n// Error types\nexport class HttpAdapterError extends Error {\n  constructor(\n    message: string,\n    public statusCode: number = 500,\n    public code: string = 'INTERNAL_ERROR',\n    public details?: any,\n  ) {\n    super(message);\n    this.name = 'HttpAdapterError';\n  }\n}\n\nexport class ValidationError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 400, 'VALIDATION_ERROR', details);\n    this.name = 'ValidationError';\n  }\n}\n\nexport class AuthenticationError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 401, 'AUTHENTICATION_ERROR', details);\n    this.name = 'AuthenticationError';\n  }\n}\n\nexport class AuthorizationError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 403, 'AUTHORIZATION_ERROR', details);\n    this.name = 'AuthorizationError';\n  }\n}\n\nexport class NotFoundError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 404, 'NOT_FOUND', details);\n    this.name = 'NotFoundError';\n  }\n}\n\nexport class RateLimitError extends HttpAdapterError {\n  constructor(message: string, details?: any) {\n    super(message, 429, 'RATE_LIMIT_EXCEEDED', details);\n    this.name = 'RateLimitError';\n  }\n}\n"]}