llm-trust-guard 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -0
  3. package/dist/guards/agent-communication-guard.d.ts +169 -0
  4. package/dist/guards/agent-communication-guard.d.ts.map +1 -0
  5. package/dist/guards/agent-communication-guard.js +468 -0
  6. package/dist/guards/agent-communication-guard.js.map +1 -0
  7. package/dist/guards/autonomy-escalation-guard.d.ts +137 -0
  8. package/dist/guards/autonomy-escalation-guard.d.ts.map +1 -0
  9. package/dist/guards/autonomy-escalation-guard.js +470 -0
  10. package/dist/guards/autonomy-escalation-guard.js.map +1 -0
  11. package/dist/guards/circuit-breaker.d.ts +142 -0
  12. package/dist/guards/circuit-breaker.d.ts.map +1 -0
  13. package/dist/guards/circuit-breaker.js +347 -0
  14. package/dist/guards/circuit-breaker.js.map +1 -0
  15. package/dist/guards/code-execution-guard.d.ts +114 -0
  16. package/dist/guards/code-execution-guard.d.ts.map +1 -0
  17. package/dist/guards/code-execution-guard.js +467 -0
  18. package/dist/guards/code-execution-guard.js.map +1 -0
  19. package/dist/guards/conversation-guard.d.ts +73 -0
  20. package/dist/guards/conversation-guard.d.ts.map +1 -0
  21. package/dist/guards/conversation-guard.js +281 -0
  22. package/dist/guards/conversation-guard.js.map +1 -0
  23. package/dist/guards/drift-detector.d.ts +182 -0
  24. package/dist/guards/drift-detector.d.ts.map +1 -0
  25. package/dist/guards/drift-detector.js +480 -0
  26. package/dist/guards/drift-detector.js.map +1 -0
  27. package/dist/guards/encoding-detector.d.ts +76 -0
  28. package/dist/guards/encoding-detector.d.ts.map +1 -0
  29. package/dist/guards/encoding-detector.js +698 -0
  30. package/dist/guards/encoding-detector.js.map +1 -0
  31. package/dist/guards/execution-monitor.d.ts +73 -0
  32. package/dist/guards/execution-monitor.d.ts.map +1 -0
  33. package/dist/guards/execution-monitor.js +205 -0
  34. package/dist/guards/execution-monitor.js.map +1 -0
  35. package/dist/guards/input-sanitizer.d.ts +87 -0
  36. package/dist/guards/input-sanitizer.d.ts.map +1 -0
  37. package/dist/guards/input-sanitizer.js +301 -0
  38. package/dist/guards/input-sanitizer.js.map +1 -0
  39. package/dist/guards/mcp-security-guard.d.ts +204 -0
  40. package/dist/guards/mcp-security-guard.d.ts.map +1 -0
  41. package/dist/guards/mcp-security-guard.js +618 -0
  42. package/dist/guards/mcp-security-guard.js.map +1 -0
  43. package/dist/guards/memory-guard.d.ts +124 -0
  44. package/dist/guards/memory-guard.d.ts.map +1 -0
  45. package/dist/guards/memory-guard.js +476 -0
  46. package/dist/guards/memory-guard.js.map +1 -0
  47. package/dist/guards/multimodal-guard.d.ts +93 -0
  48. package/dist/guards/multimodal-guard.d.ts.map +1 -0
  49. package/dist/guards/multimodal-guard.js +507 -0
  50. package/dist/guards/multimodal-guard.js.map +1 -0
  51. package/dist/guards/output-filter.d.ts +76 -0
  52. package/dist/guards/output-filter.d.ts.map +1 -0
  53. package/dist/guards/output-filter.js +289 -0
  54. package/dist/guards/output-filter.js.map +1 -0
  55. package/dist/guards/policy-gate.d.ts +57 -0
  56. package/dist/guards/policy-gate.d.ts.map +1 -0
  57. package/dist/guards/policy-gate.js +182 -0
  58. package/dist/guards/policy-gate.js.map +1 -0
  59. package/dist/guards/prompt-leakage-guard.d.ts +110 -0
  60. package/dist/guards/prompt-leakage-guard.d.ts.map +1 -0
  61. package/dist/guards/prompt-leakage-guard.js +529 -0
  62. package/dist/guards/prompt-leakage-guard.js.map +1 -0
  63. package/dist/guards/rag-guard.d.ts +188 -0
  64. package/dist/guards/rag-guard.d.ts.map +1 -0
  65. package/dist/guards/rag-guard.js +769 -0
  66. package/dist/guards/rag-guard.js.map +1 -0
  67. package/dist/guards/schema-validator.d.ts +35 -0
  68. package/dist/guards/schema-validator.d.ts.map +1 -0
  69. package/dist/guards/schema-validator.js +316 -0
  70. package/dist/guards/schema-validator.js.map +1 -0
  71. package/dist/guards/state-persistence-guard.d.ts +153 -0
  72. package/dist/guards/state-persistence-guard.d.ts.map +1 -0
  73. package/dist/guards/state-persistence-guard.js +484 -0
  74. package/dist/guards/state-persistence-guard.js.map +1 -0
  75. package/dist/guards/tenant-boundary.d.ts +67 -0
  76. package/dist/guards/tenant-boundary.d.ts.map +1 -0
  77. package/dist/guards/tenant-boundary.js +187 -0
  78. package/dist/guards/tenant-boundary.js.map +1 -0
  79. package/dist/guards/tool-chain-validator.d.ts +102 -0
  80. package/dist/guards/tool-chain-validator.d.ts.map +1 -0
  81. package/dist/guards/tool-chain-validator.js +480 -0
  82. package/dist/guards/tool-chain-validator.js.map +1 -0
  83. package/dist/guards/tool-registry.d.ts +45 -0
  84. package/dist/guards/tool-registry.d.ts.map +1 -0
  85. package/dist/guards/tool-registry.js +155 -0
  86. package/dist/guards/tool-registry.js.map +1 -0
  87. package/dist/guards/trust-exploitation-guard.d.ts +134 -0
  88. package/dist/guards/trust-exploitation-guard.d.ts.map +1 -0
  89. package/dist/guards/trust-exploitation-guard.js +354 -0
  90. package/dist/guards/trust-exploitation-guard.js.map +1 -0
  91. package/dist/index.d.ts +133 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +430 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/integrations/express.d.ts +119 -0
  96. package/dist/integrations/express.d.ts.map +1 -0
  97. package/dist/integrations/express.js +244 -0
  98. package/dist/integrations/express.js.map +1 -0
  99. package/dist/integrations/index.d.ts +9 -0
  100. package/dist/integrations/index.d.ts.map +1 -0
  101. package/dist/integrations/index.js +26 -0
  102. package/dist/integrations/index.js.map +1 -0
  103. package/dist/integrations/langchain.d.ts +165 -0
  104. package/dist/integrations/langchain.d.ts.map +1 -0
  105. package/dist/integrations/langchain.js +308 -0
  106. package/dist/integrations/langchain.js.map +1 -0
  107. package/dist/integrations/openai.d.ts +205 -0
  108. package/dist/integrations/openai.d.ts.map +1 -0
  109. package/dist/integrations/openai.js +380 -0
  110. package/dist/integrations/openai.js.map +1 -0
  111. package/dist/types/index.d.ts +245 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/index.js +6 -0
  114. package/dist/types/index.js.map +1 -0
  115. package/package.json +64 -0
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Express Middleware Integration for llm-trust-guard
3
+ *
4
+ * Provides ready-to-use middleware for Express.js applications
5
+ * to protect LLM-powered endpoints.
6
+ */
7
+ import { InputSanitizer, EncodingDetector, MemoryGuard } from "../index.js";
8
+ import type { PAPSanitizerResult } from "../guards/input-sanitizer.js";
9
+ import type { EncodingDetectorResult } from "../guards/encoding-detector.js";
10
+ import type { MemoryGuardResult } from "../guards/memory-guard.js";
11
+ interface Request {
12
+ body?: any;
13
+ query?: any;
14
+ params?: any;
15
+ headers?: any;
16
+ session?: any;
17
+ get?(name: string): string | undefined;
18
+ }
19
+ interface Response {
20
+ status(code: number): Response;
21
+ json(body: any): Response;
22
+ }
23
+ type NextFunction = (err?: any) => void;
24
+ export interface TrustGuardMiddlewareConfig {
25
+ /** Fields to check in request body */
26
+ bodyFields?: string[];
27
+ /** Fields to check in query params */
28
+ queryFields?: string[];
29
+ /** Enable input sanitization */
30
+ sanitize?: boolean;
31
+ /** Enable encoding detection */
32
+ detectEncoding?: boolean;
33
+ /** Enable memory/context validation */
34
+ validateMemory?: boolean;
35
+ /** Custom error handler */
36
+ onBlocked?: (req: Request, res: Response, result: ExpressGuardResult) => void;
37
+ /** Custom logging function */
38
+ logger?: (message: string, data?: any) => void;
39
+ /** InputSanitizer configuration */
40
+ sanitizerConfig?: ConstructorParameters<typeof InputSanitizer>[0];
41
+ /** EncodingDetector configuration */
42
+ encodingConfig?: ConstructorParameters<typeof EncodingDetector>[0];
43
+ /** MemoryGuard configuration */
44
+ memoryConfig?: ConstructorParameters<typeof MemoryGuard>[0];
45
+ /** Session ID extractor */
46
+ getSessionId?: (req: Request) => string;
47
+ }
48
+ export interface ExpressGuardResult {
49
+ allowed: boolean;
50
+ guard: string;
51
+ violations: string[];
52
+ details?: PAPSanitizerResult | EncodingDetectorResult | MemoryGuardResult;
53
+ }
54
+ /**
55
+ * Create Express middleware for LLM input protection
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * import express from 'express';
60
+ * import { createTrustGuardMiddleware } from 'llm-trust-guard/integrations/express';
61
+ *
62
+ * const app = express();
63
+ * app.use(express.json());
64
+ *
65
+ * // Protect all LLM endpoints
66
+ * app.use('/api/chat', createTrustGuardMiddleware({
67
+ * bodyFields: ['message', 'prompt'],
68
+ * sanitize: true,
69
+ * detectEncoding: true
70
+ * }));
71
+ *
72
+ * app.post('/api/chat', (req, res) => {
73
+ * // req.body.message is now validated
74
+ * res.json({ response: 'Safe response' });
75
+ * });
76
+ * ```
77
+ */
78
+ export declare function createTrustGuardMiddleware(config?: TrustGuardMiddlewareConfig): (req: Request, res: Response, next: NextFunction) => void | Response;
79
+ /**
80
+ * Create middleware for rate-limiting sensitive tool usage
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * app.use('/api/tools', createToolRateLimitMiddleware({
85
+ * sensitiveTools: ['delete', 'admin', 'execute'],
86
+ * maxSensitivePerSession: 5,
87
+ * windowMs: 60000
88
+ * }));
89
+ * ```
90
+ */
91
+ export declare function createToolRateLimitMiddleware(config: {
92
+ sensitiveTools: string[];
93
+ maxSensitivePerSession?: number;
94
+ windowMs?: number;
95
+ getSessionId?: (req: Request) => string;
96
+ getToolName?: (req: Request) => string | undefined;
97
+ }): (req: Request, res: Response, next: NextFunction) => Response | undefined;
98
+ /**
99
+ * Create middleware for output filtering
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * app.use(createOutputFilterMiddleware({
104
+ * patterns: [
105
+ * /api[_-]?key/i,
106
+ * /password/i,
107
+ * /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/
108
+ * ],
109
+ * replacement: '[REDACTED]'
110
+ * }));
111
+ * ```
112
+ */
113
+ export declare function createOutputFilterMiddleware(config: {
114
+ patterns: RegExp[];
115
+ replacement?: string;
116
+ fields?: string[];
117
+ }): (req: Request, res: Response, next: NextFunction) => void;
118
+ export {};
119
+ //# sourceMappingURL=express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../src/integrations/express.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ /**
3
+ * Express Middleware Integration for llm-trust-guard
4
+ *
5
+ * Provides ready-to-use middleware for Express.js applications
6
+ * to protect LLM-powered endpoints.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createTrustGuardMiddleware = createTrustGuardMiddleware;
10
+ exports.createToolRateLimitMiddleware = createToolRateLimitMiddleware;
11
+ exports.createOutputFilterMiddleware = createOutputFilterMiddleware;
12
+ const index_js_1 = require("../index.js");
13
+ /**
14
+ * Create Express middleware for LLM input protection
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * import express from 'express';
19
+ * import { createTrustGuardMiddleware } from 'llm-trust-guard/integrations/express';
20
+ *
21
+ * const app = express();
22
+ * app.use(express.json());
23
+ *
24
+ * // Protect all LLM endpoints
25
+ * app.use('/api/chat', createTrustGuardMiddleware({
26
+ * bodyFields: ['message', 'prompt'],
27
+ * sanitize: true,
28
+ * detectEncoding: true
29
+ * }));
30
+ *
31
+ * app.post('/api/chat', (req, res) => {
32
+ * // req.body.message is now validated
33
+ * res.json({ response: 'Safe response' });
34
+ * });
35
+ * ```
36
+ */
37
+ function createTrustGuardMiddleware(config = {}) {
38
+ const { bodyFields = ["message", "prompt", "input", "query", "content"], queryFields = [], sanitize = true, detectEncoding = true, validateMemory = false, onBlocked, logger = console.log, sanitizerConfig, encodingConfig, memoryConfig, getSessionId = (req) => req.session?.id || req.get?.("x-session-id") || "anonymous", } = config;
39
+ // Initialize guards
40
+ const inputSanitizer = sanitize ? new index_js_1.InputSanitizer(sanitizerConfig) : null;
41
+ const encodingDetector = detectEncoding ? new index_js_1.EncodingDetector(encodingConfig) : null;
42
+ const memoryGuard = validateMemory ? new index_js_1.MemoryGuard(memoryConfig) : null;
43
+ return function trustGuardMiddleware(req, res, next) {
44
+ const requestId = `req-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
45
+ const sessionId = getSessionId(req);
46
+ // Collect all text fields to check
47
+ const textsToCheck = [];
48
+ // Check body fields
49
+ if (req.body) {
50
+ for (const field of bodyFields) {
51
+ const value = req.body[field];
52
+ if (typeof value === "string" && value.trim()) {
53
+ textsToCheck.push({ field, value, source: "body" });
54
+ }
55
+ }
56
+ }
57
+ // Check query fields
58
+ if (req.query) {
59
+ for (const field of queryFields) {
60
+ const value = req.query[field];
61
+ if (typeof value === "string" && value.trim()) {
62
+ textsToCheck.push({ field, value, source: "query" });
63
+ }
64
+ }
65
+ }
66
+ // Check each text field
67
+ for (const { field, value, source } of textsToCheck) {
68
+ // Input sanitization
69
+ if (inputSanitizer) {
70
+ const sanitizeResult = inputSanitizer.sanitize(value, requestId);
71
+ if (!sanitizeResult.allowed) {
72
+ const result = {
73
+ allowed: false,
74
+ guard: "InputSanitizer",
75
+ violations: sanitizeResult.violations,
76
+ details: sanitizeResult,
77
+ };
78
+ logger(`[TrustGuard] Blocked by InputSanitizer: ${source}.${field}`, {
79
+ requestId,
80
+ violations: sanitizeResult.violations,
81
+ });
82
+ if (onBlocked) {
83
+ return onBlocked(req, res, result);
84
+ }
85
+ return res.status(400).json({
86
+ error: "Request blocked by security policy",
87
+ code: "INPUT_SANITIZATION_FAILED",
88
+ field: `${source}.${field}`,
89
+ violations: sanitizeResult.violations,
90
+ });
91
+ }
92
+ }
93
+ // Encoding detection
94
+ if (encodingDetector) {
95
+ const encodingResult = encodingDetector.detect(value, requestId);
96
+ if (!encodingResult.allowed) {
97
+ const result = {
98
+ allowed: false,
99
+ guard: "EncodingDetector",
100
+ violations: encodingResult.violations,
101
+ details: encodingResult,
102
+ };
103
+ logger(`[TrustGuard] Blocked by EncodingDetector: ${source}.${field}`, {
104
+ requestId,
105
+ violations: encodingResult.violations,
106
+ });
107
+ if (onBlocked) {
108
+ return onBlocked(req, res, result);
109
+ }
110
+ return res.status(400).json({
111
+ error: "Request blocked by security policy",
112
+ code: "ENCODING_ATTACK_DETECTED",
113
+ field: `${source}.${field}`,
114
+ violations: encodingResult.violations,
115
+ });
116
+ }
117
+ }
118
+ // Memory/context validation
119
+ if (memoryGuard) {
120
+ const memoryResult = memoryGuard.validateContextInjection(value, sessionId, requestId);
121
+ if (!memoryResult.allowed) {
122
+ const result = {
123
+ allowed: false,
124
+ guard: "MemoryGuard",
125
+ violations: memoryResult.violations,
126
+ details: memoryResult,
127
+ };
128
+ logger(`[TrustGuard] Blocked by MemoryGuard: ${source}.${field}`, {
129
+ requestId,
130
+ violations: memoryResult.violations,
131
+ });
132
+ if (onBlocked) {
133
+ return onBlocked(req, res, result);
134
+ }
135
+ return res.status(400).json({
136
+ error: "Request blocked by security policy",
137
+ code: "CONTEXT_INJECTION_DETECTED",
138
+ field: `${source}.${field}`,
139
+ violations: memoryResult.violations,
140
+ });
141
+ }
142
+ }
143
+ }
144
+ // All checks passed
145
+ next();
146
+ };
147
+ }
148
+ /**
149
+ * Create middleware for rate-limiting sensitive tool usage
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * app.use('/api/tools', createToolRateLimitMiddleware({
154
+ * sensitiveTools: ['delete', 'admin', 'execute'],
155
+ * maxSensitivePerSession: 5,
156
+ * windowMs: 60000
157
+ * }));
158
+ * ```
159
+ */
160
+ function createToolRateLimitMiddleware(config) {
161
+ const { sensitiveTools, maxSensitivePerSession = 10, windowMs = 60000, getSessionId = (req) => req.session?.id || "anonymous", getToolName = (req) => req.body?.tool || req.body?.toolName, } = config;
162
+ // Session usage tracking
163
+ const sessionUsage = new Map();
164
+ return function toolRateLimitMiddleware(req, res, next) {
165
+ const sessionId = getSessionId(req);
166
+ const toolName = getToolName(req);
167
+ // Check if this is a sensitive tool
168
+ if (toolName && sensitiveTools.some((t) => toolName.toLowerCase().includes(t.toLowerCase()))) {
169
+ const now = Date.now();
170
+ let usage = sessionUsage.get(sessionId);
171
+ // Reset if window expired
172
+ if (!usage || now > usage.resetAt) {
173
+ usage = { count: 0, resetAt: now + windowMs };
174
+ sessionUsage.set(sessionId, usage);
175
+ }
176
+ // Check limit
177
+ if (usage.count >= maxSensitivePerSession) {
178
+ return res.status(429).json({
179
+ error: "Rate limit exceeded for sensitive tool usage",
180
+ code: "TOOL_RATE_LIMIT_EXCEEDED",
181
+ retryAfter: Math.ceil((usage.resetAt - now) / 1000),
182
+ });
183
+ }
184
+ // Increment counter
185
+ usage.count++;
186
+ }
187
+ next();
188
+ };
189
+ }
190
+ /**
191
+ * Create middleware for output filtering
192
+ *
193
+ * @example
194
+ * ```typescript
195
+ * app.use(createOutputFilterMiddleware({
196
+ * patterns: [
197
+ * /api[_-]?key/i,
198
+ * /password/i,
199
+ * /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/
200
+ * ],
201
+ * replacement: '[REDACTED]'
202
+ * }));
203
+ * ```
204
+ */
205
+ function createOutputFilterMiddleware(config) {
206
+ const { patterns, replacement = "[REDACTED]", fields = ["response", "message", "content", "text"] } = config;
207
+ return function outputFilterMiddleware(req, res, next) {
208
+ const originalJson = res.json.bind(res);
209
+ res.json = function (body) {
210
+ if (body && typeof body === "object") {
211
+ const filtered = filterObject(body, fields, patterns, replacement);
212
+ return originalJson(filtered);
213
+ }
214
+ return originalJson(body);
215
+ };
216
+ next();
217
+ };
218
+ }
219
+ function filterObject(obj, fields, patterns, replacement) {
220
+ if (Array.isArray(obj)) {
221
+ return obj.map((item) => filterObject(item, fields, patterns, replacement));
222
+ }
223
+ if (obj && typeof obj === "object") {
224
+ const result = {};
225
+ for (const [key, value] of Object.entries(obj)) {
226
+ if (fields.includes(key) && typeof value === "string") {
227
+ let filtered = value;
228
+ for (const pattern of patterns) {
229
+ filtered = filtered.replace(new RegExp(pattern, "g"), replacement);
230
+ }
231
+ result[key] = filtered;
232
+ }
233
+ else if (typeof value === "object") {
234
+ result[key] = filterObject(value, fields, patterns, replacement);
235
+ }
236
+ else {
237
+ result[key] = value;
238
+ }
239
+ }
240
+ return result;
241
+ }
242
+ return obj;
243
+ }
244
+ //# sourceMappingURL=express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/integrations/express.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Framework Integrations for llm-trust-guard
3
+ *
4
+ * Ready-to-use integrations for popular frameworks and libraries.
5
+ */
6
+ export { createTrustGuardMiddleware, createToolRateLimitMiddleware, createOutputFilterMiddleware, type TrustGuardMiddlewareConfig, type ExpressGuardResult, } from "./express.js";
7
+ export { TrustGuardLangChain, TrustGuardViolationError, createInputValidator, createOutputFilter, type TrustGuardCallbackConfig, type SecurityCheckResult, } from "./langchain.js";
8
+ export { SecureOpenAI, OpenAISecurityError, createMessageValidator, wrapOpenAIClient, type SecureOpenAIConfig, type ValidationResult, type SecureMessage, } from "./openai.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Framework Integrations for llm-trust-guard
4
+ *
5
+ * Ready-to-use integrations for popular frameworks and libraries.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.wrapOpenAIClient = exports.createMessageValidator = exports.OpenAISecurityError = exports.SecureOpenAI = exports.createOutputFilter = exports.createInputValidator = exports.TrustGuardViolationError = exports.TrustGuardLangChain = exports.createOutputFilterMiddleware = exports.createToolRateLimitMiddleware = exports.createTrustGuardMiddleware = void 0;
9
+ // Express.js middleware
10
+ var express_js_1 = require("./express.js");
11
+ Object.defineProperty(exports, "createTrustGuardMiddleware", { enumerable: true, get: function () { return express_js_1.createTrustGuardMiddleware; } });
12
+ Object.defineProperty(exports, "createToolRateLimitMiddleware", { enumerable: true, get: function () { return express_js_1.createToolRateLimitMiddleware; } });
13
+ Object.defineProperty(exports, "createOutputFilterMiddleware", { enumerable: true, get: function () { return express_js_1.createOutputFilterMiddleware; } });
14
+ // LangChain integration
15
+ var langchain_js_1 = require("./langchain.js");
16
+ Object.defineProperty(exports, "TrustGuardLangChain", { enumerable: true, get: function () { return langchain_js_1.TrustGuardLangChain; } });
17
+ Object.defineProperty(exports, "TrustGuardViolationError", { enumerable: true, get: function () { return langchain_js_1.TrustGuardViolationError; } });
18
+ Object.defineProperty(exports, "createInputValidator", { enumerable: true, get: function () { return langchain_js_1.createInputValidator; } });
19
+ Object.defineProperty(exports, "createOutputFilter", { enumerable: true, get: function () { return langchain_js_1.createOutputFilter; } });
20
+ // OpenAI integration
21
+ var openai_js_1 = require("./openai.js");
22
+ Object.defineProperty(exports, "SecureOpenAI", { enumerable: true, get: function () { return openai_js_1.SecureOpenAI; } });
23
+ Object.defineProperty(exports, "OpenAISecurityError", { enumerable: true, get: function () { return openai_js_1.OpenAISecurityError; } });
24
+ Object.defineProperty(exports, "createMessageValidator", { enumerable: true, get: function () { return openai_js_1.createMessageValidator; } });
25
+ Object.defineProperty(exports, "wrapOpenAIClient", { enumerable: true, get: function () { return openai_js_1.wrapOpenAIClient; } });
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,wBAAwB;AACxB,2CAMsB;AALpB,wHAAA,0BAA0B,OAAA;AAC1B,2HAAA,6BAA6B,OAAA;AAC7B,0HAAA,4BAA4B,OAAA;AAK9B,wBAAwB;AACxB,+CAOwB;AANtB,mHAAA,mBAAmB,OAAA;AACnB,wHAAA,wBAAwB,OAAA;AACxB,oHAAA,oBAAoB,OAAA;AACpB,kHAAA,kBAAkB,OAAA;AAKpB,qBAAqB;AACrB,yCAQqB;AAPnB,yGAAA,YAAY,OAAA;AACZ,gHAAA,mBAAmB,OAAA;AACnB,mHAAA,sBAAsB,OAAA;AACtB,6GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * LangChain Integration for llm-trust-guard
3
+ *
4
+ * Provides callbacks, wrappers, and utilities for securing
5
+ * LangChain-based applications.
6
+ */
7
+ import { InputSanitizer, OutputFilter } from "../index.js";
8
+ import type { PAPSanitizerResult } from "../guards/input-sanitizer.js";
9
+ export interface TrustGuardCallbackConfig {
10
+ /** Enable input validation */
11
+ validateInput?: boolean;
12
+ /** Enable output filtering */
13
+ filterOutput?: boolean;
14
+ /** Enable tool chain validation */
15
+ validateTools?: boolean;
16
+ /** Throw error on violation (otherwise just log) */
17
+ throwOnViolation?: boolean;
18
+ /** Custom violation handler */
19
+ onViolation?: (type: string, details: any) => void;
20
+ /** InputSanitizer configuration */
21
+ sanitizerConfig?: ConstructorParameters<typeof InputSanitizer>[0];
22
+ /** OutputFilter configuration */
23
+ outputConfig?: ConstructorParameters<typeof OutputFilter>[0];
24
+ }
25
+ /**
26
+ * Security result from guard checks
27
+ */
28
+ export interface SecurityCheckResult {
29
+ allowed: boolean;
30
+ guard: string;
31
+ violations: string[];
32
+ sanitizedInput?: string;
33
+ details?: any;
34
+ }
35
+ /**
36
+ * TrustGuard wrapper for LangChain
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import { ChatOpenAI } from '@langchain/openai';
41
+ * import { TrustGuardLangChain } from 'llm-trust-guard/integrations/langchain';
42
+ *
43
+ * const guard = new TrustGuardLangChain({
44
+ * validateInput: true,
45
+ * filterOutput: true,
46
+ * throwOnViolation: true
47
+ * });
48
+ *
49
+ * // Validate before sending to LLM
50
+ * const result = guard.validateInput(userMessage);
51
+ * if (!result.allowed) {
52
+ * throw new Error(`Blocked: ${result.violations.join(', ')}`);
53
+ * }
54
+ *
55
+ * // Use with LangChain
56
+ * const llm = new ChatOpenAI();
57
+ * const response = await llm.invoke(result.sanitizedInput || userMessage);
58
+ *
59
+ * // Filter output before returning to user
60
+ * const filtered = guard.filterOutput(response.content);
61
+ * ```
62
+ */
63
+ export declare class TrustGuardLangChain {
64
+ private inputSanitizer;
65
+ private encodingDetector;
66
+ private memoryGuard;
67
+ private toolChainValidator;
68
+ private outputFilter;
69
+ private config;
70
+ constructor(config?: TrustGuardCallbackConfig);
71
+ /**
72
+ * Validate user input before sending to LLM
73
+ */
74
+ validateInput(input: string, requestId?: string): SecurityCheckResult;
75
+ /**
76
+ * Validate context/memory before injection
77
+ */
78
+ validateContext(context: string | string[], sessionId: string, requestId?: string): SecurityCheckResult;
79
+ /**
80
+ * Validate RAG documents before context injection
81
+ */
82
+ validateDocuments(documents: Array<{
83
+ content: string;
84
+ metadata?: any;
85
+ }>, sessionId: string): SecurityCheckResult;
86
+ /**
87
+ * Validate tool calls before execution
88
+ */
89
+ validateToolCall(toolName: string, toolArgs: Record<string, any>, sessionId: string): SecurityCheckResult;
90
+ /**
91
+ * Filter LLM output before returning to user
92
+ */
93
+ filterOutput(output: string, requestId?: string): string;
94
+ /**
95
+ * Create a secure message processor
96
+ */
97
+ createSecureProcessor(sessionId: string): {
98
+ /**
99
+ * Process user message with full validation
100
+ */
101
+ processUserMessage: (message: string) => {
102
+ allowed: boolean;
103
+ message: string;
104
+ violations: string[];
105
+ };
106
+ /**
107
+ * Process context/RAG content
108
+ */
109
+ processContext: (context: string[]) => {
110
+ allowed: boolean;
111
+ violations: string[];
112
+ };
113
+ /**
114
+ * Process tool call
115
+ */
116
+ processToolCall: (tool: string, args: any) => {
117
+ allowed: boolean;
118
+ violations: string[];
119
+ };
120
+ /**
121
+ * Process LLM output
122
+ */
123
+ processOutput: (output: string) => string;
124
+ };
125
+ private handleViolation;
126
+ }
127
+ /**
128
+ * Error thrown when throwOnViolation is true
129
+ */
130
+ export declare class TrustGuardViolationError extends Error {
131
+ type: string;
132
+ details: any;
133
+ constructor(type: string, details: any);
134
+ }
135
+ /**
136
+ * Create a simple input validator function for use with LangChain
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const validateInput = createInputValidator();
141
+ *
142
+ * // In your chain
143
+ * const chain = RunnableSequence.from([
144
+ * new RunnableLambda({ func: (input) => {
145
+ * const result = validateInput(input.message);
146
+ * if (!result.allowed) throw new Error('Blocked');
147
+ * return { ...input, message: result.sanitized };
148
+ * }}),
149
+ * prompt,
150
+ * llm,
151
+ * outputParser
152
+ * ]);
153
+ * ```
154
+ */
155
+ export declare function createInputValidator(config?: ConstructorParameters<typeof InputSanitizer>[0]): (input: string) => {
156
+ allowed: boolean;
157
+ sanitized: string;
158
+ violations: string[];
159
+ pap?: PAPSanitizerResult["pap"];
160
+ };
161
+ /**
162
+ * Create an output filter function for use with LangChain
163
+ */
164
+ export declare function createOutputFilter(config?: ConstructorParameters<typeof OutputFilter>[0]): (output: string) => string;
165
+ //# sourceMappingURL=langchain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../src/integrations/langchain.ts"],"names":[],"mappings":"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"}