@kanadi/core
Version:
Multi-Layer CAPTCHA Framework with customizable validators and challenge bundles
53 lines (43 loc) • 1.28 kB
text/typescript
import type { DatabaseConfig } from "../database/types";
import type { IChallengeValidator } from "../middleware/types";
import { KanadiContext } from "./context";
export class KanadiClient {
private validators: Map<string, IChallengeValidator> = new Map();
private databaseConfigs: DatabaseConfig[] = [];
private namespace: string;
constructor(namespace: string) {
this.namespace = namespace;
}
registerValidators(validators: IChallengeValidator[]): void {
for (const validator of validators) {
const metadata = Reflect.getMetadata(
"middleware:metadata",
validator.constructor,
);
if (metadata) {
this.validators.set(metadata.id, validator);
}
}
}
registerDatabaseConfigs(configs: DatabaseConfig[]): void {
this.databaseConfigs = configs;
}
createContext(
sessionId: string,
metadata?: Record<string, any>,
): KanadiContext {
return new KanadiContext(sessionId, this.validators, metadata);
}
getValidator(validatorId: string): IChallengeValidator | undefined {
return this.validators.get(validatorId);
}
getValidators(): Map<string, IChallengeValidator> {
return this.validators;
}
getNamespace(): string {
return this.namespace;
}
getDatabaseConfigs(): DatabaseConfig[] {
return this.databaseConfigs;
}
}