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.
- package/LICENSE +21 -0
- package/README.md +574 -0
- package/dist/cache/LRUCache.d.ts +36 -0
- package/dist/cache/LRUCache.d.ts.map +1 -0
- package/dist/cache/LRUCache.js +54 -0
- package/dist/cache/LRUCache.js.map +1 -0
- package/dist/cache/cache-key-generator.d.ts +9 -0
- package/dist/cache/cache-key-generator.d.ts.map +1 -0
- package/dist/cache/cache-key-generator.js +50 -0
- package/dist/cache/cache-key-generator.js.map +1 -0
- package/dist/cache/index.d.ts +3 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +21 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/engine/MappingEngine.d.ts +29 -0
- package/dist/engine/MappingEngine.d.ts.map +1 -0
- package/dist/engine/MappingEngine.js +196 -0
- package/dist/engine/MappingEngine.js.map +1 -0
- package/dist/engine/executor.d.ts +15 -0
- package/dist/engine/executor.d.ts.map +1 -0
- package/dist/engine/executor.js +137 -0
- package/dist/engine/executor.js.map +1 -0
- package/dist/engine/index.d.ts +5 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +23 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/jsonpath.d.ts +17 -0
- package/dist/engine/jsonpath.d.ts.map +1 -0
- package/dist/engine/jsonpath.js +73 -0
- package/dist/engine/jsonpath.js.map +1 -0
- package/dist/engine/type-converter.d.ts +12 -0
- package/dist/engine/type-converter.d.ts.map +1 -0
- package/dist/engine/type-converter.js +106 -0
- package/dist/engine/type-converter.js.map +1 -0
- package/dist/errors/error-factory.d.ts +30 -0
- package/dist/errors/error-factory.d.ts.map +1 -0
- package/dist/errors/error-factory.js +53 -0
- package/dist/errors/error-factory.js.map +1 -0
- package/dist/errors/index.d.ts +3 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +22 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/express/FonRouter.d.ts +56 -0
- package/dist/express/FonRouter.d.ts.map +1 -0
- package/dist/express/FonRouter.js +151 -0
- package/dist/express/FonRouter.js.map +1 -0
- package/dist/express/error-handler.d.ts +10 -0
- package/dist/express/error-handler.d.ts.map +1 -0
- package/dist/express/error-handler.js +55 -0
- package/dist/express/error-handler.js.map +1 -0
- package/dist/express/index.d.ts +33 -0
- package/dist/express/index.d.ts.map +1 -0
- package/dist/express/index.js +41 -0
- package/dist/express/index.js.map +1 -0
- package/dist/express/route-registry.d.ts +33 -0
- package/dist/express/route-registry.d.ts.map +1 -0
- package/dist/express/route-registry.js +52 -0
- package/dist/express/route-registry.js.map +1 -0
- package/dist/express/transform-middleware.d.ts +21 -0
- package/dist/express/transform-middleware.d.ts.map +1 -0
- package/dist/express/transform-middleware.js +62 -0
- package/dist/express/transform-middleware.js.map +1 -0
- package/dist/express/types.d.ts +73 -0
- package/dist/express/types.d.ts.map +1 -0
- package/dist/express/types.js +3 -0
- package/dist/express/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/base/Provider.d.ts +17 -0
- package/dist/providers/base/Provider.d.ts.map +1 -0
- package/dist/providers/base/Provider.js +43 -0
- package/dist/providers/base/Provider.js.map +1 -0
- package/dist/providers/base/index.d.ts +3 -0
- package/dist/providers/base/index.d.ts.map +1 -0
- package/dist/providers/base/index.js +21 -0
- package/dist/providers/base/index.js.map +1 -0
- package/dist/providers/base/prompt-builder.d.ts +22 -0
- package/dist/providers/base/prompt-builder.d.ts.map +1 -0
- package/dist/providers/base/prompt-builder.js +105 -0
- package/dist/providers/base/prompt-builder.js.map +1 -0
- package/dist/providers/gemini/GeminiProvider.d.ts +16 -0
- package/dist/providers/gemini/GeminiProvider.d.ts.map +1 -0
- package/dist/providers/gemini/GeminiProvider.js +48 -0
- package/dist/providers/gemini/GeminiProvider.js.map +1 -0
- package/dist/providers/gemini/gemini-client.d.ts +16 -0
- package/dist/providers/gemini/gemini-client.d.ts.map +1 -0
- package/dist/providers/gemini/gemini-client.js +83 -0
- package/dist/providers/gemini/gemini-client.js.map +1 -0
- package/dist/providers/gemini/index.d.ts +3 -0
- package/dist/providers/gemini/index.d.ts.map +1 -0
- package/dist/providers/gemini/index.js +8 -0
- package/dist/providers/gemini/index.js.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +27 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama/OllamaProvider.d.ts +17 -0
- package/dist/providers/ollama/OllamaProvider.d.ts.map +1 -0
- package/dist/providers/ollama/OllamaProvider.js +47 -0
- package/dist/providers/ollama/OllamaProvider.js.map +1 -0
- package/dist/providers/ollama/index.d.ts +3 -0
- package/dist/providers/ollama/index.d.ts.map +1 -0
- package/dist/providers/ollama/index.js +8 -0
- package/dist/providers/ollama/index.js.map +1 -0
- package/dist/providers/ollama/ollama-client.d.ts +17 -0
- package/dist/providers/ollama/ollama-client.d.ts.map +1 -0
- package/dist/providers/ollama/ollama-client.js +83 -0
- package/dist/providers/ollama/ollama-client.js.map +1 -0
- package/dist/providers/openai/OpenAIProvider.d.ts +16 -0
- package/dist/providers/openai/OpenAIProvider.d.ts.map +1 -0
- package/dist/providers/openai/OpenAIProvider.js +48 -0
- package/dist/providers/openai/OpenAIProvider.js.map +1 -0
- package/dist/providers/openai/index.d.ts +3 -0
- package/dist/providers/openai/index.d.ts.map +1 -0
- package/dist/providers/openai/index.js +8 -0
- package/dist/providers/openai/index.js.map +1 -0
- package/dist/providers/openai/openai-client.d.ts +16 -0
- package/dist/providers/openai/openai-client.d.ts.map +1 -0
- package/dist/providers/openai/openai-client.js +85 -0
- package/dist/providers/openai/openai-client.js.map +1 -0
- package/dist/schema/SchemaAdapter.d.ts +34 -0
- package/dist/schema/SchemaAdapter.d.ts.map +1 -0
- package/dist/schema/SchemaAdapter.js +59 -0
- package/dist/schema/SchemaAdapter.js.map +1 -0
- package/dist/schema/field-extractor.d.ts +10 -0
- package/dist/schema/field-extractor.d.ts.map +1 -0
- package/dist/schema/field-extractor.js +58 -0
- package/dist/schema/field-extractor.js.map +1 -0
- package/dist/schema/index.d.ts +5 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +13 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/normalizer.d.ts +6 -0
- package/dist/schema/normalizer.d.ts.map +1 -0
- package/dist/schema/normalizer.js +17 -0
- package/dist/schema/normalizer.js.map +1 -0
- package/dist/schema/validator.d.ts +17 -0
- package/dist/schema/validator.d.ts.map +1 -0
- package/dist/schema/validator.js +50 -0
- package/dist/schema/validator.js.map +1 -0
- package/dist/security/index.d.ts +5 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +21 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/input-validator.d.ts +6 -0
- package/dist/security/input-validator.d.ts.map +1 -0
- package/dist/security/input-validator.js +76 -0
- package/dist/security/input-validator.js.map +1 -0
- package/dist/security/prompt-sanitizer.d.ts +12 -0
- package/dist/security/prompt-sanitizer.d.ts.map +1 -0
- package/dist/security/prompt-sanitizer.js +66 -0
- package/dist/security/prompt-sanitizer.js.map +1 -0
- package/dist/security/redactor.d.ts +5 -0
- package/dist/security/redactor.d.ts.map +1 -0
- package/dist/security/redactor.js +37 -0
- package/dist/security/redactor.js.map +1 -0
- package/dist/security/security-config.d.ts +10 -0
- package/dist/security/security-config.d.ts.map +1 -0
- package/dist/security/security-config.js +26 -0
- package/dist/security/security-config.js.map +1 -0
- package/dist/trace/TraceBuilder.d.ts +58 -0
- package/dist/trace/TraceBuilder.d.ts.map +1 -0
- package/dist/trace/TraceBuilder.js +117 -0
- package/dist/trace/TraceBuilder.js.map +1 -0
- package/dist/trace/confidence-analyzer.d.ts +6 -0
- package/dist/trace/confidence-analyzer.d.ts.map +1 -0
- package/dist/trace/confidence-analyzer.js +30 -0
- package/dist/trace/confidence-analyzer.js.map +1 -0
- package/dist/trace/index.d.ts +4 -0
- package/dist/trace/index.d.ts.map +1 -0
- package/dist/trace/index.js +22 -0
- package/dist/trace/index.js.map +1 -0
- package/dist/trace/trace-utils.d.ts +20 -0
- package/dist/trace/trace-utils.d.ts.map +1 -0
- package/dist/trace/trace-utils.js +33 -0
- package/dist/trace/trace-utils.js.map +1 -0
- package/dist/transform.d.ts +30 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/transform.js +62 -0
- package/dist/transform.js.map +1 -0
- package/dist/types/cache.types.d.ts +41 -0
- package/dist/types/cache.types.d.ts.map +1 -0
- package/dist/types/cache.types.js +3 -0
- package/dist/types/cache.types.js.map +1 -0
- package/dist/types/errors.types.d.ts +22 -0
- package/dist/types/errors.types.d.ts.map +1 -0
- package/dist/types/errors.types.js +31 -0
- package/dist/types/errors.types.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mapping.types.d.ts +48 -0
- package/dist/types/mapping.types.d.ts.map +1 -0
- package/dist/types/mapping.types.js +3 -0
- package/dist/types/mapping.types.js.map +1 -0
- package/dist/types/provider.types.d.ts +62 -0
- package/dist/types/provider.types.d.ts.map +1 -0
- package/dist/types/provider.types.js +3 -0
- package/dist/types/provider.types.js.map +1 -0
- package/dist/types/schema.types.d.ts +68 -0
- package/dist/types/schema.types.d.ts.map +1 -0
- package/dist/types/schema.types.js +3 -0
- package/dist/types/schema.types.js.map +1 -0
- package/dist/types/security.types.d.ts +32 -0
- package/dist/types/security.types.d.ts.map +1 -0
- package/dist/types/security.types.js +3 -0
- package/dist/types/security.types.js.map +1 -0
- package/dist/types/trace.types.d.ts +129 -0
- package/dist/types/trace.types.d.ts.map +1 -0
- package/dist/types/trace.types.js +3 -0
- package/dist/types/trace.types.js.map +1 -0
- package/dist/types/transform.types.d.ts +56 -0
- package/dist/types/transform.types.d.ts.map +1 -0
- package/dist/types/transform.types.js +3 -0
- package/dist/types/transform.types.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type conversion utilities for safe transformations
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Convert value to target type if possible
|
|
6
|
+
*/
|
|
7
|
+
export declare function convertType(value: any, targetType: string | string[]): any;
|
|
8
|
+
/**
|
|
9
|
+
* Check if conversion is safe (no data loss)
|
|
10
|
+
*/
|
|
11
|
+
export declare function isSafeConversion(value: any, targetType: string | string[]): boolean;
|
|
12
|
+
//# sourceMappingURL=type-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-converter.d.ts","sourceRoot":"","sources":["../../src/engine/type-converter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,GAAG,CAmD1E;AAkBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAkCnF"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Type conversion utilities for safe transformations
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.convertType = convertType;
|
|
7
|
+
exports.isSafeConversion = isSafeConversion;
|
|
8
|
+
/**
|
|
9
|
+
* Convert value to target type if possible
|
|
10
|
+
*/
|
|
11
|
+
function convertType(value, targetType) {
|
|
12
|
+
const types = Array.isArray(targetType) ? targetType : [targetType];
|
|
13
|
+
// If value already matches one of the target types, return as-is
|
|
14
|
+
const valueType = getType(value);
|
|
15
|
+
if (types.includes(valueType)) {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
// Try conversions
|
|
19
|
+
for (const type of types) {
|
|
20
|
+
try {
|
|
21
|
+
switch (type) {
|
|
22
|
+
case 'string':
|
|
23
|
+
return String(value);
|
|
24
|
+
case 'number':
|
|
25
|
+
if (typeof value === 'string') {
|
|
26
|
+
const num = Number(value);
|
|
27
|
+
if (!isNaN(num)) {
|
|
28
|
+
return num;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
break;
|
|
32
|
+
case 'boolean':
|
|
33
|
+
if (typeof value === 'string') {
|
|
34
|
+
if (value.toLowerCase() === 'true')
|
|
35
|
+
return true;
|
|
36
|
+
if (value.toLowerCase() === 'false')
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (typeof value === 'number') {
|
|
40
|
+
return value !== 0;
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
43
|
+
case 'integer':
|
|
44
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
45
|
+
const num = Number(value);
|
|
46
|
+
if (!isNaN(num) && Number.isInteger(num)) {
|
|
47
|
+
return num;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Continue trying other types
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// No conversion found, return original value
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get JSON Schema type of value
|
|
62
|
+
*/
|
|
63
|
+
function getType(value) {
|
|
64
|
+
if (value === null)
|
|
65
|
+
return 'null';
|
|
66
|
+
if (Array.isArray(value))
|
|
67
|
+
return 'array';
|
|
68
|
+
const type = typeof value;
|
|
69
|
+
if (type === 'number') {
|
|
70
|
+
return Number.isInteger(value) ? 'integer' : 'number';
|
|
71
|
+
}
|
|
72
|
+
return type;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Check if conversion is safe (no data loss)
|
|
76
|
+
*/
|
|
77
|
+
function isSafeConversion(value, targetType) {
|
|
78
|
+
const types = Array.isArray(targetType) ? targetType : [targetType];
|
|
79
|
+
const valueType = getType(value);
|
|
80
|
+
// Already correct type
|
|
81
|
+
if (types.includes(valueType)) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
// Safe conversions
|
|
85
|
+
if (types.includes('string')) {
|
|
86
|
+
return true; // Any value can be safely converted to string
|
|
87
|
+
}
|
|
88
|
+
if (types.includes('number') && typeof value === 'string') {
|
|
89
|
+
const num = Number(value);
|
|
90
|
+
return !isNaN(num);
|
|
91
|
+
}
|
|
92
|
+
if (types.includes('boolean') && typeof value === 'string') {
|
|
93
|
+
return value.toLowerCase() === 'true' || value.toLowerCase() === 'false';
|
|
94
|
+
}
|
|
95
|
+
if (types.includes('integer')) {
|
|
96
|
+
if (typeof value === 'string') {
|
|
97
|
+
const num = Number(value);
|
|
98
|
+
return !isNaN(num) && Number.isInteger(num);
|
|
99
|
+
}
|
|
100
|
+
if (typeof value === 'number') {
|
|
101
|
+
return Number.isInteger(value);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=type-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-converter.js","sourceRoot":"","sources":["../../src/engine/type-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { FONError } from '../types/errors.types';
|
|
2
|
+
/**
|
|
3
|
+
* Create a schema load error
|
|
4
|
+
*/
|
|
5
|
+
export declare function createSchemaLoadError(message: string, details?: object, traceId?: string): FONError;
|
|
6
|
+
/**
|
|
7
|
+
* Create a provider error
|
|
8
|
+
*/
|
|
9
|
+
export declare function createProviderError(message: string, details?: object, traceId?: string): FONError;
|
|
10
|
+
/**
|
|
11
|
+
* Create a mapping plan parse error
|
|
12
|
+
*/
|
|
13
|
+
export declare function createMappingPlanParseError(message: string, details?: object, traceId?: string): FONError;
|
|
14
|
+
/**
|
|
15
|
+
* Create a confidence too low error
|
|
16
|
+
*/
|
|
17
|
+
export declare function createConfidenceTooLowError(message: string, details?: object, traceId?: string): FONError;
|
|
18
|
+
/**
|
|
19
|
+
* Create an execution error
|
|
20
|
+
*/
|
|
21
|
+
export declare function createExecutionError(message: string, details?: object, traceId?: string): FONError;
|
|
22
|
+
/**
|
|
23
|
+
* Create a validation error
|
|
24
|
+
*/
|
|
25
|
+
export declare function createValidationError(message: string, details?: object, traceId?: string): FONError;
|
|
26
|
+
/**
|
|
27
|
+
* Create a security limit exceeded error
|
|
28
|
+
*/
|
|
29
|
+
export declare function createSecurityLimitError(message: string, details?: object, traceId?: string): FONError;
|
|
30
|
+
//# sourceMappingURL=error-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-factory.d.ts","sourceRoot":"","sources":["../../src/errors/error-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAEnG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAEjG;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,QAAQ,CAEV;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,QAAQ,CAEV;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAElG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAEnG;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,QAAQ,CAEV"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSchemaLoadError = createSchemaLoadError;
|
|
4
|
+
exports.createProviderError = createProviderError;
|
|
5
|
+
exports.createMappingPlanParseError = createMappingPlanParseError;
|
|
6
|
+
exports.createConfidenceTooLowError = createConfidenceTooLowError;
|
|
7
|
+
exports.createExecutionError = createExecutionError;
|
|
8
|
+
exports.createValidationError = createValidationError;
|
|
9
|
+
exports.createSecurityLimitError = createSecurityLimitError;
|
|
10
|
+
const errors_types_1 = require("../types/errors.types");
|
|
11
|
+
/**
|
|
12
|
+
* Create a schema load error
|
|
13
|
+
*/
|
|
14
|
+
function createSchemaLoadError(message, details, traceId) {
|
|
15
|
+
return new errors_types_1.FONError(errors_types_1.ErrorCategory.SCHEMA_LOAD_ERROR, message, details, traceId);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a provider error
|
|
19
|
+
*/
|
|
20
|
+
function createProviderError(message, details, traceId) {
|
|
21
|
+
return new errors_types_1.FONError(errors_types_1.ErrorCategory.PROVIDER_ERROR, message, details, traceId);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a mapping plan parse error
|
|
25
|
+
*/
|
|
26
|
+
function createMappingPlanParseError(message, details, traceId) {
|
|
27
|
+
return new errors_types_1.FONError(errors_types_1.ErrorCategory.MAPPING_PLAN_PARSE_ERROR, message, details, traceId);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a confidence too low error
|
|
31
|
+
*/
|
|
32
|
+
function createConfidenceTooLowError(message, details, traceId) {
|
|
33
|
+
return new errors_types_1.FONError(errors_types_1.ErrorCategory.CONFIDENCE_TOO_LOW, message, details, traceId);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create an execution error
|
|
37
|
+
*/
|
|
38
|
+
function createExecutionError(message, details, traceId) {
|
|
39
|
+
return new errors_types_1.FONError(errors_types_1.ErrorCategory.EXECUTION_ERROR, message, details, traceId);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a validation error
|
|
43
|
+
*/
|
|
44
|
+
function createValidationError(message, details, traceId) {
|
|
45
|
+
return new errors_types_1.FONError(errors_types_1.ErrorCategory.VALIDATION_ERROR, message, details, traceId);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create a security limit exceeded error
|
|
49
|
+
*/
|
|
50
|
+
function createSecurityLimitError(message, details, traceId) {
|
|
51
|
+
return new errors_types_1.FONError(errors_types_1.ErrorCategory.SECURITY_LIMIT_EXCEEDED, message, details, traceId);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=error-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-factory.js","sourceRoot":"","sources":["../../src/errors/error-factory.ts"],"names":[],"mappings":";;AAKA,sDAEC;AAKD,kDAEC;AAKD,kEAMC;AAKD,kEAMC;AAKD,oDAEC;AAKD,sDAEC;AAKD,4DAMC;AA7DD,wDAAgE;AAEhE;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAAe,EAAE,OAAgB,EAAE,OAAgB;IACvF,OAAO,IAAI,uBAAQ,CAAC,4BAAa,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,OAAe,EAAE,OAAgB,EAAE,OAAgB;IACrF,OAAO,IAAI,uBAAQ,CAAC,4BAAa,CAAC,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CACzC,OAAe,EACf,OAAgB,EAChB,OAAgB;IAEhB,OAAO,IAAI,uBAAQ,CAAC,4BAAa,CAAC,wBAAwB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CACzC,OAAe,EACf,OAAgB,EAChB,OAAgB;IAEhB,OAAO,IAAI,uBAAQ,CAAC,4BAAa,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAAe,EAAE,OAAgB,EAAE,OAAgB;IACtF,OAAO,IAAI,uBAAQ,CAAC,4BAAa,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAAe,EAAE,OAAgB,EAAE,OAAgB;IACvF,OAAO,IAAI,uBAAQ,CAAC,4BAAa,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CACtC,OAAe,EACf,OAAgB,EAChB,OAAgB;IAEhB,OAAO,IAAI,uBAAQ,CAAC,4BAAa,CAAC,uBAAuB,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAChE,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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.ErrorCategory = exports.FONError = void 0;
|
|
18
|
+
var errors_types_1 = require("../types/errors.types");
|
|
19
|
+
Object.defineProperty(exports, "FONError", { enumerable: true, get: function () { return errors_types_1.FONError; } });
|
|
20
|
+
Object.defineProperty(exports, "ErrorCategory", { enumerable: true, get: function () { return errors_types_1.ErrorCategory; } });
|
|
21
|
+
__exportStar(require("./error-factory"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sDAAgE;AAAvD,wGAAA,QAAQ,OAAA;AAAE,6GAAA,aAAa,OAAA;AAChC,kDAAgC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import { FonRouterConfig, RouteConfig } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* FOON Router - Express router wrapper that creates FOON-enabled routes
|
|
5
|
+
*/
|
|
6
|
+
export declare class FonRouter {
|
|
7
|
+
private router;
|
|
8
|
+
private registry;
|
|
9
|
+
private config;
|
|
10
|
+
private errorHandler;
|
|
11
|
+
constructor(config: FonRouterConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Register a POST route
|
|
14
|
+
*/
|
|
15
|
+
post(path: string, config: RouteConfig): this;
|
|
16
|
+
/**
|
|
17
|
+
* Register a PUT route
|
|
18
|
+
*/
|
|
19
|
+
put(path: string, config: RouteConfig): this;
|
|
20
|
+
/**
|
|
21
|
+
* Register a PATCH route
|
|
22
|
+
*/
|
|
23
|
+
patch(path: string, config: RouteConfig): this;
|
|
24
|
+
/**
|
|
25
|
+
* Register a DELETE route
|
|
26
|
+
*/
|
|
27
|
+
delete(path: string, config: RouteConfig): this;
|
|
28
|
+
/**
|
|
29
|
+
* Internal method to register a route
|
|
30
|
+
*/
|
|
31
|
+
private registerRoute;
|
|
32
|
+
/**
|
|
33
|
+
* Check if original route should be created
|
|
34
|
+
*/
|
|
35
|
+
private shouldCreateOriginal;
|
|
36
|
+
/**
|
|
37
|
+
* Create original route (without FOON transformation)
|
|
38
|
+
*/
|
|
39
|
+
private createOriginalRoute;
|
|
40
|
+
/**
|
|
41
|
+
* Create FOON route (with transformation)
|
|
42
|
+
*/
|
|
43
|
+
private createFonRoute;
|
|
44
|
+
/**
|
|
45
|
+
* Get the underlying Express router
|
|
46
|
+
* This allows the FonRouter to be used with app.use()
|
|
47
|
+
*/
|
|
48
|
+
getRouter(): Router;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create a new FOON Router
|
|
52
|
+
* Returns a FonRouter instance with custom methods
|
|
53
|
+
* Use .getRouter() to get Express Router for app.use()
|
|
54
|
+
*/
|
|
55
|
+
export declare function createFonRouter(config: FonRouterConfig): FonRouter;
|
|
56
|
+
//# sourceMappingURL=FonRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FonRouter.d.ts","sourceRoot":"","sources":["../../src/express/FonRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkB,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,WAAW,EAA0B,MAAM,SAAS,CAAC;AAK/E;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAC+B;IAC7C,OAAO,CAAC,YAAY,CAAwC;gBAEhD,MAAM,EAAE,eAAe;IAoBnC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAK7C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAK5C;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAK9C;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;IAK/C;;OAEG;IACH,OAAO,CAAC,aAAa;IAgCrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;;OAGG;IACH,SAAS,IAAI,MAAM;CAGpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAElE"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FonRouter = void 0;
|
|
4
|
+
exports.createFonRouter = createFonRouter;
|
|
5
|
+
const express_1 = require("express");
|
|
6
|
+
const route_registry_1 = require("./route-registry");
|
|
7
|
+
const transform_middleware_1 = require("./transform-middleware");
|
|
8
|
+
const error_handler_1 = require("./error-handler");
|
|
9
|
+
/**
|
|
10
|
+
* FOON Router - Express router wrapper that creates FOON-enabled routes
|
|
11
|
+
*/
|
|
12
|
+
class FonRouter {
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.router = (0, express_1.Router)();
|
|
15
|
+
this.registry = new route_registry_1.RouteRegistry();
|
|
16
|
+
this.errorHandler = (0, error_handler_1.createErrorHandler)(config.onError);
|
|
17
|
+
// Set defaults
|
|
18
|
+
this.config = {
|
|
19
|
+
provider: config.provider,
|
|
20
|
+
prefix: config.prefix || '/foon',
|
|
21
|
+
methods: config.methods || ['POST', 'PUT', 'PATCH'],
|
|
22
|
+
confidenceThreshold: config.confidenceThreshold || 0.85,
|
|
23
|
+
cache: config.cache,
|
|
24
|
+
security: config.security || {},
|
|
25
|
+
traceHeader: config.traceHeader || 'X-FON-Trace-Id',
|
|
26
|
+
onError: config.onError,
|
|
27
|
+
createOriginalRoutes: config.createOriginalRoutes !== false, // Default true
|
|
28
|
+
verbose: config.verbose || false,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Register a POST route
|
|
33
|
+
*/
|
|
34
|
+
post(path, config) {
|
|
35
|
+
this.registerRoute('POST', path, config);
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Register a PUT route
|
|
40
|
+
*/
|
|
41
|
+
put(path, config) {
|
|
42
|
+
this.registerRoute('PUT', path, config);
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Register a PATCH route
|
|
47
|
+
*/
|
|
48
|
+
patch(path, config) {
|
|
49
|
+
this.registerRoute('PATCH', path, config);
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register a DELETE route
|
|
54
|
+
*/
|
|
55
|
+
delete(path, config) {
|
|
56
|
+
this.registerRoute('DELETE', path, config);
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Internal method to register a route
|
|
61
|
+
*/
|
|
62
|
+
registerRoute(method, path, config) {
|
|
63
|
+
// Check if method is supported
|
|
64
|
+
if (!this.config.methods.includes(method)) {
|
|
65
|
+
console.warn(`Method ${method} is not in configured methods list. Skipping FOON route creation.`);
|
|
66
|
+
// Still create original route if requested
|
|
67
|
+
if (this.shouldCreateOriginal(config)) {
|
|
68
|
+
this.createOriginalRoute(method, path, config.handler);
|
|
69
|
+
}
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Register in registry
|
|
73
|
+
this.registry.register({
|
|
74
|
+
method,
|
|
75
|
+
path,
|
|
76
|
+
schema: config.schema,
|
|
77
|
+
handler: config.handler,
|
|
78
|
+
config,
|
|
79
|
+
});
|
|
80
|
+
// Create original route (if enabled)
|
|
81
|
+
if (this.shouldCreateOriginal(config)) {
|
|
82
|
+
this.createOriginalRoute(method, path, config.handler);
|
|
83
|
+
}
|
|
84
|
+
// Create FOON route (prefixed)
|
|
85
|
+
this.createFonRoute(method, path, config);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if original route should be created
|
|
89
|
+
*/
|
|
90
|
+
shouldCreateOriginal(config) {
|
|
91
|
+
// Route-specific override takes precedence
|
|
92
|
+
if (config.createOriginal !== undefined) {
|
|
93
|
+
return config.createOriginal;
|
|
94
|
+
}
|
|
95
|
+
// Fall back to global config
|
|
96
|
+
return this.config.createOriginalRoutes;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create original route (without FOON transformation)
|
|
100
|
+
*/
|
|
101
|
+
createOriginalRoute(method, path, handler) {
|
|
102
|
+
const methodLower = method.toLowerCase();
|
|
103
|
+
if (Array.isArray(handler)) {
|
|
104
|
+
this.router[methodLower](path, ...handler);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.router[methodLower](path, handler);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Create FOON route (with transformation)
|
|
112
|
+
*/
|
|
113
|
+
createFonRoute(method, path, config) {
|
|
114
|
+
const methodLower = method.toLowerCase();
|
|
115
|
+
const fonPath = this.config.prefix + path;
|
|
116
|
+
// Create transform middleware
|
|
117
|
+
const transformMiddleware = (0, transform_middleware_1.createTransformMiddleware)({
|
|
118
|
+
schema: config.schema,
|
|
119
|
+
provider: this.config.provider,
|
|
120
|
+
confidenceThreshold: config.confidenceThreshold || this.config.confidenceThreshold,
|
|
121
|
+
cache: this.config.cache,
|
|
122
|
+
security: this.config.security,
|
|
123
|
+
traceHeader: this.config.traceHeader,
|
|
124
|
+
errorHandler: this.errorHandler,
|
|
125
|
+
verbose: this.config.verbose,
|
|
126
|
+
});
|
|
127
|
+
// Register FOON route with transform middleware
|
|
128
|
+
const handlers = Array.isArray(config.handler) ? config.handler : [config.handler];
|
|
129
|
+
this.router[methodLower](fonPath, transformMiddleware, ...handlers);
|
|
130
|
+
if (this.config.verbose) {
|
|
131
|
+
console.log(`[FOON] Created route: ${method} ${fonPath} -> ${path}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the underlying Express router
|
|
136
|
+
* This allows the FonRouter to be used with app.use()
|
|
137
|
+
*/
|
|
138
|
+
getRouter() {
|
|
139
|
+
return this.router;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.FonRouter = FonRouter;
|
|
143
|
+
/**
|
|
144
|
+
* Create a new FOON Router
|
|
145
|
+
* Returns a FonRouter instance with custom methods
|
|
146
|
+
* Use .getRouter() to get Express Router for app.use()
|
|
147
|
+
*/
|
|
148
|
+
function createFonRouter(config) {
|
|
149
|
+
return new FonRouter(config);
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=FonRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FonRouter.js","sourceRoot":"","sources":["../../src/express/FonRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ErrorHandler } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Default error handler for FOON transformation errors
|
|
4
|
+
*/
|
|
5
|
+
export declare const defaultErrorHandler: ErrorHandler;
|
|
6
|
+
/**
|
|
7
|
+
* Create a custom error handler
|
|
8
|
+
*/
|
|
9
|
+
export declare function createErrorHandler(customHandler?: ErrorHandler): ErrorHandler;
|
|
10
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/express/error-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAmBjC,CAAC;AAiCF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,CAAC,EAAE,YAAY,GAAG,YAAY,CAK7E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultErrorHandler = void 0;
|
|
4
|
+
exports.createErrorHandler = createErrorHandler;
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
/**
|
|
7
|
+
* Default error handler for FOON transformation errors
|
|
8
|
+
*/
|
|
9
|
+
const defaultErrorHandler = (error, req, res, next) => {
|
|
10
|
+
// Determine HTTP status code based on error category
|
|
11
|
+
const statusCode = getStatusCode(error.category);
|
|
12
|
+
// Build error response
|
|
13
|
+
const errorResponse = {
|
|
14
|
+
error: error.category,
|
|
15
|
+
message: error.message,
|
|
16
|
+
traceId: error.traceId,
|
|
17
|
+
details: error.details,
|
|
18
|
+
};
|
|
19
|
+
// Send error response
|
|
20
|
+
res.status(statusCode).json(errorResponse);
|
|
21
|
+
};
|
|
22
|
+
exports.defaultErrorHandler = defaultErrorHandler;
|
|
23
|
+
/**
|
|
24
|
+
* Map error category to HTTP status code
|
|
25
|
+
*/
|
|
26
|
+
function getStatusCode(category) {
|
|
27
|
+
switch (category) {
|
|
28
|
+
case errors_1.ErrorCategory.SCHEMA_LOAD_ERROR:
|
|
29
|
+
return 500; // Internal server error (configuration issue)
|
|
30
|
+
case errors_1.ErrorCategory.PROVIDER_ERROR:
|
|
31
|
+
return 502; // Bad gateway (LLM API error)
|
|
32
|
+
case errors_1.ErrorCategory.MAPPING_PLAN_PARSE_ERROR:
|
|
33
|
+
return 502; // Bad gateway (LLM returned invalid response)
|
|
34
|
+
case errors_1.ErrorCategory.CONFIDENCE_TOO_LOW:
|
|
35
|
+
return 400; // Bad request (input couldn't be mapped with confidence)
|
|
36
|
+
case errors_1.ErrorCategory.EXECUTION_ERROR:
|
|
37
|
+
return 500; // Internal server error
|
|
38
|
+
case errors_1.ErrorCategory.VALIDATION_ERROR:
|
|
39
|
+
return 400; // Bad request (output doesn't match schema)
|
|
40
|
+
case errors_1.ErrorCategory.SECURITY_LIMIT_EXCEEDED:
|
|
41
|
+
return 413; // Payload too large
|
|
42
|
+
default:
|
|
43
|
+
return 500; // Internal server error
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create a custom error handler
|
|
48
|
+
*/
|
|
49
|
+
function createErrorHandler(customHandler) {
|
|
50
|
+
if (customHandler) {
|
|
51
|
+
return customHandler;
|
|
52
|
+
}
|
|
53
|
+
return exports.defaultErrorHandler;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/express/error-handler.ts"],"names":[],"mappings":";;;AA8DA,gDAKC;AAlED,sCAAoD;AAGpD;;GAEG;AACI,MAAM,mBAAmB,GAAiB,CAC/C,KAAe,EACf,GAAY,EACZ,GAAa,EACb,IAAkB,EAClB,EAAE;IACF,qDAAqD;IACrD,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEjD,uBAAuB;IACvB,MAAM,aAAa,GAAG;QACpB,KAAK,EAAE,KAAK,CAAC,QAAQ;QACrB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;IAEF,sBAAsB;IACtB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7C,CAAC,CAAC;AAnBW,QAAA,mBAAmB,uBAmB9B;AAEF;;GAEG;AACH,SAAS,aAAa,CAAC,QAAuB;IAC5C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,sBAAa,CAAC,iBAAiB;YAClC,OAAO,GAAG,CAAC,CAAC,8CAA8C;QAE5D,KAAK,sBAAa,CAAC,cAAc;YAC/B,OAAO,GAAG,CAAC,CAAC,8BAA8B;QAE5C,KAAK,sBAAa,CAAC,wBAAwB;YACzC,OAAO,GAAG,CAAC,CAAC,8CAA8C;QAE5D,KAAK,sBAAa,CAAC,kBAAkB;YACnC,OAAO,GAAG,CAAC,CAAC,yDAAyD;QAEvE,KAAK,sBAAa,CAAC,eAAe;YAChC,OAAO,GAAG,CAAC,CAAC,wBAAwB;QAEtC,KAAK,sBAAa,CAAC,gBAAgB;YACjC,OAAO,GAAG,CAAC,CAAC,4CAA4C;QAE1D,KAAK,sBAAa,CAAC,uBAAuB;YACxC,OAAO,GAAG,CAAC,CAAC,oBAAoB;QAElC;YACE,OAAO,GAAG,CAAC,CAAC,wBAAwB;IACxC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,aAA4B;IAC7D,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,2BAAmB,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FOON SDK Express Middleware
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import express from 'express';
|
|
7
|
+
* import { createFonRouter } from 'foon-sdk/express';
|
|
8
|
+
* import { GeminiProvider } from 'foon-sdk';
|
|
9
|
+
*
|
|
10
|
+
* const app = express();
|
|
11
|
+
* app.use(express.json());
|
|
12
|
+
*
|
|
13
|
+
* const fonRouter = createFonRouter({
|
|
14
|
+
* provider: new GeminiProvider({ apiKey: process.env.GEMINI_API_KEY }),
|
|
15
|
+
* prefix: '/foon',
|
|
16
|
+
* confidenceThreshold: 0.85
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* fonRouter.post('/users', {
|
|
20
|
+
* schema: userSchema,
|
|
21
|
+
* handler: createUserHandler
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* app.use(fonRouter);
|
|
25
|
+
* app.listen(3000);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export { createFonRouter, FonRouter } from './FonRouter';
|
|
29
|
+
export { RouteRegistry } from './route-registry';
|
|
30
|
+
export { createTransformMiddleware } from './transform-middleware';
|
|
31
|
+
export { createErrorHandler, defaultErrorHandler } from './error-handler';
|
|
32
|
+
export type { FonRouterConfig, RouteConfig, HttpMethod, ErrorHandler, RouteEntry, IFonRouter, } from './types';
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/express/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,YAAY,EACV,eAAe,EACf,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,GACX,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FOON SDK Express Middleware
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* import express from 'express';
|
|
8
|
+
* import { createFonRouter } from 'foon-sdk/express';
|
|
9
|
+
* import { GeminiProvider } from 'foon-sdk';
|
|
10
|
+
*
|
|
11
|
+
* const app = express();
|
|
12
|
+
* app.use(express.json());
|
|
13
|
+
*
|
|
14
|
+
* const fonRouter = createFonRouter({
|
|
15
|
+
* provider: new GeminiProvider({ apiKey: process.env.GEMINI_API_KEY }),
|
|
16
|
+
* prefix: '/foon',
|
|
17
|
+
* confidenceThreshold: 0.85
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* fonRouter.post('/users', {
|
|
21
|
+
* schema: userSchema,
|
|
22
|
+
* handler: createUserHandler
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* app.use(fonRouter);
|
|
26
|
+
* app.listen(3000);
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.defaultErrorHandler = exports.createErrorHandler = exports.createTransformMiddleware = exports.RouteRegistry = exports.FonRouter = exports.createFonRouter = void 0;
|
|
31
|
+
var FonRouter_1 = require("./FonRouter");
|
|
32
|
+
Object.defineProperty(exports, "createFonRouter", { enumerable: true, get: function () { return FonRouter_1.createFonRouter; } });
|
|
33
|
+
Object.defineProperty(exports, "FonRouter", { enumerable: true, get: function () { return FonRouter_1.FonRouter; } });
|
|
34
|
+
var route_registry_1 = require("./route-registry");
|
|
35
|
+
Object.defineProperty(exports, "RouteRegistry", { enumerable: true, get: function () { return route_registry_1.RouteRegistry; } });
|
|
36
|
+
var transform_middleware_1 = require("./transform-middleware");
|
|
37
|
+
Object.defineProperty(exports, "createTransformMiddleware", { enumerable: true, get: function () { return transform_middleware_1.createTransformMiddleware; } });
|
|
38
|
+
var error_handler_1 = require("./error-handler");
|
|
39
|
+
Object.defineProperty(exports, "createErrorHandler", { enumerable: true, get: function () { return error_handler_1.createErrorHandler; } });
|
|
40
|
+
Object.defineProperty(exports, "defaultErrorHandler", { enumerable: true, get: function () { return error_handler_1.defaultErrorHandler; } });
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/express/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;AAEH,yCAAyD;AAAhD,4GAAA,eAAe,OAAA;AAAE,sGAAA,SAAS,OAAA;AACnC,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,+DAAmE;AAA1D,iIAAA,yBAAyB,OAAA;AAClC,iDAA0E;AAAjE,mHAAA,kBAAkB,OAAA;AAAE,oHAAA,mBAAmB,OAAA"}
|