Documentation
    Preparing search index...

    Module @quatrain/auth-rbac

    @quatrain/auth-rbac

    License: AGPL-3.0-only
    Isomorphic Role-Based Access Control, Field-Level Security, M2M Agent Guards & Tarpitting for Quatrain

    @quatrain/auth-rbac is an isomorphic, cloud-native authorization engine designed for the Quatrain ecosystem. It provides unified, declarative access control spanning:

    • Macro-Security: Route and endpoint protection (URI patterns + HTTP methods).
    • Micro-Security (FLS): Field-Level Security calculating hidden, readonly, and readwrite modes per entity property.
    • Automated Payload Sanitization: sanitizeRead() and sanitizeWrite() eliminating schema duplication.
    • M2M & AI Agent Defense: Subject-type separation (human, agent, service) with built-in tarpitting (progressive latency injection and request throttling for automated scraping and runaway agent loops).
    • Isomorphic Middlewares: Abstract base class with concrete adapters for Express and Astro SSR/API.

    Within the Quatrain monorepo:

    {
    "dependencies": {
    "@quatrain/auth-rbac": "workspace:*"
    }
    }

    @quatrain/auth-rbac
    ├── engine/
    │ ├── RbacPolicyEngine # Resolves role inheritance, route matching, FLS and payload sanitization
    │ └── TarpitManager # Manages sliding-window request throttling and progressive latency injection
    ├── middlewares/
    │ ├── AbstractRbacMiddleware # Agnostic middleware foundation
    │ ├── ExpressRbacMiddleware # Standard Express (req, res, next) guard
    │ └── AstroRbacMiddleware # Unified Astro SSR and API guard
    └── types/ # Strongly typed interfaces and contracts

    import { RbacPolicyEngine } from '@quatrain/auth-rbac'

    const engine = new RbacPolicyEngine([
    {
    id: 'curator',
    name: 'Agronomy Curator',
    routes: [
    { pattern: '/api/curate', methods: ['GET', 'POST'], access: 'allow' },
    { pattern: '/**', methods: ['*'], access: 'deny' }
    ],
    entities: {
    'okf-document': {
    defaultMode: 'readwrite',
    fields: {
    soa: 'readonly',
    internalReviewerNotes: 'hidden'
    }
    }
    }
    }
    ])

    const user = { id: 'u1', roles: ['curator'], subjectType: 'human' }

    // 1. Route check
    engine.canAccessRoute(user, '/api/curate', 'POST') // true

    // 2. Field mode check
    engine.getFieldAccess(user, 'okf-document', 'soa') // 'readonly'
    engine.getFieldAccess(user, 'okf-document', 'internalReviewerNotes') // 'hidden'

    // 3. Payload sanitization
    const cleanPayload = engine.sanitizeWrite(user, 'okf-document', {
    title: 'Soil Guide',
    soa: 'malicious/soa', // Stripped automatically
    internalReviewerNotes: 'Secret' // Stripped automatically
    })

    Classes

    AbstractRbacMiddleware
    AstroRbacMiddleware
    ExpressRbacMiddleware
    RbacPolicyEngine
    TarpitManager

    Interfaces

    AstroLikeContext
    AstroRbacOptions
    EntityFieldRules
    ExpressLikeRequest
    ExpressLikeResponse
    ExpressRbacOptions
    RbacRequestContext
    RbacUserContext
    RoleDefinition
    RouteEvaluationResult
    RouteRule
    TarpitRuleConfig

    Type Aliases

    AccessDecision
    AstroLikeMiddlewareNext
    AstroUserResolver
    ExpressLikeNextFunction
    ExpressUserResolver
    FieldAccessMode
    HttpMethod
    RbacAction
    RouteActionInput
    SubjectType

    Functions

    mapHttpMethodToAction