foon-sdk 1.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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +574 -0
  3. package/dist/cache/LRUCache.d.ts +36 -0
  4. package/dist/cache/LRUCache.d.ts.map +1 -0
  5. package/dist/cache/LRUCache.js +54 -0
  6. package/dist/cache/LRUCache.js.map +1 -0
  7. package/dist/cache/cache-key-generator.d.ts +9 -0
  8. package/dist/cache/cache-key-generator.d.ts.map +1 -0
  9. package/dist/cache/cache-key-generator.js +50 -0
  10. package/dist/cache/cache-key-generator.js.map +1 -0
  11. package/dist/cache/index.d.ts +3 -0
  12. package/dist/cache/index.d.ts.map +1 -0
  13. package/dist/cache/index.js +21 -0
  14. package/dist/cache/index.js.map +1 -0
  15. package/dist/engine/MappingEngine.d.ts +29 -0
  16. package/dist/engine/MappingEngine.d.ts.map +1 -0
  17. package/dist/engine/MappingEngine.js +196 -0
  18. package/dist/engine/MappingEngine.js.map +1 -0
  19. package/dist/engine/executor.d.ts +15 -0
  20. package/dist/engine/executor.d.ts.map +1 -0
  21. package/dist/engine/executor.js +137 -0
  22. package/dist/engine/executor.js.map +1 -0
  23. package/dist/engine/index.d.ts +5 -0
  24. package/dist/engine/index.d.ts.map +1 -0
  25. package/dist/engine/index.js +23 -0
  26. package/dist/engine/index.js.map +1 -0
  27. package/dist/engine/jsonpath.d.ts +17 -0
  28. package/dist/engine/jsonpath.d.ts.map +1 -0
  29. package/dist/engine/jsonpath.js +73 -0
  30. package/dist/engine/jsonpath.js.map +1 -0
  31. package/dist/engine/type-converter.d.ts +12 -0
  32. package/dist/engine/type-converter.d.ts.map +1 -0
  33. package/dist/engine/type-converter.js +106 -0
  34. package/dist/engine/type-converter.js.map +1 -0
  35. package/dist/errors/error-factory.d.ts +30 -0
  36. package/dist/errors/error-factory.d.ts.map +1 -0
  37. package/dist/errors/error-factory.js +53 -0
  38. package/dist/errors/error-factory.js.map +1 -0
  39. package/dist/errors/index.d.ts +3 -0
  40. package/dist/errors/index.d.ts.map +1 -0
  41. package/dist/errors/index.js +22 -0
  42. package/dist/errors/index.js.map +1 -0
  43. package/dist/express/FonRouter.d.ts +56 -0
  44. package/dist/express/FonRouter.d.ts.map +1 -0
  45. package/dist/express/FonRouter.js +151 -0
  46. package/dist/express/FonRouter.js.map +1 -0
  47. package/dist/express/error-handler.d.ts +10 -0
  48. package/dist/express/error-handler.d.ts.map +1 -0
  49. package/dist/express/error-handler.js +55 -0
  50. package/dist/express/error-handler.js.map +1 -0
  51. package/dist/express/index.d.ts +33 -0
  52. package/dist/express/index.d.ts.map +1 -0
  53. package/dist/express/index.js +41 -0
  54. package/dist/express/index.js.map +1 -0
  55. package/dist/express/route-registry.d.ts +33 -0
  56. package/dist/express/route-registry.d.ts.map +1 -0
  57. package/dist/express/route-registry.js +52 -0
  58. package/dist/express/route-registry.js.map +1 -0
  59. package/dist/express/transform-middleware.d.ts +21 -0
  60. package/dist/express/transform-middleware.d.ts.map +1 -0
  61. package/dist/express/transform-middleware.js +62 -0
  62. package/dist/express/transform-middleware.js.map +1 -0
  63. package/dist/express/types.d.ts +73 -0
  64. package/dist/express/types.d.ts.map +1 -0
  65. package/dist/express/types.js +3 -0
  66. package/dist/express/types.js.map +1 -0
  67. package/dist/index.d.ts +11 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +29 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/providers/base/Provider.d.ts +17 -0
  72. package/dist/providers/base/Provider.d.ts.map +1 -0
  73. package/dist/providers/base/Provider.js +43 -0
  74. package/dist/providers/base/Provider.js.map +1 -0
  75. package/dist/providers/base/index.d.ts +3 -0
  76. package/dist/providers/base/index.d.ts.map +1 -0
  77. package/dist/providers/base/index.js +21 -0
  78. package/dist/providers/base/index.js.map +1 -0
  79. package/dist/providers/base/prompt-builder.d.ts +22 -0
  80. package/dist/providers/base/prompt-builder.d.ts.map +1 -0
  81. package/dist/providers/base/prompt-builder.js +105 -0
  82. package/dist/providers/base/prompt-builder.js.map +1 -0
  83. package/dist/providers/gemini/GeminiProvider.d.ts +16 -0
  84. package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -0
  85. package/dist/providers/gemini/GeminiProvider.js +48 -0
  86. package/dist/providers/gemini/GeminiProvider.js.map +1 -0
  87. package/dist/providers/gemini/gemini-client.d.ts +16 -0
  88. package/dist/providers/gemini/gemini-client.d.ts.map +1 -0
  89. package/dist/providers/gemini/gemini-client.js +83 -0
  90. package/dist/providers/gemini/gemini-client.js.map +1 -0
  91. package/dist/providers/gemini/index.d.ts +3 -0
  92. package/dist/providers/gemini/index.d.ts.map +1 -0
  93. package/dist/providers/gemini/index.js +8 -0
  94. package/dist/providers/gemini/index.js.map +1 -0
  95. package/dist/providers/index.d.ts +6 -0
  96. package/dist/providers/index.d.ts.map +1 -0
  97. package/dist/providers/index.js +27 -0
  98. package/dist/providers/index.js.map +1 -0
  99. package/dist/providers/ollama/OllamaProvider.d.ts +17 -0
  100. package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -0
  101. package/dist/providers/ollama/OllamaProvider.js +47 -0
  102. package/dist/providers/ollama/OllamaProvider.js.map +1 -0
  103. package/dist/providers/ollama/index.d.ts +3 -0
  104. package/dist/providers/ollama/index.d.ts.map +1 -0
  105. package/dist/providers/ollama/index.js +8 -0
  106. package/dist/providers/ollama/index.js.map +1 -0
  107. package/dist/providers/ollama/ollama-client.d.ts +17 -0
  108. package/dist/providers/ollama/ollama-client.d.ts.map +1 -0
  109. package/dist/providers/ollama/ollama-client.js +83 -0
  110. package/dist/providers/ollama/ollama-client.js.map +1 -0
  111. package/dist/providers/openai/OpenAIProvider.d.ts +16 -0
  112. package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -0
  113. package/dist/providers/openai/OpenAIProvider.js +48 -0
  114. package/dist/providers/openai/OpenAIProvider.js.map +1 -0
  115. package/dist/providers/openai/index.d.ts +3 -0
  116. package/dist/providers/openai/index.d.ts.map +1 -0
  117. package/dist/providers/openai/index.js +8 -0
  118. package/dist/providers/openai/index.js.map +1 -0
  119. package/dist/providers/openai/openai-client.d.ts +16 -0
  120. package/dist/providers/openai/openai-client.d.ts.map +1 -0
  121. package/dist/providers/openai/openai-client.js +85 -0
  122. package/dist/providers/openai/openai-client.js.map +1 -0
  123. package/dist/schema/SchemaAdapter.d.ts +34 -0
  124. package/dist/schema/SchemaAdapter.d.ts.map +1 -0
  125. package/dist/schema/SchemaAdapter.js +59 -0
  126. package/dist/schema/SchemaAdapter.js.map +1 -0
  127. package/dist/schema/field-extractor.d.ts +10 -0
  128. package/dist/schema/field-extractor.d.ts.map +1 -0
  129. package/dist/schema/field-extractor.js +58 -0
  130. package/dist/schema/field-extractor.js.map +1 -0
  131. package/dist/schema/index.d.ts +5 -0
  132. package/dist/schema/index.d.ts.map +1 -0
  133. package/dist/schema/index.js +13 -0
  134. package/dist/schema/index.js.map +1 -0
  135. package/dist/schema/normalizer.d.ts +6 -0
  136. package/dist/schema/normalizer.d.ts.map +1 -0
  137. package/dist/schema/normalizer.js +17 -0
  138. package/dist/schema/normalizer.js.map +1 -0
  139. package/dist/schema/validator.d.ts +17 -0
  140. package/dist/schema/validator.d.ts.map +1 -0
  141. package/dist/schema/validator.js +50 -0
  142. package/dist/schema/validator.js.map +1 -0
  143. package/dist/security/index.d.ts +5 -0
  144. package/dist/security/index.d.ts.map +1 -0
  145. package/dist/security/index.js +21 -0
  146. package/dist/security/index.js.map +1 -0
  147. package/dist/security/input-validator.d.ts +6 -0
  148. package/dist/security/input-validator.d.ts.map +1 -0
  149. package/dist/security/input-validator.js +76 -0
  150. package/dist/security/input-validator.js.map +1 -0
  151. package/dist/security/prompt-sanitizer.d.ts +12 -0
  152. package/dist/security/prompt-sanitizer.d.ts.map +1 -0
  153. package/dist/security/prompt-sanitizer.js +66 -0
  154. package/dist/security/prompt-sanitizer.js.map +1 -0
  155. package/dist/security/redactor.d.ts +5 -0
  156. package/dist/security/redactor.d.ts.map +1 -0
  157. package/dist/security/redactor.js +37 -0
  158. package/dist/security/redactor.js.map +1 -0
  159. package/dist/security/security-config.d.ts +10 -0
  160. package/dist/security/security-config.d.ts.map +1 -0
  161. package/dist/security/security-config.js +26 -0
  162. package/dist/security/security-config.js.map +1 -0
  163. package/dist/trace/TraceBuilder.d.ts +58 -0
  164. package/dist/trace/TraceBuilder.d.ts.map +1 -0
  165. package/dist/trace/TraceBuilder.js +117 -0
  166. package/dist/trace/TraceBuilder.js.map +1 -0
  167. package/dist/trace/confidence-analyzer.d.ts +6 -0
  168. package/dist/trace/confidence-analyzer.d.ts.map +1 -0
  169. package/dist/trace/confidence-analyzer.js +30 -0
  170. package/dist/trace/confidence-analyzer.js.map +1 -0
  171. package/dist/trace/index.d.ts +4 -0
  172. package/dist/trace/index.d.ts.map +1 -0
  173. package/dist/trace/index.js +22 -0
  174. package/dist/trace/index.js.map +1 -0
  175. package/dist/trace/trace-utils.d.ts +20 -0
  176. package/dist/trace/trace-utils.d.ts.map +1 -0
  177. package/dist/trace/trace-utils.js +33 -0
  178. package/dist/trace/trace-utils.js.map +1 -0
  179. package/dist/transform.d.ts +30 -0
  180. package/dist/transform.d.ts.map +1 -0
  181. package/dist/transform.js +62 -0
  182. package/dist/transform.js.map +1 -0
  183. package/dist/types/cache.types.d.ts +41 -0
  184. package/dist/types/cache.types.d.ts.map +1 -0
  185. package/dist/types/cache.types.js +3 -0
  186. package/dist/types/cache.types.js.map +1 -0
  187. package/dist/types/errors.types.d.ts +22 -0
  188. package/dist/types/errors.types.d.ts.map +1 -0
  189. package/dist/types/errors.types.js +31 -0
  190. package/dist/types/errors.types.js.map +1 -0
  191. package/dist/types/index.d.ts +9 -0
  192. package/dist/types/index.d.ts.map +1 -0
  193. package/dist/types/index.js +8 -0
  194. package/dist/types/index.js.map +1 -0
  195. package/dist/types/mapping.types.d.ts +48 -0
  196. package/dist/types/mapping.types.d.ts.map +1 -0
  197. package/dist/types/mapping.types.js +3 -0
  198. package/dist/types/mapping.types.js.map +1 -0
  199. package/dist/types/provider.types.d.ts +62 -0
  200. package/dist/types/provider.types.d.ts.map +1 -0
  201. package/dist/types/provider.types.js +3 -0
  202. package/dist/types/provider.types.js.map +1 -0
  203. package/dist/types/schema.types.d.ts +68 -0
  204. package/dist/types/schema.types.d.ts.map +1 -0
  205. package/dist/types/schema.types.js +3 -0
  206. package/dist/types/schema.types.js.map +1 -0
  207. package/dist/types/security.types.d.ts +32 -0
  208. package/dist/types/security.types.d.ts.map +1 -0
  209. package/dist/types/security.types.js +3 -0
  210. package/dist/types/security.types.js.map +1 -0
  211. package/dist/types/trace.types.d.ts +129 -0
  212. package/dist/types/trace.types.d.ts.map +1 -0
  213. package/dist/types/trace.types.js +3 -0
  214. package/dist/types/trace.types.js.map +1 -0
  215. package/dist/types/transform.types.d.ts +56 -0
  216. package/dist/types/transform.types.d.ts.map +1 -0
  217. package/dist/types/transform.types.js +3 -0
  218. package/dist/types/transform.types.js.map +1 -0
  219. package/package.json +107 -0
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenAIClient = void 0;
4
+ const errors_1 = require("../../errors");
5
+ /**
6
+ * OpenAI API client
7
+ */
8
+ class OpenAIClient {
9
+ constructor(config) {
10
+ if (!config.apiKey) {
11
+ throw new Error('OpenAI API key is required');
12
+ }
13
+ this.apiKey = config.apiKey;
14
+ this.model = config.model || 'gpt-4o-mini';
15
+ this.baseUrl = config.baseUrl || 'https://api.openai.com/v1';
16
+ this.timeout = config.timeout || 30000;
17
+ }
18
+ /**
19
+ * Generate content using OpenAI Chat Completions API
20
+ */
21
+ async generateContent(systemPrompt, userPrompt) {
22
+ const url = `${this.baseUrl}/chat/completions`;
23
+ const payload = {
24
+ model: this.model,
25
+ messages: [
26
+ {
27
+ role: 'system',
28
+ content: systemPrompt,
29
+ },
30
+ {
31
+ role: 'user',
32
+ content: userPrompt,
33
+ },
34
+ ],
35
+ response_format: { type: 'json_object' }, // Request JSON output
36
+ max_completion_tokens: 8192, // Use max_completion_tokens for newer models
37
+ };
38
+ // Only add temperature for models that support it (some restricted models don't)
39
+ // Most production models support temperature, but some preview/nano models don't
40
+ if (!this.model.includes('nano')) {
41
+ payload.temperature = 0.1;
42
+ }
43
+ try {
44
+ const controller = new AbortController();
45
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
46
+ const response = await fetch(url, {
47
+ method: 'POST',
48
+ headers: {
49
+ 'Content-Type': 'application/json',
50
+ Authorization: `Bearer ${this.apiKey}`,
51
+ },
52
+ body: JSON.stringify(payload),
53
+ signal: controller.signal,
54
+ });
55
+ clearTimeout(timeoutId);
56
+ if (!response.ok) {
57
+ const errorBody = await response.text();
58
+ throw (0, errors_1.createProviderError)(`OpenAI API error (${response.status}): ${errorBody}`, {
59
+ status: response.status,
60
+ body: errorBody,
61
+ });
62
+ }
63
+ const data = (await response.json());
64
+ // Extract text from response
65
+ if (!data.choices ||
66
+ !data.choices[0] ||
67
+ !data.choices[0].message ||
68
+ !data.choices[0].message.content) {
69
+ throw (0, errors_1.createProviderError)('Invalid OpenAI API response structure', { response: data });
70
+ }
71
+ return data.choices[0].message.content;
72
+ }
73
+ catch (error) {
74
+ if (error instanceof Error && error.name === 'AbortError') {
75
+ throw (0, errors_1.createProviderError)(`OpenAI API request timed out after ${this.timeout}ms`);
76
+ }
77
+ if (error instanceof Error && error.message.includes('OpenAI API')) {
78
+ throw error;
79
+ }
80
+ throw (0, errors_1.createProviderError)(`OpenAI API request failed: ${error instanceof Error ? error.message : String(error)}`, { originalError: error });
81
+ }
82
+ }
83
+ }
84
+ exports.OpenAIClient = OpenAIClient;
85
+ //# sourceMappingURL=openai-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-client.js","sourceRoot":"","sources":["../../../src/providers/openai/openai-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { SchemaAdapter as ISchemaAdapter, NormalizedSchema, SchemaField, ValidationResult } from '../types';
2
+ /**
3
+ * Schema Adapter implementation
4
+ */
5
+ export declare class SchemaAdapter implements ISchemaAdapter {
6
+ private normalizedSchema;
7
+ private validator;
8
+ constructor(schema: object);
9
+ /**
10
+ * Get the normalized schema
11
+ */
12
+ getNormalizedSchema(): NormalizedSchema;
13
+ /**
14
+ * List all fields
15
+ */
16
+ listFields(): SchemaField[];
17
+ /**
18
+ * Get a specific field by path
19
+ */
20
+ getField(path: string): SchemaField | undefined;
21
+ /**
22
+ * Check if a path is required
23
+ */
24
+ isRequired(path: string): boolean;
25
+ /**
26
+ * Validate a payload against the schema
27
+ */
28
+ validate(payload: unknown): ValidationResult;
29
+ /**
30
+ * Create a SchemaAdapter from a schema object
31
+ */
32
+ static from(schema: object): SchemaAdapter;
33
+ }
34
+ //# sourceMappingURL=SchemaAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaAdapter.d.ts","sourceRoot":"","sources":["../../src/schema/SchemaAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,IAAI,cAAc,EAC/B,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAKlB;;GAEG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,SAAS,CAAkB;gBAEvB,MAAM,EAAE,MAAM;IAY1B;;OAEG;IACH,mBAAmB,IAAI,gBAAgB;IAIvC;;OAEG;IACH,UAAU,IAAI,WAAW,EAAE;IAI3B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKjC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB;IAI5C;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;CAG3C"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaAdapter = void 0;
4
+ const normalizer_1 = require("./normalizer");
5
+ const validator_1 = require("./validator");
6
+ const errors_1 = require("../errors");
7
+ /**
8
+ * Schema Adapter implementation
9
+ */
10
+ class SchemaAdapter {
11
+ constructor(schema) {
12
+ try {
13
+ this.normalizedSchema = (0, normalizer_1.normalizeSchema)(schema);
14
+ this.validator = new validator_1.SchemaValidator(schema);
15
+ }
16
+ catch (error) {
17
+ throw (0, errors_1.createSchemaLoadError)(`Failed to load schema: ${error instanceof Error ? error.message : String(error)}`, { originalError: error });
18
+ }
19
+ }
20
+ /**
21
+ * Get the normalized schema
22
+ */
23
+ getNormalizedSchema() {
24
+ return this.normalizedSchema;
25
+ }
26
+ /**
27
+ * List all fields
28
+ */
29
+ listFields() {
30
+ return this.normalizedSchema.fields;
31
+ }
32
+ /**
33
+ * Get a specific field by path
34
+ */
35
+ getField(path) {
36
+ return this.normalizedSchema.fields.find((f) => f.path === path);
37
+ }
38
+ /**
39
+ * Check if a path is required
40
+ */
41
+ isRequired(path) {
42
+ const field = this.getField(path);
43
+ return field?.required || false;
44
+ }
45
+ /**
46
+ * Validate a payload against the schema
47
+ */
48
+ validate(payload) {
49
+ return this.validator.validate(payload);
50
+ }
51
+ /**
52
+ * Create a SchemaAdapter from a schema object
53
+ */
54
+ static from(schema) {
55
+ return new SchemaAdapter(schema);
56
+ }
57
+ }
58
+ exports.SchemaAdapter = SchemaAdapter;
59
+ //# sourceMappingURL=SchemaAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaAdapter.js","sourceRoot":"","sources":["../../src/schema/SchemaAdapter.ts"],"names":[],"mappings":";;;AAMA,6CAA+C;AAC/C,2CAA8C;AAC9C,sCAAkD;AAElD;;GAEG;AACH,MAAa,aAAa;IAIxB,YAAY,MAAc;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,gBAAgB,GAAG,IAAA,4BAAe,EAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS,GAAG,IAAI,2BAAe,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,8BAAqB,EACzB,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAClF,EAAE,aAAa,EAAE,KAAK,EAAE,CACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,KAAK,EAAE,QAAQ,IAAI,KAAK,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAgB;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAc;QACxB,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;CACF;AA1DD,sCA0DC"}
@@ -0,0 +1,10 @@
1
+ import { SchemaField } from '../types';
2
+ /**
3
+ * Extract fields from JSON Schema
4
+ */
5
+ export declare function extractFields(schema: any, basePath?: string): SchemaField[];
6
+ /**
7
+ * Generate schema version (hash of schema)
8
+ */
9
+ export declare function generateSchemaVersion(schema: object): string;
10
+ //# sourceMappingURL=field-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-extractor.d.ts","sourceRoot":"","sources":["../../src/schema/field-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAY,GAAG,WAAW,EAAE,CA+BhF;AAiBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG5D"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.extractFields = extractFields;
7
+ exports.generateSchemaVersion = generateSchemaVersion;
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ /**
10
+ * Extract fields from JSON Schema
11
+ */
12
+ function extractFields(schema, basePath = '$') {
13
+ const fields = [];
14
+ // Handle object type
15
+ if (schema.type === 'object' && schema.properties) {
16
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
17
+ const path = `${basePath}.${key}`;
18
+ const isRequired = schema.required?.includes(key) || false;
19
+ fields.push(createField(path, propSchema, isRequired));
20
+ // Recursively extract nested fields
21
+ if (propSchema.type === 'object' && propSchema.properties) {
22
+ fields.push(...extractFields(propSchema, path));
23
+ }
24
+ // Handle arrays with object items
25
+ if (propSchema.type === 'array' &&
26
+ propSchema.items?.type === 'object') {
27
+ const itemSchema = propSchema.items;
28
+ const arrayPath = `${path}[*]`;
29
+ if (itemSchema.properties) {
30
+ fields.push(...extractFields(itemSchema, arrayPath));
31
+ }
32
+ }
33
+ }
34
+ }
35
+ return fields;
36
+ }
37
+ /**
38
+ * Create a SchemaField from JSON Schema property
39
+ */
40
+ function createField(path, propSchema, required) {
41
+ return {
42
+ path,
43
+ type: propSchema.type || 'any',
44
+ required,
45
+ description: propSchema.description,
46
+ format: propSchema.format,
47
+ enum: propSchema.enum,
48
+ default: propSchema.default,
49
+ };
50
+ }
51
+ /**
52
+ * Generate schema version (hash of schema)
53
+ */
54
+ function generateSchemaVersion(schema) {
55
+ const schemaStr = JSON.stringify(schema, Object.keys(schema).sort());
56
+ return crypto_1.default.createHash('sha256').update(schemaStr).digest('hex').substring(0, 16);
57
+ }
58
+ //# sourceMappingURL=field-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-extractor.js","sourceRoot":"","sources":["../../src/schema/field-extractor.ts"],"names":[],"mappings":";;;;;AAMA,sCA+BC;AAoBD,sDAGC;AA3DD,oDAA4B;AAE5B;;GAEG;AACH,SAAgB,aAAa,CAAC,MAAW,EAAE,WAAmB,GAAG;IAC/D,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,qBAAqB;IACrB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,GAAG,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;YAE3D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,UAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;YAE9D,oCAAoC;YACpC,IAAK,UAAkB,CAAC,IAAI,KAAK,QAAQ,IAAK,UAAkB,CAAC,UAAU,EAAE,CAAC;gBAC5E,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,UAAiB,EAAE,IAAI,CAAC,CAAC,CAAC;YACzD,CAAC;YAED,kCAAkC;YAClC,IACG,UAAkB,CAAC,IAAI,KAAK,OAAO;gBACnC,UAAkB,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,EAC5C,CAAC;gBACD,MAAM,UAAU,GAAI,UAAkB,CAAC,KAAK,CAAC;gBAC7C,MAAM,SAAS,GAAG,GAAG,IAAI,KAAK,CAAC;gBAC/B,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,UAAe,EAAE,QAAiB;IACnE,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,KAAK;QAC9B,QAAQ;QACR,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,UAAU,CAAC,OAAO;KAC5B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAc;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtF,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { SchemaAdapter } from './SchemaAdapter';
2
+ export { normalizeSchema } from './normalizer';
3
+ export { SchemaValidator } from './validator';
4
+ export { extractFields, generateSchemaVersion } from './field-extractor';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateSchemaVersion = exports.extractFields = exports.SchemaValidator = exports.normalizeSchema = exports.SchemaAdapter = void 0;
4
+ var SchemaAdapter_1 = require("./SchemaAdapter");
5
+ Object.defineProperty(exports, "SchemaAdapter", { enumerable: true, get: function () { return SchemaAdapter_1.SchemaAdapter; } });
6
+ var normalizer_1 = require("./normalizer");
7
+ Object.defineProperty(exports, "normalizeSchema", { enumerable: true, get: function () { return normalizer_1.normalizeSchema; } });
8
+ var validator_1 = require("./validator");
9
+ Object.defineProperty(exports, "SchemaValidator", { enumerable: true, get: function () { return validator_1.SchemaValidator; } });
10
+ var field_extractor_1 = require("./field-extractor");
11
+ Object.defineProperty(exports, "extractFields", { enumerable: true, get: function () { return field_extractor_1.extractFields; } });
12
+ Object.defineProperty(exports, "generateSchemaVersion", { enumerable: true, get: function () { return field_extractor_1.generateSchemaVersion; } });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":";;;AAAA,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,2CAA+C;AAAtC,6GAAA,eAAe,OAAA;AACxB,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AACxB,qDAAyE;AAAhE,gHAAA,aAAa,OAAA;AAAE,wHAAA,qBAAqB,OAAA"}
@@ -0,0 +1,6 @@
1
+ import { NormalizedSchema } from '../types';
2
+ /**
3
+ * Normalize JSON Schema to internal representation
4
+ */
5
+ export declare function normalizeSchema(schema: object): NormalizedSchema;
6
+ //# sourceMappingURL=normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../../src/schema/normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAShE"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeSchema = normalizeSchema;
4
+ const field_extractor_1 = require("./field-extractor");
5
+ /**
6
+ * Normalize JSON Schema to internal representation
7
+ */
8
+ function normalizeSchema(schema) {
9
+ const fields = (0, field_extractor_1.extractFields)(schema);
10
+ const version = (0, field_extractor_1.generateSchemaVersion)(schema);
11
+ return {
12
+ version,
13
+ fields,
14
+ raw: schema,
15
+ };
16
+ }
17
+ //# sourceMappingURL=normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../src/schema/normalizer.ts"],"names":[],"mappings":";;AAMA,0CASC;AAdD,uDAAyE;AAEzE;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAc;IAC5C,MAAM,MAAM,GAAG,IAAA,+BAAa,EAAC,MAAM,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAA,uCAAqB,EAAC,MAAM,CAAC,CAAC;IAE9C,OAAO;QACL,OAAO;QACP,MAAM;QACN,GAAG,EAAE,MAAM;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ValidationResult } from '../types';
2
+ /**
3
+ * JSON Schema validator using AJV
4
+ */
5
+ export declare class SchemaValidator {
6
+ private ajv;
7
+ constructor(schema: object);
8
+ /**
9
+ * Validate a payload against the schema
10
+ */
11
+ validate(payload: unknown): ValidationResult;
12
+ /**
13
+ * Convert AJV error to ValidationError
14
+ */
15
+ private convertAjvError;
16
+ }
17
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/schema/validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,UAAU,CAAC;AAE7D;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAM;gBAEL,MAAM,EAAE,MAAM;IAa1B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB;IAc5C;;OAEG;IACH,OAAO,CAAC,eAAe;CAQxB"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SchemaValidator = void 0;
7
+ const ajv_1 = __importDefault(require("ajv"));
8
+ const ajv_formats_1 = __importDefault(require("ajv-formats"));
9
+ /**
10
+ * JSON Schema validator using AJV
11
+ */
12
+ class SchemaValidator {
13
+ constructor(schema) {
14
+ this.ajv = new ajv_1.default({
15
+ strict: false, // Allow unknown formats
16
+ allErrors: true,
17
+ verbose: true,
18
+ });
19
+ // Add format support (email, date-time, etc.)
20
+ (0, ajv_formats_1.default)(this.ajv);
21
+ this.ajv.addSchema(schema, 'target-schema');
22
+ }
23
+ /**
24
+ * Validate a payload against the schema
25
+ */
26
+ validate(payload) {
27
+ const valid = this.ajv.validate('target-schema', payload);
28
+ if (valid) {
29
+ return { valid: true, errors: [] };
30
+ }
31
+ const errors = this.ajv.errors || [];
32
+ return {
33
+ valid: false,
34
+ errors: errors.map((err) => this.convertAjvError(err)),
35
+ };
36
+ }
37
+ /**
38
+ * Convert AJV error to ValidationError
39
+ */
40
+ convertAjvError(error) {
41
+ return {
42
+ path: error.instancePath || '$',
43
+ message: error.message || 'Validation failed',
44
+ keyword: error.keyword,
45
+ params: error.params,
46
+ };
47
+ }
48
+ }
49
+ exports.SchemaValidator = SchemaValidator;
50
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/schema/validator.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAuC;AACvC,8DAAqC;AAGrC;;GAEG;AACH,MAAa,eAAe;IAG1B,YAAY,MAAc;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,aAAG,CAAC;YACjB,MAAM,EAAE,KAAK,EAAE,wBAAwB;YACvC,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,8CAA8C;QAC9C,IAAA,qBAAU,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAErB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAgB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAE1D,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACrC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;SACvD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAAkB;QACxC,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,GAAG;YAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB;YAC7C,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;CACF;AA5CD,0CA4CC"}
@@ -0,0 +1,5 @@
1
+ export * from './security-config';
2
+ export * from './input-validator';
3
+ export * from './redactor';
4
+ export * from './prompt-sanitizer';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./security-config"), exports);
18
+ __exportStar(require("./input-validator"), exports);
19
+ __exportStar(require("./redactor"), exports);
20
+ __exportStar(require("./prompt-sanitizer"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,oDAAkC;AAClC,6CAA2B;AAC3B,qDAAmC"}
@@ -0,0 +1,6 @@
1
+ import { InputValidationResult, SecurityOptions } from '../types';
2
+ /**
3
+ * Validate input against security limits
4
+ */
5
+ export declare function validateInput(input: unknown, security: Required<SecurityOptions>): InputValidationResult;
6
+ //# sourceMappingURL=input-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-validator.d.ts","sourceRoot":"","sources":["../../src/security/input-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAElE;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,GAClC,qBAAqB,CAkCvB"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateInput = validateInput;
4
+ /**
5
+ * Validate input against security limits
6
+ */
7
+ function validateInput(input, security) {
8
+ const errors = [];
9
+ // Check input size
10
+ const inputStr = JSON.stringify(input);
11
+ const size = Buffer.byteLength(inputStr, 'utf8');
12
+ if (size > security.maxInputSize) {
13
+ errors.push(`Input size (${size} bytes) exceeds maximum allowed (${security.maxInputSize} bytes)`);
14
+ }
15
+ // Check depth
16
+ const depth = getDepth(input);
17
+ if (depth > security.maxDepth) {
18
+ errors.push(`Input depth (${depth}) exceeds maximum allowed (${security.maxDepth})`);
19
+ }
20
+ // Check key count
21
+ const keyCount = countKeys(input);
22
+ if (keyCount > security.maxKeys) {
23
+ errors.push(`Input key count (${keyCount}) exceeds maximum allowed (${security.maxKeys})`);
24
+ }
25
+ return {
26
+ valid: errors.length === 0,
27
+ errors,
28
+ stats: {
29
+ size,
30
+ depth,
31
+ keys: keyCount,
32
+ },
33
+ };
34
+ }
35
+ /**
36
+ * Get maximum depth of nested object
37
+ */
38
+ function getDepth(obj, currentDepth = 0) {
39
+ if (currentDepth > 100)
40
+ return currentDepth; // Prevent infinite recursion
41
+ if (obj === null || obj === undefined)
42
+ return currentDepth;
43
+ if (Array.isArray(obj)) {
44
+ if (obj.length === 0)
45
+ return currentDepth + 1;
46
+ return Math.max(...obj.map((item) => getDepth(item, currentDepth + 1)));
47
+ }
48
+ if (typeof obj === 'object') {
49
+ const values = Object.values(obj);
50
+ if (values.length === 0)
51
+ return currentDepth + 1;
52
+ return Math.max(...values.map((value) => getDepth(value, currentDepth + 1)));
53
+ }
54
+ return currentDepth;
55
+ }
56
+ /**
57
+ * Count total number of keys
58
+ */
59
+ function countKeys(obj, count = 0) {
60
+ if (count > 10000)
61
+ return count; // Prevent infinite recursion
62
+ if (obj === null || obj === undefined)
63
+ return count;
64
+ if (Array.isArray(obj)) {
65
+ return obj.reduce((acc, item) => countKeys(item, acc), count);
66
+ }
67
+ if (typeof obj === 'object') {
68
+ let total = count + Object.keys(obj).length;
69
+ for (const value of Object.values(obj)) {
70
+ total = countKeys(value, total);
71
+ }
72
+ return total;
73
+ }
74
+ return count;
75
+ }
76
+ //# sourceMappingURL=input-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-validator.js","sourceRoot":"","sources":["../../src/security/input-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sanitize prompts to mitigate prompt injection attacks
3
+ */
4
+ /**
5
+ * Check if input contains suspicious prompt injection patterns
6
+ */
7
+ export declare function detectPromptInjection(input: string): boolean;
8
+ /**
9
+ * Sanitize string fields in input to prevent prompt injection
10
+ */
11
+ export declare function sanitizeInput(input: unknown): unknown;
12
+ //# sourceMappingURL=prompt-sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-sanitizer.d.ts","sourceRoot":"","sources":["../../src/security/prompt-sanitizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA4BrD"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /**
3
+ * Sanitize prompts to mitigate prompt injection attacks
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectPromptInjection = detectPromptInjection;
7
+ exports.sanitizeInput = sanitizeInput;
8
+ const SUSPICIOUS_PATTERNS = [
9
+ /ignore\s+(previous|above|all)\s+instructions/i,
10
+ /new\s+instructions/i,
11
+ /system\s*:/i,
12
+ /assistant\s*:/i,
13
+ /you\s+are\s+now/i,
14
+ /forget\s+everything/i,
15
+ /disregard\s+.*(previous|above|instructions)/i,
16
+ ];
17
+ /**
18
+ * Check if input contains suspicious prompt injection patterns
19
+ */
20
+ function detectPromptInjection(input) {
21
+ return SUSPICIOUS_PATTERNS.some((pattern) => pattern.test(input));
22
+ }
23
+ /**
24
+ * Sanitize string fields in input to prevent prompt injection
25
+ */
26
+ function sanitizeInput(input) {
27
+ if (input === null || input === undefined)
28
+ return input;
29
+ if (typeof input === 'string') {
30
+ return sanitizeString(input);
31
+ }
32
+ if (Array.isArray(input)) {
33
+ return input.map((item) => sanitizeInput(item));
34
+ }
35
+ if (typeof input === 'object') {
36
+ const sanitized = {};
37
+ for (const [key, value] of Object.entries(input)) {
38
+ if (typeof value === 'string') {
39
+ sanitized[key] = sanitizeString(value);
40
+ }
41
+ else if (value && typeof value === 'object') {
42
+ sanitized[key] = sanitizeInput(value);
43
+ }
44
+ else {
45
+ sanitized[key] = value;
46
+ }
47
+ }
48
+ return sanitized;
49
+ }
50
+ return input;
51
+ }
52
+ /**
53
+ * Sanitize a string by escaping special characters that might be used for injection
54
+ */
55
+ function sanitizeString(str) {
56
+ // Trim excessive whitespace
57
+ let sanitized = str.trim();
58
+ // Limit length
59
+ if (sanitized.length > 10000) {
60
+ sanitized = sanitized.substring(0, 10000);
61
+ }
62
+ // Escape control characters
63
+ sanitized = sanitized.replace(/[\x00-\x1F\x7F]/g, '');
64
+ return sanitized;
65
+ }
66
+ //# sourceMappingURL=prompt-sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-sanitizer.js","sourceRoot":"","sources":["../../src/security/prompt-sanitizer.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAeH,sDAEC;AAKD,sCA4BC;AAhDD,MAAM,mBAAmB,GAAG;IAC1B,+CAA+C;IAC/C,qBAAqB;IACrB,aAAa;IACb,gBAAgB;IAChB,kBAAkB;IAClB,sBAAsB;IACtB,8CAA8C;CAC/C,CAAC;AAEF;;GAEG;AACH,SAAgB,qBAAqB,CAAC,KAAa;IACjD,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAExD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAQ,EAAE,CAAC;QAE1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9C,SAAS,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,4BAA4B;IAC5B,IAAI,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,eAAe;IACf,IAAI,SAAS,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC7B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,4BAA4B;IAC5B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAEtD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Redact sensitive fields from input
3
+ */
4
+ export declare function redactSensitiveFields(input: unknown, redactKeys: string[]): unknown;
5
+ //# sourceMappingURL=redactor.d.ts.map