@axonflow/sdk 2.3.0 → 3.3.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 (126) hide show
  1. package/README.md +185 -8
  2. package/dist/cjs/client.d.ts +487 -8
  3. package/dist/cjs/client.d.ts.map +1 -1
  4. package/dist/cjs/client.js +1672 -45
  5. package/dist/cjs/client.js.map +1 -1
  6. package/dist/cjs/errors.d.ts +22 -0
  7. package/dist/cjs/errors.d.ts.map +1 -1
  8. package/dist/cjs/errors.js +32 -1
  9. package/dist/cjs/errors.js.map +1 -1
  10. package/dist/cjs/index.d.ts +10 -14
  11. package/dist/cjs/index.d.ts.map +1 -1
  12. package/dist/cjs/index.js +11 -20
  13. package/dist/cjs/index.js.map +1 -1
  14. package/dist/cjs/types/connector.d.ts +54 -0
  15. package/dist/cjs/types/connector.d.ts.map +1 -1
  16. package/dist/cjs/types/connector.js +7 -0
  17. package/dist/cjs/types/connector.js.map +1 -1
  18. package/dist/cjs/types/execution.d.ts +227 -0
  19. package/dist/cjs/types/execution.d.ts.map +1 -0
  20. package/dist/cjs/types/execution.js +73 -0
  21. package/dist/cjs/types/execution.js.map +1 -0
  22. package/dist/cjs/types/index.d.ts +3 -0
  23. package/dist/cjs/types/index.d.ts.map +1 -1
  24. package/dist/cjs/types/index.js +3 -0
  25. package/dist/cjs/types/index.js.map +1 -1
  26. package/dist/cjs/types/masfeat.d.ts +238 -0
  27. package/dist/cjs/types/masfeat.d.ts.map +1 -0
  28. package/dist/cjs/types/masfeat.js +11 -0
  29. package/dist/cjs/types/masfeat.js.map +1 -0
  30. package/dist/cjs/types/planning.d.ts +126 -1
  31. package/dist/cjs/types/planning.d.ts.map +1 -1
  32. package/dist/cjs/types/policies.d.ts +19 -1
  33. package/dist/cjs/types/policies.d.ts.map +1 -1
  34. package/dist/cjs/types/proxy.d.ts +29 -3
  35. package/dist/cjs/types/proxy.d.ts.map +1 -1
  36. package/dist/cjs/types/workflows.d.ts +318 -0
  37. package/dist/cjs/types/workflows.d.ts.map +1 -0
  38. package/dist/cjs/types/workflows.js +61 -0
  39. package/dist/cjs/types/workflows.js.map +1 -0
  40. package/dist/esm/client.d.ts +487 -8
  41. package/dist/esm/client.d.ts.map +1 -1
  42. package/dist/esm/client.js +1673 -46
  43. package/dist/esm/client.js.map +1 -1
  44. package/dist/esm/errors.d.ts +22 -0
  45. package/dist/esm/errors.d.ts.map +1 -1
  46. package/dist/esm/errors.js +30 -0
  47. package/dist/esm/errors.js.map +1 -1
  48. package/dist/esm/index.d.ts +10 -14
  49. package/dist/esm/index.d.ts.map +1 -1
  50. package/dist/esm/index.js +7 -15
  51. package/dist/esm/index.js.map +1 -1
  52. package/dist/esm/types/connector.d.ts +54 -0
  53. package/dist/esm/types/connector.d.ts.map +1 -1
  54. package/dist/esm/types/connector.js +6 -1
  55. package/dist/esm/types/connector.js.map +1 -1
  56. package/dist/esm/types/execution.d.ts +227 -0
  57. package/dist/esm/types/execution.d.ts.map +1 -0
  58. package/dist/esm/types/execution.js +70 -0
  59. package/dist/esm/types/execution.js.map +1 -0
  60. package/dist/esm/types/index.d.ts +3 -0
  61. package/dist/esm/types/index.d.ts.map +1 -1
  62. package/dist/esm/types/index.js +3 -0
  63. package/dist/esm/types/index.js.map +1 -1
  64. package/dist/esm/types/masfeat.d.ts +238 -0
  65. package/dist/esm/types/masfeat.d.ts.map +1 -0
  66. package/dist/esm/types/masfeat.js +10 -0
  67. package/dist/esm/types/masfeat.js.map +1 -0
  68. package/dist/esm/types/planning.d.ts +126 -1
  69. package/dist/esm/types/planning.d.ts.map +1 -1
  70. package/dist/esm/types/policies.d.ts +19 -1
  71. package/dist/esm/types/policies.d.ts.map +1 -1
  72. package/dist/esm/types/proxy.d.ts +29 -3
  73. package/dist/esm/types/proxy.d.ts.map +1 -1
  74. package/dist/esm/types/workflows.d.ts +318 -0
  75. package/dist/esm/types/workflows.d.ts.map +1 -0
  76. package/dist/esm/types/workflows.js +58 -0
  77. package/dist/esm/types/workflows.js.map +1 -0
  78. package/package.json +7 -2
  79. package/dist/cjs/interceptors/anthropic.d.ts +0 -40
  80. package/dist/cjs/interceptors/anthropic.d.ts.map +0 -1
  81. package/dist/cjs/interceptors/anthropic.js +0 -101
  82. package/dist/cjs/interceptors/anthropic.js.map +0 -1
  83. package/dist/cjs/interceptors/base.d.ts +0 -23
  84. package/dist/cjs/interceptors/base.d.ts.map +0 -1
  85. package/dist/cjs/interceptors/base.js +0 -10
  86. package/dist/cjs/interceptors/base.js.map +0 -1
  87. package/dist/cjs/interceptors/bedrock.d.ts +0 -142
  88. package/dist/cjs/interceptors/bedrock.d.ts.map +0 -1
  89. package/dist/cjs/interceptors/bedrock.js +0 -263
  90. package/dist/cjs/interceptors/bedrock.js.map +0 -1
  91. package/dist/cjs/interceptors/gemini.d.ts +0 -89
  92. package/dist/cjs/interceptors/gemini.d.ts.map +0 -1
  93. package/dist/cjs/interceptors/gemini.js +0 -121
  94. package/dist/cjs/interceptors/gemini.js.map +0 -1
  95. package/dist/cjs/interceptors/ollama.d.ts +0 -143
  96. package/dist/cjs/interceptors/ollama.d.ts.map +0 -1
  97. package/dist/cjs/interceptors/ollama.js +0 -153
  98. package/dist/cjs/interceptors/ollama.js.map +0 -1
  99. package/dist/cjs/interceptors/openai.d.ts +0 -40
  100. package/dist/cjs/interceptors/openai.d.ts.map +0 -1
  101. package/dist/cjs/interceptors/openai.js +0 -100
  102. package/dist/cjs/interceptors/openai.js.map +0 -1
  103. package/dist/esm/interceptors/anthropic.d.ts +0 -40
  104. package/dist/esm/interceptors/anthropic.d.ts.map +0 -1
  105. package/dist/esm/interceptors/anthropic.js +0 -96
  106. package/dist/esm/interceptors/anthropic.js.map +0 -1
  107. package/dist/esm/interceptors/base.d.ts +0 -23
  108. package/dist/esm/interceptors/base.d.ts.map +0 -1
  109. package/dist/esm/interceptors/base.js +0 -6
  110. package/dist/esm/interceptors/base.js.map +0 -1
  111. package/dist/esm/interceptors/bedrock.d.ts +0 -142
  112. package/dist/esm/interceptors/bedrock.d.ts.map +0 -1
  113. package/dist/esm/interceptors/bedrock.js +0 -224
  114. package/dist/esm/interceptors/bedrock.js.map +0 -1
  115. package/dist/esm/interceptors/gemini.d.ts +0 -89
  116. package/dist/esm/interceptors/gemini.d.ts.map +0 -1
  117. package/dist/esm/interceptors/gemini.js +0 -116
  118. package/dist/esm/interceptors/gemini.js.map +0 -1
  119. package/dist/esm/interceptors/ollama.d.ts +0 -143
  120. package/dist/esm/interceptors/ollama.d.ts.map +0 -1
  121. package/dist/esm/interceptors/ollama.js +0 -147
  122. package/dist/esm/interceptors/ollama.js.map +0 -1
  123. package/dist/esm/interceptors/openai.d.ts +0 -40
  124. package/dist/esm/interceptors/openai.d.ts.map +0 -1
  125. package/dist/esm/interceptors/openai.js +0 -95
  126. package/dist/esm/interceptors/openai.js.map +0 -1
@@ -1,143 +0,0 @@
1
- import { BaseInterceptor } from './base';
2
- import { AIRequest } from '../types';
3
- /**
4
- * Interceptor for Ollama API calls
5
- *
6
- * Ollama is a local LLM server that runs on localhost:11434 by default.
7
- * No authentication is required.
8
- *
9
- * @example
10
- * ```typescript
11
- * import { AxonFlow, wrapOllamaClient } from '@axonflow/sdk';
12
- * import Ollama from 'ollama';
13
- *
14
- * const ollama = new Ollama({ host: 'http://localhost:11434' });
15
- * const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
16
- *
17
- * const wrapped = wrapOllamaClient(ollama, axonflow);
18
- * const response = await wrapped.chat({
19
- * model: 'llama2',
20
- * messages: [{ role: 'user', content: 'Hello!' }]
21
- * });
22
- * ```
23
- */
24
- export declare class OllamaInterceptor extends BaseInterceptor {
25
- canHandle(aiCall: any): boolean;
26
- extractRequest(aiCall: any): AIRequest;
27
- executeWithModifications(aiCall: any, _modifications: any): Promise<any>;
28
- getProvider(): string;
29
- }
30
- /**
31
- * Ollama chat message
32
- */
33
- export interface OllamaMessage {
34
- role: 'system' | 'user' | 'assistant';
35
- content: string;
36
- images?: string[];
37
- }
38
- /**
39
- * Ollama chat request
40
- */
41
- export interface OllamaChatRequest {
42
- model: string;
43
- messages: OllamaMessage[];
44
- stream?: boolean;
45
- format?: 'json';
46
- options?: {
47
- temperature?: number;
48
- top_p?: number;
49
- top_k?: number;
50
- num_predict?: number;
51
- stop?: string[];
52
- };
53
- }
54
- /**
55
- * Ollama chat response
56
- */
57
- export interface OllamaChatResponse {
58
- model: string;
59
- created_at: string;
60
- message: OllamaMessage;
61
- done: boolean;
62
- total_duration?: number;
63
- load_duration?: number;
64
- prompt_eval_count?: number;
65
- prompt_eval_duration?: number;
66
- eval_count?: number;
67
- eval_duration?: number;
68
- }
69
- /**
70
- * Ollama generate request (for completions)
71
- */
72
- export interface OllamaGenerateRequest {
73
- model: string;
74
- prompt: string;
75
- stream?: boolean;
76
- format?: 'json';
77
- options?: {
78
- temperature?: number;
79
- top_p?: number;
80
- top_k?: number;
81
- num_predict?: number;
82
- stop?: string[];
83
- };
84
- }
85
- /**
86
- * Ollama generate response
87
- */
88
- export interface OllamaGenerateResponse {
89
- model: string;
90
- created_at: string;
91
- response: string;
92
- done: boolean;
93
- total_duration?: number;
94
- load_duration?: number;
95
- prompt_eval_count?: number;
96
- prompt_eval_duration?: number;
97
- eval_count?: number;
98
- eval_duration?: number;
99
- }
100
- /**
101
- * Wraps an Ollama client with AxonFlow governance.
102
- *
103
- * @deprecated This function is deprecated and will be removed in v2.0.0.
104
- * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
105
- *
106
- * Use Gateway Mode or Proxy Mode instead:
107
- *
108
- * Gateway Mode (recommended):
109
- * ```typescript
110
- * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
111
- * const response = await ollama.chat({ model: 'llama2', messages: [...] });
112
- * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
113
- * ```
114
- *
115
- * Proxy Mode:
116
- * ```typescript
117
- * const response = await axonflow.executeQuery({
118
- * query,
119
- * userToken,
120
- * context: { provider: 'ollama', model: 'llama2' }
121
- * });
122
- * ```
123
- *
124
- * See: https://docs.getaxonflow.com/sdk/gateway-mode
125
- */
126
- export declare function wrapOllamaClient(ollamaClient: any, axonflow: any): any;
127
- /**
128
- * Creates a governed Ollama chat function.
129
- *
130
- * Use this when you want fine-grained control over individual calls
131
- * rather than wrapping the entire client.
132
- *
133
- * @example
134
- * ```typescript
135
- * const governedChat = createGovernedOllamaChat(ollamaClient, axonflow, 'user-123');
136
- * const response = await governedChat({
137
- * model: 'llama2',
138
- * messages: [{ role: 'user', content: 'Hello!' }]
139
- * });
140
- * ```
141
- */
142
- export declare function createGovernedOllamaChat(ollamaClient: any, axonflow: any, userToken?: string): (request: OllamaChatRequest) => Promise<OllamaChatResponse>;
143
- //# sourceMappingURL=ollama.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/interceptors/ollama.ts"],"names":[],"mappings":"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"}
@@ -1,147 +0,0 @@
1
- import { BaseInterceptor } from './base.js';
2
- /**
3
- * Interceptor for Ollama API calls
4
- *
5
- * Ollama is a local LLM server that runs on localhost:11434 by default.
6
- * No authentication is required.
7
- *
8
- * @example
9
- * ```typescript
10
- * import { AxonFlow, wrapOllamaClient } from '@axonflow/sdk';
11
- * import Ollama from 'ollama';
12
- *
13
- * const ollama = new Ollama({ host: 'http://localhost:11434' });
14
- * const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
15
- *
16
- * const wrapped = wrapOllamaClient(ollama, axonflow);
17
- * const response = await wrapped.chat({
18
- * model: 'llama2',
19
- * messages: [{ role: 'user', content: 'Hello!' }]
20
- * });
21
- * ```
22
- */
23
- export class OllamaInterceptor extends BaseInterceptor {
24
- canHandle(aiCall) {
25
- const callString = aiCall.toString();
26
- return (callString.includes('ollama') ||
27
- callString.includes('llama') ||
28
- callString.includes('mistral') ||
29
- callString.includes('codellama') ||
30
- callString.includes('localhost:11434'));
31
- }
32
- extractRequest(aiCall) {
33
- const callString = aiCall.toString();
34
- let model = 'llama2';
35
- if (callString.includes('mistral')) {
36
- model = 'mistral';
37
- }
38
- else if (callString.includes('codellama')) {
39
- model = 'codellama';
40
- }
41
- else if (callString.includes('llama3')) {
42
- model = 'llama3';
43
- }
44
- return {
45
- provider: 'ollama',
46
- model,
47
- prompt: callString,
48
- parameters: {},
49
- };
50
- }
51
- executeWithModifications(aiCall, _modifications) {
52
- return aiCall();
53
- }
54
- getProvider() {
55
- return 'ollama';
56
- }
57
- }
58
- /**
59
- * Wraps an Ollama client with AxonFlow governance.
60
- *
61
- * @deprecated This function is deprecated and will be removed in v2.0.0.
62
- * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
63
- *
64
- * Use Gateway Mode or Proxy Mode instead:
65
- *
66
- * Gateway Mode (recommended):
67
- * ```typescript
68
- * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
69
- * const response = await ollama.chat({ model: 'llama2', messages: [...] });
70
- * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
71
- * ```
72
- *
73
- * Proxy Mode:
74
- * ```typescript
75
- * const response = await axonflow.executeQuery({
76
- * query,
77
- * userToken,
78
- * context: { provider: 'ollama', model: 'llama2' }
79
- * });
80
- * ```
81
- *
82
- * See: https://docs.getaxonflow.com/sdk/gateway-mode
83
- */
84
- export function wrapOllamaClient(ollamaClient, axonflow) {
85
- console.warn('[AxonFlow] wrapOllamaClient is deprecated and will be removed in v2.0.0. ' +
86
- 'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
87
- 'See: https://docs.getaxonflow.com/sdk/gateway-mode');
88
- return new Proxy(ollamaClient, {
89
- get(target, prop, receiver) {
90
- const original = Reflect.get(target, prop, receiver);
91
- // Intercept chat and generate methods
92
- if (typeof original === 'function' && ['chat', 'generate'].includes(prop.toString())) {
93
- return async (...args) => {
94
- return axonflow.protect(() => original.apply(target, args));
95
- };
96
- }
97
- return original;
98
- },
99
- });
100
- }
101
- /**
102
- * Creates a governed Ollama chat function.
103
- *
104
- * Use this when you want fine-grained control over individual calls
105
- * rather than wrapping the entire client.
106
- *
107
- * @example
108
- * ```typescript
109
- * const governedChat = createGovernedOllamaChat(ollamaClient, axonflow, 'user-123');
110
- * const response = await governedChat({
111
- * model: 'llama2',
112
- * messages: [{ role: 'user', content: 'Hello!' }]
113
- * });
114
- * ```
115
- */
116
- export function createGovernedOllamaChat(ollamaClient, axonflow, userToken = '') {
117
- return async (request) => {
118
- // Extract prompt from messages
119
- const prompt = request.messages.map(m => m.content).join(' ');
120
- // Pre-check with AxonFlow
121
- const preCheck = await axonflow.getPolicyApprovedContext({
122
- userToken,
123
- query: prompt,
124
- context: {
125
- provider: 'ollama',
126
- model: request.model,
127
- },
128
- });
129
- if (!preCheck.approved) {
130
- throw new Error(`Request blocked by policy: ${preCheck.blockReason}`);
131
- }
132
- // Execute the call
133
- const startTime = Date.now();
134
- const response = await ollamaClient.chat(request);
135
- const latencyMs = Date.now() - startTime;
136
- // Audit the call
137
- if (preCheck.contextId) {
138
- await axonflow.auditLLMCall(preCheck.contextId, response.message?.content?.substring(0, 200) || '', 'ollama', request.model, {
139
- promptTokens: response.prompt_eval_count || 0,
140
- completionTokens: response.eval_count || 0,
141
- totalTokens: (response.prompt_eval_count || 0) + (response.eval_count || 0),
142
- }, latencyMs);
143
- }
144
- return response;
145
- };
146
- }
147
- //# sourceMappingURL=ollama.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/interceptors/ollama.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- import { BaseInterceptor } from './base';
2
- import { AIRequest } from '../types';
3
- /**
4
- * Interceptor for OpenAI API calls
5
- */
6
- export declare class OpenAIInterceptor extends BaseInterceptor {
7
- canHandle(aiCall: any): boolean;
8
- extractRequest(aiCall: any): AIRequest;
9
- executeWithModifications(aiCall: any, _modifications: any): Promise<any>;
10
- getProvider(): string;
11
- }
12
- /**
13
- * Helper to wrap OpenAI client for easier interception
14
- *
15
- * @deprecated This function is deprecated and will be removed in v2.0.0.
16
- * Modern OpenAI SDK versions (v4+) use private class fields that are incompatible
17
- * with JavaScript Proxy-based wrapping.
18
- *
19
- * Use Gateway Mode or Proxy Mode instead:
20
- *
21
- * Gateway Mode (recommended):
22
- * ```typescript
23
- * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
24
- * const response = await openai.chat.completions.create({ ... });
25
- * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
26
- * ```
27
- *
28
- * Proxy Mode:
29
- * ```typescript
30
- * const response = await axonflow.executeQuery({
31
- * query,
32
- * userToken,
33
- * context: { provider: 'openai', model: 'gpt-4' }
34
- * });
35
- * ```
36
- *
37
- * See: https://docs.getaxonflow.com/sdk/gateway-mode
38
- */
39
- export declare function wrapOpenAIClient(openaiClient: any, axonflow: any): any;
40
- //# sourceMappingURL=openai.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/interceptors/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;IAW/B,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS;IAuBtC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAMxE,WAAW,IAAI,MAAM;CAGtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG,CA8BtE"}
@@ -1,95 +0,0 @@
1
- import { BaseInterceptor } from './base.js';
2
- /**
3
- * Interceptor for OpenAI API calls
4
- */
5
- export class OpenAIInterceptor extends BaseInterceptor {
6
- canHandle(aiCall) {
7
- // Check if this looks like an OpenAI call
8
- const callString = aiCall.toString();
9
- return (callString.includes('openai') ||
10
- callString.includes('createCompletion') ||
11
- callString.includes('createChatCompletion') ||
12
- callString.includes('gpt'));
13
- }
14
- extractRequest(aiCall) {
15
- // Try to extract OpenAI-specific details
16
- // This is simplified - in production, we'd use more sophisticated parsing
17
- const callString = aiCall.toString();
18
- // Try to detect model
19
- let model = 'unknown';
20
- if (callString.includes('gpt-4')) {
21
- model = 'gpt-4';
22
- }
23
- else if (callString.includes('gpt-3.5')) {
24
- model = 'gpt-3.5-turbo';
25
- }
26
- return {
27
- provider: 'openai',
28
- model,
29
- prompt: callString,
30
- parameters: {
31
- // Would extract temperature, max_tokens, etc. in production
32
- },
33
- };
34
- }
35
- executeWithModifications(aiCall, _modifications) {
36
- // Execute the call with any modifications from governance
37
- // In production, this would apply actual modifications
38
- return aiCall();
39
- }
40
- getProvider() {
41
- return 'openai';
42
- }
43
- }
44
- /**
45
- * Helper to wrap OpenAI client for easier interception
46
- *
47
- * @deprecated This function is deprecated and will be removed in v2.0.0.
48
- * Modern OpenAI SDK versions (v4+) use private class fields that are incompatible
49
- * with JavaScript Proxy-based wrapping.
50
- *
51
- * Use Gateway Mode or Proxy Mode instead:
52
- *
53
- * Gateway Mode (recommended):
54
- * ```typescript
55
- * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
56
- * const response = await openai.chat.completions.create({ ... });
57
- * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
58
- * ```
59
- *
60
- * Proxy Mode:
61
- * ```typescript
62
- * const response = await axonflow.executeQuery({
63
- * query,
64
- * userToken,
65
- * context: { provider: 'openai', model: 'gpt-4' }
66
- * });
67
- * ```
68
- *
69
- * See: https://docs.getaxonflow.com/sdk/gateway-mode
70
- */
71
- export function wrapOpenAIClient(openaiClient, axonflow) {
72
- console.warn('[AxonFlow] wrapOpenAIClient is deprecated and will be removed in v2.0.0. ' +
73
- 'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
74
- 'See: https://docs.getaxonflow.com/sdk/gateway-mode');
75
- // Create a proxy that intercepts method calls
76
- return new Proxy(openaiClient, {
77
- get(target, prop, receiver) {
78
- const original = Reflect.get(target, prop, receiver);
79
- // If it's a function that makes API calls
80
- if (typeof original === 'function' &&
81
- ['createCompletion', 'createChatCompletion', 'createEdit'].includes(prop.toString())) {
82
- return async (...args) => {
83
- // Protect the call with AxonFlow
84
- return axonflow.protect(() => original.apply(target, args));
85
- };
86
- }
87
- // For nested objects (like openai.chat.completions)
88
- if (typeof original === 'object' && original !== null) {
89
- return wrapOpenAIClient(original, axonflow);
90
- }
91
- return original;
92
- },
93
- });
94
- }
95
- //# sourceMappingURL=openai.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/interceptors/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGzC;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,SAAS,CAAC,MAAW;QACnB,0CAA0C;QAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,CACL,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7B,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACvC,UAAU,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC3C,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC3B,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,MAAW;QACxB,yCAAyC;QACzC,0EAA0E;QAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAErC,sBAAsB;QACtB,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,KAAK,GAAG,OAAO,CAAC;QAClB,CAAC;aAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,KAAK,GAAG,eAAe,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE;YACV,4DAA4D;aAC7D;SACF,CAAC;IACJ,CAAC;IAED,wBAAwB,CAAC,MAAW,EAAE,cAAmB;QACvD,0DAA0D;QAC1D,uDAAuD;QACvD,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,WAAW;QACT,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAiB,EAAE,QAAa;IAC/D,OAAO,CAAC,IAAI,CACV,2EAA2E;QACzE,mGAAmG;QACnG,oDAAoD,CACvD,CAAC;IACF,8CAA8C;IAC9C,OAAO,IAAI,KAAK,CAAC,YAAY,EAAE;QAC7B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAErD,0CAA0C;YAC1C,IACE,OAAO,QAAQ,KAAK,UAAU;gBAC9B,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACpF,CAAC;gBACD,OAAO,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;oBAC9B,iCAAiC;oBACjC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC9D,CAAC,CAAC;YACJ,CAAC;YAED,oDAAoD;YACpD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}