cost-katana 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +550 -0
  3. package/dist/analyzers/cost-analyzer.d.ts +28 -0
  4. package/dist/analyzers/cost-analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/cost-analyzer.js +165 -0
  6. package/dist/analyzers/cost-analyzer.js.map +1 -0
  7. package/dist/analyzers/token-counter.d.ts +21 -0
  8. package/dist/analyzers/token-counter.d.ts.map +1 -0
  9. package/dist/analyzers/token-counter.js +100 -0
  10. package/dist/analyzers/token-counter.js.map +1 -0
  11. package/dist/analyzers/usage-tracker.d.ts +29 -0
  12. package/dist/analyzers/usage-tracker.d.ts.map +1 -0
  13. package/dist/analyzers/usage-tracker.js +142 -0
  14. package/dist/analyzers/usage-tracker.js.map +1 -0
  15. package/dist/config/default.d.ts +45 -0
  16. package/dist/config/default.d.ts.map +1 -0
  17. package/dist/config/default.js +103 -0
  18. package/dist/config/default.js.map +1 -0
  19. package/dist/config/model-types.d.ts +45 -0
  20. package/dist/config/model-types.d.ts.map +1 -0
  21. package/dist/config/model-types.js +101 -0
  22. package/dist/config/model-types.js.map +1 -0
  23. package/dist/config/pricing/anthropic.d.ts +3 -0
  24. package/dist/config/pricing/anthropic.d.ts.map +1 -0
  25. package/dist/config/pricing/anthropic.js +191 -0
  26. package/dist/config/pricing/anthropic.js.map +1 -0
  27. package/dist/config/pricing/aws-bedrock.d.ts +3 -0
  28. package/dist/config/pricing/aws-bedrock.d.ts.map +1 -0
  29. package/dist/config/pricing/aws-bedrock.js +747 -0
  30. package/dist/config/pricing/aws-bedrock.js.map +1 -0
  31. package/dist/config/pricing/cohere.d.ts +3 -0
  32. package/dist/config/pricing/cohere.d.ts.map +1 -0
  33. package/dist/config/pricing/cohere.js +371 -0
  34. package/dist/config/pricing/cohere.js.map +1 -0
  35. package/dist/config/pricing/deepseek.d.ts +3 -0
  36. package/dist/config/pricing/deepseek.d.ts.map +1 -0
  37. package/dist/config/pricing/deepseek.js +102 -0
  38. package/dist/config/pricing/deepseek.js.map +1 -0
  39. package/dist/config/pricing/google.d.ts +3 -0
  40. package/dist/config/pricing/google.d.ts.map +1 -0
  41. package/dist/config/pricing/google.js +671 -0
  42. package/dist/config/pricing/google.js.map +1 -0
  43. package/dist/config/pricing/grok.d.ts +3 -0
  44. package/dist/config/pricing/grok.d.ts.map +1 -0
  45. package/dist/config/pricing/grok.js +59 -0
  46. package/dist/config/pricing/grok.js.map +1 -0
  47. package/dist/config/pricing/index.d.ts +11 -0
  48. package/dist/config/pricing/index.d.ts.map +1 -0
  49. package/dist/config/pricing/index.js +24 -0
  50. package/dist/config/pricing/index.js.map +1 -0
  51. package/dist/config/pricing/meta.d.ts +3 -0
  52. package/dist/config/pricing/meta.d.ts.map +1 -0
  53. package/dist/config/pricing/meta.js +69 -0
  54. package/dist/config/pricing/meta.js.map +1 -0
  55. package/dist/config/pricing/mistral.d.ts +3 -0
  56. package/dist/config/pricing/mistral.d.ts.map +1 -0
  57. package/dist/config/pricing/mistral.js +690 -0
  58. package/dist/config/pricing/mistral.js.map +1 -0
  59. package/dist/config/pricing/openai.d.ts +3 -0
  60. package/dist/config/pricing/openai.d.ts.map +1 -0
  61. package/dist/config/pricing/openai.js +475 -0
  62. package/dist/config/pricing/openai.js.map +1 -0
  63. package/dist/config/pricing/xai.d.ts +3 -0
  64. package/dist/config/pricing/xai.d.ts.map +1 -0
  65. package/dist/config/pricing/xai.js +141 -0
  66. package/dist/config/pricing/xai.js.map +1 -0
  67. package/dist/config/pricing-data.d.ts +55 -0
  68. package/dist/config/pricing-data.d.ts.map +1 -0
  69. package/dist/config/pricing-data.js +179 -0
  70. package/dist/config/pricing-data.js.map +1 -0
  71. package/dist/feedback/client.d.ts +14 -0
  72. package/dist/feedback/client.d.ts.map +1 -0
  73. package/dist/feedback/client.js +95 -0
  74. package/dist/feedback/client.js.map +1 -0
  75. package/dist/feedback/index.d.ts +3 -0
  76. package/dist/feedback/index.d.ts.map +1 -0
  77. package/dist/feedback/index.js +21 -0
  78. package/dist/feedback/index.js.map +1 -0
  79. package/dist/gateway/client.d.ts +77 -0
  80. package/dist/gateway/client.d.ts.map +1 -0
  81. package/dist/gateway/client.js +630 -0
  82. package/dist/gateway/client.js.map +1 -0
  83. package/dist/gateway/index.d.ts +9 -0
  84. package/dist/gateway/index.d.ts.map +1 -0
  85. package/dist/gateway/index.js +66 -0
  86. package/dist/gateway/index.js.map +1 -0
  87. package/dist/index.d.ts +183 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +1438 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/optimizers/context-trimmer.d.ts +18 -0
  92. package/dist/optimizers/context-trimmer.d.ts.map +1 -0
  93. package/dist/optimizers/context-trimmer.js +221 -0
  94. package/dist/optimizers/context-trimmer.js.map +1 -0
  95. package/dist/optimizers/index.d.ts +6 -0
  96. package/dist/optimizers/index.d.ts.map +1 -0
  97. package/dist/optimizers/index.js +14 -0
  98. package/dist/optimizers/index.js.map +1 -0
  99. package/dist/optimizers/prompt-compressor.d.ts +15 -0
  100. package/dist/optimizers/prompt-compressor.d.ts.map +1 -0
  101. package/dist/optimizers/prompt-compressor.js +268 -0
  102. package/dist/optimizers/prompt-compressor.js.map +1 -0
  103. package/dist/optimizers/prompt-optimizer.d.ts +29 -0
  104. package/dist/optimizers/prompt-optimizer.d.ts.map +1 -0
  105. package/dist/optimizers/prompt-optimizer.js +381 -0
  106. package/dist/optimizers/prompt-optimizer.js.map +1 -0
  107. package/dist/optimizers/request-fusion.d.ts +34 -0
  108. package/dist/optimizers/request-fusion.d.ts.map +1 -0
  109. package/dist/optimizers/request-fusion.js +284 -0
  110. package/dist/optimizers/request-fusion.js.map +1 -0
  111. package/dist/optimizers/suggestion-engine.d.ts +29 -0
  112. package/dist/optimizers/suggestion-engine.d.ts.map +1 -0
  113. package/dist/optimizers/suggestion-engine.js +234 -0
  114. package/dist/optimizers/suggestion-engine.js.map +1 -0
  115. package/dist/providers/anthropic.d.ts +23 -0
  116. package/dist/providers/anthropic.d.ts.map +1 -0
  117. package/dist/providers/anthropic.js +108 -0
  118. package/dist/providers/anthropic.js.map +1 -0
  119. package/dist/providers/azure.d.ts +15 -0
  120. package/dist/providers/azure.d.ts.map +1 -0
  121. package/dist/providers/azure.js +115 -0
  122. package/dist/providers/azure.js.map +1 -0
  123. package/dist/providers/base.d.ts +20 -0
  124. package/dist/providers/base.d.ts.map +1 -0
  125. package/dist/providers/base.js +67 -0
  126. package/dist/providers/base.js.map +1 -0
  127. package/dist/providers/bedrock.d.ts +23 -0
  128. package/dist/providers/bedrock.d.ts.map +1 -0
  129. package/dist/providers/bedrock.js +247 -0
  130. package/dist/providers/bedrock.js.map +1 -0
  131. package/dist/providers/cohere.d.ts +17 -0
  132. package/dist/providers/cohere.d.ts.map +1 -0
  133. package/dist/providers/cohere.js +122 -0
  134. package/dist/providers/cohere.js.map +1 -0
  135. package/dist/providers/deepseek.d.ts +6 -0
  136. package/dist/providers/deepseek.d.ts.map +1 -0
  137. package/dist/providers/deepseek.js +17 -0
  138. package/dist/providers/deepseek.js.map +1 -0
  139. package/dist/providers/google.d.ts +17 -0
  140. package/dist/providers/google.d.ts.map +1 -0
  141. package/dist/providers/google.js +141 -0
  142. package/dist/providers/google.js.map +1 -0
  143. package/dist/providers/index.d.ts +13 -0
  144. package/dist/providers/index.d.ts.map +1 -0
  145. package/dist/providers/index.js +61 -0
  146. package/dist/providers/index.js.map +1 -0
  147. package/dist/providers/openai.d.ts +16 -0
  148. package/dist/providers/openai.d.ts.map +1 -0
  149. package/dist/providers/openai.js +194 -0
  150. package/dist/providers/openai.js.map +1 -0
  151. package/dist/trace/client.d.ts +48 -0
  152. package/dist/trace/client.d.ts.map +1 -0
  153. package/dist/trace/client.js +130 -0
  154. package/dist/trace/client.js.map +1 -0
  155. package/dist/trace/index.d.ts +7 -0
  156. package/dist/trace/index.d.ts.map +1 -0
  157. package/dist/trace/index.js +30 -0
  158. package/dist/trace/index.js.map +1 -0
  159. package/dist/trace/middleware.d.ts +70 -0
  160. package/dist/trace/middleware.d.ts.map +1 -0
  161. package/dist/trace/middleware.js +104 -0
  162. package/dist/trace/middleware.js.map +1 -0
  163. package/dist/trace/providers.d.ts +83 -0
  164. package/dist/trace/providers.d.ts.map +1 -0
  165. package/dist/trace/providers.js +340 -0
  166. package/dist/trace/providers.js.map +1 -0
  167. package/dist/trace/service.d.ts +59 -0
  168. package/dist/trace/service.d.ts.map +1 -0
  169. package/dist/trace/service.js +425 -0
  170. package/dist/trace/service.js.map +1 -0
  171. package/dist/trace/types.d.ts +102 -0
  172. package/dist/trace/types.d.ts.map +1 -0
  173. package/dist/trace/types.js +3 -0
  174. package/dist/trace/types.js.map +1 -0
  175. package/dist/types/failover.d.ts +29 -0
  176. package/dist/types/failover.d.ts.map +1 -0
  177. package/dist/types/failover.js +3 -0
  178. package/dist/types/failover.js.map +1 -0
  179. package/dist/types/feedback.d.ts +69 -0
  180. package/dist/types/feedback.d.ts.map +1 -0
  181. package/dist/types/feedback.js +3 -0
  182. package/dist/types/feedback.js.map +1 -0
  183. package/dist/types/gateway.d.ts +303 -0
  184. package/dist/types/gateway.d.ts.map +1 -0
  185. package/dist/types/gateway.js +3 -0
  186. package/dist/types/gateway.js.map +1 -0
  187. package/dist/types/index.d.ts +242 -0
  188. package/dist/types/index.d.ts.map +1 -0
  189. package/dist/types/index.js +37 -0
  190. package/dist/types/index.js.map +1 -0
  191. package/dist/types/models.d.ts +7 -0
  192. package/dist/types/models.d.ts.map +1 -0
  193. package/dist/types/models.js +3838 -0
  194. package/dist/types/models.js.map +1 -0
  195. package/dist/types/providers.d.ts +128 -0
  196. package/dist/types/providers.d.ts.map +1 -0
  197. package/dist/types/providers.js +10 -0
  198. package/dist/types/providers.js.map +1 -0
  199. package/dist/types/simplified.d.ts +65 -0
  200. package/dist/types/simplified.d.ts.map +1 -0
  201. package/dist/types/simplified.js +4 -0
  202. package/dist/types/simplified.js.map +1 -0
  203. package/dist/utils/logger.d.ts +35 -0
  204. package/dist/utils/logger.d.ts.map +1 -0
  205. package/dist/utils/logger.js +154 -0
  206. package/dist/utils/logger.js.map +1 -0
  207. package/dist/utils/pricing.d.ts +30 -0
  208. package/dist/utils/pricing.d.ts.map +1 -0
  209. package/dist/utils/pricing.js +148 -0
  210. package/dist/utils/pricing.js.map +1 -0
  211. package/dist/utils/validators.d.ts +10 -0
  212. package/dist/utils/validators.d.ts.map +1 -0
  213. package/dist/utils/validators.js +133 -0
  214. package/dist/utils/validators.js.map +1 -0
  215. package/package.json +92 -0
@@ -0,0 +1,630 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GatewayClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const logger_1 = require("../utils/logger");
9
+ class GatewayClient {
10
+ constructor(config) {
11
+ this.config = config;
12
+ const authMethod = config.authMethod || 'gateway';
13
+ const authHeader = authMethod === 'gateway' ? 'CostKatana-Auth' : 'Authorization';
14
+ this.client = axios_1.default.create({
15
+ baseURL: config.baseUrl,
16
+ timeout: 120000,
17
+ headers: {
18
+ 'Content-Type': 'application/json',
19
+ [authHeader]: `Bearer ${config.apiKey}`
20
+ }
21
+ });
22
+ this.client.interceptors.request.use(requestConfig => {
23
+ if (this.config.defaultProperties) {
24
+ Object.entries(this.config.defaultProperties).forEach(([key, value]) => {
25
+ requestConfig.headers[`CostKatana-Property-${key}`] = value;
26
+ });
27
+ }
28
+ if (this.config.enableCache) {
29
+ requestConfig.headers['CostKatana-Cache-Enabled'] = 'true';
30
+ if (this.config.cacheConfig?.ttl) {
31
+ requestConfig.headers['Cache-Control'] = `max-age=${this.config.cacheConfig.ttl}`;
32
+ }
33
+ if (this.config.cacheConfig?.userScope) {
34
+ requestConfig.headers['CostKatana-Cache-User-Scope'] = this.config.cacheConfig.userScope;
35
+ }
36
+ if (this.config.cacheConfig?.bucketMaxSize) {
37
+ requestConfig.headers['CostKatana-Cache-Bucket-Max-Size'] =
38
+ this.config.cacheConfig.bucketMaxSize.toString();
39
+ }
40
+ }
41
+ if (this.config.enableRetries) {
42
+ requestConfig.headers['CostKatana-Retry-Enabled'] = 'true';
43
+ if (this.config.retryConfig?.count !== undefined) {
44
+ requestConfig.headers['CostKatana-Retry-Count'] =
45
+ this.config.retryConfig.count.toString();
46
+ }
47
+ if (this.config.retryConfig?.factor !== undefined) {
48
+ requestConfig.headers['CostKatana-Retry-Factor'] =
49
+ this.config.retryConfig.factor.toString();
50
+ }
51
+ if (this.config.retryConfig?.minTimeout !== undefined) {
52
+ requestConfig.headers['CostKatana-Retry-Min-Timeout'] =
53
+ this.config.retryConfig.minTimeout.toString();
54
+ }
55
+ if (this.config.retryConfig?.maxTimeout !== undefined) {
56
+ requestConfig.headers['CostKatana-Retry-Max-Timeout'] =
57
+ this.config.retryConfig.maxTimeout.toString();
58
+ }
59
+ }
60
+ if (this.config.firewall?.enabled) {
61
+ requestConfig.headers['CostKatana-Firewall-Enabled'] = 'true';
62
+ if (this.config.firewall.advanced) {
63
+ requestConfig.headers['CostKatana-Firewall-Advanced'] = 'true';
64
+ }
65
+ if (this.config.firewall.promptThreshold !== undefined) {
66
+ requestConfig.headers['CostKatana-Firewall-Prompt-Threshold'] =
67
+ this.config.firewall.promptThreshold.toString();
68
+ }
69
+ if (this.config.firewall.llamaThreshold !== undefined) {
70
+ requestConfig.headers['CostKatana-Firewall-Llama-Threshold'] =
71
+ this.config.firewall.llamaThreshold.toString();
72
+ }
73
+ }
74
+ return requestConfig;
75
+ });
76
+ logger_1.logger.info('Gateway client initialized', {
77
+ baseUrl: config.baseUrl,
78
+ enableCache: config.enableCache,
79
+ enableRetries: config.enableRetries
80
+ });
81
+ }
82
+ async openai(request, options = {}) {
83
+ const targetUrl = options.targetUrl || 'https://api.openai.com';
84
+ const endpoint = '/v1/chat/completions';
85
+ return this.makeRequest(endpoint, request, { ...options, targetUrl });
86
+ }
87
+ async anthropic(request, options = {}) {
88
+ const targetUrl = options.targetUrl || 'https://api.anthropic.com';
89
+ const endpoint = '/v1/messages';
90
+ return this.makeRequest(endpoint, request, { ...options, targetUrl });
91
+ }
92
+ async googleAI(model, request, options = {}) {
93
+ const targetUrl = options.targetUrl || 'https://generativelanguage.googleapis.com';
94
+ const endpoint = `/v1/models/${model}:generateContent`;
95
+ return this.makeRequest(endpoint, request, { ...options, targetUrl });
96
+ }
97
+ async cohere(request, options = {}) {
98
+ const targetUrl = options.targetUrl || 'https://api.cohere.ai';
99
+ const endpoint = '/v1/generate';
100
+ return this.makeRequest(endpoint, request, { ...options, targetUrl });
101
+ }
102
+ async makeRequest(endpoint, data, options = {}) {
103
+ const startTime = Date.now();
104
+ try {
105
+ const headers = this.buildHeaders(options);
106
+ const response = await this.client.post(endpoint, data, { headers });
107
+ const processingTime = Date.now() - startTime;
108
+ const gatewayResponse = {
109
+ data: response.data,
110
+ headers: response.headers,
111
+ status: response.status,
112
+ metadata: {
113
+ cacheStatus: response.headers['costkatana-cache-status'],
114
+ processingTime: parseInt(response.headers['costkatana-processing-time']) || processingTime,
115
+ retryAttempts: parseInt(response.headers['costkatana-retry-attempts']) || 0,
116
+ budgetRemaining: parseFloat(response.headers['costkatana-budget-remaining']),
117
+ requestId: response.headers['costkatana-request-id'] || response.headers['costkatana-id'],
118
+ failoverProviderIndex: response.headers['costkatana-failover-index']
119
+ ? parseInt(response.headers['costkatana-failover-index'])
120
+ : undefined
121
+ }
122
+ };
123
+ logger_1.logger.info('Gateway request completed', {
124
+ endpoint,
125
+ status: response.status,
126
+ cacheStatus: gatewayResponse.metadata.cacheStatus,
127
+ processingTime: gatewayResponse.metadata.processingTime,
128
+ retryAttempts: gatewayResponse.metadata.retryAttempts
129
+ });
130
+ return gatewayResponse;
131
+ }
132
+ catch (error) {
133
+ logger_1.logger.error('Gateway request failed', error, {
134
+ endpoint,
135
+ processingTime: Date.now() - startTime
136
+ });
137
+ throw error;
138
+ }
139
+ }
140
+ async getStats() {
141
+ try {
142
+ const response = await this.client.get('/stats');
143
+ return response.data.data;
144
+ }
145
+ catch (error) {
146
+ logger_1.logger.error('Failed to get gateway stats', error);
147
+ throw error;
148
+ }
149
+ }
150
+ async getCacheStats() {
151
+ try {
152
+ const response = await this.client.get('/cache/stats');
153
+ return response.data.data;
154
+ }
155
+ catch (error) {
156
+ logger_1.logger.error('Failed to get cache stats', error);
157
+ throw error;
158
+ }
159
+ }
160
+ async clearCache(options = {}) {
161
+ try {
162
+ const params = new URLSearchParams();
163
+ if (options.userScope)
164
+ params.append('userScope', options.userScope);
165
+ if (options.expired)
166
+ params.append('expired', 'true');
167
+ await this.client.delete(`/cache?${params.toString()}`);
168
+ logger_1.logger.info('Cache cleared successfully', options);
169
+ }
170
+ catch (error) {
171
+ logger_1.logger.error('Failed to clear cache', error);
172
+ throw error;
173
+ }
174
+ }
175
+ async getWorkflows(options = {}) {
176
+ try {
177
+ const params = new URLSearchParams();
178
+ if (options.startDate)
179
+ params.append('startDate', options.startDate.toISOString());
180
+ if (options.endDate)
181
+ params.append('endDate', options.endDate.toISOString());
182
+ if (options.workflowName)
183
+ params.append('workflowName', options.workflowName);
184
+ if (options.limit)
185
+ params.append('limit', options.limit.toString());
186
+ const response = await this.client.get(`/workflows/summary?${params.toString()}`);
187
+ return response.data.data;
188
+ }
189
+ catch (error) {
190
+ logger_1.logger.error('Failed to get workflows', error);
191
+ throw error;
192
+ }
193
+ }
194
+ async getWorkflowDetails(workflowId) {
195
+ try {
196
+ const response = await this.client.get(`/workflows/${workflowId}`);
197
+ return response.data.data;
198
+ }
199
+ catch (error) {
200
+ logger_1.logger.error('Failed to get workflow details', error, { workflowId });
201
+ throw error;
202
+ }
203
+ }
204
+ async exportWorkflows(options = {}) {
205
+ try {
206
+ const workflows = await this.getWorkflows(options);
207
+ return this.workflowsToCSV(workflows);
208
+ }
209
+ catch (error) {
210
+ logger_1.logger.error('Failed to export workflows', error);
211
+ throw error;
212
+ }
213
+ }
214
+ async healthCheck() {
215
+ try {
216
+ const response = await this.client.get('/health');
217
+ return response.data;
218
+ }
219
+ catch (error) {
220
+ logger_1.logger.error('Gateway health check failed', error);
221
+ throw error;
222
+ }
223
+ }
224
+ updateConfig(config) {
225
+ this.config = { ...this.config, ...config };
226
+ if (config.apiKey) {
227
+ this.client.defaults.headers['CostKatana-Auth'] = `Bearer ${config.apiKey}`;
228
+ }
229
+ logger_1.logger.info('Gateway configuration updated', config);
230
+ }
231
+ buildHeaders(options) {
232
+ const headers = {};
233
+ if (options.targetUrl || this.config.defaultTargetUrl) {
234
+ headers['CostKatana-Target-Url'] = options.targetUrl || this.config.defaultTargetUrl;
235
+ }
236
+ if (options.projectId) {
237
+ headers['CostKatana-Project-Id'] = options.projectId;
238
+ }
239
+ if (options.authMethodOverride) {
240
+ headers['CostKatana-Auth-Method'] = options.authMethodOverride;
241
+ }
242
+ if (options.cache !== undefined) {
243
+ if (typeof options.cache === 'boolean') {
244
+ headers['CostKatana-Cache-Enabled'] = options.cache.toString();
245
+ }
246
+ else {
247
+ headers['CostKatana-Cache-Enabled'] = 'true';
248
+ if (options.cache.ttl) {
249
+ headers['Cache-Control'] = `max-age=${options.cache.ttl}`;
250
+ }
251
+ if (options.cache.userScope) {
252
+ headers['CostKatana-Cache-User-Scope'] = options.cache.userScope;
253
+ }
254
+ if (options.cache.bucketMaxSize) {
255
+ headers['CostKatana-Cache-Bucket-Max-Size'] = options.cache.bucketMaxSize.toString();
256
+ }
257
+ }
258
+ }
259
+ if (options.retry !== undefined) {
260
+ if (typeof options.retry === 'boolean') {
261
+ headers['CostKatana-Retry-Enabled'] = options.retry.toString();
262
+ }
263
+ else {
264
+ headers['CostKatana-Retry-Enabled'] = 'true';
265
+ if (options.retry.count !== undefined) {
266
+ headers['CostKatana-Retry-Count'] = options.retry.count.toString();
267
+ }
268
+ if (options.retry.factor !== undefined) {
269
+ headers['CostKatana-Retry-Factor'] = options.retry.factor.toString();
270
+ }
271
+ if (options.retry.minTimeout !== undefined) {
272
+ headers['CostKatana-Retry-Min-Timeout'] = options.retry.minTimeout.toString();
273
+ }
274
+ if (options.retry.maxTimeout !== undefined) {
275
+ headers['CostKatana-Retry-Max-Timeout'] = options.retry.maxTimeout.toString();
276
+ }
277
+ }
278
+ }
279
+ if (options.workflow) {
280
+ headers['CostKatana-Workflow-Id'] = options.workflow.workflowId;
281
+ headers['CostKatana-Workflow-Name'] = options.workflow.workflowName;
282
+ if (options.workflow.workflowStep) {
283
+ headers['CostKatana-Workflow-Step'] = options.workflow.workflowStep;
284
+ }
285
+ }
286
+ if (options.properties) {
287
+ Object.entries(options.properties).forEach(([key, value]) => {
288
+ headers[`CostKatana-Property-${key}`] = value;
289
+ });
290
+ }
291
+ if (options.budgetId)
292
+ headers['CostKatana-Budget-Id'] = options.budgetId;
293
+ if (options.modelOverride)
294
+ headers['CostKatana-Model-Override'] = options.modelOverride;
295
+ if (options.omitRequest)
296
+ headers['CostKatana-Omit-Request'] = 'true';
297
+ if (options.omitResponse)
298
+ headers['CostKatana-Omit-Response'] = 'true';
299
+ if (options.security)
300
+ headers['CostKatana-LLM-Security-Enabled'] = 'true';
301
+ if (options.firewall !== undefined) {
302
+ if (typeof options.firewall === 'boolean') {
303
+ headers['CostKatana-Firewall-Enabled'] = options.firewall.toString();
304
+ }
305
+ else {
306
+ headers['CostKatana-Firewall-Enabled'] = 'true';
307
+ if (options.firewall.advanced) {
308
+ headers['CostKatana-Firewall-Advanced'] = 'true';
309
+ }
310
+ if (options.firewall.promptThreshold !== undefined) {
311
+ headers['CostKatana-Firewall-Prompt-Threshold'] =
312
+ options.firewall.promptThreshold.toString();
313
+ }
314
+ if (options.firewall.llamaThreshold !== undefined) {
315
+ headers['CostKatana-Firewall-Llama-Threshold'] =
316
+ options.firewall.llamaThreshold.toString();
317
+ }
318
+ }
319
+ }
320
+ if (options.failover !== undefined) {
321
+ if (typeof options.failover === 'boolean') {
322
+ if (options.failover && this.config.failover?.defaultPolicy) {
323
+ headers['CostKatana-Failover-Policy'] = JSON.stringify(this.config.failover.defaultPolicy);
324
+ }
325
+ }
326
+ else {
327
+ if (options.failover.policy) {
328
+ headers['CostKatana-Failover-Policy'] = JSON.stringify(options.failover.policy);
329
+ }
330
+ }
331
+ if (headers['CostKatana-Failover-Policy']) {
332
+ delete headers['CostKatana-Target-Url'];
333
+ }
334
+ }
335
+ if (options.rateLimitPolicy)
336
+ headers['CostKatana-RateLimit-Policy'] = options.rateLimitPolicy;
337
+ if (options.sessionId)
338
+ headers['CostKatana-Session-Id'] = options.sessionId;
339
+ if (options.traceId)
340
+ headers['CostKatana-Property-Trace-Id'] = options.traceId;
341
+ if (options.userId)
342
+ headers['CostKatana-User-Id'] = options.userId;
343
+ if (options.userEmail)
344
+ headers['CostKatana-User-Email'] = options.userEmail;
345
+ if (options.cortex) {
346
+ if (options.cortex.enabled) {
347
+ headers['CostKatana-Cortex-Enabled'] = 'true';
348
+ }
349
+ if (options.cortex.operation) {
350
+ headers['CostKatana-Cortex-Operation'] = options.cortex.operation;
351
+ }
352
+ if (options.cortex.style) {
353
+ headers['CostKatana-Cortex-Style'] = options.cortex.style;
354
+ }
355
+ if (options.cortex.format) {
356
+ headers['CostKatana-Cortex-Format'] = options.cortex.format;
357
+ }
358
+ if (options.cortex.semanticCache !== undefined) {
359
+ headers['CostKatana-Cortex-Semantic-Cache'] = options.cortex.semanticCache.toString();
360
+ }
361
+ if (options.cortex.preserveSemantics !== undefined) {
362
+ headers['CostKatana-Cortex-Preserve-Semantics'] = options.cortex.preserveSemantics.toString();
363
+ }
364
+ if (options.cortex.intelligentRouting !== undefined) {
365
+ headers['CostKatana-Cortex-Intelligent-Routing'] = options.cortex.intelligentRouting.toString();
366
+ }
367
+ if (options.cortex.sast) {
368
+ const sast = options.cortex.sast;
369
+ if (sast.enabled !== undefined) {
370
+ headers['CostKatana-Cortex-Sast-Processing'] = sast.enabled.toString();
371
+ }
372
+ if (sast.language) {
373
+ headers['CostKatana-Cortex-Sast-Language'] = sast.language;
374
+ }
375
+ if (sast.ambiguityResolution !== undefined) {
376
+ headers['CostKatana-Cortex-Ambiguity-Resolution'] = sast.ambiguityResolution.toString();
377
+ }
378
+ if (sast.crossLingualMode !== undefined) {
379
+ headers['CostKatana-Cortex-Cross-Lingual-Mode'] = sast.crossLingualMode.toString();
380
+ }
381
+ if (sast.disambiguationStrategy) {
382
+ headers['CostKatana-Cortex-Disambiguation-Strategy'] = sast.disambiguationStrategy;
383
+ }
384
+ if (sast.preserveAmbiguity !== undefined) {
385
+ headers['CostKatana-Cortex-Preserve-Ambiguity'] = sast.preserveAmbiguity.toString();
386
+ }
387
+ if (sast.maxPrimitives !== undefined) {
388
+ headers['CostKatana-Cortex-Max-Primitives'] = sast.maxPrimitives.toString();
389
+ }
390
+ if (sast.semanticThreshold !== undefined) {
391
+ headers['CostKatana-Cortex-Semantic-Threshold'] = sast.semanticThreshold.toString();
392
+ }
393
+ }
394
+ }
395
+ if (options.customerEmail)
396
+ headers['CostKatana-Customer-Email'] = options.customerEmail;
397
+ return headers;
398
+ }
399
+ workflowsToCSV(workflows) {
400
+ const headers = [
401
+ 'Workflow ID',
402
+ 'Workflow Name',
403
+ 'Start Time',
404
+ 'End Time',
405
+ 'Duration (ms)',
406
+ 'Total Cost ($)',
407
+ 'Total Tokens',
408
+ 'Request Count',
409
+ 'Average Cost per Request ($)',
410
+ 'Steps'
411
+ ];
412
+ const rows = workflows.map(workflow => [
413
+ workflow.workflowId,
414
+ workflow.workflowName,
415
+ new Date(workflow.startTime).toISOString(),
416
+ new Date(workflow.endTime).toISOString(),
417
+ workflow.duration.toString(),
418
+ workflow.totalCost.toFixed(6),
419
+ workflow.totalTokens.toString(),
420
+ workflow.requestCount.toString(),
421
+ workflow.averageCost.toFixed(6),
422
+ workflow.steps.map(step => `${step.step} (${step.cost.toFixed(6)}$)`).join('; ')
423
+ ]);
424
+ const csvContent = [
425
+ headers.join(','),
426
+ ...rows.map(row => row.map(cell => `"${cell}"`).join(','))
427
+ ].join('\n');
428
+ return csvContent;
429
+ }
430
+ isUsingProxyKey() {
431
+ return this.config.apiKey.startsWith('ck-proxy-');
432
+ }
433
+ async getProxyKeyInfo() {
434
+ if (!this.isUsingProxyKey()) {
435
+ return null;
436
+ }
437
+ try {
438
+ const response = await this.client.get('/key-vault/proxy-keys', {
439
+ params: { keyId: this.config.apiKey }
440
+ });
441
+ const proxyKeys = response.data.data;
442
+ return proxyKeys.find((key) => key.keyId === this.config.apiKey) || null;
443
+ }
444
+ catch (error) {
445
+ logger_1.logger.error('Failed to get proxy key info:', error);
446
+ return null;
447
+ }
448
+ }
449
+ async makeProxyKeyRequest(targetUrl, requestData, options = {}) {
450
+ if (!this.isUsingProxyKey()) {
451
+ throw new Error('This method requires a proxy key. Current API key is not a proxy key.');
452
+ }
453
+ const requestOptions = {
454
+ targetUrl,
455
+ properties: options.properties,
456
+ modelOverride: options.modelOverride,
457
+ omitRequest: options.omitRequest,
458
+ omitResponse: options.omitResponse,
459
+ budgetId: options.projectId
460
+ };
461
+ return this.makeRequest(requestData, requestOptions);
462
+ }
463
+ async getProxyKeyUsage() {
464
+ if (!this.isUsingProxyKey()) {
465
+ return null;
466
+ }
467
+ try {
468
+ const proxyKeyInfo = await this.getProxyKeyInfo();
469
+ return proxyKeyInfo ? proxyKeyInfo.usageStats : null;
470
+ }
471
+ catch (error) {
472
+ logger_1.logger.error('Failed to get proxy key usage:', error);
473
+ return null;
474
+ }
475
+ }
476
+ async checkProxyKeyBudget() {
477
+ if (!this.isUsingProxyKey()) {
478
+ return null;
479
+ }
480
+ try {
481
+ const proxyKeyInfo = await this.getProxyKeyInfo();
482
+ if (!proxyKeyInfo) {
483
+ return null;
484
+ }
485
+ const { usageStats, budgetLimit, dailyBudgetLimit, monthlyBudgetLimit } = proxyKeyInfo;
486
+ if (budgetLimit && usageStats.totalCost >= budgetLimit) {
487
+ return { withinBudget: false, budgetStatus: 'over', message: 'Over total budget limit' };
488
+ }
489
+ if (dailyBudgetLimit && usageStats.dailyCost >= dailyBudgetLimit) {
490
+ return { withinBudget: false, budgetStatus: 'over', message: 'Over daily budget limit' };
491
+ }
492
+ if (monthlyBudgetLimit && usageStats.monthlyCost >= monthlyBudgetLimit) {
493
+ return { withinBudget: false, budgetStatus: 'over', message: 'Over monthly budget limit' };
494
+ }
495
+ if (budgetLimit && usageStats.totalCost >= budgetLimit * 0.8) {
496
+ return {
497
+ withinBudget: true,
498
+ budgetStatus: 'warning',
499
+ message: 'Approaching total budget limit'
500
+ };
501
+ }
502
+ if (dailyBudgetLimit && usageStats.dailyCost >= dailyBudgetLimit * 0.8) {
503
+ return {
504
+ withinBudget: true,
505
+ budgetStatus: 'warning',
506
+ message: 'Approaching daily budget limit'
507
+ };
508
+ }
509
+ if (monthlyBudgetLimit && usageStats.monthlyCost >= monthlyBudgetLimit * 0.8) {
510
+ return {
511
+ withinBudget: true,
512
+ budgetStatus: 'warning',
513
+ message: 'Approaching monthly budget limit'
514
+ };
515
+ }
516
+ return { withinBudget: true, budgetStatus: 'good', message: 'Within budget limits' };
517
+ }
518
+ catch (error) {
519
+ logger_1.logger.error('Failed to check proxy key budget:', error);
520
+ return null;
521
+ }
522
+ }
523
+ async validateProxyKeyPermissions(requiredPermission) {
524
+ if (!this.isUsingProxyKey()) {
525
+ return true;
526
+ }
527
+ try {
528
+ const proxyKeyInfo = await this.getProxyKeyInfo();
529
+ if (!proxyKeyInfo) {
530
+ return false;
531
+ }
532
+ return (proxyKeyInfo.permissions.includes(requiredPermission) ||
533
+ proxyKeyInfo.permissions.includes('admin'));
534
+ }
535
+ catch (error) {
536
+ logger_1.logger.error('Failed to validate proxy key permissions:', error);
537
+ return false;
538
+ }
539
+ }
540
+ async getFirewallAnalytics(userId, dateRange) {
541
+ try {
542
+ const params = {};
543
+ if (userId) {
544
+ params.userId = userId;
545
+ }
546
+ if (dateRange) {
547
+ params.startDate = dateRange.start.toISOString();
548
+ params.endDate = dateRange.end.toISOString();
549
+ }
550
+ const response = await this.client.get('/firewall/analytics', { params });
551
+ return response.data.data;
552
+ }
553
+ catch (error) {
554
+ logger_1.logger.error('Failed to get firewall analytics:', error);
555
+ throw new Error('Failed to get firewall analytics');
556
+ }
557
+ }
558
+ async makeFirewallProtectedRequest(endpoint, data, firewallOptions, requestOptions = {}) {
559
+ const options = {
560
+ ...requestOptions,
561
+ firewall: firewallOptions
562
+ };
563
+ return this.makeRequest(endpoint, data, options);
564
+ }
565
+ async withSast(endpoint, data, sastOptions = {}, options = {}) {
566
+ const cortexOptions = {
567
+ enabled: true,
568
+ operation: 'sast',
569
+ sast: {
570
+ enabled: true,
571
+ language: 'en',
572
+ ambiguityResolution: true,
573
+ crossLingualMode: false,
574
+ disambiguationStrategy: 'hybrid',
575
+ preserveAmbiguity: false,
576
+ maxPrimitives: 100,
577
+ semanticThreshold: 0.7,
578
+ ...sastOptions
579
+ }
580
+ };
581
+ return this.makeRequest(endpoint, data, {
582
+ ...options,
583
+ cortex: cortexOptions
584
+ });
585
+ }
586
+ async compareSast(endpoint, data, options = {}) {
587
+ const traditionalPromise = this.makeRequest(endpoint, data, {
588
+ ...options,
589
+ cortex: { enabled: true, operation: 'optimize' }
590
+ });
591
+ const sastPromise = this.withSast(endpoint, data, {}, options);
592
+ const [traditional, sast] = await Promise.all([traditionalPromise, sastPromise]);
593
+ const traditionalTokens = traditional.metadata.processingTime || 0;
594
+ const sastTokens = sast.metadata.processingTime || 0;
595
+ const tokenReduction = traditionalTokens > 0 ?
596
+ ((traditionalTokens - sastTokens) / traditionalTokens) * 100 : 0;
597
+ const processingTimeDiff = (sast.metadata.processingTime || 0) - (traditional.metadata.processingTime || 0);
598
+ return {
599
+ traditional,
600
+ sast,
601
+ comparison: {
602
+ tokenReduction,
603
+ processingTimeDiff,
604
+ recommendedApproach: tokenReduction > 10 ? 'sast' : 'traditional'
605
+ }
606
+ };
607
+ }
608
+ async testUniversalSemantics(endpoint, data, languages = ['en', 'es', 'fr'], options = {}) {
609
+ const promises = languages.map(language => this.withSast(endpoint, data, {
610
+ language,
611
+ crossLingualMode: true,
612
+ ambiguityResolution: true
613
+ }, options));
614
+ return Promise.all(promises);
615
+ }
616
+ async getSastVocabulary(options = {}) {
617
+ return this.makeRequest('/sast/vocabulary', {}, options);
618
+ }
619
+ async searchSemanticPrimitives(query, options = {}) {
620
+ return this.makeRequest('/sast/search', query, options);
621
+ }
622
+ async getTelescopeDemo(options = {}) {
623
+ return this.makeRequest('/sast/telescope-demo', {}, options);
624
+ }
625
+ async getSastStats(options = {}) {
626
+ return this.makeRequest('/sast/stats', {}, options);
627
+ }
628
+ }
629
+ exports.GatewayClient = GatewayClient;
630
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}