@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.
Files changed (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1095 -0
  3. package/dist/cjs/core/config/azure-config.js +64 -0
  4. package/dist/cjs/core/config/azure-config.js.map +1 -0
  5. package/dist/cjs/core/config/index.js +41 -0
  6. package/dist/cjs/core/config/index.js.map +1 -0
  7. package/dist/cjs/core/config/loader.js +63 -0
  8. package/dist/cjs/core/config/loader.js.map +1 -0
  9. package/dist/cjs/core/config/manager.js +93 -0
  10. package/dist/cjs/core/config/manager.js.map +1 -0
  11. package/dist/cjs/core/config/validator.js +73 -0
  12. package/dist/cjs/core/config/validator.js.map +1 -0
  13. package/dist/cjs/core/providers/detector.js +140 -0
  14. package/dist/cjs/core/providers/detector.js.map +1 -0
  15. package/dist/cjs/core/providers/index.js +18 -0
  16. package/dist/cjs/core/providers/index.js.map +1 -0
  17. package/dist/cjs/core/tracking/api-client.js +68 -0
  18. package/dist/cjs/core/tracking/api-client.js.map +1 -0
  19. package/dist/cjs/core/tracking/index.js +23 -0
  20. package/dist/cjs/core/tracking/index.js.map +1 -0
  21. package/dist/cjs/core/tracking/payload-builder.js +107 -0
  22. package/dist/cjs/core/tracking/payload-builder.js.map +1 -0
  23. package/dist/cjs/core/tracking/usage-tracker.js +120 -0
  24. package/dist/cjs/core/tracking/usage-tracker.js.map +1 -0
  25. package/dist/cjs/core/wrapper/index.js +15 -0
  26. package/dist/cjs/core/wrapper/index.js.map +1 -0
  27. package/dist/cjs/core/wrapper/instance-patcher.js +202 -0
  28. package/dist/cjs/core/wrapper/instance-patcher.js.map +1 -0
  29. package/dist/cjs/core/wrapper/request-handler.js +317 -0
  30. package/dist/cjs/core/wrapper/request-handler.js.map +1 -0
  31. package/dist/cjs/core/wrapper/stream-wrapper.js +82 -0
  32. package/dist/cjs/core/wrapper/stream-wrapper.js.map +1 -0
  33. package/dist/cjs/index.js +195 -0
  34. package/dist/cjs/index.js.map +1 -0
  35. package/dist/cjs/types/function-parameters.js +14 -0
  36. package/dist/cjs/types/function-parameters.js.map +1 -0
  37. package/dist/cjs/types/index.js +49 -0
  38. package/dist/cjs/types/index.js.map +1 -0
  39. package/dist/cjs/types/openai-augmentation.js +55 -0
  40. package/dist/cjs/types/openai-augmentation.js.map +1 -0
  41. package/dist/cjs/types/responses-api.js +30 -0
  42. package/dist/cjs/types/responses-api.js.map +1 -0
  43. package/dist/cjs/utils/azure-model-resolver.js +211 -0
  44. package/dist/cjs/utils/azure-model-resolver.js.map +1 -0
  45. package/dist/cjs/utils/constants.js +24 -0
  46. package/dist/cjs/utils/constants.js.map +1 -0
  47. package/dist/cjs/utils/error-handler.js +194 -0
  48. package/dist/cjs/utils/error-handler.js.map +1 -0
  49. package/dist/cjs/utils/metadata-builder.js +184 -0
  50. package/dist/cjs/utils/metadata-builder.js.map +1 -0
  51. package/dist/cjs/utils/provider-detection.js +212 -0
  52. package/dist/cjs/utils/provider-detection.js.map +1 -0
  53. package/dist/cjs/utils/request-handler-factory.js +185 -0
  54. package/dist/cjs/utils/request-handler-factory.js.map +1 -0
  55. package/dist/cjs/utils/stop-reason-mapper.js +70 -0
  56. package/dist/cjs/utils/stop-reason-mapper.js.map +1 -0
  57. package/dist/cjs/utils/type-guards.js +175 -0
  58. package/dist/cjs/utils/type-guards.js.map +1 -0
  59. package/dist/cjs/utils/url-builder.js +43 -0
  60. package/dist/cjs/utils/url-builder.js.map +1 -0
  61. package/dist/esm/core/config/azure-config.js +61 -0
  62. package/dist/esm/core/config/azure-config.js.map +1 -0
  63. package/dist/esm/core/config/index.js +13 -0
  64. package/dist/esm/core/config/index.js.map +1 -0
  65. package/dist/esm/core/config/loader.js +58 -0
  66. package/dist/esm/core/config/loader.js.map +1 -0
  67. package/dist/esm/core/config/manager.js +85 -0
  68. package/dist/esm/core/config/manager.js.map +1 -0
  69. package/dist/esm/core/config/validator.js +69 -0
  70. package/dist/esm/core/config/validator.js.map +1 -0
  71. package/dist/esm/core/providers/detector.js +134 -0
  72. package/dist/esm/core/providers/detector.js.map +1 -0
  73. package/dist/esm/core/providers/index.js +10 -0
  74. package/dist/esm/core/providers/index.js.map +1 -0
  75. package/dist/esm/core/tracking/api-client.js +65 -0
  76. package/dist/esm/core/tracking/api-client.js.map +1 -0
  77. package/dist/esm/core/tracking/index.js +13 -0
  78. package/dist/esm/core/tracking/index.js.map +1 -0
  79. package/dist/esm/core/tracking/payload-builder.js +104 -0
  80. package/dist/esm/core/tracking/payload-builder.js.map +1 -0
  81. package/dist/esm/core/tracking/usage-tracker.js +114 -0
  82. package/dist/esm/core/tracking/usage-tracker.js.map +1 -0
  83. package/dist/esm/core/wrapper/index.js +9 -0
  84. package/dist/esm/core/wrapper/index.js.map +1 -0
  85. package/dist/esm/core/wrapper/instance-patcher.js +199 -0
  86. package/dist/esm/core/wrapper/instance-patcher.js.map +1 -0
  87. package/dist/esm/core/wrapper/request-handler.js +310 -0
  88. package/dist/esm/core/wrapper/request-handler.js.map +1 -0
  89. package/dist/esm/core/wrapper/stream-wrapper.js +79 -0
  90. package/dist/esm/core/wrapper/stream-wrapper.js.map +1 -0
  91. package/dist/esm/index.js +175 -0
  92. package/dist/esm/index.js.map +1 -0
  93. package/dist/esm/types/function-parameters.js +13 -0
  94. package/dist/esm/types/function-parameters.js.map +1 -0
  95. package/dist/esm/types/index.js +32 -0
  96. package/dist/esm/types/index.js.map +1 -0
  97. package/dist/esm/types/openai-augmentation.js +54 -0
  98. package/dist/esm/types/openai-augmentation.js.map +1 -0
  99. package/dist/esm/types/responses-api.js +26 -0
  100. package/dist/esm/types/responses-api.js.map +1 -0
  101. package/dist/esm/utils/azure-model-resolver.js +204 -0
  102. package/dist/esm/utils/azure-model-resolver.js.map +1 -0
  103. package/dist/esm/utils/constants.js +21 -0
  104. package/dist/esm/utils/constants.js.map +1 -0
  105. package/dist/esm/utils/error-handler.js +182 -0
  106. package/dist/esm/utils/error-handler.js.map +1 -0
  107. package/dist/esm/utils/metadata-builder.js +176 -0
  108. package/dist/esm/utils/metadata-builder.js.map +1 -0
  109. package/dist/esm/utils/provider-detection.js +206 -0
  110. package/dist/esm/utils/provider-detection.js.map +1 -0
  111. package/dist/esm/utils/request-handler-factory.js +146 -0
  112. package/dist/esm/utils/request-handler-factory.js.map +1 -0
  113. package/dist/esm/utils/stop-reason-mapper.js +65 -0
  114. package/dist/esm/utils/stop-reason-mapper.js.map +1 -0
  115. package/dist/esm/utils/type-guards.js +158 -0
  116. package/dist/esm/utils/type-guards.js.map +1 -0
  117. package/dist/esm/utils/url-builder.js +39 -0
  118. package/dist/esm/utils/url-builder.js.map +1 -0
  119. package/dist/types/core/config/azure-config.d.ts +16 -0
  120. package/dist/types/core/config/azure-config.d.ts.map +1 -0
  121. package/dist/types/core/config/index.d.ts +11 -0
  122. package/dist/types/core/config/index.d.ts.map +1 -0
  123. package/dist/types/core/config/loader.d.ts +20 -0
  124. package/dist/types/core/config/loader.d.ts.map +1 -0
  125. package/dist/types/core/config/manager.d.ts +32 -0
  126. package/dist/types/core/config/manager.d.ts.map +1 -0
  127. package/dist/types/core/config/validator.d.ts +23 -0
  128. package/dist/types/core/config/validator.d.ts.map +1 -0
  129. package/dist/types/core/providers/detector.d.ts +44 -0
  130. package/dist/types/core/providers/detector.d.ts.map +1 -0
  131. package/dist/types/core/providers/index.d.ts +9 -0
  132. package/dist/types/core/providers/index.d.ts.map +1 -0
  133. package/dist/types/core/tracking/api-client.d.ts +17 -0
  134. package/dist/types/core/tracking/api-client.d.ts.map +1 -0
  135. package/dist/types/core/tracking/index.d.ts +11 -0
  136. package/dist/types/core/tracking/index.d.ts.map +1 -0
  137. package/dist/types/core/tracking/payload-builder.d.ts +24 -0
  138. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -0
  139. package/dist/types/core/tracking/usage-tracker.d.ts +48 -0
  140. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -0
  141. package/dist/types/core/wrapper/index.d.ts +8 -0
  142. package/dist/types/core/wrapper/index.d.ts.map +1 -0
  143. package/dist/types/core/wrapper/instance-patcher.d.ts +33 -0
  144. package/dist/types/core/wrapper/instance-patcher.d.ts.map +1 -0
  145. package/dist/types/core/wrapper/request-handler.d.ts +29 -0
  146. package/dist/types/core/wrapper/request-handler.d.ts.map +1 -0
  147. package/dist/types/core/wrapper/stream-wrapper.d.ts +13 -0
  148. package/dist/types/core/wrapper/stream-wrapper.d.ts.map +1 -0
  149. package/dist/types/index.d.ts +179 -0
  150. package/dist/types/index.d.ts.map +1 -0
  151. package/dist/types/types/function-parameters.d.ts +229 -0
  152. package/dist/types/types/function-parameters.d.ts.map +1 -0
  153. package/dist/types/types/index.d.ts +283 -0
  154. package/dist/types/types/index.d.ts.map +1 -0
  155. package/dist/types/types/openai-augmentation.d.ts +226 -0
  156. package/dist/types/types/openai-augmentation.d.ts.map +1 -0
  157. package/dist/types/types/responses-api.d.ts +247 -0
  158. package/dist/types/types/responses-api.d.ts.map +1 -0
  159. package/dist/types/utils/azure-model-resolver.d.ts +41 -0
  160. package/dist/types/utils/azure-model-resolver.d.ts.map +1 -0
  161. package/dist/types/utils/constants.d.ts +4 -0
  162. package/dist/types/utils/constants.d.ts.map +1 -0
  163. package/dist/types/utils/error-handler.d.ts +95 -0
  164. package/dist/types/utils/error-handler.d.ts.map +1 -0
  165. package/dist/types/utils/metadata-builder.d.ts +64 -0
  166. package/dist/types/utils/metadata-builder.d.ts.map +1 -0
  167. package/dist/types/utils/provider-detection.d.ts +51 -0
  168. package/dist/types/utils/provider-detection.d.ts.map +1 -0
  169. package/dist/types/utils/request-handler-factory.d.ts +81 -0
  170. package/dist/types/utils/request-handler-factory.d.ts.map +1 -0
  171. package/dist/types/utils/stop-reason-mapper.d.ts +29 -0
  172. package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -0
  173. package/dist/types/utils/type-guards.d.ts +73 -0
  174. package/dist/types/utils/type-guards.d.ts.map +1 -0
  175. package/dist/types/utils/url-builder.d.ts +25 -0
  176. package/dist/types/utils/url-builder.d.ts.map +1 -0
  177. 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"}