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,33 @@
1
+ import { RouteEntry, HttpMethod } from './types';
2
+ /**
3
+ * Registry for storing route schemas
4
+ */
5
+ export declare class RouteRegistry {
6
+ private routes;
7
+ constructor();
8
+ /**
9
+ * Generate registry key from method and path
10
+ */
11
+ private getKey;
12
+ /**
13
+ * Register a route with its schema
14
+ */
15
+ register(entry: RouteEntry): void;
16
+ /**
17
+ * Get route entry by method and path
18
+ */
19
+ get(method: HttpMethod, path: string): RouteEntry | undefined;
20
+ /**
21
+ * Check if route is registered
22
+ */
23
+ has(method: HttpMethod, path: string): boolean;
24
+ /**
25
+ * Get all registered routes
26
+ */
27
+ getAll(): RouteEntry[];
28
+ /**
29
+ * Clear all routes
30
+ */
31
+ clear(): void;
32
+ }
33
+ //# sourceMappingURL=route-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-registry.d.ts","sourceRoot":"","sources":["../../src/express/route-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA0B;;IAMxC;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKjC;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAK7D;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAK9C;;OAEG;IACH,MAAM,IAAI,UAAU,EAAE;IAItB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteRegistry = void 0;
4
+ /**
5
+ * Registry for storing route schemas
6
+ */
7
+ class RouteRegistry {
8
+ constructor() {
9
+ this.routes = new Map();
10
+ }
11
+ /**
12
+ * Generate registry key from method and path
13
+ */
14
+ getKey(method, path) {
15
+ return `${method} ${path}`;
16
+ }
17
+ /**
18
+ * Register a route with its schema
19
+ */
20
+ register(entry) {
21
+ const key = this.getKey(entry.method, entry.path);
22
+ this.routes.set(key, entry);
23
+ }
24
+ /**
25
+ * Get route entry by method and path
26
+ */
27
+ get(method, path) {
28
+ const key = this.getKey(method, path);
29
+ return this.routes.get(key);
30
+ }
31
+ /**
32
+ * Check if route is registered
33
+ */
34
+ has(method, path) {
35
+ const key = this.getKey(method, path);
36
+ return this.routes.has(key);
37
+ }
38
+ /**
39
+ * Get all registered routes
40
+ */
41
+ getAll() {
42
+ return Array.from(this.routes.values());
43
+ }
44
+ /**
45
+ * Clear all routes
46
+ */
47
+ clear() {
48
+ this.routes.clear();
49
+ }
50
+ }
51
+ exports.RouteRegistry = RouteRegistry;
52
+ //# sourceMappingURL=route-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-registry.js","sourceRoot":"","sources":["../../src/express/route-registry.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAa,aAAa;IAGxB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,MAAkB,EAAE,IAAY;QAC7C,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAiB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,MAAkB,EAAE,IAAY;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,MAAkB,EAAE,IAAY;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAnDD,sCAmDC"}
@@ -0,0 +1,21 @@
1
+ import { RequestHandler } from 'express';
2
+ import { Provider, SecurityOptions, Cache } from '../types';
3
+ import { ErrorHandler } from './types';
4
+ /**
5
+ * Options for transform middleware
6
+ */
7
+ export interface TransformMiddlewareOptions {
8
+ schema: object;
9
+ provider: Provider;
10
+ confidenceThreshold?: number;
11
+ cache?: Cache;
12
+ security?: SecurityOptions;
13
+ traceHeader?: string;
14
+ errorHandler: ErrorHandler;
15
+ verbose?: boolean;
16
+ }
17
+ /**
18
+ * Create middleware that transforms request body using FOON
19
+ */
20
+ export declare function createTransformMiddleware(options: TransformMiddlewareOptions): RequestHandler;
21
+ //# sourceMappingURL=transform-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-middleware.d.ts","sourceRoot":"","sources":["../../src/express/transform-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,cAAc,EAAE,MAAM,SAAS,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,cAAc,CA+D7F"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTransformMiddleware = createTransformMiddleware;
4
+ const transform_1 = require("../transform");
5
+ const errors_1 = require("../errors");
6
+ /**
7
+ * Create middleware that transforms request body using FOON
8
+ */
9
+ function createTransformMiddleware(options) {
10
+ return async (req, res, next) => {
11
+ try {
12
+ // Skip if no body
13
+ if (!req.body || Object.keys(req.body).length === 0) {
14
+ return next();
15
+ }
16
+ // Run FOON transform
17
+ const result = await (0, transform_1.transform)(req.body, {
18
+ schema: options.schema,
19
+ provider: options.provider,
20
+ confidenceThreshold: options.confidenceThreshold,
21
+ cache: options.cache,
22
+ security: options.security,
23
+ verbose: options.verbose,
24
+ });
25
+ // Add trace ID to response header
26
+ const traceHeader = options.traceHeader || 'X-FON-Trace-Id';
27
+ res.setHeader(traceHeader, result.trace.traceId);
28
+ // If verbose, also add timing headers
29
+ if (options.verbose) {
30
+ res.setHeader('X-FON-Timing-Total', result.trace.timings.total.toString());
31
+ res.setHeader('X-FON-Timing-Proposal', result.trace.timings.proposal.toString());
32
+ res.setHeader('X-FON-Cache-Hit', result.trace.cache.hit ? 'true' : 'false');
33
+ }
34
+ // Check if transformation succeeded
35
+ if (result.ok && result.output) {
36
+ // Replace request body with transformed output
37
+ req.body = result.output;
38
+ // Attach trace to request for debugging (optional)
39
+ req.fonTrace = result.trace;
40
+ // Continue to next middleware/handler
41
+ return next();
42
+ }
43
+ else if (result.error) {
44
+ // Handle transformation error
45
+ return options.errorHandler(result.error, req, res, next);
46
+ }
47
+ else {
48
+ // This shouldn't happen, but handle it gracefully
49
+ const error = new errors_1.FONError('EXECUTION_ERROR', 'Transformation failed without error details');
50
+ return options.errorHandler(error, req, res, next);
51
+ }
52
+ }
53
+ catch (error) {
54
+ // Handle unexpected errors
55
+ const fonError = error instanceof errors_1.FONError
56
+ ? error
57
+ : new errors_1.FONError('EXECUTION_ERROR', `Unexpected error: ${error instanceof Error ? error.message : String(error)}`);
58
+ return options.errorHandler(fonError, req, res, next);
59
+ }
60
+ };
61
+ }
62
+ //# sourceMappingURL=transform-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-middleware.js","sourceRoot":"","sources":["../../src/express/transform-middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { Request, Response, NextFunction, RequestHandler } from 'express';
2
+ import { Provider, SecurityOptions, Cache } from '../types';
3
+ import { FONError } from '../errors';
4
+ /**
5
+ * HTTP methods supported for FOON transformation
6
+ */
7
+ export type HttpMethod = 'POST' | 'PUT' | 'PATCH' | 'DELETE';
8
+ /**
9
+ * Configuration for FOON Router
10
+ */
11
+ export interface FonRouterConfig {
12
+ /** LLM provider instance (required) */
13
+ provider: Provider;
14
+ /** Route prefix for FOON routes (default: '/foon') */
15
+ prefix?: string;
16
+ /** HTTP methods to transform (default: ['POST', 'PUT', 'PATCH']) */
17
+ methods?: HttpMethod[];
18
+ /** Confidence threshold (default: 0.85) */
19
+ confidenceThreshold?: number;
20
+ /** Cache instance (optional) */
21
+ cache?: Cache;
22
+ /** Security options */
23
+ security?: SecurityOptions;
24
+ /** Header name for trace ID (default: 'X-FON-Trace-Id') */
25
+ traceHeader?: string;
26
+ /** Custom error handler */
27
+ onError?: ErrorHandler;
28
+ /** Create original routes alongside FOON routes (default: true) */
29
+ createOriginalRoutes?: boolean;
30
+ /** Verbose mode for debugging (default: false) */
31
+ verbose?: boolean;
32
+ }
33
+ /**
34
+ * Configuration for a single route
35
+ */
36
+ export interface RouteConfig {
37
+ /** JSON Schema for this route */
38
+ schema: object;
39
+ /** Express request handler */
40
+ handler: RequestHandler | RequestHandler[];
41
+ /** Override: create original route for this specific route */
42
+ createOriginal?: boolean;
43
+ /** Override: confidence threshold for this specific route */
44
+ confidenceThreshold?: number;
45
+ }
46
+ /**
47
+ * Error handler function
48
+ */
49
+ export type ErrorHandler = (error: FONError, req: Request, res: Response, next: NextFunction) => void | Promise<void>;
50
+ /**
51
+ * Route registration entry
52
+ */
53
+ export interface RouteEntry {
54
+ method: HttpMethod;
55
+ path: string;
56
+ schema: object;
57
+ handler: RequestHandler | RequestHandler[];
58
+ config: RouteConfig;
59
+ }
60
+ /**
61
+ * FOON Router interface
62
+ */
63
+ export interface IFonRouter {
64
+ /** Register POST route with schema */
65
+ post(path: string, config: RouteConfig): this;
66
+ /** Register PUT route with schema */
67
+ put(path: string, config: RouteConfig): this;
68
+ /** Register PATCH route with schema */
69
+ patch(path: string, config: RouteConfig): this;
70
+ /** Register DELETE route with schema */
71
+ delete(path: string, config: RouteConfig): this;
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/express/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAU,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,QAAQ,EAAE,QAAQ,CAAC;IAEnB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oEAAoE;IACpE,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAEvB,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,gCAAgC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,mEAAmE;IACnE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IAEf,8BAA8B;IAC9B,OAAO,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IAE3C,8DAA8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,KACf,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,GAAG,cAAc,EAAE,CAAC;IAC3C,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,sCAAsC;IACtC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAE9C,qCAAqC;IACrC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAE7C,uCAAuC;IACvC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAE/C,wCAAwC;IACxC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CACjD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/express/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export { transform } from './transform';
2
+ export type { Mode, TransformOptions, TransformResult, TransformHooks, SchemaAdapter, NormalizedSchema, SchemaField, ValidationResult, ValidationError, MappingPlan, Assignment, Drop, Warning, Provider, ProviderConfig, ProviderMetrics, ProposalOptions, Cache, CachedMappingPlan, CacheMetadata, TraceReport, Timings, ExecutionTrace, AssignmentTrace, RejectedAssignment, Conflict, ValidationTrace, CacheTrace, ConfidenceSummary, SecurityOptions, InputValidationResult, } from './types';
3
+ export { FONError, ErrorCategory } from './errors';
4
+ export { GeminiProvider } from './providers/gemini';
5
+ export { OpenAIProvider } from './providers/openai';
6
+ export { OllamaProvider } from './providers/ollama';
7
+ export { Provider as BaseProvider } from './providers/base/Provider';
8
+ export { SchemaAdapter as SchemaAdapterClass } from './schema';
9
+ export { LRUCache } from './cache';
10
+ export { MappingEngine } from './engine/MappingEngine';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,YAAY,EAEV,IAAI,EACJ,gBAAgB,EAChB,eAAe,EACf,cAAc,EAEd,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,eAAe,EAEf,WAAW,EACX,UAAU,EACV,IAAI,EACJ,OAAO,EAEP,QAAQ,EACR,cAAc,EACd,eAAe,EACf,eAAe,EAEf,KAAK,EACL,iBAAiB,EACjB,aAAa,EAEb,WAAW,EACX,OAAO,EACP,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,UAAU,EACV,iBAAiB,EAEjB,eAAe,EACf,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG/D,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MappingEngine = exports.LRUCache = exports.SchemaAdapterClass = exports.BaseProvider = exports.OllamaProvider = exports.OpenAIProvider = exports.GeminiProvider = exports.ErrorCategory = exports.FONError = exports.transform = void 0;
4
+ // Main transform function
5
+ var transform_1 = require("./transform");
6
+ Object.defineProperty(exports, "transform", { enumerable: true, get: function () { return transform_1.transform; } });
7
+ // Error types and classes
8
+ var errors_1 = require("./errors");
9
+ Object.defineProperty(exports, "FONError", { enumerable: true, get: function () { return errors_1.FONError; } });
10
+ Object.defineProperty(exports, "ErrorCategory", { enumerable: true, get: function () { return errors_1.ErrorCategory; } });
11
+ // Providers
12
+ var gemini_1 = require("./providers/gemini");
13
+ Object.defineProperty(exports, "GeminiProvider", { enumerable: true, get: function () { return gemini_1.GeminiProvider; } });
14
+ var openai_1 = require("./providers/openai");
15
+ Object.defineProperty(exports, "OpenAIProvider", { enumerable: true, get: function () { return openai_1.OpenAIProvider; } });
16
+ var ollama_1 = require("./providers/ollama");
17
+ Object.defineProperty(exports, "OllamaProvider", { enumerable: true, get: function () { return ollama_1.OllamaProvider; } });
18
+ var Provider_1 = require("./providers/base/Provider");
19
+ Object.defineProperty(exports, "BaseProvider", { enumerable: true, get: function () { return Provider_1.Provider; } });
20
+ // Schema adapter (for advanced usage)
21
+ var schema_1 = require("./schema");
22
+ Object.defineProperty(exports, "SchemaAdapterClass", { enumerable: true, get: function () { return schema_1.SchemaAdapter; } });
23
+ // Cache implementations
24
+ var cache_1 = require("./cache");
25
+ Object.defineProperty(exports, "LRUCache", { enumerable: true, get: function () { return cache_1.LRUCache; } });
26
+ // Engine (for advanced usage)
27
+ var MappingEngine_1 = require("./engine/MappingEngine");
28
+ Object.defineProperty(exports, "MappingEngine", { enumerable: true, get: function () { return MappingEngine_1.MappingEngine; } });
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,0BAA0B;AAC1B,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AA4ClB,0BAA0B;AAC1B,mCAAmD;AAA1C,kGAAA,QAAQ,OAAA;AAAE,uGAAA,aAAa,OAAA;AAEhC,YAAY;AACZ,6CAAoD;AAA3C,wGAAA,cAAc,OAAA;AACvB,6CAAoD;AAA3C,wGAAA,cAAc,OAAA;AACvB,6CAAoD;AAA3C,wGAAA,cAAc,OAAA;AACvB,sDAAqE;AAA5D,wGAAA,QAAQ,OAAgB;AAEjC,sCAAsC;AACtC,mCAA+D;AAAtD,4GAAA,aAAa,OAAsB;AAE5C,wBAAwB;AACxB,iCAAmC;AAA1B,iGAAA,QAAQ,OAAA;AAEjB,8BAA8B;AAC9B,wDAAuD;AAA9C,8GAAA,aAAa,OAAA"}
@@ -0,0 +1,17 @@
1
+ import { Provider as IProvider, ProposalOptions, MappingPlan, NormalizedSchema } from '../../types';
2
+ /**
3
+ * Abstract base provider class
4
+ */
5
+ export declare abstract class Provider implements IProvider {
6
+ abstract readonly name: string;
7
+ abstract readonly promptVersion: string;
8
+ /**
9
+ * Propose a mapping plan from input to schema
10
+ */
11
+ abstract proposeMappingPlan(input: unknown, schema: NormalizedSchema, options: ProposalOptions): Promise<MappingPlan>;
12
+ /**
13
+ * Validate and parse LLM response as mapping plan
14
+ */
15
+ protected parseMappingPlan(response: string): MappingPlan;
16
+ }
17
+ //# sourceMappingURL=Provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../src/providers/base/Provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpG;;GAEG;AACH,8BAAsB,QAAS,YAAW,SAAS;IACjD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,kBAAkB,CACzB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,WAAW,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;CAyC1D"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Provider = void 0;
4
+ /**
5
+ * Abstract base provider class
6
+ */
7
+ class Provider {
8
+ /**
9
+ * Validate and parse LLM response as mapping plan
10
+ */
11
+ parseMappingPlan(response) {
12
+ try {
13
+ const parsed = JSON.parse(response);
14
+ // Validate structure
15
+ if (!parsed.assignments || !Array.isArray(parsed.assignments)) {
16
+ throw new Error('Missing or invalid "assignments" array');
17
+ }
18
+ if (!parsed.drops || !Array.isArray(parsed.drops)) {
19
+ throw new Error('Missing or invalid "drops" array');
20
+ }
21
+ if (!parsed.warnings || !Array.isArray(parsed.warnings)) {
22
+ throw new Error('Missing or invalid "warnings" array');
23
+ }
24
+ // Validate assignments
25
+ for (const assignment of parsed.assignments) {
26
+ if (!assignment.from || !assignment.to || assignment.confidence === undefined) {
27
+ throw new Error('Invalid assignment: must have "from", "to", and "confidence" properties');
28
+ }
29
+ if (typeof assignment.confidence !== 'number' ||
30
+ assignment.confidence < 0 ||
31
+ assignment.confidence > 1) {
32
+ throw new Error('Invalid confidence: must be a number between 0 and 1');
33
+ }
34
+ }
35
+ return parsed;
36
+ }
37
+ catch (error) {
38
+ throw new Error(`Failed to parse mapping plan: ${error instanceof Error ? error.message : String(error)}`);
39
+ }
40
+ }
41
+ }
42
+ exports.Provider = Provider;
43
+ //# sourceMappingURL=Provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../../../src/providers/base/Provider.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAsB,QAAQ;IAa5B;;OAEG;IACO,gBAAgB,CAAC,QAAgB;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAEpC,qBAAqB;YACrB,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9D,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,uBAAuB;YACvB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC9E,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;gBACJ,CAAC;gBAED,IACE,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ;oBACzC,UAAU,CAAC,UAAU,GAAG,CAAC;oBACzB,UAAU,CAAC,UAAU,GAAG,CAAC,EACzB,CAAC;oBACD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YAED,OAAO,MAAqB,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1F,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAzDD,4BAyDC"}
@@ -0,0 +1,3 @@
1
+ export { Provider } from './Provider';
2
+ export * from './prompt-builder';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/base/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,kBAAkB,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
+ exports.Provider = void 0;
18
+ var Provider_1 = require("./Provider");
19
+ Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return Provider_1.Provider; } });
20
+ __exportStar(require("./prompt-builder"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/base/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,mDAAiC"}
@@ -0,0 +1,22 @@
1
+ import { NormalizedSchema } from '../../types';
2
+ /**
3
+ * Build field inventory prompt from schema
4
+ */
5
+ export declare function buildSchemaFieldsPrompt(schema: NormalizedSchema): string;
6
+ /**
7
+ * Build input keys inventory from input payload
8
+ * Only includes structure, not values (for security)
9
+ */
10
+ export declare function buildInputKeysPrompt(input: unknown, includeValues?: boolean): string;
11
+ /**
12
+ * Build system prompt for mapping plan generation
13
+ */
14
+ export declare function buildSystemPrompt(confidenceThreshold: number): string;
15
+ /**
16
+ * Build complete prompt for LLM
17
+ */
18
+ export declare function buildMappingPrompt(schema: NormalizedSchema, input: unknown, confidenceThreshold: number, includeValues?: boolean): {
19
+ systemPrompt: string;
20
+ userPrompt: string;
21
+ };
22
+ //# sourceMappingURL=prompt-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../../src/providers/base/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,MAAM,aAAa,CAAC;AAE5D;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAYxE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,GAAE,OAAe,GAAG,MAAM,CAO3F;AA4CD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAwBrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,OAAO,EACd,mBAAmB,EAAE,MAAM,EAC3B,aAAa,GAAE,OAAe,GAC7B;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAU9C"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildSchemaFieldsPrompt = buildSchemaFieldsPrompt;
4
+ exports.buildInputKeysPrompt = buildInputKeysPrompt;
5
+ exports.buildSystemPrompt = buildSystemPrompt;
6
+ exports.buildMappingPrompt = buildMappingPrompt;
7
+ /**
8
+ * Build field inventory prompt from schema
9
+ */
10
+ function buildSchemaFieldsPrompt(schema) {
11
+ const lines = ['TARGET SCHEMA FIELDS:'];
12
+ for (const field of schema.fields) {
13
+ const required = field.required ? '[REQUIRED]' : '[optional]';
14
+ const type = Array.isArray(field.type) ? field.type.join('|') : field.type;
15
+ const desc = field.description ? ` - ${field.description}` : '';
16
+ lines.push(` ${field.path}: ${type} ${required}${desc}`);
17
+ }
18
+ return lines.join('\n');
19
+ }
20
+ /**
21
+ * Build input keys inventory from input payload
22
+ * Only includes structure, not values (for security)
23
+ */
24
+ function buildInputKeysPrompt(input, includeValues = false) {
25
+ const lines = ['INPUT PAYLOAD STRUCTURE:'];
26
+ const keys = extractKeys(input, '$', includeValues);
27
+ lines.push(...keys.map((k) => ` ${k}`));
28
+ return lines.join('\n');
29
+ }
30
+ /**
31
+ * Extract keys from input payload recursively
32
+ */
33
+ function extractKeys(obj, basePath, includeValues, depth = 0) {
34
+ if (depth > 10)
35
+ return []; // Prevent infinite recursion
36
+ const keys = [];
37
+ if (obj === null || obj === undefined) {
38
+ return [];
39
+ }
40
+ if (Array.isArray(obj)) {
41
+ keys.push(`${basePath}: array[${obj.length}]`);
42
+ if (obj.length > 0) {
43
+ // Sample first item to show array structure
44
+ keys.push(...extractKeys(obj[0], `${basePath}[*]`, includeValues, depth + 1));
45
+ }
46
+ }
47
+ else if (typeof obj === 'object') {
48
+ for (const [key, value] of Object.entries(obj)) {
49
+ const path = basePath === '$' ? `$.${key}` : `${basePath}.${key}`;
50
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
51
+ keys.push(`${path}: object`);
52
+ keys.push(...extractKeys(value, path, includeValues, depth + 1));
53
+ }
54
+ else if (Array.isArray(value)) {
55
+ keys.push(...extractKeys(value, path, includeValues, depth + 1));
56
+ }
57
+ else {
58
+ const valueStr = includeValues ? ` = ${JSON.stringify(value)}` : '';
59
+ keys.push(`${path}: ${typeof value}${valueStr}`);
60
+ }
61
+ }
62
+ }
63
+ return keys;
64
+ }
65
+ /**
66
+ * Build system prompt for mapping plan generation
67
+ */
68
+ function buildSystemPrompt(confidenceThreshold) {
69
+ return `You are a JSON mapping expert. Your task is to generate a MAPPING PLAN (not the final JSON) that transforms input JSON to match a target schema.
70
+
71
+ CRITICAL: You must return ONLY valid JSON matching this exact structure:
72
+ {
73
+ "assignments": [
74
+ { "from": "$.inputPath", "to": "$.targetPath", "confidence": 0.95 }
75
+ ],
76
+ "drops": [
77
+ { "path": "$.unusedField", "reason": "Not in schema", "confidence": 0.9 }
78
+ ],
79
+ "warnings": [
80
+ { "message": "Potential issue description", "confidence": 0.85 }
81
+ ]
82
+ }
83
+
84
+ RULES:
85
+ 1. Output ONLY the JSON mapping plan. No markdown, no prose, no explanations.
86
+ 2. Each assignment must have "from" (input JSONPath), "to" (target JSONPath), and "confidence" (0-1).
87
+ 3. Confidence threshold is ${confidenceThreshold}. Be accurate with confidence scores.
88
+ 4. Drop any input fields that don't map to the schema.
89
+ 5. Warn about potential issues (typos, ambiguous mappings, type mismatches).
90
+ 6. Use JSONPath notation (e.g., "$.name.first", "$.items[*].id").
91
+ 7. Be conservative: if unsure about a mapping, lower the confidence score.`;
92
+ }
93
+ /**
94
+ * Build complete prompt for LLM
95
+ */
96
+ function buildMappingPrompt(schema, input, confidenceThreshold, includeValues = false) {
97
+ const systemPrompt = buildSystemPrompt(confidenceThreshold);
98
+ const userPrompt = `${buildSchemaFieldsPrompt(schema)}
99
+
100
+ ${buildInputKeysPrompt(input, includeValues)}
101
+
102
+ Generate the mapping plan to transform the input to match the target schema.`;
103
+ return { systemPrompt, userPrompt };
104
+ }
105
+ //# sourceMappingURL=prompt-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../../src/providers/base/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Provider } from '../base/Provider';
2
+ import { MappingPlan, NormalizedSchema, ProposalOptions, ProviderConfig } from '../../types';
3
+ /**
4
+ * Google Gemini provider implementation
5
+ */
6
+ export declare class GeminiProvider extends Provider {
7
+ readonly name = "gemini";
8
+ readonly promptVersion = "v1.0.0";
9
+ private client;
10
+ constructor(config: ProviderConfig);
11
+ /**
12
+ * Propose a mapping plan using Gemini
13
+ */
14
+ proposeMappingPlan(input: unknown, schema: NormalizedSchema, options: ProposalOptions): Promise<MappingPlan>;
15
+ }
16
+ //# sourceMappingURL=GeminiProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/GeminiProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7F;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,aAAa,YAAY;IAElC,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,cAAc;IAUlC;;OAEG;IACG,kBAAkB,CACtB,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,WAAW,CAAC;CAsCxB"}