@frontmcp/guard
Advanced tools
+1
-1
@@ -49,3 +49,3 @@ // libs/guard/src/errors/errors.ts | ||
| // libs/guard/src/schemas/schemas.ts | ||
| import { z } from "zod"; | ||
| import { z } from "@frontmcp/lazy-zod"; | ||
| var partitionKeySchema = z.union([ | ||
@@ -52,0 +52,0 @@ z.enum(["ip", "session", "userId", "global"]), |
+3
-3
| { | ||
| "name": "@frontmcp/guard", | ||
| "version": "1.0.4", | ||
| "version": "1.1.0-beta.1", | ||
| "description": "Rate limiting, concurrency control, timeout, IP filtering, and traffic guard utilities for FrontMCP", | ||
@@ -51,6 +51,6 @@ "author": "AgentFront <info@agentfront.dev>", | ||
| "dependencies": { | ||
| "@frontmcp/utils": "1.0.4" | ||
| "@frontmcp/utils": "1.1.0-beta.1" | ||
| }, | ||
| "peerDependencies": { | ||
| "zod": "^4.0.0" | ||
| "@frontmcp/lazy-zod": "1.1.0-beta.1" | ||
| }, | ||
@@ -57,0 +57,0 @@ "devDependencies": { |
+22
-22
@@ -94,33 +94,33 @@ "use strict"; | ||
| // libs/guard/src/schemas/schemas.ts | ||
| var import_zod = require("zod"); | ||
| var partitionKeySchema = import_zod.z.union([ | ||
| import_zod.z.enum(["ip", "session", "userId", "global"]), | ||
| import_zod.z.custom( | ||
| var import_lazy_zod = require("@frontmcp/lazy-zod"); | ||
| var partitionKeySchema = import_lazy_zod.z.union([ | ||
| import_lazy_zod.z.enum(["ip", "session", "userId", "global"]), | ||
| import_lazy_zod.z.custom( | ||
| (val) => typeof val === "function" | ||
| ) | ||
| ]); | ||
| var rateLimitConfigSchema = import_zod.z.object({ | ||
| maxRequests: import_zod.z.number().int().positive().describe("Maximum number of requests allowed within the window."), | ||
| windowMs: import_zod.z.number().int().positive().optional().default(6e4).describe("Time window in milliseconds."), | ||
| var rateLimitConfigSchema = import_lazy_zod.z.object({ | ||
| maxRequests: import_lazy_zod.z.number().int().positive().describe("Maximum number of requests allowed within the window."), | ||
| windowMs: import_lazy_zod.z.number().int().positive().optional().default(6e4).describe("Time window in milliseconds."), | ||
| partitionBy: partitionKeySchema.optional().default("global").describe("Partition key strategy.") | ||
| }); | ||
| var concurrencyConfigSchema = import_zod.z.object({ | ||
| maxConcurrent: import_zod.z.number().int().positive().describe("Maximum number of concurrent executions allowed."), | ||
| queueTimeoutMs: import_zod.z.number().int().nonnegative().optional().default(0).describe("Maximum time in ms to wait in queue (0 = no wait)."), | ||
| var concurrencyConfigSchema = import_lazy_zod.z.object({ | ||
| maxConcurrent: import_lazy_zod.z.number().int().positive().describe("Maximum number of concurrent executions allowed."), | ||
| queueTimeoutMs: import_lazy_zod.z.number().int().nonnegative().optional().default(0).describe("Maximum time in ms to wait in queue (0 = no wait)."), | ||
| partitionBy: partitionKeySchema.optional().default("global").describe("Partition key strategy.") | ||
| }); | ||
| var timeoutConfigSchema = import_zod.z.object({ | ||
| executeMs: import_zod.z.number().int().positive().describe("Maximum execution time in milliseconds.") | ||
| var timeoutConfigSchema = import_lazy_zod.z.object({ | ||
| executeMs: import_lazy_zod.z.number().int().positive().describe("Maximum execution time in milliseconds.") | ||
| }); | ||
| var ipFilterConfigSchema = import_zod.z.object({ | ||
| allowList: import_zod.z.array(import_zod.z.string()).optional().describe("IP addresses or CIDR ranges to always allow."), | ||
| denyList: import_zod.z.array(import_zod.z.string()).optional().describe("IP addresses or CIDR ranges to always block."), | ||
| defaultAction: import_zod.z.enum(["allow", "deny"]).optional().default("allow").describe("Default action when IP matches neither list."), | ||
| trustProxy: import_zod.z.boolean().optional().default(false).describe("Trust X-Forwarded-For header."), | ||
| trustedProxyDepth: import_zod.z.number().int().positive().optional().default(1).describe("Max number of proxies to trust from X-Forwarded-For.") | ||
| var ipFilterConfigSchema = import_lazy_zod.z.object({ | ||
| allowList: import_lazy_zod.z.array(import_lazy_zod.z.string()).optional().describe("IP addresses or CIDR ranges to always allow."), | ||
| denyList: import_lazy_zod.z.array(import_lazy_zod.z.string()).optional().describe("IP addresses or CIDR ranges to always block."), | ||
| defaultAction: import_lazy_zod.z.enum(["allow", "deny"]).optional().default("allow").describe("Default action when IP matches neither list."), | ||
| trustProxy: import_lazy_zod.z.boolean().optional().default(false).describe("Trust X-Forwarded-For header."), | ||
| trustedProxyDepth: import_lazy_zod.z.number().int().positive().optional().default(1).describe("Max number of proxies to trust from X-Forwarded-For.") | ||
| }); | ||
| var guardConfigSchema = import_zod.z.object({ | ||
| enabled: import_zod.z.boolean().describe("Whether the guard system is enabled."), | ||
| storage: import_zod.z.looseObject({}).optional().describe("Storage backend configuration."), | ||
| keyPrefix: import_zod.z.string().optional().default("mcp:guard:").describe("Key prefix for all storage keys."), | ||
| var guardConfigSchema = import_lazy_zod.z.object({ | ||
| enabled: import_lazy_zod.z.boolean().describe("Whether the guard system is enabled."), | ||
| storage: import_lazy_zod.z.looseObject({}).optional().describe("Storage backend configuration."), | ||
| keyPrefix: import_lazy_zod.z.string().optional().default("mcp:guard:").describe("Key prefix for all storage keys."), | ||
| global: rateLimitConfigSchema.optional().describe("Global rate limit applied to all requests."), | ||
@@ -127,0 +127,0 @@ globalConcurrency: concurrencyConfigSchema.optional().describe("Global concurrency limit."), |
+3
-3
| { | ||
| "name": "@frontmcp/guard", | ||
| "version": "1.0.4", | ||
| "version": "1.1.0-beta.1", | ||
| "description": "Rate limiting, concurrency control, timeout, IP filtering, and traffic guard utilities for FrontMCP", | ||
@@ -51,6 +51,6 @@ "author": "AgentFront <info@agentfront.dev>", | ||
| "dependencies": { | ||
| "@frontmcp/utils": "1.0.4" | ||
| "@frontmcp/utils": "1.1.0-beta.1" | ||
| }, | ||
| "peerDependencies": { | ||
| "zod": "^4.0.0" | ||
| "@frontmcp/lazy-zod": "1.1.0-beta.1" | ||
| }, | ||
@@ -57,0 +57,0 @@ "devDependencies": { |
+63
-64
| /** | ||
| * Zod validation schemas for guard configuration. | ||
| */ | ||
| import { z } from 'zod'; | ||
| export declare const partitionKeySchema: z.ZodUnion<readonly [z.ZodEnum<{ | ||
| export declare const partitionKeySchema: import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| ip: "ip"; | ||
@@ -10,3 +9,3 @@ session: "session"; | ||
| global: "global"; | ||
| }>, z.ZodCustom<(ctx: { | ||
| }>, import("zod").ZodCustom<(ctx: { | ||
| sessionId: string; | ||
@@ -20,6 +19,6 @@ clientIp?: string; | ||
| }) => string>]>; | ||
| export declare const rateLimitConfigSchema: z.ZodObject<{ | ||
| maxRequests: z.ZodNumber; | ||
| windowMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; | ||
| partitionBy: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{ | ||
| export declare const rateLimitConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{ | ||
| maxRequests: import("@frontmcp/lazy-zod").ZodNumber; | ||
| windowMs: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>>; | ||
| partitionBy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| ip: "ip"; | ||
@@ -29,3 +28,3 @@ session: "session"; | ||
| global: "global"; | ||
| }>, z.ZodCustom<(ctx: { | ||
| }>, import("zod").ZodCustom<(ctx: { | ||
| sessionId: string; | ||
@@ -39,7 +38,7 @@ clientIp?: string; | ||
| }) => string>]>>>; | ||
| }, z.core.$strip>; | ||
| export declare const concurrencyConfigSchema: z.ZodObject<{ | ||
| maxConcurrent: z.ZodNumber; | ||
| queueTimeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; | ||
| partitionBy: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{ | ||
| }, import("zod/v4/core").$strip>; | ||
| export declare const concurrencyConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{ | ||
| maxConcurrent: import("@frontmcp/lazy-zod").ZodNumber; | ||
| queueTimeoutMs: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>>; | ||
| partitionBy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| ip: "ip"; | ||
@@ -49,3 +48,3 @@ session: "session"; | ||
| global: "global"; | ||
| }>, z.ZodCustom<(ctx: { | ||
| }>, import("zod").ZodCustom<(ctx: { | ||
| sessionId: string; | ||
@@ -59,24 +58,24 @@ clientIp?: string; | ||
| }) => string>]>>>; | ||
| }, z.core.$strip>; | ||
| export declare const timeoutConfigSchema: z.ZodObject<{ | ||
| executeMs: z.ZodNumber; | ||
| }, z.core.$strip>; | ||
| export declare const ipFilterConfigSchema: z.ZodObject<{ | ||
| allowList: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| denyList: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| defaultAction: z.ZodDefault<z.ZodOptional<z.ZodEnum<{ | ||
| }, import("zod/v4/core").$strip>; | ||
| export declare const timeoutConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{ | ||
| executeMs: import("@frontmcp/lazy-zod").ZodNumber; | ||
| }, import("zod/v4/core").$strip>; | ||
| export declare const ipFilterConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{ | ||
| allowList: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>; | ||
| denyList: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>; | ||
| defaultAction: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| allow: "allow"; | ||
| deny: "deny"; | ||
| }>>>; | ||
| trustProxy: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>; | ||
| trustedProxyDepth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; | ||
| }, z.core.$strip>; | ||
| export declare const guardConfigSchema: z.ZodObject<{ | ||
| enabled: z.ZodBoolean; | ||
| storage: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>; | ||
| keyPrefix: z.ZodDefault<z.ZodOptional<z.ZodString>>; | ||
| global: z.ZodOptional<z.ZodObject<{ | ||
| maxRequests: z.ZodNumber; | ||
| windowMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; | ||
| partitionBy: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{ | ||
| trustProxy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>>; | ||
| trustedProxyDepth: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>>; | ||
| }, import("zod/v4/core").$strip>; | ||
| export declare const guardConfigSchema: import("@frontmcp/lazy-zod").ZodObject<{ | ||
| enabled: import("@frontmcp/lazy-zod").ZodBoolean; | ||
| storage: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{}, import("zod/v4/core").$loose>>; | ||
| keyPrefix: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodString>>; | ||
| global: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{ | ||
| maxRequests: import("@frontmcp/lazy-zod").ZodNumber; | ||
| windowMs: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>>; | ||
| partitionBy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| ip: "ip"; | ||
@@ -86,3 +85,3 @@ session: "session"; | ||
| global: "global"; | ||
| }>, z.ZodCustom<(ctx: { | ||
| }>, import("zod").ZodCustom<(ctx: { | ||
| sessionId: string; | ||
@@ -96,7 +95,7 @@ clientIp?: string; | ||
| }) => string>]>>>; | ||
| }, z.core.$strip>>; | ||
| globalConcurrency: z.ZodOptional<z.ZodObject<{ | ||
| maxConcurrent: z.ZodNumber; | ||
| queueTimeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; | ||
| partitionBy: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{ | ||
| }, import("zod/v4/core").$strip>>; | ||
| globalConcurrency: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{ | ||
| maxConcurrent: import("@frontmcp/lazy-zod").ZodNumber; | ||
| queueTimeoutMs: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>>; | ||
| partitionBy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| ip: "ip"; | ||
@@ -106,3 +105,3 @@ session: "session"; | ||
| global: "global"; | ||
| }>, z.ZodCustom<(ctx: { | ||
| }>, import("zod").ZodCustom<(ctx: { | ||
| sessionId: string; | ||
@@ -116,7 +115,7 @@ clientIp?: string; | ||
| }) => string>]>>>; | ||
| }, z.core.$strip>>; | ||
| defaultRateLimit: z.ZodOptional<z.ZodObject<{ | ||
| maxRequests: z.ZodNumber; | ||
| windowMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; | ||
| partitionBy: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{ | ||
| }, import("zod/v4/core").$strip>>; | ||
| defaultRateLimit: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{ | ||
| maxRequests: import("@frontmcp/lazy-zod").ZodNumber; | ||
| windowMs: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>>; | ||
| partitionBy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| ip: "ip"; | ||
@@ -126,3 +125,3 @@ session: "session"; | ||
| global: "global"; | ||
| }>, z.ZodCustom<(ctx: { | ||
| }>, import("zod").ZodCustom<(ctx: { | ||
| sessionId: string; | ||
@@ -136,7 +135,7 @@ clientIp?: string; | ||
| }) => string>]>>>; | ||
| }, z.core.$strip>>; | ||
| defaultConcurrency: z.ZodOptional<z.ZodObject<{ | ||
| maxConcurrent: z.ZodNumber; | ||
| queueTimeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; | ||
| partitionBy: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{ | ||
| }, import("zod/v4/core").$strip>>; | ||
| defaultConcurrency: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{ | ||
| maxConcurrent: import("@frontmcp/lazy-zod").ZodNumber; | ||
| queueTimeoutMs: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>>; | ||
| partitionBy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodUnion<readonly [import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| ip: "ip"; | ||
@@ -146,3 +145,3 @@ session: "session"; | ||
| global: "global"; | ||
| }>, z.ZodCustom<(ctx: { | ||
| }>, import("zod").ZodCustom<(ctx: { | ||
| sessionId: string; | ||
@@ -156,16 +155,16 @@ clientIp?: string; | ||
| }) => string>]>>>; | ||
| }, z.core.$strip>>; | ||
| defaultTimeout: z.ZodOptional<z.ZodObject<{ | ||
| executeMs: z.ZodNumber; | ||
| }, z.core.$strip>>; | ||
| ipFilter: z.ZodOptional<z.ZodObject<{ | ||
| allowList: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| denyList: z.ZodOptional<z.ZodArray<z.ZodString>>; | ||
| defaultAction: z.ZodDefault<z.ZodOptional<z.ZodEnum<{ | ||
| }, import("zod/v4/core").$strip>>; | ||
| defaultTimeout: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{ | ||
| executeMs: import("@frontmcp/lazy-zod").ZodNumber; | ||
| }, import("zod/v4/core").$strip>>; | ||
| ipFilter: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodObject<{ | ||
| allowList: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>; | ||
| denyList: import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodArray<import("@frontmcp/lazy-zod").ZodString>>; | ||
| defaultAction: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodEnum<{ | ||
| allow: "allow"; | ||
| deny: "deny"; | ||
| }>>>; | ||
| trustProxy: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>; | ||
| trustedProxyDepth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>; | ||
| }, z.core.$strip>>; | ||
| }, z.core.$strip>; | ||
| trustProxy: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodBoolean>>; | ||
| trustedProxyDepth: import("@frontmcp/lazy-zod").ZodDefault<import("@frontmcp/lazy-zod").ZodOptional<import("@frontmcp/lazy-zod").ZodNumber>>; | ||
| }, import("zod/v4/core").$strip>>; | ||
| }, import("zod/v4/core").$strip>; |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
100079
3.4%1793
-0.06%1
Infinity%+ Added
+ Added
- Removed
Updated