Guards
Guards protect operations before they run. Unlike middleware (which is observational), guards can block operations.
Define a Guard
ts
const stopGuard = mesh.guard({ kind: "action", name: /^admin\./ }, ({ state }) => ({
allow: state.user.role === "admin",
reason: "Admin access is required."
}));Guard Targets
| Target | Description |
|---|---|
{ kind: "action", name: "cart.*" } | Guard actions by name |
{ kind: "transaction", name: /^checkout/ } | Guard transactions |
{ kind: "mutation", name: "products.*" } | Guard mutations |
The name field accepts exact strings, wildcards (*), or RegExp.
Guard Error
When a guard blocks an operation, StateMesh throws GuardError:
ts
import { GuardError } from "statemesh-core";
try {
adminAction();
} catch (error) {
if (error instanceof GuardError) {
console.log(error.metadata.reason); // "Admin access is required."
}
}Remove a Guard
ts
stopGuard(); // Stop guardingImportant Notes
TIP
Guards run before the operation starts. They prevent any state mutation or async work from beginning.
WARNING
Guards are evaluated synchronously. The guard function must return { allow, reason } — not a Promise.
Next Steps
- Plugins — Extend the mesh
- Middleware — Observational event listeners
