XyPriss Core Developer Hooks #

XyPriss provides a set of core hooks that allow developers to intercept and respond to critical server events. These hooks are integrated into the plugin system and can be implemented by any XyPriss plugin.

Overview #

The following core hooks are available:

Hook NameDescriptionTriggered When
onSecurityAttackIntercepts security threatsA malicious pattern (XSS, SQLi, etc.) is detected and blocked.
onResponseTimeMonitors request performanceA request is completed and the response is sent.
onRouteErrorHandles unhandled route errorsAn error occurs during request processing or route handling.
onRateLimitMonitors rate limiting eventsA client exceeds the configured rate limit.
onConsoleInterceptIntercepts all console outputAny console.log, warn, error, etc. is called.
managePluginsManages other pluginsInitialization phase (requires special permission).

managePlugins #

This is a specialized hook for administrative plugins. For detailed documentation, see the Plugin Management API.


onSecurityAttack #

Triggered when the security middleware detects and blocks a malicious request.

Signature #

onSecurityAttack(attackData: SecurityAttackData, req: XyPrisRequest, res: XyPrisResponse): void | Promise<void>

SecurityAttackData Properties #

  • type: The primary type of attack (e.g., "XSS", "SQL Injection", "Path Traversal", "Command Injection").
  • threats: An array of detailed threat strings (e.g., "query.q:SQL Injection (CRITICAL)").
  • ip: The IP address of the attacker.
  • path: The request path where the attack was detected.

Example #

{
    name: "security-logger",
    onSecurityAttack(attack, req) {
        console.log(`[SECURITY] ${attack.type} detected from ${attack.ip} on ${attack.path}`);
        attack.threats.forEach(threat => console.log(`  - ${threat}`));
    }
}

onResponseTime #

Triggered after every request to provide performance metrics.

Signature #

onResponseTime(responseTime: number, req: XyPrisRequest, res: XyPrisResponse): void | Promise<void>

Parameters #

  • responseTime: The time taken to process the request in milliseconds.
  • req: The request object.
  • res: The response object.

Example #

{
    name: "perf-monitor",
    onResponseTime(ms, req) {
        if (ms > 500) {
            console.warn(`[PERF] Slow request: ${req.method} ${req.path} took ${ms}ms`);
        }
    }
}

onRouteError #

Triggered when an unhandled error occurs during the execution of a route or middleware.

Signature #

onRouteError(error: Error, req: XyPrisRequest, res: XyPrisResponse): void | Promise<void>

Parameters #

  • error: The error object that was thrown.
  • req: The request object.
  • res: The response object.

Example #

{
    name: "error-reporter",
    onRouteError(err, req) {
        sendToSentry(err, { url: req.url });
    }
}

onRateLimit #

Triggered when a request is blocked by the rate limiting middleware.

Signature #

onRateLimit(limitData: RateLimitData, req: XyPrisRequest, res: XyPrisResponse): void | Promise<void>

RateLimitData Properties #

  • limit: The maximum number of requests allowed in the window.
  • current: The current number of requests made by the client.
  • remaining: The number of requests remaining in the window (usually 0 when triggered).
  • resetTime: The time when the rate limit window resets.

Example #

{
    name: "rate-limit-logger",
    onRateLimit(data, req) {
        console.log(`[RATE-LIMIT] Client ${req.ip} exceeded limit of ${data.limit} requests`);
    }
}

onConsoleIntercept #

Triggered whenever a console method (log, info, warn, error, debug) is called anywhere in the application.

Signature #

onConsoleIntercept(log: InterceptedConsoleCall): void | Promise<void>

InterceptedConsoleCall Properties #

  • method: The console method called ("log", "warn", "error", etc.).
  • args: Array of arguments passed to the console call.
  • timestamp: Date object when the log was generated.
  • category: Classification of the log ("userApp", "system", "unknown").
  • level: Severity level ("info", "warn", "error", "debug").
  • source: (Optional) Source information if tracing is enabled.

Security & Permissions #

This is a Privileged Hook. It is disabled by default for security reasons as console logs may contain sensitive information.

Requirement:

  1. System Enablement: Console interception must be enabled in server options.
  2. Plugin Permission: The plugin must be explicitly granted the PLG.LOGGING.CONSOLE_INTERCEPT hook permission.

Example #

{
    name: "log-aggregator",
    version: "1.0.0",
    onConsoleIntercept(log) {
        // Send critical errors to external monitoring
        if (log.method === 'error') {
            externalService.report({
                message: log.args.join(' '),
                time: log.timestamp
            });
        }
    }
}

Integration #

These hooks are automatically dispatched by the PluginManager. To use them, simply include the method in your plugin definition:

import { Plugin } from "xypriss";

Plugin.register({
    name: "my-plugin",
    onSecurityAttack(data) {
        // Handle attack
    },
    onResponseTime(ms) {
        // Handle performance
    },
});