@axonflow/sdk 1.2.1 → 1.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 (58) hide show
  1. package/README.md +119 -0
  2. package/dist/cjs/client.d.ts +42 -1
  3. package/dist/cjs/client.d.ts.map +1 -1
  4. package/dist/cjs/client.js +167 -0
  5. package/dist/cjs/client.js.map +1 -1
  6. package/dist/cjs/index.d.ts +5 -2
  7. package/dist/cjs/index.d.ts.map +1 -1
  8. package/dist/cjs/index.js +8 -2
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/interceptors/bedrock.d.ts +141 -0
  11. package/dist/cjs/interceptors/bedrock.d.ts.map +1 -0
  12. package/dist/cjs/interceptors/bedrock.js +259 -0
  13. package/dist/cjs/interceptors/bedrock.js.map +1 -0
  14. package/dist/cjs/interceptors/gemini.d.ts +81 -0
  15. package/dist/cjs/interceptors/gemini.d.ts.map +1 -0
  16. package/dist/cjs/interceptors/gemini.js +110 -0
  17. package/dist/cjs/interceptors/gemini.js.map +1 -0
  18. package/dist/cjs/interceptors/ollama.d.ts +143 -0
  19. package/dist/cjs/interceptors/ollama.d.ts.map +1 -0
  20. package/dist/cjs/interceptors/ollama.js +150 -0
  21. package/dist/cjs/interceptors/ollama.js.map +1 -0
  22. package/dist/cjs/types/index.d.ts +1 -0
  23. package/dist/cjs/types/index.d.ts.map +1 -1
  24. package/dist/cjs/types/index.js +1 -0
  25. package/dist/cjs/types/index.js.map +1 -1
  26. package/dist/cjs/types/proxy.d.ts +78 -0
  27. package/dist/cjs/types/proxy.d.ts.map +1 -0
  28. package/dist/cjs/types/proxy.js +9 -0
  29. package/dist/cjs/types/proxy.js.map +1 -0
  30. package/dist/esm/client.d.ts +42 -1
  31. package/dist/esm/client.d.ts.map +1 -1
  32. package/dist/esm/client.js +168 -1
  33. package/dist/esm/client.js.map +1 -1
  34. package/dist/esm/index.d.ts +5 -2
  35. package/dist/esm/index.d.ts.map +1 -1
  36. package/dist/esm/index.js +4 -1
  37. package/dist/esm/index.js.map +1 -1
  38. package/dist/esm/interceptors/bedrock.d.ts +141 -0
  39. package/dist/esm/interceptors/bedrock.d.ts.map +1 -0
  40. package/dist/esm/interceptors/bedrock.js +220 -0
  41. package/dist/esm/interceptors/bedrock.js.map +1 -0
  42. package/dist/esm/interceptors/gemini.d.ts +81 -0
  43. package/dist/esm/interceptors/gemini.d.ts.map +1 -0
  44. package/dist/esm/interceptors/gemini.js +105 -0
  45. package/dist/esm/interceptors/gemini.js.map +1 -0
  46. package/dist/esm/interceptors/ollama.d.ts +143 -0
  47. package/dist/esm/interceptors/ollama.d.ts.map +1 -0
  48. package/dist/esm/interceptors/ollama.js +144 -0
  49. package/dist/esm/interceptors/ollama.js.map +1 -0
  50. package/dist/esm/types/index.d.ts +1 -0
  51. package/dist/esm/types/index.d.ts.map +1 -1
  52. package/dist/esm/types/index.js +1 -0
  53. package/dist/esm/types/index.js.map +1 -1
  54. package/dist/esm/types/proxy.d.ts +78 -0
  55. package/dist/esm/types/proxy.d.ts.map +1 -0
  56. package/dist/esm/types/proxy.js +8 -0
  57. package/dist/esm/types/proxy.js.map +1 -0
  58. package/package.json +2 -1
@@ -0,0 +1,143 @@
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
+ * @example
104
+ * ```typescript
105
+ * import Ollama from 'ollama';
106
+ * import { AxonFlow, wrapOllamaClient } from '@axonflow/sdk';
107
+ *
108
+ * const ollama = new Ollama({ host: 'http://localhost:11434' });
109
+ * const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
110
+ *
111
+ * const wrapped = wrapOllamaClient(ollama, axonflow);
112
+ *
113
+ * // Chat API
114
+ * const chatResponse = await wrapped.chat({
115
+ * model: 'llama2',
116
+ * messages: [{ role: 'user', content: 'What is AI governance?' }]
117
+ * });
118
+ *
119
+ * // Generate API
120
+ * const genResponse = await wrapped.generate({
121
+ * model: 'llama2',
122
+ * prompt: 'What is AI governance?'
123
+ * });
124
+ * ```
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/interceptors/ollama.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
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
+ * @example
62
+ * ```typescript
63
+ * import Ollama from 'ollama';
64
+ * import { AxonFlow, wrapOllamaClient } from '@axonflow/sdk';
65
+ *
66
+ * const ollama = new Ollama({ host: 'http://localhost:11434' });
67
+ * const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
68
+ *
69
+ * const wrapped = wrapOllamaClient(ollama, axonflow);
70
+ *
71
+ * // Chat API
72
+ * const chatResponse = await wrapped.chat({
73
+ * model: 'llama2',
74
+ * messages: [{ role: 'user', content: 'What is AI governance?' }]
75
+ * });
76
+ *
77
+ * // Generate API
78
+ * const genResponse = await wrapped.generate({
79
+ * model: 'llama2',
80
+ * prompt: 'What is AI governance?'
81
+ * });
82
+ * ```
83
+ */
84
+ export function wrapOllamaClient(ollamaClient, axonflow) {
85
+ return new Proxy(ollamaClient, {
86
+ get(target, prop, receiver) {
87
+ const original = Reflect.get(target, prop, receiver);
88
+ // Intercept chat and generate methods
89
+ if (typeof original === 'function' && ['chat', 'generate'].includes(prop.toString())) {
90
+ return async (...args) => {
91
+ return axonflow.protect(() => original.apply(target, args));
92
+ };
93
+ }
94
+ return original;
95
+ },
96
+ });
97
+ }
98
+ /**
99
+ * Creates a governed Ollama chat function.
100
+ *
101
+ * Use this when you want fine-grained control over individual calls
102
+ * rather than wrapping the entire client.
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * const governedChat = createGovernedOllamaChat(ollamaClient, axonflow, 'user-123');
107
+ * const response = await governedChat({
108
+ * model: 'llama2',
109
+ * messages: [{ role: 'user', content: 'Hello!' }]
110
+ * });
111
+ * ```
112
+ */
113
+ export function createGovernedOllamaChat(ollamaClient, axonflow, userToken = '') {
114
+ return async (request) => {
115
+ // Extract prompt from messages
116
+ const prompt = request.messages.map(m => m.content).join(' ');
117
+ // Pre-check with AxonFlow
118
+ const preCheck = await axonflow.getPolicyApprovedContext({
119
+ userToken,
120
+ query: prompt,
121
+ context: {
122
+ provider: 'ollama',
123
+ model: request.model,
124
+ },
125
+ });
126
+ if (!preCheck.approved) {
127
+ throw new Error(`Request blocked by policy: ${preCheck.blockReason}`);
128
+ }
129
+ // Execute the call
130
+ const startTime = Date.now();
131
+ const response = await ollamaClient.chat(request);
132
+ const latencyMs = Date.now() - startTime;
133
+ // Audit the call
134
+ if (preCheck.contextId) {
135
+ await axonflow.auditLLMCall(preCheck.contextId, response.message?.content?.substring(0, 200) || '', 'ollama', request.model, {
136
+ promptTokens: response.prompt_eval_count || 0,
137
+ completionTokens: response.eval_count || 0,
138
+ totalTokens: (response.prompt_eval_count || 0) + (response.eval_count || 0),
139
+ }, latencyMs);
140
+ }
141
+ return response;
142
+ };
143
+ }
144
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/interceptors/ollama.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@ export * from './policy';
5
5
  export * from './connector';
6
6
  export * from './planning';
7
7
  export * from './gateway';
8
+ export * from './proxy';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
@@ -5,4 +5,5 @@ export * from './policy.js';
5
5
  export * from './connector.js';
6
6
  export * from './planning.js';
7
7
  export * from './gateway.js';
8
+ export * from './proxy.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Proxy Mode Types
3
+ *
4
+ * Proxy Mode routes requests through AxonFlow's /api/request endpoint,
5
+ * allowing AxonFlow to handle policy enforcement and optional LLM routing.
6
+ */
7
+ /**
8
+ * Request type for executeQuery
9
+ */
10
+ export type RequestType = 'chat' | 'sql' | 'mcp-query' | 'multi-agent-plan' | 'execute-plan';
11
+ /**
12
+ * Options for executing a query through AxonFlow proxy
13
+ */
14
+ export interface ExecuteQueryOptions {
15
+ /** User authentication token (JWT or session token) */
16
+ userToken: string;
17
+ /** The query or prompt to process */
18
+ query: string;
19
+ /** Type of request */
20
+ requestType: RequestType;
21
+ /** Additional context for policy evaluation and processing */
22
+ context?: Record<string, unknown>;
23
+ }
24
+ /**
25
+ * Policy evaluation information from the agent
26
+ */
27
+ export interface PolicyInfo {
28
+ /** List of policies that were evaluated */
29
+ policiesEvaluated: string[];
30
+ /** Static checks that were applied */
31
+ staticChecks: string[];
32
+ /** Processing time for policy evaluation */
33
+ processingTime: string;
34
+ /** Tenant ID associated with the request */
35
+ tenantId: string;
36
+ }
37
+ /**
38
+ * Response from executeQuery in Proxy Mode
39
+ */
40
+ export interface ExecuteQueryResponse {
41
+ /** Whether the request was successful */
42
+ success: boolean;
43
+ /** Response data from the operation */
44
+ data?: unknown;
45
+ /** Result string (for planning operations) */
46
+ result?: string;
47
+ /** Plan ID (for multi-agent planning) */
48
+ planId?: string;
49
+ /** Request ID for tracking */
50
+ requestId?: string;
51
+ /** Additional metadata */
52
+ metadata: Record<string, unknown>;
53
+ /** Error message if request failed */
54
+ error?: string;
55
+ /** Whether the request was blocked by policy */
56
+ blocked: boolean;
57
+ /** Reason for blocking (if blocked) */
58
+ blockReason?: string;
59
+ /** Policy evaluation info */
60
+ policyInfo?: PolicyInfo;
61
+ }
62
+ /**
63
+ * Health check response
64
+ */
65
+ export interface HealthStatus {
66
+ /** Health status: healthy, degraded, or unhealthy */
67
+ status: 'healthy' | 'degraded' | 'unhealthy';
68
+ /** Agent version */
69
+ version?: string;
70
+ /** Uptime duration */
71
+ uptime?: string;
72
+ /** Component health statuses */
73
+ components?: Record<string, {
74
+ status: string;
75
+ message?: string;
76
+ }>;
77
+ }
78
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/types/proxy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,WAAW,EAAE,WAAW,CAAC;IACzB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,sCAAsC;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Proxy Mode Types
3
+ *
4
+ * Proxy Mode routes requests through AxonFlow's /api/request endpoint,
5
+ * allowing AxonFlow to handle policy enforcement and optional LLM routing.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/types/proxy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axonflow/sdk",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "AxonFlow SDK - Add invisible AI governance to your applications in 3 lines of code",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -63,6 +63,7 @@
63
63
  "node": ">=14.0.0"
64
64
  },
65
65
  "devDependencies": {
66
+ "@aws-sdk/client-bedrock-runtime": "^3.955.0",
66
67
  "@types/jest": "^29.0.0",
67
68
  "@types/node": "^18.0.0",
68
69
  "@typescript-eslint/eslint-plugin": "^8.46.2",