Zum Hauptinhalt springen
createChallenge() wird aus ribaunt importiert und serverseitig aufgerufen, um ein oder mehrere Proof-of-Work-Challenge-Tokens zu generieren. Jeder Token ist ein signiertes JWT, das der Browser-Solver dekodiert und gegen das er rechnet.

Import

import { createChallenge } from 'ribaunt';

Signatur

function createChallenge(
  difficulty?: number,
  amount?: number,
  ttlSeconds?: number
): ChallengeToken[]

Parameter

difficulty
number
Standard:"5"
Anzahl der führenden Null-Hexziffern, die im SHA-256-Hash erforderlich sind. Jede Erhöhung verdoppelt die Lösezeit ungefähr. Werte über 6 können dazu führen, dass Browser hängen bleiben.
amount
number
Standard:"4"
Anzahl der zu generierenden Challenge-Tokens. Mehr Challenges erhöhen die gesamte Proof-of-Work-Last, erhöhen aber auch die Netzwerkbandbreite.
ttlSeconds
number
Standard:"30"
Lebensdauer des Challenge-Tokens in Sekunden. Tokens, die nach Ablauf eingereicht werden, werden von verifySolution abgelehnt.

Rückgabewert

Gibt ChallengeToken[] zurück — ein Array signierter JWT-Zeichenketten. Sende dieses Array als { challenges: tokens } an den Browser.

Beispiel

import { createChallenge } from 'ribaunt';

// Fast: low difficulty, short TTL (login forms, comment boxes)
const fast = createChallenge(4, 4, 30);

// Moderate: standard configuration for most use cases
const moderate = createChallenge(5, 4, 120);

// High: sensitive actions (account creation, password reset)
const high = createChallenge(5, 8, 120);

Empfohlene Einstellungen

AnwendungsfallSchwierigkeitAnzahlTTL
Schnell / Hintergrund4430
Mittel / Formular-Einreichung5460
Hoch / sensible Aktionen58120

Validierung

createChallenge() validiert alle drei Parameter zur Laufzeit und wirft einen Fehler, wenn ein Wert ungültig ist:
  • difficulty — muss eine endliche Zahl und mindestens 1 sein. Bruchwerte werden mit Math.floor() abgerundet.
  • amount — muss eine endliche Zahl und mindestens 1 sein. Bruchwerte werden mit Math.floor() abgerundet.
  • ttlSeconds — muss eine endliche Zahl und mindestens 1 sein. Bruchwerte werden mit Math.floor() abgerundet.
Lasse niemals vom Benutzer kontrollierte Request-Parameter ohne Validierung direkt in createChallenge() einfließen.
Erfordert, dass RIBAUNT_SECRET als Umgebungsvariable gesetzt ist. createChallenge() wirft einen Fehler, wenn das Secret fehlt.