Codul spune ce capabilități vrei. Cum se comportă fiecare — pornită sau oprită, blochează sau doar observă, cu ce praguri — reglezi din dashboard, live. Modificările se aplică în aproximativ un minut, fără redeploy.
Găsești totul în Dashboard → Security → Hazeloft Security, cu o pagină pentru fiecare capabilitate.
Cele două moduri: „blochează" și „doar observ"
Fiecare capabilitate poate fi în unul din două moduri:
- Blochează (live) — cererile care nu trec sunt respinse.
- Doar observ (dry run) — cererile trec toate, dar vezi în dashboard care ar fi fost blocate.
Comuți între ele dintr-un click, per capabilitate. Există și un comutator global, pentru capabilitățile care nu au o setare proprie.
Ca modificările să apară în dashboard
Ca dashboard-ul să-ți poată livra setările în cod și să-ți arate ce se întâmplă, adaugi două lucruri la motor:
import {
HazeloftSecurity,
consoleRules,
createConfigClient,
createEventReporter,
} from "@hazeloft/security";
export const security = new HazeloftSecurity({
apiKey: process.env.HAZELOFT_SECURITY_API_KEY,
configClient: createConfigClient(), // aduce setările din dashboard
eventReporter: createEventReporter(), // trimite ce s-a întâmplat, pentru loguri și grafice
rules: consoleRules, // capabilitățile, cu setările tale
});configClient— aduce setările din dashboard și le aplică live. Fără el, capabilitățile merg cu valorile din cod și nu poți comuta din dashboard.eventReporter— trimite spre dashboard ce a decis fiecare capabilitate, ca să vezi logurile de blocări și graficele de consum. Nu încetinește cu nimic cererile tale.
Ambele sunt „liniștite prin design": dacă dashboard-ul e momentan indisponibil, aplicația ta merge mai departe cu ultimele setări bune — nu se blochează nimic.
Aceleași setări, pe toate rutele tale
Ce pornești din dashboard se aplică peste tot unde ai montat protecția — atât pe rutele tale
obișnuite, cât și pe fluxul de înregistrare, prin protectSignup. Nu există capabilități care
merg într-un loc și nu în altul: dacă blochezi un IP, e blocat și la contact, și la sign-up.
Ce vezi pentru fiecare capabilitate
- Modul — blochează / doar observ, cu comutator.
- Pragurile — listele de domenii, lungimile de nume, limitele, dificultatea challenge-ului.
- Grafic de consum — permis vs blocat, pe ore sau pe zile.
- Loguri de blocări — fiecare cerere blocată, cu ora, motivul și detaliile.
Prima pagină a consolei le adună pe toate: comutatorul global, activitatea din ultimele 24 de ore (sau 7/14/30 de zile) și cât a consumat fiecare capabilitate din planul tău, cu starea ei alături.
Consumul și planul
Fiecare cerere verificată consumă din planul tău. Pe pagina de Usage vezi cât ai folosit în luna curentă, atât în total cât și defalcat pe capabilități, față de limita planului.
Cifrele sunt o singură cotă privită din mai multe unghiuri: „Total protection" e suma, iar rândurile de sub el arată unde se duce consumul. Limita afișată e aceeași peste tot, fiindcă e același plafon.
Oprirea se propagă în aproximativ un minut de la depășire (SDK-ul își împrospătează starea la fiecare ~60 de secunde), la fel ca orice altă schimbare făcută din dashboard.
Alertele
O protecție care se oprește tăcut e mai periculoasă decât una absentă. Din prima pagină a consolei alegi cum afli:
| Alertă | Când vine |
|---|---|
| 80% din plafon | mai ai timp să urci planul înainte să se oprească ceva |
| Plafon atins | protecția s-a oprit, cererile trec neverificate |
| Vârf de blocări | într-o oră s-au blocat mai multe cereri decât pragul pus de tine |
Le primești pe email și, dacă vrei, pe un webhook — un POST cu un JSON scurt:
{
"type": "quotaReached",
"keyId": "...",
"at": "2026-08-02T11:00:00.000Z",
"data": { "used": 2000000, "limit": 2000000 }
}Aceeași alertă nu se repetă: cele de plafon tac 24 de ore, cea de vârf 6 ore. Webhook-ul e best-effort — îl trimitem o dată, fără reîncercări; emailul are propriile retry-uri.