Ana içeriğe atla
Ribaunt, tüm genel API’leri için TypeScript türleriyle gelir. Sunucu tarafı kodunuzda kullanmak için türleri ribaunt’tan içe aktarın.

ChallengeToken

İmzalı bir JWT challenge token’ı. Bu, createChallenge()’dan dönen dizideki dize değeri ve verifySolution()’a geri ilettiğiniz değerdir.
type ChallengeToken = string; // A signed JWT challenge token

ChallengeSolution

Tarayıcı çözücüsü (veya testlerde solveChallenge()) tarafından üretilen iş kanıtı çözümü. nonce, challenge dizesiyle hash’lendiğinde, gereken sayıda öndeki sıfır onaltılık basamakla başlayan bir SHA-256 özet üreten değerdir.
interface ChallengeSolution {
  nonce: string; // The nonce that satisfies the PoW condition
  hash: string;  // The SHA-256 hash (hex) produced by nonce
}

ReplayStore

replayPrevention 'remote' olarak ayarlandığında dağıtılmış yeniden oynatma koruması sağlamak için uyguladığınız arabirim. Uygulamanızı verifySolution()’a options.replayStore aracılığıyla iletirsiniz.
interface ReplayStore {
  consume(jti: string, expiresAt: number): Promise<boolean>;
}
jti, challenge’ı benzersiz şekilde tanımlayan JWT token kimliğidir. expiresAt, token’ın ne zaman sona ereceğini gösteren saniye cinsinden bir Unix zaman damgasıdır. Gönderime izin vermek (ilk kullanım) için true, reddetmek (yeniden oynatma algılandı) için false döndürün. Uygulamanız atomik olmalıdır — yarış koşullarını önlemek için Redis SET NX EXAT gibi bir primitif kullanın.

LocalReplayStore

ribaunt’tan dışa aktarılan, yerleşik, işlem-yerel ReplayStore uygulaması. Tüketilen token kimliklerini bellekte saklar ve TTL’leri geçtiğinde girişleri otomatik olarak tahliye eder. replayPrevention 'local' (varsayılan) olduğunda bunu kullanın — bu modda otomatik olarak kullanılır. Ayrıca, işleyici başına ayrılmış bir depoya ihtiyaç duyduğunuzda doğrudan örnekleyebilirsiniz.
class LocalReplayStore implements ReplayStore {
  async consume(jti: string, expiresAt: number): Promise<boolean>;
}
import { LocalReplayStore } from 'ribaunt';

const store = new LocalReplayStore();

const valid = await verifySolution(tokens, solutions, {
  replayPrevention: 'remote',
  replayStore: store,
});
LocalReplayStore, çoklu işlemli veya sunucusuz dağıtımlar için uygun değildir. Bu ortamlar için, Redis SET NX EXAT gibi dağıtılmış atomik bir depoyla desteklenen kendi ReplayStore’unuzu uygulayın.

ReplayPreventionMode

verifySolution()’ın bir token’ın birden fazla kez gönderilmesini nasıl engelleyeceğini kontrol eder.
type ReplayPreventionMode = 'disabled' | 'local' | 'remote';
  • 'local' (varsayılan) — yeniden oynatma kontrolleri işlem-yereldir. Tek işlemli dağıtımlar için uygundur.
  • 'remote' — yeniden oynatma kontrolleri ReplayStore’unuzu kullanır. Bunu sunucusuz veya yatay olarak ölçeklendirilmiş dağıtımlar için kullanın.
  • 'disabled' — yeniden oynatma kontrolü yok. Token’lar süreleri dolana kadar yeniden kullanılabilir. Bunu yalnızca başka bir katman yeniden oynatma korumasını ele alıyorsa kullanın.

VerifySolutionOptions

verifySolution()’a üçüncü argüman olarak iletilen isteğe bağlı yapılandırma.
interface VerifySolutionOptions {
  replayPrevention?: ReplayPreventionMode; // default: 'local'
  replayStore?: ReplayStore;               // required when replayPrevention is 'remote'
  debug?: boolean;                          // default: true in development
  onWarning?: (warning: VerifyWarning) => void;
}

VerifyWarning

verifySolution() bir sorunla karşılaştığında onWarning geri çağrısına iletilen yapılandırılmış uyarı nesnesi. Konsol çıktısını etkinleştirmeden telemetri yakalamanıza olanak tanır.
interface VerifyWarning {
  reason: VerifyWarningReason;
  message: string;
  error?: unknown;
}

VerifyWarningReason

Doğrulama başarısızlığının kategorisini açıklayan bir dize birleşimi. Bunu, uyarıları farklı izleme kanallarına veya metriklere yönlendirmek için kullanabilirsiniz.
type VerifyWarningReason =
  | 'invalid-token'
  | 'expired-token'
  | 'invalid-solution'
  | 'replay-detected'
  | 'configuration-error';

SolveChallengeOptions

Testler sırasında süresiz olarak çalışmasını önlemek için solveChallenge()’a iletilen isteğe bağlı koruyucular.
interface SolveChallengeOptions {
  maxIterations?: number; // hard cap on nonce attempts
  maxDurationMs?: number; // default: 30000 ms
}

WidgetState

ribaunt/widget’tan içe aktarılır. Tarayıcıdaki CAPTCHA widget’ının mevcut durumunu temsil eder.
type WidgetState = 'initial' | 'verifying' | 'done' | 'error';

RibauntWidgetHandle

ribaunt/widget-react’ten içe aktarılır. Bu, <RibauntWidget> bileşenine eklenmiş bir React ref aracılığıyla açığa çıkarılan komut tutamacıdır. Uygulama kodunuzdan widget’ı programlı olarak kontrol etmek için kullanın.
interface RibauntWidgetHandle {
  reset(): void;
  getState(): WidgetState | undefined;
  startVerification(): void;
}