Files
2026-05-27 23:29:53 +01:00

3.5 KiB
Raw Permalink Blame History

OpenSpec Change: enterprise-gaming-api-plugin-anticheat

  • Change ID: enterprise-gaming-api-plugin-anticheat
  • Package: @suaveplan/api-plugin-anticheat
  • Category: gaming/server
  • Target path: gaming/server/api-plugin-anticheat
  • Status: PROPOSED
  • Date: 2026-04-24
  • Reference spec: /mnt/s/web/suaveplan/enterprise/api-plugin-anticheat.md

Summary

Deliver @suaveplan/api-plugin-anticheat on the genesis branch from scratch at enterprise quality. The package provides server-side anti-cheat validation with speed, damage, action-rate, and teleport checks. A ViolationTracker records per-player violations with severity 1–10, decays accumulated violations over time, and computes a running trust score (starting at 100). When the trust score drops below the ban threshold, the tracker fires anticheat:ban event. HTTP routes expose reporting and admin endpoints. Genesis adds Zod violation schemas, structured errors, OTel violation counter, injectable clock, and 100% coverage.


Current-state audit (genesis)

Package does not exist on genesis yet — fresh build.


Available workspace deps on genesis

Package Role
@suaveplan/error (workspace:^) AntiCheatError; AC.* codes
@suaveplan/types (workspace:^) Clock
@suaveplan/events (workspace:^) anticheat:violation, anticheat:ban, anticheat:flag events
zod (catalog:forms) Violation, CheckConfig schemas
@opentelemetry/api (catalog:observability) Violation counter, ban counter

Public API surface

type ViolationType = 'speed' | 'damage' | 'action_rate' | 'teleport' | 'custom'

interface Violation {
  playerId: string
  type: ViolationType
  severity: number    // 1–10
  data?: unknown
  timestamp: number
}

interface CheckConfig {
  maxSpeed?: number             // m/s
  maxDamagePerSecond?: number
  maxActionsPerSecond?: number
  maxTeleportDistance?: number  // meters
  banThreshold?: number         // trust score, default 30
  decayRatePerSecond?: number   // violation decay, default 0.1
}

function createViolationTracker(config: CheckConfig, options?: { clock?: Clock }): ViolationTracker

interface ViolationTracker {
  check(playerId: string, type: ViolationType, value: number): void
  addViolation(violation: Violation): void
  getTrustScore(playerId: string): number
  getViolations(playerId: string): Violation[]
  isBanned(playerId: string): boolean
  tick(dt: number): void   // decay violations
  reset(playerId: string): void
}

HTTP Routes

Method Path Description
POST /check Submit player action for validation
GET /players/:id/score Get trust score
GET /players/:id/violations List violations
DELETE /players/:id/violations Reset violations (admin)
POST /ban/:id Manual ban

File layout

gaming/server/api-plugin-anticheat/
  package.json
  tsconfig.json
  vitest.config.ts
  src/
    index.ts
    error-codes.ts
    types/common.ts
    types/common.md
    core/
      violation-tracker/
        violation-tracker.ts
        violation-tracker.md
        violation-tracker.types.ts
        violation-tracker.test.ts
        index.ts
    routes/
      anticheat.ts
      anticheat.md
    plugin.ts
    plugin.md
  tests/
    integration.test.ts

Impact

Downstream: @suaveplan/api-plugin-game-server hooks ban events to session kick. Prerequisites: @suaveplan/error, @suaveplan/types, @suaveplan/events.