@juspay/neurolink 6.0.0 → 6.2.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 (283) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/dist/cli/commands/config.d.ts +13 -13
  3. package/dist/cli/index.js +3 -9
  4. package/dist/core/analytics.d.ts +11 -1
  5. package/dist/core/analytics.js +2 -2
  6. package/dist/core/base-provider.js +4 -18
  7. package/dist/core/dynamic-models.d.ts +8 -8
  8. package/dist/core/factory.js +3 -11
  9. package/dist/index.d.ts +2 -4
  10. package/dist/index.js +2 -11
  11. package/dist/lib/core/analytics.d.ts +11 -1
  12. package/dist/lib/core/analytics.js +2 -2
  13. package/dist/lib/core/base-provider.js +4 -18
  14. package/dist/lib/core/dynamic-models.d.ts +8 -8
  15. package/dist/lib/core/factory.js +3 -11
  16. package/dist/lib/index.d.ts +2 -4
  17. package/dist/lib/index.js +2 -11
  18. package/dist/lib/mcp/factory.d.ts +1 -1
  19. package/dist/lib/mcp/index.d.ts +7 -19
  20. package/dist/lib/mcp/index.js +15 -56
  21. package/dist/lib/neurolink.d.ts +1 -9
  22. package/dist/lib/neurolink.js +21 -70
  23. package/dist/lib/providers/amazon-bedrock.js +5 -16
  24. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  25. package/dist/lib/providers/anthropic.js +4 -7
  26. package/dist/lib/providers/azure-openai.js +4 -2
  27. package/dist/lib/providers/google-vertex.js +5 -9
  28. package/dist/lib/providers/huggingFace.js +5 -10
  29. package/dist/lib/providers/mistral.js +5 -8
  30. package/dist/lib/providers/openAI.js +4 -7
  31. package/dist/lib/utils/providerConfig.d.ts +117 -0
  32. package/dist/lib/utils/providerConfig.js +353 -0
  33. package/dist/lib/utils/providerUtils.d.ts +2 -1
  34. package/dist/lib/utils/providerUtils.js +53 -36
  35. package/dist/lib/utils/timeout.d.ts +72 -1
  36. package/dist/lib/utils/timeout.js +203 -2
  37. package/dist/mcp/factory.d.ts +1 -1
  38. package/dist/mcp/index.d.ts +7 -19
  39. package/dist/mcp/index.js +15 -56
  40. package/dist/neurolink.d.ts +1 -9
  41. package/dist/neurolink.js +21 -70
  42. package/dist/providers/amazon-bedrock.js +5 -16
  43. package/dist/providers/anthropic-baseprovider.js +3 -21
  44. package/dist/providers/anthropic.js +4 -7
  45. package/dist/providers/azure-openai.js +4 -2
  46. package/dist/providers/google-vertex.js +5 -9
  47. package/dist/providers/huggingFace.js +5 -10
  48. package/dist/providers/mistral.js +5 -8
  49. package/dist/providers/openAI.js +4 -7
  50. package/dist/utils/providerConfig.d.ts +117 -0
  51. package/dist/utils/providerConfig.js +353 -0
  52. package/dist/utils/providerUtils.d.ts +2 -1
  53. package/dist/utils/providerUtils.js +53 -36
  54. package/dist/utils/timeout.d.ts +72 -1
  55. package/dist/utils/timeout.js +203 -2
  56. package/package.json +2 -1
  57. package/dist/chat/client-utils.d.ts +0 -95
  58. package/dist/chat/client-utils.js +0 -315
  59. package/dist/chat/index.d.ts +0 -24
  60. package/dist/chat/index.js +0 -33
  61. package/dist/chat/session-storage.d.ts +0 -77
  62. package/dist/chat/session-storage.js +0 -233
  63. package/dist/chat/session.d.ts +0 -96
  64. package/dist/chat/session.js +0 -257
  65. package/dist/chat/sse-handler.d.ts +0 -49
  66. package/dist/chat/sse-handler.js +0 -259
  67. package/dist/chat/types.d.ts +0 -74
  68. package/dist/chat/types.js +0 -5
  69. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  70. package/dist/chat/websocket-chat-handler.js +0 -262
  71. package/dist/cli/commands/mcp.d.ts +0 -20
  72. package/dist/cli/commands/mcp.js +0 -1272
  73. package/dist/core/defaults.d.ts +0 -19
  74. package/dist/core/defaults.js +0 -29
  75. package/dist/core/evaluation-config.d.ts +0 -29
  76. package/dist/core/evaluation-config.js +0 -144
  77. package/dist/factories/compatibility-factory.d.ts +0 -35
  78. package/dist/factories/compatibility-factory.js +0 -71
  79. package/dist/factories/provider-generate-factory.d.ts +0 -20
  80. package/dist/factories/provider-generate-factory.js +0 -93
  81. package/dist/lib/chat/client-utils.d.ts +0 -95
  82. package/dist/lib/chat/client-utils.js +0 -315
  83. package/dist/lib/chat/index.d.ts +0 -24
  84. package/dist/lib/chat/index.js +0 -33
  85. package/dist/lib/chat/session-storage.d.ts +0 -77
  86. package/dist/lib/chat/session-storage.js +0 -233
  87. package/dist/lib/chat/session.d.ts +0 -96
  88. package/dist/lib/chat/session.js +0 -257
  89. package/dist/lib/chat/sse-handler.d.ts +0 -49
  90. package/dist/lib/chat/sse-handler.js +0 -259
  91. package/dist/lib/chat/types.d.ts +0 -74
  92. package/dist/lib/chat/types.js +0 -5
  93. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  94. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  95. package/dist/lib/core/defaults.d.ts +0 -19
  96. package/dist/lib/core/defaults.js +0 -29
  97. package/dist/lib/core/evaluation-config.d.ts +0 -29
  98. package/dist/lib/core/evaluation-config.js +0 -144
  99. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  100. package/dist/lib/factories/compatibility-factory.js +0 -71
  101. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  102. package/dist/lib/factories/provider-generate-factory.js +0 -93
  103. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  104. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  105. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  106. package/dist/lib/mcp/auto-discovery.js +0 -149
  107. package/dist/lib/mcp/client.d.ts +0 -68
  108. package/dist/lib/mcp/client.js +0 -248
  109. package/dist/lib/mcp/config.d.ts +0 -31
  110. package/dist/lib/mcp/config.js +0 -99
  111. package/dist/lib/mcp/context-manager.d.ts +0 -171
  112. package/dist/lib/mcp/context-manager.js +0 -362
  113. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  114. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  115. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  116. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  117. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  118. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  119. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  120. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  121. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  122. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  123. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  124. package/dist/lib/mcp/ecosystem.js +0 -161
  125. package/dist/lib/mcp/error-manager.d.ts +0 -254
  126. package/dist/lib/mcp/error-manager.js +0 -501
  127. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  128. package/dist/lib/mcp/error-recovery.js +0 -405
  129. package/dist/lib/mcp/external-client.d.ts +0 -88
  130. package/dist/lib/mcp/external-client.js +0 -331
  131. package/dist/lib/mcp/external-manager.d.ts +0 -112
  132. package/dist/lib/mcp/external-manager.js +0 -308
  133. package/dist/lib/mcp/function-calling.d.ts +0 -65
  134. package/dist/lib/mcp/function-calling.js +0 -642
  135. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  136. package/dist/lib/mcp/health-monitor.js +0 -630
  137. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  138. package/dist/lib/mcp/initialize-tools.js +0 -261
  139. package/dist/lib/mcp/initialize.d.ts +0 -18
  140. package/dist/lib/mcp/initialize.js +0 -62
  141. package/dist/lib/mcp/manager.d.ts +0 -68
  142. package/dist/lib/mcp/manager.js +0 -176
  143. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  144. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  145. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  146. package/dist/lib/mcp/orchestrator.js +0 -703
  147. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  148. package/dist/lib/mcp/plugin-manager.js +0 -296
  149. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  150. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  151. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  152. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  153. package/dist/lib/mcp/security-manager.d.ts +0 -87
  154. package/dist/lib/mcp/security-manager.js +0 -344
  155. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  156. package/dist/lib/mcp/semaphore-manager.js +0 -329
  157. package/dist/lib/mcp/session-manager.d.ts +0 -187
  158. package/dist/lib/mcp/session-manager.js +0 -400
  159. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  160. package/dist/lib/mcp/session-persistence.js +0 -301
  161. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  162. package/dist/lib/mcp/tool-integration.js +0 -203
  163. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  164. package/dist/lib/mcp/transport-manager.js +0 -334
  165. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  166. package/dist/lib/mcp/unified-mcp.js +0 -251
  167. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  168. package/dist/lib/mcp/unified-registry.js +0 -538
  169. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  170. package/dist/lib/providers/analytics-helper.js +0 -216
  171. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  172. package/dist/lib/providers/function-calling-provider.js +0 -630
  173. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  174. package/dist/lib/providers/mcp-provider.js +0 -283
  175. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  176. package/dist/lib/providers/timeout-wrapper.js +0 -100
  177. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  178. package/dist/lib/sdk/tool-extension.js +0 -284
  179. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  180. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  181. package/dist/lib/services/types.d.ts +0 -156
  182. package/dist/lib/services/types.js +0 -2
  183. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  184. package/dist/lib/services/websocket/websocket-server.js +0 -305
  185. package/dist/lib/utils/provider-validation.d.ts +0 -36
  186. package/dist/lib/utils/provider-validation.js +0 -625
  187. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  188. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  189. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  190. package/dist/lib/utils/streaming-utils.js +0 -198
  191. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  192. package/dist/lib/utils/timeout-manager.js +0 -244
  193. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  194. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  195. package/dist/mcp/auto-discovery.d.ts +0 -62
  196. package/dist/mcp/auto-discovery.js +0 -149
  197. package/dist/mcp/client.d.ts +0 -68
  198. package/dist/mcp/client.js +0 -248
  199. package/dist/mcp/config.d.ts +0 -31
  200. package/dist/mcp/config.js +0 -99
  201. package/dist/mcp/context-manager.d.ts +0 -171
  202. package/dist/mcp/context-manager.js +0 -362
  203. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  204. package/dist/mcp/contracts/mcp-contract.js +0 -58
  205. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  206. package/dist/mcp/core/plugin-manager.js +0 -110
  207. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  208. package/dist/mcp/demo/plugin-demo.js +0 -118
  209. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  210. package/dist/mcp/dynamic-chain-executor.js +0 -489
  211. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  212. package/dist/mcp/dynamic-orchestrator.js +0 -351
  213. package/dist/mcp/ecosystem.d.ts +0 -75
  214. package/dist/mcp/ecosystem.js +0 -162
  215. package/dist/mcp/error-manager.d.ts +0 -254
  216. package/dist/mcp/error-manager.js +0 -501
  217. package/dist/mcp/error-recovery.d.ts +0 -159
  218. package/dist/mcp/error-recovery.js +0 -405
  219. package/dist/mcp/external-client.d.ts +0 -88
  220. package/dist/mcp/external-client.js +0 -331
  221. package/dist/mcp/external-manager.d.ts +0 -112
  222. package/dist/mcp/external-manager.js +0 -308
  223. package/dist/mcp/function-calling.d.ts +0 -65
  224. package/dist/mcp/function-calling.js +0 -642
  225. package/dist/mcp/health-monitor.d.ts +0 -257
  226. package/dist/mcp/health-monitor.js +0 -630
  227. package/dist/mcp/initialize-tools.d.ts +0 -29
  228. package/dist/mcp/initialize-tools.js +0 -262
  229. package/dist/mcp/initialize.d.ts +0 -18
  230. package/dist/mcp/initialize.js +0 -62
  231. package/dist/mcp/manager.d.ts +0 -68
  232. package/dist/mcp/manager.js +0 -176
  233. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  234. package/dist/mcp/neurolink-mcp-client.js +0 -462
  235. package/dist/mcp/orchestrator.d.ts +0 -302
  236. package/dist/mcp/orchestrator.js +0 -703
  237. package/dist/mcp/plugin-manager.d.ts +0 -98
  238. package/dist/mcp/plugin-manager.js +0 -297
  239. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  240. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  241. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  242. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  243. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  244. package/dist/mcp/security-manager.d.ts +0 -87
  245. package/dist/mcp/security-manager.js +0 -344
  246. package/dist/mcp/semaphore-manager.d.ts +0 -137
  247. package/dist/mcp/semaphore-manager.js +0 -329
  248. package/dist/mcp/session-manager.d.ts +0 -187
  249. package/dist/mcp/session-manager.js +0 -400
  250. package/dist/mcp/session-persistence.d.ts +0 -93
  251. package/dist/mcp/session-persistence.js +0 -302
  252. package/dist/mcp/tool-integration.d.ts +0 -58
  253. package/dist/mcp/tool-integration.js +0 -203
  254. package/dist/mcp/transport-manager.d.ts +0 -154
  255. package/dist/mcp/transport-manager.js +0 -335
  256. package/dist/mcp/unified-mcp.d.ts +0 -133
  257. package/dist/mcp/unified-mcp.js +0 -251
  258. package/dist/mcp/unified-registry.d.ts +0 -165
  259. package/dist/mcp/unified-registry.js +0 -539
  260. package/dist/providers/analytics-helper.d.ts +0 -38
  261. package/dist/providers/analytics-helper.js +0 -216
  262. package/dist/providers/function-calling-provider.d.ts +0 -142
  263. package/dist/providers/function-calling-provider.js +0 -630
  264. package/dist/providers/mcp-provider.d.ts +0 -75
  265. package/dist/providers/mcp-provider.js +0 -283
  266. package/dist/providers/timeout-wrapper.d.ts +0 -40
  267. package/dist/providers/timeout-wrapper.js +0 -100
  268. package/dist/sdk/tool-extension.d.ts +0 -181
  269. package/dist/sdk/tool-extension.js +0 -284
  270. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  271. package/dist/services/streaming/streaming-manager.js +0 -245
  272. package/dist/services/types.d.ts +0 -156
  273. package/dist/services/types.js +0 -2
  274. package/dist/services/websocket/websocket-server.d.ts +0 -34
  275. package/dist/services/websocket/websocket-server.js +0 -306
  276. package/dist/utils/provider-validation.d.ts +0 -36
  277. package/dist/utils/provider-validation.js +0 -625
  278. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  279. package/dist/utils/providerUtils-fixed.js +0 -94
  280. package/dist/utils/streaming-utils.d.ts +0 -79
  281. package/dist/utils/streaming-utils.js +0 -198
  282. package/dist/utils/timeout-manager.d.ts +0 -75
  283. package/dist/utils/timeout-manager.js +0 -244
@@ -1,6 +1,7 @@
1
1
  import { createAzure } from "@ai-sdk/azure";
2
2
  import { streamText } from "ai";
3
3
  import { BaseProvider } from "../core/base-provider.js";
4
+ import { validateApiKey, createAzureAPIKeyConfig, createAzureEndpointConfig, } from "../utils/providerConfig.js";
4
5
  export class AzureOpenAIProvider extends BaseProvider {
5
6
  apiKey;
6
7
  resourceName;
@@ -21,11 +22,12 @@ export class AzureOpenAIProvider extends BaseProvider {
21
22
  process.env.AZURE_OPENAI_DEPLOYMENT_ID ||
22
23
  "gpt-4o";
23
24
  this.apiVersion = process.env.AZURE_API_VERSION || "2024-10-01-preview";
25
+ // Configuration validation - now using consolidated utility
24
26
  if (!this.apiKey) {
25
- throw new Error("AZURE_OPENAI_API_KEY environment variable is required");
27
+ validateApiKey(createAzureAPIKeyConfig());
26
28
  }
27
29
  if (!this.resourceName) {
28
- throw new Error("AZURE_OPENAI_ENDPOINT environment variable is required");
30
+ validateApiKey(createAzureEndpointConfig());
29
31
  }
30
32
  // Create the Azure provider instance
31
33
  this.azureProvider = createAzure({
@@ -4,6 +4,7 @@ import { BaseProvider } from "../core/base-provider.js";
4
4
  import { logger } from "../utils/logger.js";
5
5
  import { createTimeoutController, TimeoutError, getDefaultTimeout, } from "../utils/timeout.js";
6
6
  import { DEFAULT_MAX_TOKENS } from "../core/constants.js";
7
+ import { validateApiKey, createVertexProjectConfig, createGoogleAuthConfig, } from "../utils/providerConfig.js";
7
8
  // Cache for anthropic module to avoid repeated imports
8
9
  let _createVertexAnthropic = null;
9
10
  let _anthropicImportAttempted = false;
@@ -28,14 +29,9 @@ async function getCreateVertexAnthropic() {
28
29
  }
29
30
  }
30
31
  // Configuration helpers
32
+ // Configuration helpers - now using consolidated utility
31
33
  const getVertexProjectId = () => {
32
- const projectId = process.env.GOOGLE_CLOUD_PROJECT_ID ||
33
- process.env.VERTEX_PROJECT_ID ||
34
- process.env.GOOGLE_VERTEX_PROJECT;
35
- if (!projectId) {
36
- throw new Error(`❌ Google Vertex AI Provider Configuration Error\n\nMissing required environment variables: GOOGLE_CLOUD_PROJECT_ID or VERTEX_PROJECT_ID\n\n🔧 Step 1: Get Google Cloud Credentials\n1. Visit: https://console.cloud.google.com/\n2. Create or select a project\n3. Enable Vertex AI API\n4. Set up authentication\n\n🔧 Step 2: Set Environment Variables\nAdd to your .env file:\nGOOGLE_CLOUD_PROJECT_ID=your_project_id_here\nGOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json\n\n🔧 Step 3: Restart Application\nRestart your application to load the new environment variables.`);
37
- }
38
- return projectId;
34
+ return validateApiKey(createVertexProjectConfig());
39
35
  };
40
36
  const getVertexLocation = () => {
41
37
  return (process.env.GOOGLE_CLOUD_LOCATION ||
@@ -72,9 +68,9 @@ export class GoogleVertexProvider extends BaseProvider {
72
68
  cachedAnthropicModel = null;
73
69
  constructor(modelName, sdk) {
74
70
  super(modelName, "vertex", sdk);
75
- // Validate Google Cloud credentials
71
+ // Validate Google Cloud credentials - now using consolidated utility
76
72
  if (!hasGoogleCredentials()) {
77
- throw new Error(`❌ Google Vertex AI Provider Configuration Error\n\nMissing Google Cloud authentication. One of the following is required:\n\n🔧 Option 1: Service Account Key File\nGOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json\n\n🔧 Option 2: Service Account Key (Base64)\nGOOGLE_SERVICE_ACCOUNT_KEY=base64_encoded_key\n\n🔧 Option 3: Individual Credentials\nGOOGLE_AUTH_CLIENT_EMAIL=your-service-account@project.iam.gserviceaccount.com\nGOOGLE_AUTH_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----...\n\n🔧 Step 4: Restart Application\nRestart your application to load the new environment variables.`);
73
+ validateApiKey(createGoogleAuthConfig());
78
74
  }
79
75
  // Initialize Google Cloud configuration
80
76
  this.projectId = getVertexProjectId();
@@ -4,20 +4,15 @@ import { BaseProvider } from "../core/base-provider.js";
4
4
  import { logger } from "../utils/logger.js";
5
5
  import { createTimeoutController, TimeoutError, getDefaultTimeout, } from "../utils/timeout.js";
6
6
  import { DEFAULT_MAX_TOKENS } from "../core/constants.js";
7
- // Configuration helpers
7
+ import { validateApiKey, createHuggingFaceConfig, getProviderModel, hasHuggingFaceCredentials, } from "../utils/providerConfig.js";
8
+ // Configuration helpers - now using consolidated utility
8
9
  const getHuggingFaceApiKey = () => {
9
- const apiKey = process.env.HUGGINGFACE_API_KEY || process.env.HF_TOKEN;
10
- if (!apiKey) {
11
- throw new Error(`❌ HuggingFace Provider Configuration Error\n\nMissing required environment variables: HUGGINGFACE_API_KEY\n\n🔧 Step 1: Get Credentials\n1. Visit: https://huggingface.co/settings/tokens\n2. Create new API token\n3. Copy the token\n\n🔧 Step 2: Set Environment Variable\nAdd to your .env file:\nHUGGINGFACE_API_KEY=your_token_here\n\n🔧 Step 3: Restart Application\nRestart your application to load the new environment variables.`);
12
- }
13
- return apiKey;
10
+ return validateApiKey(createHuggingFaceConfig());
14
11
  };
15
12
  const getDefaultHuggingFaceModel = () => {
16
- return process.env.HUGGINGFACE_MODEL || "microsoft/DialoGPT-medium";
17
- };
18
- const hasHuggingFaceCredentials = () => {
19
- return !!(process.env.HUGGINGFACE_API_KEY || process.env.HF_TOKEN);
13
+ return getProviderModel("HUGGINGFACE_MODEL", "microsoft/DialoGPT-medium");
20
14
  };
15
+ // Note: hasHuggingFaceCredentials now directly imported from consolidated utility
21
16
  /**
22
17
  * HuggingFace Provider - BaseProvider Implementation
23
18
  * Using AI SDK with HuggingFace's OpenAI-compatible endpoint
@@ -2,17 +2,14 @@ import { createMistral } from "@ai-sdk/mistral";
2
2
  import { streamText } from "ai";
3
3
  import { BaseProvider } from "../core/base-provider.js";
4
4
  import { logger } from "../utils/logger.js";
5
- import { createAnalytics } from "./analytics-helper.js";
6
- // Configuration helpers
5
+ import { createAnalytics } from "../core/analytics.js";
6
+ import { validateApiKey, createMistralConfig, getProviderModel, } from "../utils/providerConfig.js";
7
+ // Configuration helpers - now using consolidated utility
7
8
  const getMistralApiKey = () => {
8
- const apiKey = process.env.MISTRAL_API_KEY;
9
- if (!apiKey) {
10
- throw new Error("Mistral API key not found. Please set MISTRAL_API_KEY environment variable.");
11
- }
12
- return apiKey;
9
+ return validateApiKey(createMistralConfig());
13
10
  };
14
11
  const getDefaultMistralModel = () => {
15
- return process.env.MISTRAL_MODEL || "mistral-large-latest";
12
+ return getProviderModel("MISTRAL_MODEL", "mistral-large-latest");
16
13
  };
17
14
  /**
18
15
  * Mistral AI Provider v2 - BaseProvider Implementation
@@ -5,16 +5,13 @@ import { BaseProvider } from "../core/base-provider.js";
5
5
  import { logger } from "../utils/logger.js";
6
6
  import { createTimeoutController, TimeoutError, getDefaultTimeout, } from "../utils/timeout.js";
7
7
  import { DEFAULT_MAX_TOKENS } from "../core/constants.js";
8
- // Configuration helpers
8
+ import { validateApiKey, createOpenAIConfig, getProviderModel, } from "../utils/providerConfig.js";
9
+ // Configuration helpers - now using consolidated utility
9
10
  const getOpenAIApiKey = () => {
10
- const apiKey = process.env.OPENAI_API_KEY;
11
- if (!apiKey) {
12
- throw new Error(`❌ OPENAI Provider Configuration Error\n\nMissing required environment variables: OPENAI_API_KEY\n\n🔧 Step 1: Get Credentials\n1. Visit: https://platform.openai.com/api-keys\n2. Create new API key\n3. Copy the key\n\n🔧 Step 2: Set Environment Variable\nAdd to your .env file:\nOPENAI_API_KEY=your_api_key_here\n\n🔧 Step 3: Restart Application\nRestart your application to load the new environment variables.`);
13
- }
14
- return apiKey;
11
+ return validateApiKey(createOpenAIConfig());
15
12
  };
16
13
  const getOpenAIModel = () => {
17
- return process.env.OPENAI_MODEL || "gpt-4o";
14
+ return getProviderModel("OPENAI_MODEL", "gpt-4o");
18
15
  };
19
16
  /**
20
17
  * OpenAI Provider v2 - BaseProvider Implementation
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Provider Configuration Utility
3
+ * Consolidated configuration helpers for all AI providers
4
+ * Eliminates duplicate error messages and configuration logic
5
+ * Enhanced with format validation and advanced error classification
6
+ */
7
+ /**
8
+ * Configuration options for provider validation
9
+ */
10
+ export interface ProviderConfigOptions {
11
+ providerName: string;
12
+ envVarName: string;
13
+ setupUrl: string;
14
+ description: string;
15
+ instructions: string[];
16
+ fallbackEnvVars?: string[];
17
+ }
18
+ /**
19
+ * Enhanced validation result with format checking
20
+ */
21
+ export interface ValidationResult {
22
+ isValid: boolean;
23
+ apiKey: string;
24
+ formatValid?: boolean;
25
+ errorType?: "missing" | "format" | "config";
26
+ error?: string;
27
+ }
28
+ /**
29
+ * Validates API key format for a specific provider
30
+ * @param providerKey Provider identifier (e.g., 'openai', 'anthropic')
31
+ * @param apiKey The API key to validate
32
+ * @returns True if format is valid
33
+ */
34
+ export declare function validateApiKeyFormat(providerKey: string, apiKey: string): boolean;
35
+ /**
36
+ * Enhanced validation with format checking
37
+ * @param config Provider configuration options
38
+ * @param enableFormatValidation Whether to validate API key format
39
+ * @returns Validation result with detailed information
40
+ */
41
+ export declare function validateApiKeyEnhanced(config: ProviderConfigOptions, enableFormatValidation?: boolean): ValidationResult;
42
+ /**
43
+ * Validates an API key for a provider and returns it (BACKWARD COMPATIBLE)
44
+ * Throws detailed error message if validation fails
45
+ * @param config Provider configuration options
46
+ * @returns The validated API key
47
+ */
48
+ export declare function validateApiKey(config: ProviderConfigOptions): string;
49
+ /**
50
+ * Gets a provider model with fallback to default
51
+ * @param envVar Environment variable name for the model
52
+ * @param defaultModel Default model to use if env var not set
53
+ * @returns The model name to use
54
+ */
55
+ export declare function getProviderModel(envVar: string, defaultModel: string): string;
56
+ /**
57
+ * Checks if provider credentials are available
58
+ * @param envVars Array of environment variable names to check
59
+ * @returns True if any of the credentials are available
60
+ */
61
+ export declare function hasProviderCredentials(envVars: string[]): boolean;
62
+ /**
63
+ * Creates Anthropic provider configuration
64
+ */
65
+ export declare function createAnthropicConfig(): ProviderConfigOptions;
66
+ /**
67
+ * Creates OpenAI provider configuration
68
+ */
69
+ export declare function createOpenAIConfig(): ProviderConfigOptions;
70
+ /**
71
+ * Creates HuggingFace provider configuration
72
+ */
73
+ export declare function createHuggingFaceConfig(): ProviderConfigOptions;
74
+ /**
75
+ * Creates Mistral provider configuration
76
+ */
77
+ export declare function createMistralConfig(): ProviderConfigOptions;
78
+ /**
79
+ * Creates AWS Access Key configuration for Bedrock
80
+ */
81
+ export declare function createAWSAccessKeyConfig(): ProviderConfigOptions;
82
+ /**
83
+ * Creates AWS Secret Key configuration for Bedrock
84
+ */
85
+ export declare function createAWSSecretConfig(): ProviderConfigOptions;
86
+ /**
87
+ * Creates Azure OpenAI API Key configuration
88
+ */
89
+ export declare function createAzureAPIKeyConfig(): ProviderConfigOptions;
90
+ /**
91
+ * Creates Azure OpenAI Endpoint configuration
92
+ */
93
+ export declare function createAzureEndpointConfig(): ProviderConfigOptions;
94
+ /**
95
+ * Creates Google Vertex Project ID configuration
96
+ */
97
+ export declare function createVertexProjectConfig(): ProviderConfigOptions;
98
+ /**
99
+ * Creates Google Cloud Authentication configuration
100
+ */
101
+ export declare function createGoogleAuthConfig(): ProviderConfigOptions;
102
+ /**
103
+ * Creates Anthropic Base Provider configuration
104
+ */
105
+ export declare function createAnthropicBaseConfig(): ProviderConfigOptions;
106
+ /**
107
+ * Gets AWS Region with default fallback
108
+ */
109
+ export declare function getAWSRegion(): string;
110
+ /**
111
+ * Gets AWS Session Token if available
112
+ */
113
+ export declare function getAWSSessionToken(): string | undefined;
114
+ /**
115
+ * Checks if HuggingFace credentials are available
116
+ */
117
+ export declare function hasHuggingFaceCredentials(): boolean;
@@ -0,0 +1,353 @@
1
+ /**
2
+ * Provider Configuration Utility
3
+ * Consolidated configuration helpers for all AI providers
4
+ * Eliminates duplicate error messages and configuration logic
5
+ * Enhanced with format validation and advanced error classification
6
+ */
7
+ /**
8
+ * API key format validation patterns (extracted from advanced validation system)
9
+ */
10
+ const API_KEY_FORMATS = {
11
+ openai: /^sk-[A-Za-z0-9]{48,}$/,
12
+ anthropic: /^sk-ant-[A-Za-z0-9\-_]{95,}$/,
13
+ "google-ai": /^AIza[A-Za-z0-9\-_]{35}$/,
14
+ huggingface: /^hf_[A-Za-z0-9]{37}$/,
15
+ mistral: /^[A-Za-z0-9]{32}$/,
16
+ azure: /^[A-Za-z0-9]{32,}$/,
17
+ aws: /^[A-Z0-9]{20}$/, // Access Key ID format
18
+ "google-vertex": /^[A-Za-z0-9\-_]{1,}$/, // Project ID format
19
+ };
20
+ /**
21
+ * Validates API key format for a specific provider
22
+ * @param providerKey Provider identifier (e.g., 'openai', 'anthropic')
23
+ * @param apiKey The API key to validate
24
+ * @returns True if format is valid
25
+ */
26
+ export function validateApiKeyFormat(providerKey, apiKey) {
27
+ const format = API_KEY_FORMATS[providerKey.toLowerCase()];
28
+ if (!format) {
29
+ // No format validation available, assume valid if not empty
30
+ return apiKey.length > 0;
31
+ }
32
+ return format.test(apiKey);
33
+ }
34
+ /**
35
+ * Enhanced validation with format checking
36
+ * @param config Provider configuration options
37
+ * @param enableFormatValidation Whether to validate API key format
38
+ * @returns Validation result with detailed information
39
+ */
40
+ export function validateApiKeyEnhanced(config, enableFormatValidation = false) {
41
+ // Check primary environment variable
42
+ let apiKey = process.env[config.envVarName];
43
+ // Check fallback environment variables if provided
44
+ if (!apiKey && config.fallbackEnvVars) {
45
+ for (const fallbackVar of config.fallbackEnvVars) {
46
+ apiKey = process.env[fallbackVar];
47
+ if (apiKey) {
48
+ break;
49
+ }
50
+ }
51
+ }
52
+ if (!apiKey) {
53
+ return {
54
+ isValid: false,
55
+ apiKey: "",
56
+ errorType: "missing",
57
+ error: createConfigErrorMessage(config),
58
+ };
59
+ }
60
+ // Optional format validation
61
+ if (enableFormatValidation) {
62
+ const providerKey = config.providerName.toLowerCase().replace(/\s/g, "-");
63
+ const formatValid = validateApiKeyFormat(providerKey, apiKey);
64
+ if (!formatValid) {
65
+ return {
66
+ isValid: false,
67
+ apiKey,
68
+ formatValid: false,
69
+ errorType: "format",
70
+ error: `Invalid ${config.providerName} API key format. Please check your API key.`,
71
+ };
72
+ }
73
+ }
74
+ return {
75
+ isValid: true,
76
+ apiKey,
77
+ formatValid: enableFormatValidation ? true : undefined,
78
+ };
79
+ }
80
+ /**
81
+ * Validates an API key for a provider and returns it (BACKWARD COMPATIBLE)
82
+ * Throws detailed error message if validation fails
83
+ * @param config Provider configuration options
84
+ * @returns The validated API key
85
+ */
86
+ export function validateApiKey(config) {
87
+ // Check primary environment variable
88
+ let apiKey = process.env[config.envVarName];
89
+ // Check fallback environment variables if provided
90
+ if (!apiKey && config.fallbackEnvVars) {
91
+ for (const fallbackVar of config.fallbackEnvVars) {
92
+ apiKey = process.env[fallbackVar];
93
+ if (apiKey) {
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ if (!apiKey) {
99
+ throw new Error(createConfigErrorMessage(config));
100
+ }
101
+ return apiKey;
102
+ }
103
+ /**
104
+ * Creates a standardized configuration error message
105
+ * @param config Provider configuration options
106
+ * @returns Formatted error message with setup instructions
107
+ */
108
+ function createConfigErrorMessage(config) {
109
+ const envVarsList = config.fallbackEnvVars
110
+ ? [config.envVarName, ...config.fallbackEnvVars].join(" or ")
111
+ : config.envVarName;
112
+ return `❌ ${config.providerName} Provider Configuration Error
113
+
114
+ Missing required environment variable: ${envVarsList}
115
+
116
+ 🔧 Step 1: Get ${config.description}
117
+ ${config.instructions.join("\n")}
118
+
119
+ 🔧 Step 2: Set Environment Variable
120
+ Add to your .env file:
121
+ ${config.envVarName}=your_key_here
122
+
123
+ 🔧 Step 3: Restart Application
124
+ Restart your application to load the new environment variables.`;
125
+ }
126
+ /**
127
+ * Gets a provider model with fallback to default
128
+ * @param envVar Environment variable name for the model
129
+ * @param defaultModel Default model to use if env var not set
130
+ * @returns The model name to use
131
+ */
132
+ export function getProviderModel(envVar, defaultModel) {
133
+ return process.env[envVar] || defaultModel;
134
+ }
135
+ /**
136
+ * Checks if provider credentials are available
137
+ * @param envVars Array of environment variable names to check
138
+ * @returns True if any of the credentials are available
139
+ */
140
+ export function hasProviderCredentials(envVars) {
141
+ return envVars.some((envVar) => !!process.env[envVar]);
142
+ }
143
+ // =============================================================================
144
+ // PROVIDER-SPECIFIC CONFIGURATION CREATORS
145
+ // =============================================================================
146
+ /**
147
+ * Creates Anthropic provider configuration
148
+ */
149
+ export function createAnthropicConfig() {
150
+ return {
151
+ providerName: "Anthropic",
152
+ envVarName: "ANTHROPIC_API_KEY",
153
+ setupUrl: "https://console.anthropic.com/",
154
+ description: "Anthropic API Key",
155
+ instructions: [
156
+ "1. Visit: https://console.anthropic.com/",
157
+ "2. Sign in or create an account",
158
+ "3. Go to API Keys section",
159
+ "4. Create a new API key",
160
+ ],
161
+ };
162
+ }
163
+ /**
164
+ * Creates OpenAI provider configuration
165
+ */
166
+ export function createOpenAIConfig() {
167
+ return {
168
+ providerName: "OPENAI",
169
+ envVarName: "OPENAI_API_KEY",
170
+ setupUrl: "https://platform.openai.com/api-keys",
171
+ description: "Credentials",
172
+ instructions: [
173
+ "1. Visit: https://platform.openai.com/api-keys",
174
+ "2. Create new API key",
175
+ "3. Copy the key",
176
+ ],
177
+ };
178
+ }
179
+ /**
180
+ * Creates HuggingFace provider configuration
181
+ */
182
+ export function createHuggingFaceConfig() {
183
+ return {
184
+ providerName: "HuggingFace",
185
+ envVarName: "HUGGINGFACE_API_KEY",
186
+ setupUrl: "https://huggingface.co/settings/tokens",
187
+ description: "Credentials",
188
+ instructions: [
189
+ "1. Visit: https://huggingface.co/settings/tokens",
190
+ "2. Create new API token",
191
+ "3. Copy the token",
192
+ ],
193
+ fallbackEnvVars: ["HF_TOKEN"],
194
+ };
195
+ }
196
+ /**
197
+ * Creates Mistral provider configuration
198
+ */
199
+ export function createMistralConfig() {
200
+ return {
201
+ providerName: "Mistral",
202
+ envVarName: "MISTRAL_API_KEY",
203
+ setupUrl: "https://console.mistral.ai/",
204
+ description: "API key",
205
+ instructions: [
206
+ "1. Visit: https://console.mistral.ai/",
207
+ "2. Create or sign in to your account",
208
+ "3. Generate a new API key",
209
+ ],
210
+ };
211
+ }
212
+ /**
213
+ * Creates AWS Access Key configuration for Bedrock
214
+ */
215
+ export function createAWSAccessKeyConfig() {
216
+ return {
217
+ providerName: "AWS Bedrock",
218
+ envVarName: "AWS_ACCESS_KEY_ID",
219
+ setupUrl: "https://console.aws.amazon.com/iam/",
220
+ description: "AWS Credentials",
221
+ instructions: [
222
+ "1. Visit: https://console.aws.amazon.com/iam/",
223
+ "2. Create IAM user with Bedrock permissions",
224
+ "3. Generate access key",
225
+ ],
226
+ };
227
+ }
228
+ /**
229
+ * Creates AWS Secret Key configuration for Bedrock
230
+ */
231
+ export function createAWSSecretConfig() {
232
+ return {
233
+ providerName: "AWS Bedrock",
234
+ envVarName: "AWS_SECRET_ACCESS_KEY",
235
+ setupUrl: "https://console.aws.amazon.com/iam/",
236
+ description: "AWS Credentials",
237
+ instructions: [
238
+ "1. Visit: https://console.aws.amazon.com/iam/",
239
+ "2. Create IAM user with Bedrock permissions",
240
+ "3. Generate access key",
241
+ ],
242
+ };
243
+ }
244
+ /**
245
+ * Creates Azure OpenAI API Key configuration
246
+ */
247
+ export function createAzureAPIKeyConfig() {
248
+ return {
249
+ providerName: "Azure OpenAI",
250
+ envVarName: "AZURE_OPENAI_API_KEY",
251
+ setupUrl: "https://portal.azure.com/",
252
+ description: "Azure OpenAI API Key",
253
+ instructions: [
254
+ "1. Visit: https://portal.azure.com/",
255
+ "2. Create or access Azure OpenAI resource",
256
+ "3. Get API key from Keys and Endpoint section",
257
+ ],
258
+ };
259
+ }
260
+ /**
261
+ * Creates Azure OpenAI Endpoint configuration
262
+ */
263
+ export function createAzureEndpointConfig() {
264
+ return {
265
+ providerName: "Azure OpenAI",
266
+ envVarName: "AZURE_OPENAI_ENDPOINT",
267
+ setupUrl: "https://portal.azure.com/",
268
+ description: "Azure OpenAI Endpoint",
269
+ instructions: [
270
+ "1. Visit: https://portal.azure.com/",
271
+ "2. Access your Azure OpenAI resource",
272
+ "3. Copy endpoint URL from Keys and Endpoint section",
273
+ ],
274
+ };
275
+ }
276
+ /**
277
+ * Creates Google Vertex Project ID configuration
278
+ */
279
+ export function createVertexProjectConfig() {
280
+ return {
281
+ providerName: "Google Vertex AI",
282
+ envVarName: "GOOGLE_CLOUD_PROJECT_ID",
283
+ setupUrl: "https://console.cloud.google.com/",
284
+ description: "Google Cloud Credentials",
285
+ instructions: [
286
+ "1. Visit: https://console.cloud.google.com/",
287
+ "2. Create or select a project",
288
+ "3. Enable Vertex AI API",
289
+ "4. Set up authentication",
290
+ ],
291
+ fallbackEnvVars: ["VERTEX_PROJECT_ID"],
292
+ };
293
+ }
294
+ /**
295
+ * Creates Google Cloud Authentication configuration
296
+ */
297
+ export function createGoogleAuthConfig() {
298
+ return {
299
+ providerName: "Google Vertex AI",
300
+ envVarName: "GOOGLE_APPLICATION_CREDENTIALS",
301
+ setupUrl: "https://console.cloud.google.com/",
302
+ description: "Google Cloud authentication",
303
+ instructions: [
304
+ "🔧 Option 1: Service Account Key File",
305
+ "GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json",
306
+ "",
307
+ "🔧 Option 2: Service Account Key (Base64)",
308
+ "GOOGLE_SERVICE_ACCOUNT_KEY=base64_encoded_key",
309
+ "",
310
+ "🔧 Option 3: Individual Credentials",
311
+ "GOOGLE_AUTH_CLIENT_EMAIL=your-service-account@project.iam.gserviceaccount.com",
312
+ "GOOGLE_AUTH_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----...",
313
+ ],
314
+ fallbackEnvVars: ["GOOGLE_SERVICE_ACCOUNT_KEY", "GOOGLE_AUTH_CLIENT_EMAIL"],
315
+ };
316
+ }
317
+ /**
318
+ * Creates Anthropic Base Provider configuration
319
+ */
320
+ export function createAnthropicBaseConfig() {
321
+ return {
322
+ providerName: "ANTHROPIC",
323
+ envVarName: "ANTHROPIC_API_KEY",
324
+ setupUrl: "https://console.anthropic.com/",
325
+ description: "Credentials",
326
+ instructions: [
327
+ "Get your API key from https://console.anthropic.com/",
328
+ "",
329
+ "💡 Step 2: Add to your .env file (or export in CLI):",
330
+ ],
331
+ };
332
+ }
333
+ // =============================================================================
334
+ // HELPER FUNCTIONS FOR SPECIFIC PROVIDER NEEDS
335
+ // =============================================================================
336
+ /**
337
+ * Gets AWS Region with default fallback
338
+ */
339
+ export function getAWSRegion() {
340
+ return process.env.AWS_REGION || "us-east-1";
341
+ }
342
+ /**
343
+ * Gets AWS Session Token if available
344
+ */
345
+ export function getAWSSessionToken() {
346
+ return process.env.AWS_SESSION_TOKEN;
347
+ }
348
+ /**
349
+ * Checks if HuggingFace credentials are available
350
+ */
351
+ export function hasHuggingFaceCredentials() {
352
+ return hasProviderCredentials(["HUGGINGFACE_API_KEY", "HF_TOKEN"]);
353
+ }
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Get the best available provider based on preferences and availability (async)
2
+ * Get the best available provider based on real-time availability checks
3
+ * Enhanced version consolidated from providerUtils-fixed.ts
3
4
  * @param requestedProvider - Optional preferred provider name
4
5
  * @returns The best provider name to use
5
6
  */