Skip to content

Documentation / @agentick/kernel / createGuard

Function: createGuard() ​

Call Signature ​

createGuard(fn): Middleware

Defined in: kernel/src/guard.ts:69

Create a guard middleware from a predicate function.

The guard runs before the procedure handler:

  • If the fn returns true, execution continues.
  • If the fn returns false, a GuardError is thrown (using config for the message).
  • If the fn throws a GuardError, it propagates directly (full control).

Parameters ​

fn ​

GuardFn

Returns ​

Middleware

Examples ​

typescript
const adminOnly = createGuard(
  (envelope) => envelope.context.user?.roles?.includes("admin") ?? false,
);
typescript
const roleGuard = createGuard({
  name: "role-guard",
  guardType: "role",
  reason: (envelope) => `User ${envelope.context.user?.id} lacks required role`,
}, (envelope) => {
  return envelope.context.user?.roles?.includes("admin") ?? false;
});
typescript
const roleGuard = createGuard({ name: "role-guard" }, (envelope) => {
  const userRoles = envelope.context.user?.roles ?? [];
  const required = ["admin", "moderator"];
  if (!required.some(r => userRoles.includes(r))) {
    throw GuardError.role(required);
  }
  return true;
});

Call Signature ​

createGuard(config, fn): Middleware

Defined in: kernel/src/guard.ts:70

Create a guard middleware from a predicate function.

The guard runs before the procedure handler:

  • If the fn returns true, execution continues.
  • If the fn returns false, a GuardError is thrown (using config for the message).
  • If the fn throws a GuardError, it propagates directly (full control).

Parameters ​

config ​

GuardConfig

fn ​

GuardFn

Returns ​

Middleware

Examples ​

typescript
const adminOnly = createGuard(
  (envelope) => envelope.context.user?.roles?.includes("admin") ?? false,
);
typescript
const roleGuard = createGuard({
  name: "role-guard",
  guardType: "role",
  reason: (envelope) => `User ${envelope.context.user?.id} lacks required role`,
}, (envelope) => {
  return envelope.context.user?.roles?.includes("admin") ?? false;
});
typescript
const roleGuard = createGuard({ name: "role-guard" }, (envelope) => {
  const userRoles = envelope.context.user?.roles ?? [];
  const required = ["admin", "moderator"];
  if (!required.some(r => userRoles.includes(r))) {
    throw GuardError.role(required);
  }
  return true;
});

Released under the ISC License.