@revenium/openai 1.0.8
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 +1095 -0
- package/dist/cjs/core/config/azure-config.js +64 -0
- package/dist/cjs/core/config/azure-config.js.map +1 -0
- package/dist/cjs/core/config/index.js +41 -0
- package/dist/cjs/core/config/index.js.map +1 -0
- package/dist/cjs/core/config/loader.js +63 -0
- package/dist/cjs/core/config/loader.js.map +1 -0
- package/dist/cjs/core/config/manager.js +93 -0
- package/dist/cjs/core/config/manager.js.map +1 -0
- package/dist/cjs/core/config/validator.js +73 -0
- package/dist/cjs/core/config/validator.js.map +1 -0
- package/dist/cjs/core/providers/detector.js +140 -0
- package/dist/cjs/core/providers/detector.js.map +1 -0
- package/dist/cjs/core/providers/index.js +18 -0
- package/dist/cjs/core/providers/index.js.map +1 -0
- package/dist/cjs/core/tracking/api-client.js +68 -0
- package/dist/cjs/core/tracking/api-client.js.map +1 -0
- package/dist/cjs/core/tracking/index.js +23 -0
- package/dist/cjs/core/tracking/index.js.map +1 -0
- package/dist/cjs/core/tracking/payload-builder.js +107 -0
- package/dist/cjs/core/tracking/payload-builder.js.map +1 -0
- package/dist/cjs/core/tracking/usage-tracker.js +120 -0
- package/dist/cjs/core/tracking/usage-tracker.js.map +1 -0
- package/dist/cjs/core/wrapper/index.js +15 -0
- package/dist/cjs/core/wrapper/index.js.map +1 -0
- package/dist/cjs/core/wrapper/instance-patcher.js +202 -0
- package/dist/cjs/core/wrapper/instance-patcher.js.map +1 -0
- package/dist/cjs/core/wrapper/request-handler.js +317 -0
- package/dist/cjs/core/wrapper/request-handler.js.map +1 -0
- package/dist/cjs/core/wrapper/stream-wrapper.js +82 -0
- package/dist/cjs/core/wrapper/stream-wrapper.js.map +1 -0
- package/dist/cjs/index.js +195 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types/function-parameters.js +14 -0
- package/dist/cjs/types/function-parameters.js.map +1 -0
- package/dist/cjs/types/index.js +49 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/openai-augmentation.js +55 -0
- package/dist/cjs/types/openai-augmentation.js.map +1 -0
- package/dist/cjs/types/responses-api.js +30 -0
- package/dist/cjs/types/responses-api.js.map +1 -0
- package/dist/cjs/utils/azure-model-resolver.js +211 -0
- package/dist/cjs/utils/azure-model-resolver.js.map +1 -0
- package/dist/cjs/utils/constants.js +24 -0
- package/dist/cjs/utils/constants.js.map +1 -0
- package/dist/cjs/utils/error-handler.js +194 -0
- package/dist/cjs/utils/error-handler.js.map +1 -0
- package/dist/cjs/utils/metadata-builder.js +184 -0
- package/dist/cjs/utils/metadata-builder.js.map +1 -0
- package/dist/cjs/utils/provider-detection.js +212 -0
- package/dist/cjs/utils/provider-detection.js.map +1 -0
- package/dist/cjs/utils/request-handler-factory.js +185 -0
- package/dist/cjs/utils/request-handler-factory.js.map +1 -0
- package/dist/cjs/utils/stop-reason-mapper.js +70 -0
- package/dist/cjs/utils/stop-reason-mapper.js.map +1 -0
- package/dist/cjs/utils/type-guards.js +175 -0
- package/dist/cjs/utils/type-guards.js.map +1 -0
- package/dist/cjs/utils/url-builder.js +43 -0
- package/dist/cjs/utils/url-builder.js.map +1 -0
- package/dist/esm/core/config/azure-config.js +61 -0
- package/dist/esm/core/config/azure-config.js.map +1 -0
- package/dist/esm/core/config/index.js +13 -0
- package/dist/esm/core/config/index.js.map +1 -0
- package/dist/esm/core/config/loader.js +58 -0
- package/dist/esm/core/config/loader.js.map +1 -0
- package/dist/esm/core/config/manager.js +85 -0
- package/dist/esm/core/config/manager.js.map +1 -0
- package/dist/esm/core/config/validator.js +69 -0
- package/dist/esm/core/config/validator.js.map +1 -0
- package/dist/esm/core/providers/detector.js +134 -0
- package/dist/esm/core/providers/detector.js.map +1 -0
- package/dist/esm/core/providers/index.js +10 -0
- package/dist/esm/core/providers/index.js.map +1 -0
- package/dist/esm/core/tracking/api-client.js +65 -0
- package/dist/esm/core/tracking/api-client.js.map +1 -0
- package/dist/esm/core/tracking/index.js +13 -0
- package/dist/esm/core/tracking/index.js.map +1 -0
- package/dist/esm/core/tracking/payload-builder.js +104 -0
- package/dist/esm/core/tracking/payload-builder.js.map +1 -0
- package/dist/esm/core/tracking/usage-tracker.js +114 -0
- package/dist/esm/core/tracking/usage-tracker.js.map +1 -0
- package/dist/esm/core/wrapper/index.js +9 -0
- package/dist/esm/core/wrapper/index.js.map +1 -0
- package/dist/esm/core/wrapper/instance-patcher.js +199 -0
- package/dist/esm/core/wrapper/instance-patcher.js.map +1 -0
- package/dist/esm/core/wrapper/request-handler.js +310 -0
- package/dist/esm/core/wrapper/request-handler.js.map +1 -0
- package/dist/esm/core/wrapper/stream-wrapper.js +79 -0
- package/dist/esm/core/wrapper/stream-wrapper.js.map +1 -0
- package/dist/esm/index.js +175 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types/function-parameters.js +13 -0
- package/dist/esm/types/function-parameters.js.map +1 -0
- package/dist/esm/types/index.js +32 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/openai-augmentation.js +54 -0
- package/dist/esm/types/openai-augmentation.js.map +1 -0
- package/dist/esm/types/responses-api.js +26 -0
- package/dist/esm/types/responses-api.js.map +1 -0
- package/dist/esm/utils/azure-model-resolver.js +204 -0
- package/dist/esm/utils/azure-model-resolver.js.map +1 -0
- package/dist/esm/utils/constants.js +21 -0
- package/dist/esm/utils/constants.js.map +1 -0
- package/dist/esm/utils/error-handler.js +182 -0
- package/dist/esm/utils/error-handler.js.map +1 -0
- package/dist/esm/utils/metadata-builder.js +176 -0
- package/dist/esm/utils/metadata-builder.js.map +1 -0
- package/dist/esm/utils/provider-detection.js +206 -0
- package/dist/esm/utils/provider-detection.js.map +1 -0
- package/dist/esm/utils/request-handler-factory.js +146 -0
- package/dist/esm/utils/request-handler-factory.js.map +1 -0
- package/dist/esm/utils/stop-reason-mapper.js +65 -0
- package/dist/esm/utils/stop-reason-mapper.js.map +1 -0
- package/dist/esm/utils/type-guards.js +158 -0
- package/dist/esm/utils/type-guards.js.map +1 -0
- package/dist/esm/utils/url-builder.js +39 -0
- package/dist/esm/utils/url-builder.js.map +1 -0
- package/dist/types/core/config/azure-config.d.ts +16 -0
- package/dist/types/core/config/azure-config.d.ts.map +1 -0
- package/dist/types/core/config/index.d.ts +11 -0
- package/dist/types/core/config/index.d.ts.map +1 -0
- package/dist/types/core/config/loader.d.ts +20 -0
- package/dist/types/core/config/loader.d.ts.map +1 -0
- package/dist/types/core/config/manager.d.ts +32 -0
- package/dist/types/core/config/manager.d.ts.map +1 -0
- package/dist/types/core/config/validator.d.ts +23 -0
- package/dist/types/core/config/validator.d.ts.map +1 -0
- package/dist/types/core/providers/detector.d.ts +44 -0
- package/dist/types/core/providers/detector.d.ts.map +1 -0
- package/dist/types/core/providers/index.d.ts +9 -0
- package/dist/types/core/providers/index.d.ts.map +1 -0
- package/dist/types/core/tracking/api-client.d.ts +17 -0
- package/dist/types/core/tracking/api-client.d.ts.map +1 -0
- package/dist/types/core/tracking/index.d.ts +11 -0
- package/dist/types/core/tracking/index.d.ts.map +1 -0
- package/dist/types/core/tracking/payload-builder.d.ts +24 -0
- package/dist/types/core/tracking/payload-builder.d.ts.map +1 -0
- package/dist/types/core/tracking/usage-tracker.d.ts +48 -0
- package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -0
- package/dist/types/core/wrapper/index.d.ts +8 -0
- package/dist/types/core/wrapper/index.d.ts.map +1 -0
- package/dist/types/core/wrapper/instance-patcher.d.ts +33 -0
- package/dist/types/core/wrapper/instance-patcher.d.ts.map +1 -0
- package/dist/types/core/wrapper/request-handler.d.ts +29 -0
- package/dist/types/core/wrapper/request-handler.d.ts.map +1 -0
- package/dist/types/core/wrapper/stream-wrapper.d.ts +13 -0
- package/dist/types/core/wrapper/stream-wrapper.d.ts.map +1 -0
- package/dist/types/index.d.ts +179 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types/function-parameters.d.ts +229 -0
- package/dist/types/types/function-parameters.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +283 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/openai-augmentation.d.ts +226 -0
- package/dist/types/types/openai-augmentation.d.ts.map +1 -0
- package/dist/types/types/responses-api.d.ts +247 -0
- package/dist/types/types/responses-api.d.ts.map +1 -0
- package/dist/types/utils/azure-model-resolver.d.ts +41 -0
- package/dist/types/utils/azure-model-resolver.d.ts.map +1 -0
- package/dist/types/utils/constants.d.ts +4 -0
- package/dist/types/utils/constants.d.ts.map +1 -0
- package/dist/types/utils/error-handler.d.ts +95 -0
- package/dist/types/utils/error-handler.d.ts.map +1 -0
- package/dist/types/utils/metadata-builder.d.ts +64 -0
- package/dist/types/utils/metadata-builder.d.ts.map +1 -0
- package/dist/types/utils/provider-detection.d.ts +51 -0
- package/dist/types/utils/provider-detection.d.ts.map +1 -0
- package/dist/types/utils/request-handler-factory.d.ts +81 -0
- package/dist/types/utils/request-handler-factory.d.ts.map +1 -0
- package/dist/types/utils/stop-reason-mapper.d.ts +29 -0
- package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -0
- package/dist/types/utils/type-guards.d.ts +73 -0
- package/dist/types/utils/type-guards.d.ts.map +1 -0
- package/dist/types/utils/url-builder.d.ts +25 -0
- package/dist/types/utils/url-builder.d.ts.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Type Guards Module
|
|
4
|
+
*
|
|
5
|
+
* Runtime type checking utilities to ensure type safety.
|
|
6
|
+
* These functions validate that objects match expected interfaces.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.isOpenAIChatResponse = isOpenAIChatResponse;
|
|
10
|
+
exports.isOpenAIEmbeddingResponse = isOpenAIEmbeddingResponse;
|
|
11
|
+
exports.isOpenAIChatRequest = isOpenAIChatRequest;
|
|
12
|
+
exports.isOpenAIEmbeddingRequest = isOpenAIEmbeddingRequest;
|
|
13
|
+
exports.isOpenAIClientInstance = isOpenAIClientInstance;
|
|
14
|
+
exports.isStreamChunk = isStreamChunk;
|
|
15
|
+
exports.hasValidUsage = hasValidUsage;
|
|
16
|
+
exports.isFunction = isFunction;
|
|
17
|
+
exports.isString = isString;
|
|
18
|
+
exports.isNumber = isNumber;
|
|
19
|
+
exports.isBoolean = isBoolean;
|
|
20
|
+
exports.isObject = isObject;
|
|
21
|
+
exports.isArray = isArray;
|
|
22
|
+
exports.safeGetProperty = safeGetProperty;
|
|
23
|
+
exports.safeGetNestedProperty = safeGetNestedProperty;
|
|
24
|
+
/**
|
|
25
|
+
* Type guard for OpenAI chat response
|
|
26
|
+
*/
|
|
27
|
+
function isOpenAIChatResponse(obj) {
|
|
28
|
+
if (!obj || typeof obj !== 'object')
|
|
29
|
+
return false;
|
|
30
|
+
const response = obj;
|
|
31
|
+
return (typeof response.id === 'string' &&
|
|
32
|
+
typeof response.model === 'string' &&
|
|
33
|
+
typeof response.usage === 'object' &&
|
|
34
|
+
response.usage !== null &&
|
|
35
|
+
typeof response.usage.prompt_tokens === 'number' &&
|
|
36
|
+
typeof response.usage.completion_tokens === 'number' &&
|
|
37
|
+
typeof response.usage.total_tokens === 'number' &&
|
|
38
|
+
Array.isArray(response.choices));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Type guard for OpenAI embedding response
|
|
42
|
+
*/
|
|
43
|
+
function isOpenAIEmbeddingResponse(obj) {
|
|
44
|
+
if (!obj || typeof obj !== 'object')
|
|
45
|
+
return false;
|
|
46
|
+
const response = obj;
|
|
47
|
+
return (typeof response.model === 'string' &&
|
|
48
|
+
typeof response.usage === 'object' &&
|
|
49
|
+
response.usage !== null &&
|
|
50
|
+
typeof response.usage.prompt_tokens === 'number' &&
|
|
51
|
+
typeof response.usage.total_tokens === 'number' &&
|
|
52
|
+
Array.isArray(response.data) &&
|
|
53
|
+
typeof response.object === 'string');
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Type guard for OpenAI chat request
|
|
57
|
+
*/
|
|
58
|
+
function isOpenAIChatRequest(obj) {
|
|
59
|
+
if (!obj || typeof obj !== 'object')
|
|
60
|
+
return false;
|
|
61
|
+
const request = obj;
|
|
62
|
+
return (typeof request.model === 'string' &&
|
|
63
|
+
Array.isArray(request.messages) &&
|
|
64
|
+
request.messages.length > 0 &&
|
|
65
|
+
request.messages.every((msg) => {
|
|
66
|
+
if (!msg || typeof msg !== 'object')
|
|
67
|
+
return false;
|
|
68
|
+
const message = msg;
|
|
69
|
+
return typeof message.role === 'string' && typeof message.content === 'string';
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Type guard for OpenAI embedding request
|
|
74
|
+
*/
|
|
75
|
+
function isOpenAIEmbeddingRequest(obj) {
|
|
76
|
+
if (!obj || typeof obj !== 'object')
|
|
77
|
+
return false;
|
|
78
|
+
const request = obj;
|
|
79
|
+
return (typeof request.model === 'string' &&
|
|
80
|
+
(typeof request.input === 'string' || Array.isArray(request.input)));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Type guard for OpenAI client instance
|
|
84
|
+
*/
|
|
85
|
+
function isOpenAIClientInstance(obj) {
|
|
86
|
+
if (!obj || typeof obj !== 'object')
|
|
87
|
+
return false;
|
|
88
|
+
const client = obj;
|
|
89
|
+
// Must have at least one of the expected OpenAI client properties
|
|
90
|
+
const hasBaseURL = typeof client.baseURL === 'string' || client.baseURL instanceof URL;
|
|
91
|
+
const hasChat = typeof client.chat === 'object' && client.chat !== null;
|
|
92
|
+
const hasEmbeddings = typeof client.embeddings === 'object' && client.embeddings !== null;
|
|
93
|
+
// A valid OpenAI client should have at least one of these properties
|
|
94
|
+
return hasBaseURL || hasChat || hasEmbeddings;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Type guard for stream chunk
|
|
98
|
+
*/
|
|
99
|
+
function isStreamChunk(obj) {
|
|
100
|
+
if (!obj || typeof obj !== 'object')
|
|
101
|
+
return false;
|
|
102
|
+
const chunk = obj;
|
|
103
|
+
return typeof chunk.id === 'string' && typeof chunk.model === 'string';
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Type guard for usage object
|
|
107
|
+
*/
|
|
108
|
+
function hasValidUsage(obj) {
|
|
109
|
+
if (!obj || typeof obj !== 'object')
|
|
110
|
+
return false;
|
|
111
|
+
const response = obj;
|
|
112
|
+
return (typeof response.usage === 'object' &&
|
|
113
|
+
response.usage !== null &&
|
|
114
|
+
typeof response.usage.prompt_tokens === 'number' &&
|
|
115
|
+
typeof response.usage.total_tokens === 'number');
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Type guard for function
|
|
119
|
+
*/
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
+
function isFunction(obj) {
|
|
122
|
+
return typeof obj === 'function';
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Type guard for string
|
|
126
|
+
*/
|
|
127
|
+
function isString(obj) {
|
|
128
|
+
return typeof obj === 'string';
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Type guard for number
|
|
132
|
+
*/
|
|
133
|
+
function isNumber(obj) {
|
|
134
|
+
return typeof obj === 'number' && !isNaN(obj);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Type guard for boolean
|
|
138
|
+
*/
|
|
139
|
+
function isBoolean(obj) {
|
|
140
|
+
return typeof obj === 'boolean';
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Type guard for object
|
|
144
|
+
*/
|
|
145
|
+
function isObject(obj) {
|
|
146
|
+
return obj !== null && typeof obj === 'object' && !Array.isArray(obj);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Type guard for array
|
|
150
|
+
*/
|
|
151
|
+
function isArray(obj) {
|
|
152
|
+
return Array.isArray(obj);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Safe property access with type checking
|
|
156
|
+
*/
|
|
157
|
+
function safeGetProperty(obj, property, typeGuard) {
|
|
158
|
+
if (!isObject(obj))
|
|
159
|
+
return undefined;
|
|
160
|
+
const value = obj[property];
|
|
161
|
+
return typeGuard(value) ? value : undefined;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Safe nested property access
|
|
165
|
+
*/
|
|
166
|
+
function safeGetNestedProperty(obj, path, typeGuard) {
|
|
167
|
+
let current = obj;
|
|
168
|
+
for (const property of path) {
|
|
169
|
+
if (!isObject(current))
|
|
170
|
+
return undefined;
|
|
171
|
+
current = current[property];
|
|
172
|
+
}
|
|
173
|
+
return typeGuard(current) ? current : undefined;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=type-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-guards.js","sourceRoot":"","sources":["../../../src/utils/type-guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* URL Builder Utilities
|
|
4
|
+
*
|
|
5
|
+
* Centralized URL construction logic to eliminate nested conditionals.
|
|
6
|
+
* Replaces the complex URL building logic from tracking.ts.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.buildReveniumUrl = buildReveniumUrl;
|
|
10
|
+
exports.isValidUrl = isValidUrl;
|
|
11
|
+
/**
|
|
12
|
+
* Build Revenium API URL with proper path handling
|
|
13
|
+
*
|
|
14
|
+
* This function expects the base URL to NOT include the /v2 suffix for consistency
|
|
15
|
+
* with other Revenium middleware. It automatically appends the correct path.
|
|
16
|
+
*
|
|
17
|
+
* @param baseUrl - The base URL from configuration (e.g., 'https://api.revenium.io/meter')
|
|
18
|
+
* @param endpoint - The API endpoint to append (e.g., '/ai/completions')
|
|
19
|
+
* @returns Complete URL for the API call
|
|
20
|
+
*/
|
|
21
|
+
function buildReveniumUrl(baseUrl, endpoint) {
|
|
22
|
+
// Normalize the base URL by removing trailing slashes
|
|
23
|
+
const normalizedBase = baseUrl.replace(/\/+$/, '');
|
|
24
|
+
// For consistency with other middleware, expect base URL without /v2
|
|
25
|
+
// and automatically append the correct versioned path
|
|
26
|
+
return `${normalizedBase}/v2${endpoint}`;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate URL format
|
|
30
|
+
*
|
|
31
|
+
* @param url - URL to validate
|
|
32
|
+
* @returns true if valid, false otherwise
|
|
33
|
+
*/
|
|
34
|
+
function isValidUrl(url) {
|
|
35
|
+
try {
|
|
36
|
+
new URL(url);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=url-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-builder.js","sourceRoot":"","sources":["../../../src/utils/url-builder.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAYH,4CAOC;AAQD,gCAOC;AAhCD;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,OAAe,EAAE,QAAgB;IAChE,sDAAsD;IACtD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEnD,qEAAqE;IACrE,sDAAsD;IACtD,OAAO,GAAG,cAAc,MAAM,QAAQ,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure Configuration Module
|
|
3
|
+
*
|
|
4
|
+
* Handles Azure-specific configuration logic.
|
|
5
|
+
* Extracted from provider.ts for better separation of concerns.
|
|
6
|
+
*/
|
|
7
|
+
import { getLogger } from './manager.js';
|
|
8
|
+
// Global logger
|
|
9
|
+
const logger = getLogger();
|
|
10
|
+
/**
|
|
11
|
+
* Gather Azure configuration from client and environment
|
|
12
|
+
*
|
|
13
|
+
* @param client - OpenAI/AzureOpenAI client instance
|
|
14
|
+
* @returns AzureConfig object
|
|
15
|
+
*/
|
|
16
|
+
export function gatherAzureConfig(client) {
|
|
17
|
+
const config = {};
|
|
18
|
+
try {
|
|
19
|
+
// Extract from client baseURL if available
|
|
20
|
+
if (client?.baseURL) {
|
|
21
|
+
const baseUrl = typeof client.baseURL === 'string' ? client.baseURL : client.baseURL?.toString();
|
|
22
|
+
config.endpoint = baseUrl;
|
|
23
|
+
}
|
|
24
|
+
// Extract from environment variables
|
|
25
|
+
if (process.env.AZURE_OPENAI_ENDPOINT) {
|
|
26
|
+
config.endpoint = process.env.AZURE_OPENAI_ENDPOINT;
|
|
27
|
+
}
|
|
28
|
+
if (process.env.AZURE_OPENAI_DEPLOYMENT) {
|
|
29
|
+
config.deployment = process.env.AZURE_OPENAI_DEPLOYMENT;
|
|
30
|
+
}
|
|
31
|
+
if (process.env.AZURE_OPENAI_API_VERSION) {
|
|
32
|
+
config.apiVersion = process.env.AZURE_OPENAI_API_VERSION;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
// Default to preferred API version from Python learnings
|
|
36
|
+
config.apiVersion = '2024-12-01-preview';
|
|
37
|
+
}
|
|
38
|
+
if (process.env.AZURE_OPENAI_API_KEY) {
|
|
39
|
+
config.apiKey = process.env.AZURE_OPENAI_API_KEY;
|
|
40
|
+
}
|
|
41
|
+
if (process.env.AZURE_OPENAI_TENANT_ID) {
|
|
42
|
+
config.tenantId = process.env.AZURE_OPENAI_TENANT_ID;
|
|
43
|
+
}
|
|
44
|
+
if (process.env.AZURE_OPENAI_RESOURCE_GROUP) {
|
|
45
|
+
config.resourceGroup = process.env.AZURE_OPENAI_RESOURCE_GROUP;
|
|
46
|
+
}
|
|
47
|
+
logger.debug('Azure configuration gathered', {
|
|
48
|
+
hasEndpoint: !!config.endpoint,
|
|
49
|
+
hasDeployment: !!config.deployment,
|
|
50
|
+
hasApiKey: !!config.apiKey,
|
|
51
|
+
apiVersion: config.apiVersion,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
logger.warn('Error gathering Azure configuration', {
|
|
56
|
+
error: error instanceof Error ? error.message : String(error),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return config;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=azure-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-config.js","sourceRoot":"","sources":["../../../../src/core/config/azure-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA4B;IAC5D,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,2CAA2C;QAC3C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YACnF,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC5B,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACtC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACtD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;YACxC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,yDAAyD;YACzD,MAAM,CAAC,UAAU,GAAG,oBAAoB,CAAC;QAC3C,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;YACvC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC;YAC5C,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;QACjE,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;YAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;YAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;YACjD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration module - Main exports
|
|
3
|
+
*
|
|
4
|
+
* This module provides a clean interface for configuration management,
|
|
5
|
+
* separating concerns into focused sub-modules.
|
|
6
|
+
*/
|
|
7
|
+
// Re-export all configuration functionality
|
|
8
|
+
export { loadConfigFromEnv, loadAzureConfigFromEnv, hasAzureConfigInEnv } from './loader.js';
|
|
9
|
+
export { validateConfig, validateAzureConfig } from './validator.js';
|
|
10
|
+
export { getConfig, setConfig, getLogger, setLogger, initializeConfig, defaultLogger, } from './manager.js';
|
|
11
|
+
// Export Azure-specific configuration
|
|
12
|
+
export * from './azure-config.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,4CAA4C;AAC5C,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE7F,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,sCAAsC;AACtC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Loader Module
|
|
3
|
+
*
|
|
4
|
+
* Handles loading configuration from environment variables.
|
|
5
|
+
* Separated from validation and management for single responsibility.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Default Revenium base URL for consistency with other middleware
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_REVENIUM_BASE_URL = 'https://api.revenium.io/meter';
|
|
11
|
+
/**
|
|
12
|
+
* Load configuration from environment variables
|
|
13
|
+
*/
|
|
14
|
+
export function loadConfigFromEnv() {
|
|
15
|
+
const reveniumApiKey = process.env.REVENIUM_METERING_API_KEY || process.env.REVENIUM_API_KEY;
|
|
16
|
+
const reveniumBaseUrl = process.env.REVENIUM_METERING_BASE_URL ||
|
|
17
|
+
process.env.REVENIUM_BASE_URL ||
|
|
18
|
+
DEFAULT_REVENIUM_BASE_URL;
|
|
19
|
+
const openaiApiKey = process.env.OPENAI_API_KEY;
|
|
20
|
+
if (!reveniumApiKey)
|
|
21
|
+
return null;
|
|
22
|
+
return {
|
|
23
|
+
reveniumApiKey,
|
|
24
|
+
reveniumBaseUrl,
|
|
25
|
+
openaiApiKey,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Load Azure configuration from environment variables
|
|
30
|
+
*/
|
|
31
|
+
export function loadAzureConfigFromEnv() {
|
|
32
|
+
const endpoint = process.env.AZURE_OPENAI_ENDPOINT;
|
|
33
|
+
const deployment = process.env.AZURE_OPENAI_DEPLOYMENT;
|
|
34
|
+
const apiVersion = process.env.AZURE_OPENAI_API_VERSION;
|
|
35
|
+
const apiKey = process.env.AZURE_OPENAI_API_KEY;
|
|
36
|
+
const tenantId = process.env.AZURE_OPENAI_TENANT_ID;
|
|
37
|
+
const resourceGroup = process.env.AZURE_OPENAI_RESOURCE_GROUP;
|
|
38
|
+
// Return null if no Azure config is present
|
|
39
|
+
if (!endpoint && !deployment && !apiKey)
|
|
40
|
+
return null;
|
|
41
|
+
return {
|
|
42
|
+
endpoint,
|
|
43
|
+
deployment,
|
|
44
|
+
apiVersion: apiVersion || '2024-12-01-preview', // Default from Python learnings
|
|
45
|
+
apiKey,
|
|
46
|
+
tenantId,
|
|
47
|
+
resourceGroup,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if Azure configuration is available in environment
|
|
52
|
+
*/
|
|
53
|
+
export function hasAzureConfigInEnv() {
|
|
54
|
+
return !!(process.env.AZURE_OPENAI_ENDPOINT ||
|
|
55
|
+
process.env.AZURE_OPENAI_DEPLOYMENT ||
|
|
56
|
+
process.env.AZURE_OPENAI_API_KEY);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/core/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAElE;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC7F,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACtC,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,yBAAyB,CAAC;IAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAEhD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO;QACL,cAAc;QACd,eAAe;QACf,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACpD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAE9D,4CAA4C;IAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO;QACL,QAAQ;QACR,UAAU;QACV,UAAU,EAAE,UAAU,IAAI,oBAAoB,EAAE,gCAAgC;QAChF,MAAM;QACN,QAAQ;QACR,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB;QACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Manager Module
|
|
3
|
+
*
|
|
4
|
+
* Handles global configuration state management and logging.
|
|
5
|
+
* Separated from loading and validation for single responsibility.
|
|
6
|
+
*/
|
|
7
|
+
import { loadConfigFromEnv, hasAzureConfigInEnv } from './loader.js';
|
|
8
|
+
import { validateConfig } from './validator.js';
|
|
9
|
+
/**
|
|
10
|
+
* Default console logger implementation
|
|
11
|
+
*/
|
|
12
|
+
export const defaultLogger = {
|
|
13
|
+
debug: (message, ...args) => {
|
|
14
|
+
if (process.env.REVENIUM_DEBUG === 'true') {
|
|
15
|
+
console.debug(`[Revenium Debug] ${message}`, ...args);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
info: (message, ...args) => {
|
|
19
|
+
console.info(`[Revenium] ${message}`, ...args);
|
|
20
|
+
},
|
|
21
|
+
warn: (message, ...args) => {
|
|
22
|
+
console.warn(`[Revenium Warning] ${message}`, ...args);
|
|
23
|
+
},
|
|
24
|
+
error: (message, ...args) => {
|
|
25
|
+
console.error(`[Revenium Error] ${message}`, ...args);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Global configuration instance
|
|
30
|
+
*/
|
|
31
|
+
let globalConfig = null;
|
|
32
|
+
let globalLogger = defaultLogger;
|
|
33
|
+
/**
|
|
34
|
+
* Get the current global configuration
|
|
35
|
+
*/
|
|
36
|
+
export function getConfig() {
|
|
37
|
+
return globalConfig;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Set the global configuration
|
|
41
|
+
*/
|
|
42
|
+
export function setConfig(config) {
|
|
43
|
+
validateConfig(config);
|
|
44
|
+
globalConfig = config;
|
|
45
|
+
globalLogger.debug('Revenium configuration updated', {
|
|
46
|
+
baseUrl: config.reveniumBaseUrl,
|
|
47
|
+
hasApiKey: !!config.reveniumApiKey,
|
|
48
|
+
hasOpenAIKey: !!config.openaiApiKey,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the current logger
|
|
53
|
+
*/
|
|
54
|
+
export function getLogger() {
|
|
55
|
+
return globalLogger;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Set a custom logger
|
|
59
|
+
*/
|
|
60
|
+
export function setLogger(logger) {
|
|
61
|
+
globalLogger = logger;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Initialize configuration from environment variables
|
|
65
|
+
*/
|
|
66
|
+
export function initializeConfig() {
|
|
67
|
+
const envConfig = loadConfigFromEnv();
|
|
68
|
+
if (envConfig) {
|
|
69
|
+
try {
|
|
70
|
+
setConfig(envConfig);
|
|
71
|
+
globalLogger.debug('Revenium middleware initialized from environment variables');
|
|
72
|
+
// Log Azure config availability for debugging
|
|
73
|
+
if (hasAzureConfigInEnv()) {
|
|
74
|
+
globalLogger.debug('Azure OpenAI configuration detected in environment');
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
globalLogger.error('Failed to initialize Revenium configuration:', error);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/core/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,IAAI,YAAY,GAA0B,IAAI,CAAC;AAC/C,IAAI,YAAY,GAAW,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAsB;IAC9C,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,YAAY,GAAG,MAAM,CAAC;IACtB,YAAY,CAAC,KAAK,CAAC,gCAAgC,EAAE;QACnD,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc;QAClC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,YAAY,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAEjF,8CAA8C;YAC9C,IAAI,mBAAmB,EAAE,EAAE,CAAC;gBAC1B,YAAY,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAC3E,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Validator Module
|
|
3
|
+
*
|
|
4
|
+
* Handles validation of configuration objects.
|
|
5
|
+
* Separated from loading and management for single responsibility.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Validate Revenium configuration
|
|
9
|
+
*/
|
|
10
|
+
export function validateConfig(config) {
|
|
11
|
+
if (!config.reveniumApiKey) {
|
|
12
|
+
throw new Error('Revenium API key is required. Set REVENIUM_METERING_API_KEY environment variable or provide reveniumApiKey in config.');
|
|
13
|
+
}
|
|
14
|
+
if (!config.reveniumApiKey.startsWith('hak_')) {
|
|
15
|
+
throw new Error('Invalid Revenium API key format. Revenium API keys should start with "hak_"');
|
|
16
|
+
}
|
|
17
|
+
if (!config.reveniumBaseUrl) {
|
|
18
|
+
throw new Error('Revenium base URL is missing. This should not happen as a default URL should be provided.');
|
|
19
|
+
}
|
|
20
|
+
// Validate URL format
|
|
21
|
+
try {
|
|
22
|
+
new URL(config.reveniumBaseUrl);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
throw new Error(`Invalid Revenium base URL format: ${config.reveniumBaseUrl}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate Azure configuration completeness
|
|
30
|
+
*
|
|
31
|
+
* @param config - Azure configuration to validate
|
|
32
|
+
* @returns validation result with missing fields
|
|
33
|
+
*/
|
|
34
|
+
export function validateAzureConfig(config) {
|
|
35
|
+
const missingFields = [];
|
|
36
|
+
const warnings = [];
|
|
37
|
+
// Required fields for basic Azure OpenAI operation
|
|
38
|
+
if (!config.endpoint) {
|
|
39
|
+
missingFields.push('endpoint');
|
|
40
|
+
}
|
|
41
|
+
if (!config.apiKey) {
|
|
42
|
+
missingFields.push('apiKey');
|
|
43
|
+
}
|
|
44
|
+
// Optional but recommended fields
|
|
45
|
+
if (!config.deployment) {
|
|
46
|
+
warnings.push('deployment name not specified - may need to be included in model parameter');
|
|
47
|
+
}
|
|
48
|
+
if (!config.apiVersion) {
|
|
49
|
+
warnings.push('API version not specified - using default 2024-12-01-preview');
|
|
50
|
+
}
|
|
51
|
+
// Validate endpoint format
|
|
52
|
+
if (config.endpoint) {
|
|
53
|
+
try {
|
|
54
|
+
new URL(config.endpoint);
|
|
55
|
+
if (!config.endpoint.toLowerCase().includes('azure')) {
|
|
56
|
+
warnings.push('endpoint does not contain "azure" - please verify this is an Azure OpenAI endpoint');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
missingFields.push('valid endpoint URL');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
isValid: missingFields.length === 0,
|
|
65
|
+
missingFields,
|
|
66
|
+
warnings,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/core/config/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uHAAuH,CACxH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IAKrD,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,mDAAmD;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAChF,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CACX,oFAAoF,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;QACnC,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC"}
|