cost-katana 2.3.3 β†’ 2.4.1

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/README.md CHANGED
@@ -6,27 +6,73 @@ Cost Katana is a drop-in SDK that wraps your AI calls with automatic cost tracki
6
6
 
7
7
  ---
8
8
 
9
- ## πŸš€ Get Started in 60 Seconds
9
+ ## Get started in 60 seconds
10
10
 
11
- ### Step 1: Install
11
+ Set **`COST_KATANA_API_KEY`**. **`PROJECT_ID`** is optional (recommended for per-project analytics in the dashboard).
12
+
13
+ ### Gateway first (drop-in proxy β€” like changing base URL + one header)
14
+
15
+ **HTTP / cURL** β€” no SDK; send OpenAI-compatible JSON to the gateway:
16
+
17
+ ```bash
18
+ curl -s https://api.costkatana.com/api/gateway/v1/chat/completions \
19
+ -H "Content-Type: application/json" \
20
+ -H "Authorization: Bearer $COST_KATANA_API_KEY" \
21
+ -d '{"model":"gpt-4o","messages":[{"role":"user","content":"Hello!"}]}'
22
+ ```
23
+
24
+ See also [`examples/curl-http.sh`](./examples/curl-http.sh).
25
+
26
+ **TypeScript β€” `gateway()`** β€” zero extra config; reads `COST_KATANA_API_KEY` (same behavior as `createGatewayClientFromEnv()`):
12
27
 
13
28
  ```bash
14
29
  npm install cost-katana
15
30
  ```
16
31
 
17
- ### Step 2: Make Your First AI Call
32
+ ```typescript
33
+ import { gateway } from 'cost-katana';
34
+
35
+ const res = await gateway().openai({
36
+ model: 'gpt-4o',
37
+ messages: [{ role: 'user', content: 'Hello!' }],
38
+ });
39
+
40
+ console.log(res.data);
41
+ ```
42
+
43
+ ### `ai()` β€” simple typed API with cost on the response
18
44
 
19
45
  ```typescript
20
46
  import { ai, OPENAI } from 'cost-katana';
21
47
 
22
- const response = await ai(OPENAI.GPT_4, 'Explain quantum computing in one sentence');
48
+ const response = await ai(OPENAI.GPT_4O, 'Hello');
49
+
50
+ console.log(response.text, response.cost);
51
+ ```
52
+
53
+ ### Python
54
+
55
+ ```bash
56
+ pip install costkatana
57
+ ```
58
+
59
+ ```python
60
+ import cost_katana as ck
61
+ from cost_katana import openai
23
62
 
24
- console.log(response.text); // "Quantum computing uses qubits to perform..."
25
- console.log(response.cost); // 0.0012
26
- console.log(response.tokens); // 47
63
+ response = ck.ai(openai.gpt_4o, "Hello")
64
+ print(response.text, response.cost)
27
65
  ```
28
66
 
29
- **That's it.** No configuration files. No complex setup. Just results.
67
+ ### Which API should I use?
68
+
69
+ | If you want… | Use |
70
+ |--------------|-----|
71
+ | Drop-in HTTP proxy (existing OpenAI clients / curl) | Gateway URL + `Authorization: Bearer`, or **`gateway()`** in TypeScript |
72
+ | Simple AI calls with cost on the response | **`ai()`** / **`chat()`** |
73
+ | Session replay, advanced analytics, or manual `trackUsage` | **`AICostTracker`** (advanced) |
74
+
75
+ For most apps, **`COST_KATANA_API_KEY`** plus either **`gateway()`** (proxy) or **`ai()`** (SDK) is enough. Optional direct provider keys: see [`.env.example`](./.env.example) if you need them.
30
76
 
31
77
  ---
32
78
 
@@ -222,16 +268,25 @@ DEEPSEEK.DEEPSEEK_CHAT
222
268
 
223
269
  ### Environment Variables
224
270
 
271
+ **Start here:** `COST_KATANA_API_KEY` unlocks routing, tracking, and dashboard features. **`PROJECT_ID`** is optional (set it to scope usage to a project in the dashboard).
272
+
225
273
  ```bash
226
- # Recommended: Use Cost Katana API key for all features
274
+ # Required for hosted Cost Katana
227
275
  COST_KATANA_API_KEY=dak_your_key_here
228
276
 
229
- # Or use provider keys directly
277
+ # Optional β€” per-project analytics
278
+ PROJECT_ID=your_project_id
279
+ ```
280
+
281
+ Optional: bring your own provider keys, or use AWS Bedrock. **Copy [`.env.example`](./.env.example)** into `.env` and fill in values.
282
+
283
+ ```bash
284
+ # Optional β€” direct provider keys
230
285
  OPENAI_API_KEY=sk-...
231
286
  ANTHROPIC_API_KEY=sk-ant-...
232
287
  GEMINI_API_KEY=...
233
288
 
234
- # For AWS Bedrock
289
+ # Optional β€” AWS Bedrock
235
290
  AWS_ACCESS_KEY_ID=...
236
291
  AWS_SECRET_ACCESS_KEY=...
237
292
  AWS_REGION=us-east-1
@@ -372,34 +427,70 @@ console.log(`Provider used: ${response.provider}`);
372
427
 
373
428
  ---
374
429
 
375
- ## πŸ“Š Comprehensive Usage Tracking & Analytics
430
+ ## πŸ“Š Usage tracking & analytics
376
431
 
377
- ### Real-time Performance Monitoring
432
+ ### Dashboard attribution (stay on `ai()`)
378
433
 
379
- Cost Katana now provides comprehensive tracking of every request, including network performance, client environment, and optimization opportunities:
434
+ Use the same **`ai()`** API as everywhere else. Point usage at your project once with **`configure()`** or env varsβ€”no need to switch to a new class for standard cost and token tracking.
380
435
 
381
436
  ```typescript
382
- import { AICostTracker, OPENAI } from 'cost-katana';
437
+ import { configure, ai, OPENAI } from 'cost-katana';
383
438
 
384
- const tracker = new AICostTracker({
439
+ await configure({
385
440
  apiKey: process.env.COST_KATANA_API_KEY,
386
- // Enable comprehensive tracking
387
- comprehensiveTracking: true,
388
- // Optional: configure tracking endpoints
389
- trackingEndpoint: 'https://api.costkatana.com/usage/track-comprehensive'
441
+ projectId: process.env.PROJECT_ID,
390
442
  });
391
443
 
392
- const response = await tracker.chat(OPENAI.GPT_4, 'Explain quantum computing');
444
+ const response = await ai(OPENAI.GPT_4O, 'Explain quantum computing', {
445
+ tags: ['demo', 'readme'],
446
+ });
393
447
 
394
- console.log('Response:', response.text);
448
+ console.log(response.text);
395
449
  console.log('Cost:', response.cost);
396
450
  console.log('Tokens:', response.tokens);
397
- console.log('Response Time:', response.responseTime);
451
+ console.log('Response time (ms):', response.responseTime);
452
+ ```
453
+
454
+ Calls are attributed to your project in the dashboard. You can also pass **`projectId`** on individual `ai()` options when you use multiple projects.
455
+
456
+ ### `AICostTracker` with defaults (recommended)
457
+
458
+ When you need a **dedicated tracker instance** (not the global `ai()` helper), use **`createCostKatanaTracker()`** or **`AICostTracker.createWithDefaults()`**. They fill in **`TrackerConfig`** from the same environment rules as auto-config: if you set **direct** provider keys (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, or AWS Bedrock creds), those providers are registered. If you **only** have **`COST_KATANA_API_KEY`** and **no** provider keys, the default is **Cost Katana hosted models** via the gateway (**`costkatana-backend-nest`**): a single OpenAI-shaped slot with the reserved `proxy` key so **`ai()`** / **`initializeGateway()`** route inference through the hosted API (no OpenAI/Anthropic keys required in your app). Optimization and alerts come from package defaults; pass a **partial** config to override anything.
398
459
 
399
- // Comprehensive tracking data is automatically sent to your dashboard
400
- // Including network metrics, client environment, and optimization suggestions
460
+ ```typescript
461
+ import { createCostKatanaTracker, AIProvider } from 'cost-katana';
462
+
463
+ const tracker = await createCostKatanaTracker();
464
+
465
+ // Optional overrides (merged on top of defaults)
466
+ const custom = await createCostKatanaTracker({
467
+ optimization: { enablePromptOptimization: false },
468
+ providers: [{ provider: AIProvider.OpenAI, apiKey: process.env.OPENAI_API_KEY! }]
469
+ });
470
+
471
+ // Same behavior: await AICostTracker.createWithDefaults({ ... })
472
+ // Short alias: import { tracker as costKatana } from 'cost-katana';
473
+ ```
474
+
475
+ Requires **`COST_KATANA_API_KEY`** in the environment (same as `AICostTracker.create()`). **`PROJECT_ID`** remains optional.
476
+
477
+ ### Dedicated tracker instances (advanced)
478
+
479
+ If you want a **per-provider tracker object** (instead of the global `ai()` helper), use **`createOpenAITracker`** / **`createAnthropicTracker`** / etc. They wrap `AICostTracker` with a small `complete()` API:
480
+
481
+ ```typescript
482
+ import { createOpenAITracker, OPENAI } from 'cost-katana';
483
+
484
+ const t = await createOpenAITracker({ model: OPENAI.GPT_4O });
485
+ const response = await t.complete({ prompt: 'Explain quantum computing' });
486
+
487
+ console.log(response.text);
488
+ console.log('Total cost (USD):', response.cost.totalCost);
489
+ console.log('Response time (ms):', response.responseTime);
401
490
  ```
402
491
 
492
+ For **gateway proxying**, **manual `trackUsage`**, or a fully custom **`AICostTracker`** with your own provider list, see [`docs/API.md`](./docs/API.md) and [`examples/`](./examples/).
493
+
403
494
  ### View Analytics in Dashboard
404
495
 
405
496
  Once tracking is enabled, you can view detailed analytics at your dashboard:
@@ -415,11 +506,9 @@ Once tracking is enabled, you can view detailed analytics at your dashboard:
415
506
  For custom implementations or additional tracking:
416
507
 
417
508
  ```typescript
418
- import { AICostTracker } from 'cost-katana';
509
+ import { createCostKatanaTracker } from 'cost-katana';
419
510
 
420
- const tracker = new AICostTracker({
421
- apiKey: process.env.COST_KATANA_API_KEY
422
- });
511
+ const tracker = await createCostKatanaTracker();
423
512
 
424
513
  // Manually track usage with additional metadata
425
514
  await tracker.trackUsage({
@@ -444,39 +533,9 @@ await tracker.trackUsage({
444
533
  });
445
534
  ```
446
535
 
447
- ### Session Replay & Distributed Tracing
448
-
449
- ```typescript
450
- import { AICostTracker } from 'cost-katana';
451
-
452
- const tracker = new AICostTracker({
453
- apiKey: process.env.COST_KATANA_API_KEY,
454
- sessionReplay: true,
455
- distributedTracing: true
456
- });
457
-
458
- // Start a traced session
459
- const sessionId = tracker.startSession({
460
- userId: 'user_123',
461
- feature: 'customer-support',
462
- metadata: {
463
- source: 'web-app',
464
- version: '1.2.3'
465
- }
466
- });
467
-
468
- // All requests in this session will be automatically traced
469
- const response = await tracker.chat(OPENAI.GPT_4, 'How can I cancel my subscription?', {
470
- sessionId,
471
- tags: ['support', 'billing']
472
- });
536
+ ### Session replay & distributed tracing
473
537
 
474
- // End session and get analytics
475
- const sessionStats = await tracker.endSession(sessionId);
476
- console.log('Session cost:', sessionStats.totalCost);
477
- console.log('Session duration:', sessionStats.duration);
478
- console.log('Requests made:', sessionStats.requestCount);
479
- ```
538
+ Session graphs, spans, and trace middleware are provided by the **`trace`** submodule. Start here: [`src/trace/README.md`](./src/trace/README.md) (exported APIs such as `TraceClient`, `LocalTraceService`, and `createTraceMiddleware`).
480
539
 
481
540
  ---
482
541
 
@@ -535,41 +594,14 @@ try {
535
594
 
536
595
  ---
537
596
 
538
- ## 🌐 AI Gateway (simple mental model)
539
-
540
- The gateway is an **HTTP proxy**: your app calls **Cost Katana’s URL** (for example `https://api.costkatana.com/api/gateway/...`) with your **Cost Katana API key**. The server can **forward** that request to OpenAI, Anthropic, Google, Cohere, etc., and attach **usage tracking, caching, budgets, firewall**, and other features.
541
-
542
- ### What is `CostKatana-Target-Url` for?
543
-
544
- It tells the proxy **which provider’s base URL** to use (for example `https://api.anthropic.com` or `https://api.openai.com`). The proxy then combines that **origin** with your route (such as `/v1/messages`) to build the real upstream request.
545
-
546
- **It is not your API key.** Keys are either:
547
-
548
- - **Provider keys** configured on the **server** (for example `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`), or
549
- - **Proxy keys** (`ck-proxy-...`) that map to a stored provider key in Cost Katana.
597
+ ## 🌐 AI Gateway β€” details
550
598
 
551
- The target URL only answers: *β€œwhich vendor’s HTTP API are we talking to?”*
599
+ The gateway is an **HTTP proxy**: call Cost Katana’s URL with your API key; the service forwards to OpenAI, Anthropic, Google, Cohere, etc., and can attach caching, retries, firewall, and tracking.
552
600
 
553
- ### Easy default (you usually skip the header)
554
-
555
- For normal routes (`/v1/chat/completions`, `/v1/messages`, Google `generateContent`, Cohere `/v1/generate`, etc.), the gateway **infers** the provider from the path, and the SDK **omits** `CostKatana-Target-Url` when you use `createGatewayClientFromEnv()` or `createCostKatanaGatewayClient()`.
556
-
557
- Set `CostKatana-Target-Url` (or `targetUrl` in SDK options) when you use a **non-default base URL** (Azure OpenAI, a private endpoint, another OpenAI-compatible host) or a path the server cannot infer.
558
-
559
- On **Cost Katana’s hosted gateway**, **`/v1/messages` (Anthropic)** needs **no extra SDK or client configuration**: if the server has **no** `ANTHROPIC_API_KEY`, the gateway **automatically** runs Claude on **AWS Bedrock** (Cost Katana’s AWS account/credentials). Your app still calls the normal gateway URL and `gateway.anthropic(...)` as usual. Streaming (`stream: true`) is not supported on that automatic Bedrock path yetβ€”use non-streaming or set `ANTHROPIC_API_KEY` on the server for direct Anthropic streaming.
560
-
561
- ```typescript
562
- import { createGatewayClientFromEnv } from 'cost-katana';
563
-
564
- const gateway = createGatewayClientFromEnv();
565
-
566
- // No target header needed β€” gateway infers Anthropic from /v1/messages
567
- const res = await gateway.anthropic({
568
- model: 'claude-sonnet-4-5-20250929',
569
- max_tokens: 256,
570
- messages: [{ role: 'user', content: 'Hello' }],
571
- });
572
- ```
601
+ - **Quick start:** see [Get started in 60 seconds](#get-started-in-60-seconds) above (`gateway()` or curl).
602
+ - **`CostKatana-Target-Url`:** only needed for non-default upstream URLs (Azure OpenAI, private endpoints). For standard routes (`/v1/chat/completions`, `/v1/messages`, …), **`gateway()`** uses `inferTargetUrl: true` and usually omits it.
603
+ - **Anthropic on hosted gateway:** `gateway.anthropic(...)` / `/v1/messages` often needs no Anthropic key in your app; the service may use Bedrock when no server `ANTHROPIC_API_KEY` is set (see docs for streaming limitations).
604
+ - **Dashboard rows:** gateway traffic reflects **proxied** bodies; `AICostTracker` / `trackUsage` is for **custom** structured logging. Multi-turn and token accounting nuances: [`examples/GATEWAY_USAGE_AND_TRACKING.md`](./examples/GATEWAY_USAGE_AND_TRACKING.md) and [costkatana-examples `2-gateway`](https://github.com/Hypothesize-Tech/costkatana-examples/tree/main/2-gateway).
573
605
 
574
606
  ---
575
607
 
@@ -0,0 +1,8 @@
1
+ import { ProviderConfig, TrackerConfig } from '../types';
2
+ export declare const COST_KATANA_HOSTED_MODELS_PROXY_KEY: "proxy";
3
+ export declare function hasCostKatanaApiKeyInEnv(): boolean;
4
+ export declare function hasDirectProviderApiKeysInEnv(): boolean;
5
+ export declare function costKatanaHostedModelsProviderEntry(): ProviderConfig;
6
+ export declare function detectProvidersFromEnv(): ProviderConfig[];
7
+ export declare function createDefaultTrackerConfig(overrides?: Partial<TrackerConfig>): TrackerConfig;
8
+ //# sourceMappingURL=tracker-defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker-defaults.d.ts","sourceRoot":"","sources":["../../src/config/tracker-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AASzF,eAAO,MAAM,mCAAmC,EAAG,OAAgB,CAAC;AAGpE,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAGD,wBAAgB,6BAA6B,IAAI,OAAO,CAOvD;AAMD,wBAAgB,mCAAmC,IAAI,cAAc,CAKpE;AASD,wBAAgB,sBAAsB,IAAI,cAAc,EAAE,CAwBzD;AAqBD,wBAAgB,0BAA0B,CAAC,SAAS,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,aAAa,CAuBhG"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COST_KATANA_HOSTED_MODELS_PROXY_KEY = void 0;
4
+ exports.hasCostKatanaApiKeyInEnv = hasCostKatanaApiKeyInEnv;
5
+ exports.hasDirectProviderApiKeysInEnv = hasDirectProviderApiKeysInEnv;
6
+ exports.costKatanaHostedModelsProviderEntry = costKatanaHostedModelsProviderEntry;
7
+ exports.detectProvidersFromEnv = detectProvidersFromEnv;
8
+ exports.createDefaultTrackerConfig = createDefaultTrackerConfig;
9
+ const types_1 = require("../types");
10
+ const default_1 = require("./default");
11
+ exports.COST_KATANA_HOSTED_MODELS_PROXY_KEY = 'proxy';
12
+ function hasCostKatanaApiKeyInEnv() {
13
+ return !!(process.env.COST_KATANA_API_KEY || process.env.COSTKATANA_KEY);
14
+ }
15
+ function hasDirectProviderApiKeysInEnv() {
16
+ return !!(process.env.OPENAI_API_KEY ||
17
+ process.env.ANTHROPIC_API_KEY ||
18
+ process.env.GOOGLE_API_KEY ||
19
+ (process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY));
20
+ }
21
+ function costKatanaHostedModelsProviderEntry() {
22
+ return {
23
+ provider: types_1.AIProvider.OpenAI,
24
+ apiKey: exports.COST_KATANA_HOSTED_MODELS_PROXY_KEY
25
+ };
26
+ }
27
+ function detectProvidersFromEnv() {
28
+ const providers = [];
29
+ if (process.env.OPENAI_API_KEY) {
30
+ providers.push({ provider: types_1.AIProvider.OpenAI, apiKey: process.env.OPENAI_API_KEY });
31
+ }
32
+ if (process.env.ANTHROPIC_API_KEY) {
33
+ providers.push({ provider: types_1.AIProvider.Anthropic, apiKey: process.env.ANTHROPIC_API_KEY });
34
+ }
35
+ if (process.env.GOOGLE_API_KEY) {
36
+ providers.push({ provider: types_1.AIProvider.Google, apiKey: process.env.GOOGLE_API_KEY });
37
+ }
38
+ if (process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY) {
39
+ providers.push({
40
+ provider: types_1.AIProvider.AWSBedrock,
41
+ region: process.env.AWS_REGION || 'us-east-1'
42
+ });
43
+ }
44
+ if (providers.length === 0) {
45
+ return [costKatanaHostedModelsProviderEntry()];
46
+ }
47
+ return providers;
48
+ }
49
+ function mergeOptimization(overrides) {
50
+ const base = default_1.defaultConfig.optimization;
51
+ return {
52
+ ...base,
53
+ ...overrides,
54
+ thresholds: {
55
+ ...base.thresholds,
56
+ ...overrides?.thresholds
57
+ }
58
+ };
59
+ }
60
+ function createDefaultTrackerConfig(overrides = {}) {
61
+ const providers = overrides.providers !== undefined ? overrides.providers : detectProvidersFromEnv();
62
+ const optimization = mergeOptimization(overrides.optimization);
63
+ const tracking = {
64
+ retentionDays: 30,
65
+ ...default_1.defaultConfig.tracking,
66
+ ...overrides.tracking
67
+ };
68
+ const alerts = { ...default_1.defaultConfig.alerts, ...overrides.alerts };
69
+ return {
70
+ providers,
71
+ optimization,
72
+ tracking,
73
+ alerts,
74
+ logger: overrides.logger,
75
+ apiUrl: overrides.apiUrl,
76
+ projectId: overrides.projectId
77
+ };
78
+ }
79
+ //# sourceMappingURL=tracker-defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker-defaults.js","sourceRoot":"","sources":["../../src/config/tracker-defaults.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/feedback/client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAyC;IAexE,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,wBAAwB,CAAC;IAqB9B,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,wBAAwB,CAAC;IAqB9B,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAe5C,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAclD,4BAA4B,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAc1D,0BAA0B,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAU/D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/feedback/client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,MAAyC;IAexE,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,wBAAwB,CAAC;IAqB9B,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,wBAAwB,CAAC;IAwB9B,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAe5C,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAclD,4BAA4B,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAc1D,0BAA0B,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAU/D"}
@@ -19,7 +19,7 @@ class FeedbackClient {
19
19
  }
20
20
  async submitFeedback(requestId, feedback) {
21
21
  try {
22
- const response = await this.client.post(`/v1/request/${requestId}/feedback`, feedback);
22
+ const response = await this.client.post(`/request-feedback/${requestId}/feedback`, feedback);
23
23
  return {
24
24
  success: true,
25
25
  message: response.data.message || 'Feedback submitted successfully',
@@ -36,7 +36,7 @@ class FeedbackClient {
36
36
  }
37
37
  async updateImplicitSignals(requestId, signals) {
38
38
  try {
39
- const response = await this.client.put(`/v1/request/${requestId}/implicit-signals`, signals);
39
+ const response = await this.client.put(`/request-feedback/${requestId}/implicit-signals`, signals);
40
40
  return {
41
41
  success: true,
42
42
  message: response.data.message || 'Implicit signals updated successfully',
@@ -53,7 +53,7 @@ class FeedbackClient {
53
53
  }
54
54
  async getFeedback(requestId) {
55
55
  try {
56
- const response = await this.client.get(`/v1/request/${requestId}/feedback`);
56
+ const response = await this.client.get(`/request-feedback/${requestId}/feedback`);
57
57
  return response.data.data;
58
58
  }
59
59
  catch (error) {
@@ -65,7 +65,7 @@ class FeedbackClient {
65
65
  }
66
66
  async getFeedbackAnalytics() {
67
67
  try {
68
- const response = await this.client.get('/v1/feedback/analytics');
68
+ const response = await this.client.get('/request-feedback/analytics');
69
69
  return response.data.data;
70
70
  }
71
71
  catch (error) {
@@ -83,7 +83,7 @@ class FeedbackClient {
83
83
  }
84
84
  async getGlobalFeedbackAnalytics() {
85
85
  try {
86
- const response = await this.client.get('/v1/feedback/analytics/global');
86
+ const response = await this.client.get('/request-feedback/analytics/global');
87
87
  return response.data.data;
88
88
  }
89
89
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/feedback/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/feedback/client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { ClientSideRequestData } from '../interceptors/comprehensive-tracking.interceptor';
2
- import { GatewayConfig, GatewayRequestOptions, GatewayResponse, GatewayStats, CacheStats, AgentTraceSummary, AgentTraceDetails, OpenAIRequest, AnthropicRequest, GoogleAIRequest, CohereRequest, ProxyKeyInfo, FirewallOptions, ProxyKeyUsageOptions, FirewallAnalytics, SastConfig } from '../types/gateway';
2
+ import { GatewayConfig, GatewayRequestOptions, GatewayResponse, GatewayStats, CacheStats, AgentTraceSummary, AgentTraceDetails, OpenAIRequest, AnthropicRequest, GoogleAIRequest, CohereRequest, ProxyKeyInfo, FirewallOptions, ProxyKeyUsageOptions, FirewallAnalytics, GatewaySecuritySummary, SastConfig } from '../types/gateway';
3
3
  export declare class GatewayClient {
4
4
  private config;
5
5
  private client;
@@ -13,6 +13,7 @@ export declare class GatewayClient {
13
13
  makeRequest(endpoint: string, data: any, options?: GatewayRequestOptions): Promise<GatewayResponse>;
14
14
  getStats(): Promise<GatewayStats>;
15
15
  getCacheStats(): Promise<CacheStats>;
16
+ getSecuritySummary(): Promise<GatewaySecuritySummary>;
16
17
  clearCache(options?: {
17
18
  userScope?: string;
18
19
  expired?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,12 @@ class GatewayClient {
73
73
  this.config.firewall.openaiThreshold.toString();
74
74
  }
75
75
  }
76
+ if (this.config.securityEnabled === false) {
77
+ requestConfig.headers['CostKatana-LLM-Security-Enabled'] = 'false';
78
+ }
79
+ if (this.config.outputModerationEnabled === false) {
80
+ requestConfig.headers['CostKatana-Output-Moderation-Enabled'] = 'false';
81
+ }
76
82
  requestConfig.headers['CostKatana-Auto-Track'] = 'true';
77
83
  return requestConfig;
78
84
  });
@@ -174,6 +180,16 @@ class GatewayClient {
174
180
  throw error;
175
181
  }
176
182
  }
183
+ async getSecuritySummary() {
184
+ try {
185
+ const response = await this.client.get('/security/summary');
186
+ return response.data.data;
187
+ }
188
+ catch (error) {
189
+ logger_1.logger.error('Failed to get gateway security summary', error);
190
+ throw error;
191
+ }
192
+ }
177
193
  async clearCache(options = {}) {
178
194
  try {
179
195
  const params = new URLSearchParams();
@@ -324,8 +340,23 @@ class GatewayClient {
324
340
  headers['CostKatana-Omit-Request'] = 'true';
325
341
  if (options.omitResponse)
326
342
  headers['CostKatana-Omit-Response'] = 'true';
327
- if (options.security)
343
+ const securityDisabled = options.security === false ||
344
+ (options.security === undefined && this.config.securityEnabled === false);
345
+ if (securityDisabled) {
346
+ headers['CostKatana-LLM-Security-Enabled'] = 'false';
347
+ }
348
+ else if (options.security === true) {
328
349
  headers['CostKatana-LLM-Security-Enabled'] = 'true';
350
+ }
351
+ const outputModerationDisabled = options.outputModeration === false ||
352
+ (options.outputModeration === undefined &&
353
+ this.config.outputModerationEnabled === false);
354
+ if (outputModerationDisabled) {
355
+ headers['CostKatana-Output-Moderation-Enabled'] = 'false';
356
+ }
357
+ else if (options.outputModeration === true) {
358
+ headers['CostKatana-Output-Moderation-Enabled'] = 'true';
359
+ }
329
360
  if (options.firewall !== undefined) {
330
361
  if (typeof options.firewall === 'boolean') {
331
362
  headers['CostKatana-Firewall-Enabled'] = options.firewall.toString();