@juspay/neurolink 9.32.0 → 9.32.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/CHANGELOG.md +6 -0
- package/dist/auth/anthropicOAuth.js +1 -1
- package/dist/cli/commands/proxy.js +18 -5
- package/dist/client/aiSdkAdapter.js +1 -1
- package/dist/client/index.js +137 -501
- package/dist/core/factory.js +0 -1
- package/dist/core/redisConversationMemoryManager.js +1 -1
- package/dist/features/ppt/slideGenerator.js +0 -1
- package/dist/features/ppt/utils.js +0 -1
- package/dist/lib/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/mcp/elicitationProtocol.js +1 -1
- package/dist/mcp/servers/agent/directToolsServer.js +0 -1
- package/dist/providers/azureOpenai.js +1 -1
- package/dist/providers/huggingFace.js +0 -1
- package/dist/providers/openaiCompatible.js +0 -1
- package/dist/sdk/toolRegistration.js +0 -1
- package/dist/server/openapi/generator.js +1 -1
- package/dist/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/types/configTypes.js +0 -5
- package/dist/types/modelTypes.js +0 -1
- package/dist/types/tools.js +0 -1
- package/dist/types/typeAliases.js +0 -1
- package/dist/types/utilities.js +1 -1
- package/dist/types/workflowTypes.js +0 -1
- package/dist/utils/providerRetry.js +0 -1
- package/dist/utils/providerUtils.js +0 -1
- package/package.json +2 -2
- package/dist/client/adapters/providerImageAdapter.js +0 -588
- package/dist/client/adapters/tts/googleTTSHandler.js +0 -344
- package/dist/client/adapters/video/directorPipeline.js +0 -516
- package/dist/client/adapters/video/ffmpegAdapter.js +0 -206
- package/dist/client/adapters/video/frameExtractor.js +0 -143
- package/dist/client/adapters/video/vertexVideoHandler.js +0 -763
- package/dist/client/adapters/video/videoAnalyzer.js +0 -238
- package/dist/client/adapters/video/videoMerger.js +0 -171
- package/dist/client/agent/directTools.js +0 -840
- package/dist/client/auth/AuthProviderFactory.js +0 -111
- package/dist/client/auth/AuthProviderRegistry.js +0 -190
- package/dist/client/auth/RequestContext.js +0 -78
- package/dist/client/auth/accountPool.js +0 -178
- package/dist/client/auth/anthropicOAuth.js +0 -974
- package/dist/client/auth/authContext.js +0 -314
- package/dist/client/auth/errors.js +0 -39
- package/dist/client/auth/index.js +0 -61
- package/dist/client/auth/middleware/AuthMiddleware.js +0 -519
- package/dist/client/auth/middleware/rateLimitByUser.js +0 -554
- package/dist/client/auth/providers/BaseAuthProvider.js +0 -723
- package/dist/client/auth/providers/CognitoProvider.js +0 -304
- package/dist/client/auth/providers/KeycloakProvider.js +0 -393
- package/dist/client/auth/providers/auth0.js +0 -274
- package/dist/client/auth/providers/betterAuth.js +0 -182
- package/dist/client/auth/providers/clerk.js +0 -317
- package/dist/client/auth/providers/custom.js +0 -112
- package/dist/client/auth/providers/firebase.js +0 -226
- package/dist/client/auth/providers/jwt.js +0 -212
- package/dist/client/auth/providers/oauth2.js +0 -303
- package/dist/client/auth/providers/supabase.js +0 -259
- package/dist/client/auth/providers/workos.js +0 -284
- package/dist/client/auth/serverBridge.js +0 -25
- package/dist/client/auth/sessionManager.js +0 -437
- package/dist/client/auth/tokenStore.js +0 -799
- package/dist/client/client/aiSdkAdapter.js +0 -487
- package/dist/client/client/auth.js +0 -473
- package/dist/client/client/errors.js +0 -552
- package/dist/client/client/httpClient.js +0 -837
- package/dist/client/client/index.js +0 -172
- package/dist/client/client/interceptors.js +0 -601
- package/dist/client/client/sseClient.js +0 -545
- package/dist/client/client/streamingClient.js +0 -917
- package/dist/client/client/wsClient.js +0 -369
- package/dist/client/config/configManager.js +0 -303
- package/dist/client/config/conversationMemory.js +0 -86
- package/dist/client/config/taskClassificationConfig.js +0 -148
- package/dist/client/constants/contextWindows.js +0 -295
- package/dist/client/constants/enums.js +0 -853
- package/dist/client/constants/index.js +0 -207
- package/dist/client/constants/performance.js +0 -389
- package/dist/client/constants/retry.js +0 -266
- package/dist/client/constants/timeouts.js +0 -182
- package/dist/client/constants/tokens.js +0 -380
- package/dist/client/constants/videoErrors.js +0 -46
- package/dist/client/context/budgetChecker.js +0 -98
- package/dist/client/context/contextCompactor.js +0 -205
- package/dist/client/context/emergencyTruncation.js +0 -88
- package/dist/client/context/errorDetection.js +0 -171
- package/dist/client/context/errors.js +0 -21
- package/dist/client/context/fileTokenBudget.js +0 -127
- package/dist/client/context/prompts/summarizationPrompt.js +0 -117
- package/dist/client/context/stages/fileReadDeduplicator.js +0 -66
- package/dist/client/context/stages/slidingWindowTruncator.js +0 -190
- package/dist/client/context/stages/structuredSummarizer.js +0 -99
- package/dist/client/context/stages/toolOutputPruner.js +0 -52
- package/dist/client/context/summarizationEngine.js +0 -136
- package/dist/client/context/toolOutputLimits.js +0 -78
- package/dist/client/context/toolPairRepair.js +0 -66
- package/dist/client/core/analytics.js +0 -88
- package/dist/client/core/baseProvider.js +0 -1385
- package/dist/client/core/constants.js +0 -140
- package/dist/client/core/conversationMemoryFactory.js +0 -141
- package/dist/client/core/conversationMemoryInitializer.js +0 -128
- package/dist/client/core/conversationMemoryManager.js +0 -344
- package/dist/client/core/dynamicModels.js +0 -358
- package/dist/client/core/evaluation.js +0 -309
- package/dist/client/core/evaluationProviders.js +0 -248
- package/dist/client/core/factory.js +0 -412
- package/dist/client/core/infrastructure/baseError.js +0 -22
- package/dist/client/core/infrastructure/baseFactory.js +0 -54
- package/dist/client/core/infrastructure/baseRegistry.js +0 -53
- package/dist/client/core/infrastructure/index.js +0 -5
- package/dist/client/core/infrastructure/retry.js +0 -20
- package/dist/client/core/infrastructure/typedEventEmitter.js +0 -23
- package/dist/client/core/modelConfiguration.js +0 -851
- package/dist/client/core/modules/GenerationHandler.js +0 -588
- package/dist/client/core/modules/MessageBuilder.js +0 -273
- package/dist/client/core/modules/StreamHandler.js +0 -185
- package/dist/client/core/modules/TelemetryHandler.js +0 -203
- package/dist/client/core/modules/ToolsManager.js +0 -499
- package/dist/client/core/modules/Utilities.js +0 -331
- package/dist/client/core/redisConversationMemoryManager.js +0 -1435
- package/dist/client/core/streamAnalytics.js +0 -131
- package/dist/client/evaluation/contextBuilder.js +0 -134
- package/dist/client/evaluation/index.js +0 -61
- package/dist/client/evaluation/prompts.js +0 -73
- package/dist/client/evaluation/ragasEvaluator.js +0 -110
- package/dist/client/evaluation/retryManager.js +0 -78
- package/dist/client/evaluation/scoring.js +0 -61
- package/dist/client/factories/providerFactory.js +0 -166
- package/dist/client/factories/providerRegistry.js +0 -166
- package/dist/client/features/ppt/constants.js +0 -896
- package/dist/client/features/ppt/contentPlanner.js +0 -529
- package/dist/client/features/ppt/presentationOrchestrator.js +0 -236
- package/dist/client/features/ppt/slideGenerator.js +0 -532
- package/dist/client/features/ppt/slideRenderers.js +0 -2383
- package/dist/client/features/ppt/slideTypeInference.js +0 -405
- package/dist/client/features/ppt/types.js +0 -13
- package/dist/client/features/ppt/utils.js +0 -443
- package/dist/client/files/fileReferenceRegistry.js +0 -1543
- package/dist/client/files/fileTools.js +0 -450
- package/dist/client/files/streamingReader.js +0 -321
- package/dist/client/files/types.js +0 -23
- package/dist/client/hitl/hitlErrors.js +0 -54
- package/dist/client/hitl/hitlManager.js +0 -460
- package/dist/client/mcp/agentExposure.js +0 -356
- package/dist/client/mcp/auth/index.js +0 -11
- package/dist/client/mcp/auth/oauthClientProvider.js +0 -325
- package/dist/client/mcp/auth/tokenStorage.js +0 -134
- package/dist/client/mcp/batching/index.js +0 -10
- package/dist/client/mcp/batching/requestBatcher.js +0 -441
- package/dist/client/mcp/caching/index.js +0 -10
- package/dist/client/mcp/caching/toolCache.js +0 -433
- package/dist/client/mcp/elicitation/elicitationManager.js +0 -376
- package/dist/client/mcp/elicitation/index.js +0 -11
- package/dist/client/mcp/elicitation/types.js +0 -10
- package/dist/client/mcp/elicitationProtocol.js +0 -375
- package/dist/client/mcp/enhancedToolDiscovery.js +0 -481
- package/dist/client/mcp/externalServerManager.js +0 -1478
- package/dist/client/mcp/factory.js +0 -161
- package/dist/client/mcp/flexibleToolValidator.js +0 -161
- package/dist/client/mcp/httpRateLimiter.js +0 -391
- package/dist/client/mcp/httpRetryHandler.js +0 -178
- package/dist/client/mcp/index.js +0 -74
- package/dist/client/mcp/mcpCircuitBreaker.js +0 -427
- package/dist/client/mcp/mcpClientFactory.js +0 -708
- package/dist/client/mcp/mcpRegistryClient.js +0 -488
- package/dist/client/mcp/mcpServerBase.js +0 -373
- package/dist/client/mcp/multiServerManager.js +0 -579
- package/dist/client/mcp/registry.js +0 -158
- package/dist/client/mcp/routing/index.js +0 -10
- package/dist/client/mcp/routing/toolRouter.js +0 -416
- package/dist/client/mcp/serverCapabilities.js +0 -502
- package/dist/client/mcp/servers/agent/directToolsServer.js +0 -150
- package/dist/client/mcp/toolAnnotations.js +0 -239
- package/dist/client/mcp/toolConverter.js +0 -258
- package/dist/client/mcp/toolDiscoveryService.js +0 -798
- package/dist/client/mcp/toolIntegration.js +0 -334
- package/dist/client/mcp/toolRegistry.js +0 -729
- package/dist/client/memory/hippocampusInitializer.js +0 -19
- package/dist/client/memory/memoryRetrievalTools.js +0 -166
- package/dist/client/middleware/builtin/analytics.js +0 -132
- package/dist/client/middleware/builtin/autoEvaluation.js +0 -203
- package/dist/client/middleware/builtin/guardrails.js +0 -109
- package/dist/client/middleware/builtin/lifecycle.js +0 -168
- package/dist/client/middleware/factory.js +0 -327
- package/dist/client/middleware/registry.js +0 -295
- package/dist/client/middleware/utils/guardrailsUtils.js +0 -396
- package/dist/client/models/anthropicModels.js +0 -527
- package/dist/client/neurolink.js +0 -8233
- package/dist/client/observability/exporterRegistry.js +0 -413
- package/dist/client/observability/exporters/arizeExporter.js +0 -138
- package/dist/client/observability/exporters/baseExporter.js +0 -190
- package/dist/client/observability/exporters/braintrustExporter.js +0 -154
- package/dist/client/observability/exporters/datadogExporter.js +0 -196
- package/dist/client/observability/exporters/laminarExporter.js +0 -302
- package/dist/client/observability/exporters/langfuseExporter.js +0 -209
- package/dist/client/observability/exporters/langsmithExporter.js +0 -143
- package/dist/client/observability/exporters/otelExporter.js +0 -164
- package/dist/client/observability/exporters/posthogExporter.js +0 -287
- package/dist/client/observability/exporters/sentryExporter.js +0 -165
- package/dist/client/observability/index.js +0 -31
- package/dist/client/observability/metricsAggregator.js +0 -556
- package/dist/client/observability/otelBridge.js +0 -131
- package/dist/client/observability/retryPolicy.js +0 -383
- package/dist/client/observability/sampling/samplers.js +0 -216
- package/dist/client/observability/spanProcessor.js +0 -303
- package/dist/client/observability/tokenTracker.js +0 -413
- package/dist/client/observability/types/exporterTypes.js +0 -5
- package/dist/client/observability/types/index.js +0 -4
- package/dist/client/observability/types/spanTypes.js +0 -92
- package/dist/client/observability/utils/safeMetadata.js +0 -25
- package/dist/client/observability/utils/spanSerializer.js +0 -292
- package/dist/client/processors/archive/ArchiveProcessor.js +0 -1308
- package/dist/client/processors/base/BaseFileProcessor.js +0 -614
- package/dist/client/processors/base/types.js +0 -82
- package/dist/client/processors/config/fileTypes.js +0 -520
- package/dist/client/processors/config/index.js +0 -92
- package/dist/client/processors/config/languageMap.js +0 -410
- package/dist/client/processors/config/mimeTypes.js +0 -363
- package/dist/client/processors/config/sizeLimits.js +0 -258
- package/dist/client/processors/document/ExcelProcessor.js +0 -590
- package/dist/client/processors/document/OpenDocumentProcessor.js +0 -212
- package/dist/client/processors/document/PptxProcessor.js +0 -157
- package/dist/client/processors/document/RtfProcessor.js +0 -361
- package/dist/client/processors/document/WordProcessor.js +0 -353
- package/dist/client/processors/errors/FileErrorCode.js +0 -255
- package/dist/client/processors/errors/errorHelpers.js +0 -386
- package/dist/client/processors/errors/errorSerializer.js +0 -507
- package/dist/client/processors/errors/index.js +0 -49
- package/dist/client/processors/markup/SvgProcessor.js +0 -240
- package/dist/client/processors/media/AudioProcessor.js +0 -707
- package/dist/client/processors/media/VideoProcessor.js +0 -1045
- package/dist/client/providers/amazonBedrock.js +0 -1512
- package/dist/client/providers/amazonSagemaker.js +0 -162
- package/dist/client/providers/anthropic.js +0 -831
- package/dist/client/providers/azureOpenai.js +0 -143
- package/dist/client/providers/googleAiStudio.js +0 -1200
- package/dist/client/providers/googleNativeGemini3.js +0 -543
- package/dist/client/providers/googleVertex.js +0 -2936
- package/dist/client/providers/huggingFace.js +0 -315
- package/dist/client/providers/litellm.js +0 -488
- package/dist/client/providers/mistral.js +0 -157
- package/dist/client/providers/ollama.js +0 -1579
- package/dist/client/providers/openAI.js +0 -627
- package/dist/client/providers/openRouter.js +0 -543
- package/dist/client/providers/openaiCompatible.js +0 -290
- package/dist/client/providers/providerTypeUtils.js +0 -46
- package/dist/client/providers/sagemaker/adaptive-semaphore.js +0 -215
- package/dist/client/providers/sagemaker/client.js +0 -472
- package/dist/client/providers/sagemaker/config.js +0 -317
- package/dist/client/providers/sagemaker/detection.js +0 -606
- package/dist/client/providers/sagemaker/error-constants.js +0 -227
- package/dist/client/providers/sagemaker/errors.js +0 -299
- package/dist/client/providers/sagemaker/language-model.js +0 -775
- package/dist/client/providers/sagemaker/parsers.js +0 -634
- package/dist/client/providers/sagemaker/streaming.js +0 -331
- package/dist/client/providers/sagemaker/structured-parser.js +0 -625
- package/dist/client/proxy/accountQuota.js +0 -162
- package/dist/client/proxy/claudeFormat.js +0 -595
- package/dist/client/proxy/modelRouter.js +0 -29
- package/dist/client/proxy/oauthFetch.js +0 -367
- package/dist/client/proxy/proxyFetch.js +0 -586
- package/dist/client/proxy/requestLogger.js +0 -207
- package/dist/client/proxy/tokenRefresh.js +0 -124
- package/dist/client/proxy/usageStats.js +0 -74
- package/dist/client/proxy/utils/noProxyUtils.js +0 -149
- package/dist/client/rag/ChunkerFactory.js +0 -320
- package/dist/client/rag/ChunkerRegistry.js +0 -421
- package/dist/client/rag/chunkers/BaseChunker.js +0 -143
- package/dist/client/rag/chunkers/CharacterChunker.js +0 -28
- package/dist/client/rag/chunkers/HTMLChunker.js +0 -38
- package/dist/client/rag/chunkers/JSONChunker.js +0 -68
- package/dist/client/rag/chunkers/LaTeXChunker.js +0 -63
- package/dist/client/rag/chunkers/MarkdownChunker.js +0 -306
- package/dist/client/rag/chunkers/RecursiveChunker.js +0 -139
- package/dist/client/rag/chunkers/SemanticMarkdownChunker.js +0 -138
- package/dist/client/rag/chunkers/SentenceChunker.js +0 -66
- package/dist/client/rag/chunkers/TokenChunker.js +0 -61
- package/dist/client/rag/chunkers/index.js +0 -15
- package/dist/client/rag/chunking/characterChunker.js +0 -142
- package/dist/client/rag/chunking/chunkerRegistry.js +0 -194
- package/dist/client/rag/chunking/htmlChunker.js +0 -247
- package/dist/client/rag/chunking/index.js +0 -17
- package/dist/client/rag/chunking/jsonChunker.js +0 -281
- package/dist/client/rag/chunking/latexChunker.js +0 -251
- package/dist/client/rag/chunking/markdownChunker.js +0 -373
- package/dist/client/rag/chunking/recursiveChunker.js +0 -148
- package/dist/client/rag/chunking/semanticChunker.js +0 -306
- package/dist/client/rag/chunking/sentenceChunker.js +0 -230
- package/dist/client/rag/chunking/tokenChunker.js +0 -183
- package/dist/client/rag/document/MDocument.js +0 -392
- package/dist/client/rag/document/index.js +0 -5
- package/dist/client/rag/document/loaders.js +0 -500
- package/dist/client/rag/errors/RAGError.js +0 -274
- package/dist/client/rag/errors/index.js +0 -6
- package/dist/client/rag/graphRag/graphRAG.js +0 -401
- package/dist/client/rag/graphRag/index.js +0 -4
- package/dist/client/rag/index.js +0 -141
- package/dist/client/rag/metadata/MetadataExtractorFactory.js +0 -418
- package/dist/client/rag/metadata/MetadataExtractorRegistry.js +0 -362
- package/dist/client/rag/metadata/index.js +0 -9
- package/dist/client/rag/metadata/metadataExtractor.js +0 -280
- package/dist/client/rag/pipeline/RAGPipeline.js +0 -436
- package/dist/client/rag/pipeline/contextAssembly.js +0 -341
- package/dist/client/rag/pipeline/index.js +0 -5
- package/dist/client/rag/ragIntegration.js +0 -321
- package/dist/client/rag/reranker/RerankerFactory.js +0 -430
- package/dist/client/rag/reranker/RerankerRegistry.js +0 -402
- package/dist/client/rag/reranker/index.js +0 -9
- package/dist/client/rag/reranker/reranker.js +0 -277
- package/dist/client/rag/resilience/CircuitBreaker.js +0 -431
- package/dist/client/rag/resilience/RetryHandler.js +0 -304
- package/dist/client/rag/resilience/index.js +0 -7
- package/dist/client/rag/retrieval/hybridSearch.js +0 -335
- package/dist/client/rag/retrieval/index.js +0 -5
- package/dist/client/rag/retrieval/vectorQueryTool.js +0 -307
- package/dist/client/rag/types.js +0 -8
- package/dist/client/sdk/toolRegistration.js +0 -377
- package/dist/client/server/abstract/baseServerAdapter.js +0 -575
- package/dist/client/server/adapters/expressAdapter.js +0 -486
- package/dist/client/server/adapters/fastifyAdapter.js +0 -472
- package/dist/client/server/adapters/honoAdapter.js +0 -632
- package/dist/client/server/adapters/koaAdapter.js +0 -510
- package/dist/client/server/errors.js +0 -486
- package/dist/client/server/factory/serverAdapterFactory.js +0 -160
- package/dist/client/server/index.js +0 -108
- package/dist/client/server/middleware/abortSignal.js +0 -111
- package/dist/client/server/middleware/auth.js +0 -388
- package/dist/client/server/middleware/cache.js +0 -359
- package/dist/client/server/middleware/common.js +0 -281
- package/dist/client/server/middleware/deprecation.js +0 -190
- package/dist/client/server/middleware/mcpBodyAttachment.js +0 -63
- package/dist/client/server/middleware/rateLimit.js +0 -227
- package/dist/client/server/middleware/validation.js +0 -388
- package/dist/client/server/openapi/generator.js +0 -398
- package/dist/client/server/openapi/index.js +0 -36
- package/dist/client/server/openapi/schemas.js +0 -695
- package/dist/client/server/openapi/templates.js +0 -374
- package/dist/client/server/routes/agentRoutes.js +0 -189
- package/dist/client/server/routes/claudeProxyRoutes.js +0 -1600
- package/dist/client/server/routes/healthRoutes.js +0 -187
- package/dist/client/server/routes/index.js +0 -57
- package/dist/client/server/routes/mcpRoutes.js +0 -342
- package/dist/client/server/routes/memoryRoutes.js +0 -350
- package/dist/client/server/routes/openApiRoutes.js +0 -126
- package/dist/client/server/routes/toolRoutes.js +0 -199
- package/dist/client/server/streaming/dataStream.js +0 -486
- package/dist/client/server/streaming/index.js +0 -11
- package/dist/client/server/types.js +0 -67
- package/dist/client/server/utils/redaction.js +0 -334
- package/dist/client/server/utils/validation.js +0 -243
- package/dist/client/server/websocket/WebSocketHandler.js +0 -383
- package/dist/client/server/websocket/index.js +0 -4
- package/dist/client/services/server/ai/observability/instrumentation.js +0 -808
- package/dist/client/telemetry/attributes.js +0 -100
- package/dist/client/telemetry/index.js +0 -26
- package/dist/client/telemetry/telemetryService.js +0 -308
- package/dist/client/telemetry/tracers.js +0 -17
- package/dist/client/telemetry/withSpan.js +0 -34
- package/dist/client/types/actionTypes.js +0 -6
- package/dist/client/types/analytics.js +0 -5
- package/dist/client/types/authTypes.js +0 -9
- package/dist/client/types/circuitBreakerErrors.js +0 -34
- package/dist/client/types/cli.js +0 -21
- package/dist/client/types/clientTypes.js +0 -10
- package/dist/client/types/common.js +0 -51
- package/dist/client/types/configTypes.js +0 -49
- package/dist/client/types/content.js +0 -19
- package/dist/client/types/contextTypes.js +0 -400
- package/dist/client/types/conversation.js +0 -47
- package/dist/client/types/conversationMemoryInterface.js +0 -6
- package/dist/client/types/domainTypes.js +0 -5
- package/dist/client/types/errors.js +0 -167
- package/dist/client/types/evaluation.js +0 -5
- package/dist/client/types/evaluationProviders.js +0 -5
- package/dist/client/types/evaluationTypes.js +0 -1
- package/dist/client/types/externalMcp.js +0 -6
- package/dist/client/types/fileReferenceTypes.js +0 -8
- package/dist/client/types/fileTypes.js +0 -4
- package/dist/client/types/generateTypes.js +0 -1
- package/dist/client/types/guardrails.js +0 -1
- package/dist/client/types/hitlTypes.js +0 -8
- package/dist/client/types/index.js +0 -57
- package/dist/client/types/mcpTypes.js +0 -5
- package/dist/client/types/middlewareTypes.js +0 -1
- package/dist/client/types/modelTypes.js +0 -30
- package/dist/client/types/multimodal.js +0 -135
- package/dist/client/types/observability.js +0 -6
- package/dist/client/types/pptTypes.js +0 -82
- package/dist/client/types/providers.js +0 -111
- package/dist/client/types/proxyTypes.js +0 -16
- package/dist/client/types/ragTypes.js +0 -7
- package/dist/client/types/sdkTypes.js +0 -8
- package/dist/client/types/serviceTypes.js +0 -5
- package/dist/client/types/streamTypes.js +0 -1
- package/dist/client/types/subscriptionTypes.js +0 -9
- package/dist/client/types/taskClassificationTypes.js +0 -5
- package/dist/client/types/tools.js +0 -24
- package/dist/client/types/ttsTypes.js +0 -57
- package/dist/client/types/typeAliases.js +0 -48
- package/dist/client/types/utilities.js +0 -4
- package/dist/client/types/workflowTypes.js +0 -30
- package/dist/client/utils/async/withTimeout.js +0 -98
- package/dist/client/utils/asyncMutex.js +0 -60
- package/dist/client/utils/conversationMemory.js +0 -431
- package/dist/client/utils/csvProcessor.js +0 -846
- package/dist/client/utils/errorHandling.js +0 -936
- package/dist/client/utils/evaluationUtils.js +0 -131
- package/dist/client/utils/factoryProcessing.js +0 -589
- package/dist/client/utils/fileDetector.js +0 -2161
- package/dist/client/utils/imageCache.js +0 -376
- package/dist/client/utils/imageProcessor.js +0 -704
- package/dist/client/utils/logger.js +0 -491
- package/dist/client/utils/mcpDefaults.js +0 -134
- package/dist/client/utils/messageBuilder.js +0 -1653
- package/dist/client/utils/modelAliasResolver.js +0 -54
- package/dist/client/utils/modelDetection.js +0 -80
- package/dist/client/utils/modelRouter.js +0 -292
- package/dist/client/utils/multimodalOptionsBuilder.js +0 -65
- package/dist/client/utils/observabilityHelpers.js +0 -47
- package/dist/client/utils/parameterValidation.js +0 -966
- package/dist/client/utils/pdfProcessor.js +0 -410
- package/dist/client/utils/performance.js +0 -222
- package/dist/client/utils/pricing.js +0 -340
- package/dist/client/utils/promptRedaction.js +0 -62
- package/dist/client/utils/providerConfig.js +0 -1009
- package/dist/client/utils/providerHealth.js +0 -1237
- package/dist/client/utils/providerRetry.js +0 -112
- package/dist/client/utils/providerUtils.js +0 -434
- package/dist/client/utils/rateLimiter.js +0 -200
- package/dist/client/utils/redis.js +0 -368
- package/dist/client/utils/retryHandler.js +0 -269
- package/dist/client/utils/retryability.js +0 -22
- package/dist/client/utils/sanitizers/svg.js +0 -481
- package/dist/client/utils/schemaConversion.js +0 -255
- package/dist/client/utils/taskClassificationUtils.js +0 -149
- package/dist/client/utils/taskClassifier.js +0 -94
- package/dist/client/utils/thinkingConfig.js +0 -104
- package/dist/client/utils/timeout.js +0 -359
- package/dist/client/utils/tokenEstimation.js +0 -142
- package/dist/client/utils/tokenLimits.js +0 -125
- package/dist/client/utils/tokenUtils.js +0 -239
- package/dist/client/utils/toolUtils.js +0 -75
- package/dist/client/utils/transformationUtils.js +0 -554
- package/dist/client/utils/ttsProcessor.js +0 -286
- package/dist/client/utils/typeUtils.js +0 -97
- package/dist/client/utils/videoAnalysisProcessor.js +0 -67
- package/dist/client/workflow/config.js +0 -398
- package/dist/client/workflow/core/ensembleExecutor.js +0 -407
- package/dist/client/workflow/core/judgeScorer.js +0 -544
- package/dist/client/workflow/core/responseConditioner.js +0 -225
- package/dist/client/workflow/core/types/conditionerTypes.js +0 -7
- package/dist/client/workflow/core/types/ensembleTypes.js +0 -7
- package/dist/client/workflow/core/types/index.js +0 -7
- package/dist/client/workflow/core/types/judgeTypes.js +0 -7
- package/dist/client/workflow/core/types/layerTypes.js +0 -7
- package/dist/client/workflow/core/types/registryTypes.js +0 -7
- package/dist/client/workflow/core/workflowRegistry.js +0 -304
- package/dist/client/workflow/core/workflowRunner.js +0 -586
- package/dist/client/workflow/index.js +0 -50
- package/dist/client/workflow/types.js +0 -9
- package/dist/client/workflow/utils/types/index.js +0 -7
- package/dist/client/workflow/utils/workflowMetrics.js +0 -311
- package/dist/client/workflow/utils/workflowValidation.js +0 -420
- package/dist/client/workflow/workflows/adaptiveWorkflow.js +0 -366
- package/dist/client/workflow/workflows/consensusWorkflow.js +0 -192
- package/dist/client/workflow/workflows/fallbackWorkflow.js +0 -225
- package/dist/client/workflow/workflows/multiJudgeWorkflow.js +0 -351
- /package/dist/client/{client/reactHooks.js → reactHooks.js} +0 -0
|
@@ -1,1009 +0,0 @@
|
|
|
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
|
-
* Extended with Claude subscription OAuth support
|
|
7
|
-
*/
|
|
8
|
-
import { logger } from "./logger.js";
|
|
9
|
-
/**
|
|
10
|
-
* API key format validation patterns (extracted from advanced validation system)
|
|
11
|
-
* Exported for use across the codebase to replace scattered regex patterns
|
|
12
|
-
*/
|
|
13
|
-
export const API_KEY_FORMATS = {
|
|
14
|
-
openai: /^sk-[A-Za-z0-9]{48,}$/,
|
|
15
|
-
anthropic: /^sk-ant-[A-Za-z0-9\-_]{95,}$/,
|
|
16
|
-
"google-ai": /^AIza[A-Za-z0-9\-_]{35}$/,
|
|
17
|
-
huggingface: /^hf_[A-Za-z0-9]{37}$/,
|
|
18
|
-
mistral: /^[A-Za-z0-9]{32}$/,
|
|
19
|
-
azure: /^[A-Za-z0-9]{32}$/,
|
|
20
|
-
aws: /^[A-Z0-9]{20}$/, // Access Key ID format
|
|
21
|
-
bedrock: /^[A-Z0-9]{20}$/, // AWS access key ID: 20 uppercase alphanumerics
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* OAuth token format validation patterns
|
|
25
|
-
* These patterns are more flexible as OAuth tokens can vary by provider
|
|
26
|
-
*/
|
|
27
|
-
export const OAUTH_TOKEN_FORMATS = {
|
|
28
|
-
// OAuth access tokens are typically JWT or opaque tokens
|
|
29
|
-
// Claude OAuth access tokens: Bearer tokens with typical JWT structure or opaque format
|
|
30
|
-
"anthropic-access": /^[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+$|^[A-Za-z0-9\-_]{32,}$/,
|
|
31
|
-
// Refresh tokens are typically longer opaque strings
|
|
32
|
-
"anthropic-refresh": /^[A-Za-z0-9\-_]{32,}$/,
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* API key length constants to replace scattered magic numbers
|
|
36
|
-
*/
|
|
37
|
-
export const API_KEY_LENGTHS = {
|
|
38
|
-
OPENAI_MIN: 48, // OpenAI API keys minimum length
|
|
39
|
-
ANTHROPIC_MIN: 95, // Anthropic API keys minimum length
|
|
40
|
-
HUGGINGFACE_EXACT: 37, // HuggingFace tokens exact length
|
|
41
|
-
AZURE_MIN: 32, // Azure OpenAI API keys minimum length
|
|
42
|
-
MISTRAL_EXACT: 32, // Mistral API keys exact length
|
|
43
|
-
AWS_ACCESS_KEY: 20, // AWS access key ID exact length
|
|
44
|
-
GOOGLE_AI_EXACT: 39, // Google AI Studio keys exact length (with AIza prefix)
|
|
45
|
-
};
|
|
46
|
-
/**
|
|
47
|
-
* Project ID format validation (for Google Cloud)
|
|
48
|
-
*/
|
|
49
|
-
export const PROJECT_ID_FORMAT = {
|
|
50
|
-
MIN_LENGTH: 6, // Minimum project ID length
|
|
51
|
-
MAX_LENGTH: 30, // Maximum project ID length
|
|
52
|
-
PATTERN: /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/, // Google Cloud project ID format
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Validates API key format for a specific provider
|
|
56
|
-
* @param providerKey Provider identifier (e.g., 'openai', 'anthropic')
|
|
57
|
-
* @param apiKey The API key to validate
|
|
58
|
-
* @returns True if format is valid
|
|
59
|
-
*/
|
|
60
|
-
export function validateApiKeyFormat(providerKey, apiKey) {
|
|
61
|
-
const format = API_KEY_FORMATS[providerKey.toLowerCase()];
|
|
62
|
-
if (!format) {
|
|
63
|
-
// No format validation available, assume valid if not empty
|
|
64
|
-
return apiKey.length > 0;
|
|
65
|
-
}
|
|
66
|
-
return format.test(apiKey);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Enhanced validation with format checking
|
|
70
|
-
* @param config Provider configuration options
|
|
71
|
-
* @param enableFormatValidation Whether to validate API key format
|
|
72
|
-
* @returns Validation result with detailed information
|
|
73
|
-
*/
|
|
74
|
-
export function validateApiKeyEnhanced(config, enableFormatValidation = false) {
|
|
75
|
-
// Check primary environment variable
|
|
76
|
-
let apiKey = process.env[config.envVarName];
|
|
77
|
-
// Check fallback environment variables if provided
|
|
78
|
-
if (!apiKey && config.fallbackEnvVars) {
|
|
79
|
-
for (const fallbackVar of config.fallbackEnvVars) {
|
|
80
|
-
apiKey = process.env[fallbackVar];
|
|
81
|
-
if (apiKey) {
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (!apiKey) {
|
|
87
|
-
return {
|
|
88
|
-
isValid: false,
|
|
89
|
-
apiKey: "",
|
|
90
|
-
errorType: "missing",
|
|
91
|
-
error: createConfigErrorMessage(config),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
// Optional format validation
|
|
95
|
-
if (enableFormatValidation) {
|
|
96
|
-
const providerKey = config.providerName.toLowerCase().replace(/\s/g, "-");
|
|
97
|
-
const formatValid = validateApiKeyFormat(providerKey, apiKey);
|
|
98
|
-
if (!formatValid) {
|
|
99
|
-
return {
|
|
100
|
-
isValid: false,
|
|
101
|
-
apiKey,
|
|
102
|
-
formatValid: false,
|
|
103
|
-
errorType: "format",
|
|
104
|
-
error: `Invalid ${config.providerName} API key format. Please check your API key.`,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return {
|
|
109
|
-
isValid: true,
|
|
110
|
-
apiKey,
|
|
111
|
-
formatValid: enableFormatValidation ? true : undefined,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Validates an API key for a provider and returns it (BACKWARD COMPATIBLE)
|
|
116
|
-
* Throws detailed error message if validation fails
|
|
117
|
-
* @param config Provider configuration options
|
|
118
|
-
* @returns The validated API key
|
|
119
|
-
*/
|
|
120
|
-
export function validateApiKey(config) {
|
|
121
|
-
// Check primary environment variable
|
|
122
|
-
let apiKey = process.env[config.envVarName];
|
|
123
|
-
// Check fallback environment variables if provided
|
|
124
|
-
if (!apiKey && config.fallbackEnvVars) {
|
|
125
|
-
for (const fallbackVar of config.fallbackEnvVars) {
|
|
126
|
-
apiKey = process.env[fallbackVar];
|
|
127
|
-
if (apiKey) {
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (!apiKey) {
|
|
133
|
-
throw new Error(createConfigErrorMessage(config));
|
|
134
|
-
}
|
|
135
|
-
return apiKey;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Creates a standardized configuration error message
|
|
139
|
-
* @param config Provider configuration options
|
|
140
|
-
* @returns Formatted error message with setup instructions
|
|
141
|
-
*/
|
|
142
|
-
function createConfigErrorMessage(config) {
|
|
143
|
-
const envVarsList = config.fallbackEnvVars
|
|
144
|
-
? [config.envVarName, ...config.fallbackEnvVars].join(" or ")
|
|
145
|
-
: config.envVarName;
|
|
146
|
-
return `❌ ${config.providerName} Provider Configuration Error
|
|
147
|
-
|
|
148
|
-
Missing required environment variable: ${envVarsList}
|
|
149
|
-
|
|
150
|
-
🔧 Step 1: Get ${config.description}
|
|
151
|
-
${config.instructions.join("\n")}
|
|
152
|
-
|
|
153
|
-
🔧 Step 2: Set Environment Variable
|
|
154
|
-
Add to your .env file:
|
|
155
|
-
${config.envVarName}=your_key_here
|
|
156
|
-
|
|
157
|
-
🔧 Step 3: Restart Application
|
|
158
|
-
Restart your application to load the new environment variables.`;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Gets a provider model with fallback to default
|
|
162
|
-
* @param envVar Environment variable name for the model
|
|
163
|
-
* @param defaultModel Default model to use if env var not set
|
|
164
|
-
* @returns The model name to use
|
|
165
|
-
*/
|
|
166
|
-
export function getProviderModel(envVar, defaultModel) {
|
|
167
|
-
return process.env[envVar] || defaultModel;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Checks if provider credentials are available
|
|
171
|
-
* @param envVars Array of environment variable names to check
|
|
172
|
-
* @returns True if one of the credentials is available
|
|
173
|
-
*/
|
|
174
|
-
export function hasProviderCredentials(envVars) {
|
|
175
|
-
return envVars.some((envVar) => !!process.env[envVar]);
|
|
176
|
-
}
|
|
177
|
-
// =============================================================================
|
|
178
|
-
// PROVIDER-SPECIFIC CONFIGURATION CREATORS
|
|
179
|
-
// =============================================================================
|
|
180
|
-
/**
|
|
181
|
-
* Creates Anthropic provider configuration
|
|
182
|
-
* Supports both API key and OAuth authentication methods
|
|
183
|
-
*/
|
|
184
|
-
export function createAnthropicConfig() {
|
|
185
|
-
const authMethod = getAnthropicAuthMethod();
|
|
186
|
-
const tier = getAnthropicSubscriptionTier();
|
|
187
|
-
// Base instructions for API key authentication
|
|
188
|
-
const apiKeyInstructions = [
|
|
189
|
-
"🔑 Option 1: API Key Authentication (Recommended for developers)",
|
|
190
|
-
"1. Visit: https://console.anthropic.com/",
|
|
191
|
-
"2. Sign in or create an account",
|
|
192
|
-
"3. Go to API Keys section",
|
|
193
|
-
"4. Create a new API key",
|
|
194
|
-
"5. Set ANTHROPIC_API_KEY in your .env file",
|
|
195
|
-
];
|
|
196
|
-
// OAuth instructions for Claude subscription users
|
|
197
|
-
const oauthInstructions = [
|
|
198
|
-
"",
|
|
199
|
-
"🔐 Option 2: OAuth Authentication (For Claude Pro/Max subscribers)",
|
|
200
|
-
"1. Set ANTHROPIC_AUTH_METHOD=oauth in your .env file",
|
|
201
|
-
"2. Set ANTHROPIC_SUBSCRIPTION_TIER to your tier (free, pro, max)",
|
|
202
|
-
"3. Run the OAuth flow to obtain tokens, or set pre-configured tokens:",
|
|
203
|
-
" - ANTHROPIC_OAUTH_TOKEN=your_access_token",
|
|
204
|
-
" - ANTHROPIC_OAUTH_REFRESH_TOKEN=your_refresh_token (optional)",
|
|
205
|
-
"",
|
|
206
|
-
"📋 Available Subscription Tiers:",
|
|
207
|
-
" - free: Free tier with limited usage",
|
|
208
|
-
" - pro: Claude Pro ($20/month) - Extended usage limits",
|
|
209
|
-
" - max: Claude Max - Highest usage limits",
|
|
210
|
-
" - api: API-based access (pay-per-use)",
|
|
211
|
-
];
|
|
212
|
-
// Choose instructions based on current auth method
|
|
213
|
-
const instructions = authMethod === "oauth"
|
|
214
|
-
? [...oauthInstructions.slice(1), "", ...apiKeyInstructions]
|
|
215
|
-
: [...apiKeyInstructions, ...oauthInstructions];
|
|
216
|
-
return {
|
|
217
|
-
providerName: "Anthropic",
|
|
218
|
-
envVarName: authMethod === "oauth" ? "ANTHROPIC_OAUTH_TOKEN" : "ANTHROPIC_API_KEY",
|
|
219
|
-
setupUrl: authMethod === "oauth"
|
|
220
|
-
? "https://claude.ai/settings"
|
|
221
|
-
: "https://console.anthropic.com/",
|
|
222
|
-
description: authMethod === "oauth"
|
|
223
|
-
? `Anthropic OAuth Token (${tier} tier)`
|
|
224
|
-
: "Anthropic API Key",
|
|
225
|
-
instructions,
|
|
226
|
-
fallbackEnvVars: authMethod === "oauth"
|
|
227
|
-
? ["ANTHROPIC_API_KEY"] // Fall back to API key if OAuth token not present
|
|
228
|
-
: [
|
|
229
|
-
"ANTHROPIC_OAUTH_TOKEN",
|
|
230
|
-
"CLAUDE_OAUTH_TOKEN",
|
|
231
|
-
"ANTHROPIC_OAUTH_ACCESS_TOKEN",
|
|
232
|
-
], // Fall back to OAuth if API key not present
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Creates OpenAI provider configuration
|
|
237
|
-
*/
|
|
238
|
-
export function createOpenAIConfig() {
|
|
239
|
-
return {
|
|
240
|
-
providerName: "OPENAI",
|
|
241
|
-
envVarName: "OPENAI_API_KEY",
|
|
242
|
-
setupUrl: "https://platform.openai.com/api-keys",
|
|
243
|
-
description: "Credentials",
|
|
244
|
-
instructions: [
|
|
245
|
-
"1. Visit: https://platform.openai.com/api-keys",
|
|
246
|
-
"2. Create new API key",
|
|
247
|
-
"3. Copy the key",
|
|
248
|
-
],
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Creates HuggingFace provider configuration
|
|
253
|
-
*/
|
|
254
|
-
export function createHuggingFaceConfig() {
|
|
255
|
-
return {
|
|
256
|
-
providerName: "HuggingFace",
|
|
257
|
-
envVarName: "HUGGINGFACE_API_KEY",
|
|
258
|
-
setupUrl: "https://huggingface.co/settings/tokens",
|
|
259
|
-
description: "Credentials",
|
|
260
|
-
instructions: [
|
|
261
|
-
"1. Visit: https://huggingface.co/settings/tokens",
|
|
262
|
-
"2. Create new API token",
|
|
263
|
-
"3. Copy the token",
|
|
264
|
-
],
|
|
265
|
-
fallbackEnvVars: ["HF_TOKEN"],
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Creates Mistral provider configuration
|
|
270
|
-
*/
|
|
271
|
-
export function createMistralConfig() {
|
|
272
|
-
return {
|
|
273
|
-
providerName: "Mistral",
|
|
274
|
-
envVarName: "MISTRAL_API_KEY",
|
|
275
|
-
setupUrl: "https://console.mistral.ai/",
|
|
276
|
-
description: "API key",
|
|
277
|
-
instructions: [
|
|
278
|
-
"1. Visit: https://console.mistral.ai/",
|
|
279
|
-
"2. Create or sign in to your account",
|
|
280
|
-
"3. Generate a new API key",
|
|
281
|
-
],
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Creates AWS Access Key configuration for Bedrock
|
|
286
|
-
*/
|
|
287
|
-
export function createAWSAccessKeyConfig() {
|
|
288
|
-
return {
|
|
289
|
-
providerName: "AWS Bedrock",
|
|
290
|
-
envVarName: "AWS_ACCESS_KEY_ID",
|
|
291
|
-
setupUrl: "https://console.aws.amazon.com/iam/",
|
|
292
|
-
description: "AWS Credentials",
|
|
293
|
-
instructions: [
|
|
294
|
-
"1. Visit: https://console.aws.amazon.com/iam/",
|
|
295
|
-
"2. Create IAM user with Bedrock permissions",
|
|
296
|
-
"3. Generate access key",
|
|
297
|
-
],
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Creates AWS Secret Key configuration for Bedrock
|
|
302
|
-
*/
|
|
303
|
-
export function createAWSSecretConfig() {
|
|
304
|
-
return {
|
|
305
|
-
providerName: "AWS Bedrock",
|
|
306
|
-
envVarName: "AWS_SECRET_ACCESS_KEY",
|
|
307
|
-
setupUrl: "https://console.aws.amazon.com/iam/",
|
|
308
|
-
description: "AWS Credentials",
|
|
309
|
-
instructions: [
|
|
310
|
-
"1. Visit: https://console.aws.amazon.com/iam/",
|
|
311
|
-
"2. Create IAM user with Bedrock permissions",
|
|
312
|
-
"3. Generate access key",
|
|
313
|
-
],
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Creates Azure OpenAI API Key configuration
|
|
318
|
-
*/
|
|
319
|
-
export function createAzureAPIKeyConfig() {
|
|
320
|
-
return {
|
|
321
|
-
providerName: "Azure OpenAI",
|
|
322
|
-
envVarName: "AZURE_OPENAI_API_KEY",
|
|
323
|
-
setupUrl: "https://portal.azure.com/",
|
|
324
|
-
description: "Azure OpenAI API Key",
|
|
325
|
-
instructions: [
|
|
326
|
-
"1. Visit: https://portal.azure.com/",
|
|
327
|
-
"2. Create or access Azure OpenAI resource",
|
|
328
|
-
"3. Get API key from Keys and Endpoint section",
|
|
329
|
-
],
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
/**
|
|
333
|
-
* Creates Azure OpenAI Endpoint configuration
|
|
334
|
-
*/
|
|
335
|
-
export function createAzureEndpointConfig() {
|
|
336
|
-
return {
|
|
337
|
-
providerName: "Azure OpenAI",
|
|
338
|
-
envVarName: "AZURE_OPENAI_ENDPOINT",
|
|
339
|
-
setupUrl: "https://portal.azure.com/",
|
|
340
|
-
description: "Azure OpenAI Endpoint",
|
|
341
|
-
instructions: [
|
|
342
|
-
"1. Visit: https://portal.azure.com/",
|
|
343
|
-
"2. Access your Azure OpenAI resource",
|
|
344
|
-
"3. Copy endpoint URL from Keys and Endpoint section",
|
|
345
|
-
],
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Creates OpenAI Compatible provider configuration
|
|
350
|
-
*/
|
|
351
|
-
export function createOpenAICompatibleConfig() {
|
|
352
|
-
return {
|
|
353
|
-
providerName: "OpenAI Compatible",
|
|
354
|
-
envVarName: "OPENAI_COMPATIBLE_API_KEY",
|
|
355
|
-
setupUrl: "https://openrouter.ai/",
|
|
356
|
-
description: "OpenAI-compatible API credentials",
|
|
357
|
-
instructions: [
|
|
358
|
-
"1. Set OPENAI_COMPATIBLE_BASE_URL to your endpoint (e.g., https://api.openrouter.ai/api/v1)",
|
|
359
|
-
"2. Get API key from your OpenAI-compatible service:",
|
|
360
|
-
" • OpenRouter: https://openrouter.ai/keys",
|
|
361
|
-
" • vLLM: Use a random value for local deployments",
|
|
362
|
-
" • LiteLLM: Check your LiteLLM server configuration",
|
|
363
|
-
"3. Set OPENAI_COMPATIBLE_API_KEY to your API key",
|
|
364
|
-
"4. Optionally set OPENAI_COMPATIBLE_MODEL (will auto-discover if not set)",
|
|
365
|
-
],
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
/**
|
|
369
|
-
* Creates Google Vertex Project ID configuration
|
|
370
|
-
*/
|
|
371
|
-
export function createVertexProjectConfig() {
|
|
372
|
-
return {
|
|
373
|
-
providerName: "Google Vertex AI",
|
|
374
|
-
envVarName: "GOOGLE_CLOUD_PROJECT_ID",
|
|
375
|
-
setupUrl: "https://console.cloud.google.com/",
|
|
376
|
-
description: "Google Cloud Credentials",
|
|
377
|
-
instructions: [
|
|
378
|
-
"1. Visit: https://console.cloud.google.com/",
|
|
379
|
-
"2. Create or select a project",
|
|
380
|
-
"3. Enable Vertex AI API",
|
|
381
|
-
"4. Set up authentication",
|
|
382
|
-
],
|
|
383
|
-
fallbackEnvVars: [
|
|
384
|
-
"VERTEX_PROJECT_ID",
|
|
385
|
-
"GOOGLE_VERTEX_PROJECT",
|
|
386
|
-
"GOOGLE_CLOUD_PROJECT",
|
|
387
|
-
],
|
|
388
|
-
};
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Creates Google Cloud Authentication configuration
|
|
392
|
-
*/
|
|
393
|
-
export function createGoogleAuthConfig() {
|
|
394
|
-
return {
|
|
395
|
-
providerName: "Google Vertex AI",
|
|
396
|
-
envVarName: "GOOGLE_APPLICATION_CREDENTIALS",
|
|
397
|
-
setupUrl: "https://console.cloud.google.com/",
|
|
398
|
-
description: "Google Cloud authentication",
|
|
399
|
-
instructions: [
|
|
400
|
-
"🔧 Option 1: Service Account Key File",
|
|
401
|
-
"GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json",
|
|
402
|
-
"",
|
|
403
|
-
"🔧 Option 2: Service Account Key (Base64)",
|
|
404
|
-
"GOOGLE_SERVICE_ACCOUNT_KEY=base64_encoded_key",
|
|
405
|
-
"",
|
|
406
|
-
"🔧 Option 3: Individual Credentials",
|
|
407
|
-
"GOOGLE_AUTH_CLIENT_EMAIL=your-service-account@project.iam.gserviceaccount.com",
|
|
408
|
-
"GOOGLE_AUTH_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----...",
|
|
409
|
-
],
|
|
410
|
-
fallbackEnvVars: ["GOOGLE_SERVICE_ACCOUNT_KEY"],
|
|
411
|
-
};
|
|
412
|
-
}
|
|
413
|
-
/**
|
|
414
|
-
* Creates Anthropic Base Provider configuration
|
|
415
|
-
*/
|
|
416
|
-
export function createAnthropicBaseConfig() {
|
|
417
|
-
return {
|
|
418
|
-
providerName: "ANTHROPIC",
|
|
419
|
-
envVarName: "ANTHROPIC_API_KEY",
|
|
420
|
-
setupUrl: "https://console.anthropic.com/",
|
|
421
|
-
description: "Credentials",
|
|
422
|
-
instructions: [
|
|
423
|
-
"Get your API key from https://console.anthropic.com/",
|
|
424
|
-
"",
|
|
425
|
-
"💡 Step 2: Add to your .env file (or export in CLI):",
|
|
426
|
-
],
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
// =============================================================================
|
|
430
|
-
// HELPER FUNCTIONS FOR SPECIFIC PROVIDER NEEDS
|
|
431
|
-
// =============================================================================
|
|
432
|
-
/**
|
|
433
|
-
* Gets AWS Region with default fallback
|
|
434
|
-
* Supports both AWS_REGION and AWS_DEFAULT_REGION for broader compatibility
|
|
435
|
-
*/
|
|
436
|
-
export function getAWSRegion() {
|
|
437
|
-
return (process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || "us-east-1");
|
|
438
|
-
}
|
|
439
|
-
/**
|
|
440
|
-
* Gets AWS Session Token if available
|
|
441
|
-
*/
|
|
442
|
-
export function getAWSSessionToken() {
|
|
443
|
-
return process.env.AWS_SESSION_TOKEN;
|
|
444
|
-
}
|
|
445
|
-
/**
|
|
446
|
-
* Checks if HuggingFace credentials are available
|
|
447
|
-
*/
|
|
448
|
-
export function hasHuggingFaceCredentials() {
|
|
449
|
-
return hasProviderCredentials(["HUGGINGFACE_API_KEY", "HF_TOKEN"]);
|
|
450
|
-
}
|
|
451
|
-
// =============================================================================
|
|
452
|
-
// ANTHROPIC/CLAUDE SUBSCRIPTION AUTH HELPERS
|
|
453
|
-
// =============================================================================
|
|
454
|
-
/**
|
|
455
|
-
* Gets the configured Anthropic authentication method
|
|
456
|
-
* Defaults to "api_key" for backward compatibility
|
|
457
|
-
* @returns The configured authentication method
|
|
458
|
-
*/
|
|
459
|
-
export function getAnthropicAuthMethod() {
|
|
460
|
-
const method = process.env.ANTHROPIC_AUTH_METHOD?.toLowerCase();
|
|
461
|
-
if (method === "oauth") {
|
|
462
|
-
return "oauth";
|
|
463
|
-
}
|
|
464
|
-
return "api_key";
|
|
465
|
-
}
|
|
466
|
-
/**
|
|
467
|
-
* Gets the configured Claude subscription tier
|
|
468
|
-
* Defaults to "api" for backward compatibility (API key users)
|
|
469
|
-
* @returns The configured subscription tier
|
|
470
|
-
*/
|
|
471
|
-
export function getAnthropicSubscriptionTier() {
|
|
472
|
-
const tier = process.env.ANTHROPIC_SUBSCRIPTION_TIER?.toLowerCase();
|
|
473
|
-
switch (tier) {
|
|
474
|
-
case "free":
|
|
475
|
-
return "free";
|
|
476
|
-
case "pro":
|
|
477
|
-
return "pro";
|
|
478
|
-
case "max":
|
|
479
|
-
return "max";
|
|
480
|
-
case "max_5":
|
|
481
|
-
return "max_5";
|
|
482
|
-
case "max_20":
|
|
483
|
-
return "max_20";
|
|
484
|
-
case "api":
|
|
485
|
-
default:
|
|
486
|
-
return "api";
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* Validates OAuth access token format
|
|
491
|
-
* @param token The token to validate
|
|
492
|
-
* @returns True if the token format is valid
|
|
493
|
-
*/
|
|
494
|
-
export function validateOAuthAccessToken(token) {
|
|
495
|
-
if (!token || token.length < 32) {
|
|
496
|
-
return false;
|
|
497
|
-
}
|
|
498
|
-
const format = OAUTH_TOKEN_FORMATS["anthropic-access"];
|
|
499
|
-
return format.test(token);
|
|
500
|
-
}
|
|
501
|
-
/**
|
|
502
|
-
* Validates OAuth refresh token format
|
|
503
|
-
* @param token The token to validate
|
|
504
|
-
* @returns True if the token format is valid
|
|
505
|
-
*/
|
|
506
|
-
export function validateOAuthRefreshToken(token) {
|
|
507
|
-
if (!token || token.length < 32) {
|
|
508
|
-
return false;
|
|
509
|
-
}
|
|
510
|
-
const format = OAUTH_TOKEN_FORMATS["anthropic-refresh"];
|
|
511
|
-
return format.test(token);
|
|
512
|
-
}
|
|
513
|
-
/**
|
|
514
|
-
* Detects the best available authentication method for Anthropic
|
|
515
|
-
* Checks environment variables and returns the most appropriate auth configuration
|
|
516
|
-
* @returns Complete authentication configuration
|
|
517
|
-
*/
|
|
518
|
-
export function detectAnthropicAuth() {
|
|
519
|
-
const explicitMethod = process.env.ANTHROPIC_AUTH_METHOD?.toLowerCase();
|
|
520
|
-
const tier = getAnthropicSubscriptionTier();
|
|
521
|
-
// Check for OAuth tokens — canonical + fallbacks for backward compatibility
|
|
522
|
-
const accessToken = process.env.ANTHROPIC_OAUTH_TOKEN ??
|
|
523
|
-
process.env.CLAUDE_OAUTH_TOKEN ??
|
|
524
|
-
process.env.ANTHROPIC_OAUTH_ACCESS_TOKEN;
|
|
525
|
-
const refreshToken = process.env.ANTHROPIC_OAUTH_REFRESH_TOKEN;
|
|
526
|
-
// Check for API key
|
|
527
|
-
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
528
|
-
// If explicit method is set, use it
|
|
529
|
-
if (explicitMethod === "oauth") {
|
|
530
|
-
if (accessToken) {
|
|
531
|
-
const isValidAccessToken = validateOAuthAccessToken(accessToken);
|
|
532
|
-
const isValidRefreshToken = refreshToken
|
|
533
|
-
? validateOAuthRefreshToken(refreshToken)
|
|
534
|
-
: true;
|
|
535
|
-
if (!isValidAccessToken) {
|
|
536
|
-
return {
|
|
537
|
-
method: "oauth",
|
|
538
|
-
tier,
|
|
539
|
-
accessToken,
|
|
540
|
-
refreshToken,
|
|
541
|
-
isConfigured: false,
|
|
542
|
-
error: "Invalid OAuth access token format. Token should be a valid JWT or opaque token.",
|
|
543
|
-
};
|
|
544
|
-
}
|
|
545
|
-
if (refreshToken && !isValidRefreshToken) {
|
|
546
|
-
return {
|
|
547
|
-
method: "oauth",
|
|
548
|
-
tier,
|
|
549
|
-
accessToken,
|
|
550
|
-
refreshToken,
|
|
551
|
-
isConfigured: false,
|
|
552
|
-
error: "Invalid OAuth refresh token format. Token should be at least 32 characters.",
|
|
553
|
-
};
|
|
554
|
-
}
|
|
555
|
-
return {
|
|
556
|
-
method: "oauth",
|
|
557
|
-
tier,
|
|
558
|
-
accessToken,
|
|
559
|
-
refreshToken,
|
|
560
|
-
isConfigured: true,
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
// OAuth method specified but no token
|
|
564
|
-
return {
|
|
565
|
-
method: "oauth",
|
|
566
|
-
tier,
|
|
567
|
-
isConfigured: false,
|
|
568
|
-
error: "OAuth authentication method specified but ANTHROPIC_OAUTH_TOKEN not set.",
|
|
569
|
-
};
|
|
570
|
-
}
|
|
571
|
-
// If explicit method is api_key or not set
|
|
572
|
-
if (apiKey) {
|
|
573
|
-
const isValidApiKey = validateApiKeyFormat("anthropic", apiKey);
|
|
574
|
-
if (!isValidApiKey) {
|
|
575
|
-
// Still return as configured but note the format issue
|
|
576
|
-
return {
|
|
577
|
-
method: "api_key",
|
|
578
|
-
tier: "api", // API key users are always on "api" tier
|
|
579
|
-
apiKey,
|
|
580
|
-
isConfigured: true,
|
|
581
|
-
error: "API key format may be invalid. Expected format: sk-ant-...",
|
|
582
|
-
};
|
|
583
|
-
}
|
|
584
|
-
return {
|
|
585
|
-
method: "api_key",
|
|
586
|
-
tier: "api",
|
|
587
|
-
apiKey,
|
|
588
|
-
isConfigured: true,
|
|
589
|
-
};
|
|
590
|
-
}
|
|
591
|
-
// Check if OAuth tokens are available without explicit method set
|
|
592
|
-
if (accessToken) {
|
|
593
|
-
const isValidAccessToken = validateOAuthAccessToken(accessToken);
|
|
594
|
-
return {
|
|
595
|
-
method: "oauth",
|
|
596
|
-
tier,
|
|
597
|
-
accessToken,
|
|
598
|
-
refreshToken,
|
|
599
|
-
isConfigured: isValidAccessToken,
|
|
600
|
-
error: isValidAccessToken
|
|
601
|
-
? undefined
|
|
602
|
-
: "Invalid OAuth access token format.",
|
|
603
|
-
};
|
|
604
|
-
}
|
|
605
|
-
// No authentication configured
|
|
606
|
-
return {
|
|
607
|
-
method: "api_key",
|
|
608
|
-
tier: "api",
|
|
609
|
-
isConfigured: false,
|
|
610
|
-
error: "No Anthropic authentication configured. Set ANTHROPIC_API_KEY or configure OAuth.",
|
|
611
|
-
};
|
|
612
|
-
}
|
|
613
|
-
/**
|
|
614
|
-
* Checks if Anthropic credentials are available (either API key or OAuth)
|
|
615
|
-
* @returns True if any valid authentication is configured
|
|
616
|
-
*/
|
|
617
|
-
export function hasAnthropicCredentials() {
|
|
618
|
-
const auth = detectAnthropicAuth();
|
|
619
|
-
return auth.isConfigured;
|
|
620
|
-
}
|
|
621
|
-
/**
|
|
622
|
-
* Gets the authentication token or key for Anthropic API calls
|
|
623
|
-
* Returns the appropriate credential based on configured auth method
|
|
624
|
-
* @returns The API key or OAuth access token, or undefined if not configured
|
|
625
|
-
*/
|
|
626
|
-
export function getAnthropicCredential() {
|
|
627
|
-
const auth = detectAnthropicAuth();
|
|
628
|
-
if (!auth.isConfigured) {
|
|
629
|
-
return undefined;
|
|
630
|
-
}
|
|
631
|
-
return auth.method === "oauth" ? auth.accessToken : auth.apiKey;
|
|
632
|
-
}
|
|
633
|
-
/**
|
|
634
|
-
* Checks if OAuth refresh is needed based on token state
|
|
635
|
-
* This is a placeholder for actual token expiration checking
|
|
636
|
-
* @returns True if refresh is needed
|
|
637
|
-
*/
|
|
638
|
-
export function needsOAuthRefresh() {
|
|
639
|
-
const auth = detectAnthropicAuth();
|
|
640
|
-
if (auth.method !== "oauth" || !auth.isConfigured) {
|
|
641
|
-
return false;
|
|
642
|
-
}
|
|
643
|
-
// In a real implementation, you would check token expiration
|
|
644
|
-
// For now, we just check if a refresh token is available
|
|
645
|
-
// The actual refresh logic would be in the OAuth client
|
|
646
|
-
return !!auth.refreshToken;
|
|
647
|
-
}
|
|
648
|
-
/**
|
|
649
|
-
* Gets subscription tier limits for informational purposes
|
|
650
|
-
* These are approximate limits and may change
|
|
651
|
-
* @param tier The subscription tier
|
|
652
|
-
* @returns Object with tier limit information
|
|
653
|
-
*/
|
|
654
|
-
export function getSubscriptionTierLimits(tier) {
|
|
655
|
-
switch (tier) {
|
|
656
|
-
case "free":
|
|
657
|
-
return {
|
|
658
|
-
messagesPerDay: 10,
|
|
659
|
-
contextWindow: 100000,
|
|
660
|
-
priorityAccess: false,
|
|
661
|
-
description: "Free tier with limited daily messages",
|
|
662
|
-
};
|
|
663
|
-
case "pro":
|
|
664
|
-
return {
|
|
665
|
-
messagesPerDay: 100,
|
|
666
|
-
contextWindow: 200000,
|
|
667
|
-
priorityAccess: true,
|
|
668
|
-
description: "Claude Pro subscription with extended limits",
|
|
669
|
-
};
|
|
670
|
-
case "max":
|
|
671
|
-
return {
|
|
672
|
-
messagesPerDay: "unlimited",
|
|
673
|
-
contextWindow: 200000,
|
|
674
|
-
priorityAccess: true,
|
|
675
|
-
description: "Claude Max subscription with highest limits",
|
|
676
|
-
};
|
|
677
|
-
case "max_5":
|
|
678
|
-
return {
|
|
679
|
-
messagesPerDay: "unlimited",
|
|
680
|
-
contextWindow: 200000,
|
|
681
|
-
priorityAccess: true,
|
|
682
|
-
description: "Claude Max 5x usage tier with priority processing",
|
|
683
|
-
};
|
|
684
|
-
case "max_20":
|
|
685
|
-
return {
|
|
686
|
-
messagesPerDay: "unlimited",
|
|
687
|
-
contextWindow: 200000,
|
|
688
|
-
priorityAccess: true,
|
|
689
|
-
description: "Claude Max 20x usage tier with maximum capacity",
|
|
690
|
-
};
|
|
691
|
-
case "api":
|
|
692
|
-
default:
|
|
693
|
-
return {
|
|
694
|
-
messagesPerDay: "unlimited",
|
|
695
|
-
contextWindow: 200000,
|
|
696
|
-
priorityAccess: true,
|
|
697
|
-
description: "API access with pay-per-use billing",
|
|
698
|
-
};
|
|
699
|
-
}
|
|
700
|
-
}
|
|
701
|
-
// =============================================================================
|
|
702
|
-
// ENVIRONMENT VARIABLE CONSTANTS
|
|
703
|
-
// =============================================================================
|
|
704
|
-
/**
|
|
705
|
-
* Environment variables for Anthropic/Claude subscription configuration
|
|
706
|
-
* These control authentication method, subscription tier, and feature flags
|
|
707
|
-
*/
|
|
708
|
-
export const ANTHROPIC_ENV_VARS = {
|
|
709
|
-
/** Authentication method: "api_key" or "oauth" */
|
|
710
|
-
AUTH_METHOD: "ANTHROPIC_AUTH_METHOD",
|
|
711
|
-
/** Subscription tier: "free", "pro", "max", "max_5", "max_20", or "api" */
|
|
712
|
-
SUBSCRIPTION_TIER: "ANTHROPIC_SUBSCRIPTION_TIER",
|
|
713
|
-
/** Enable beta features: "true" or "false" */
|
|
714
|
-
ENABLE_BETA_FEATURES: "ANTHROPIC_ENABLE_BETA_FEATURES",
|
|
715
|
-
/** API key for api_key authentication */
|
|
716
|
-
API_KEY: "ANTHROPIC_API_KEY",
|
|
717
|
-
/** OAuth access token for oauth authentication (canonical, with BC fallbacks) */
|
|
718
|
-
OAUTH_ACCESS_TOKEN: "ANTHROPIC_OAUTH_TOKEN",
|
|
719
|
-
/** OAuth refresh token for oauth authentication */
|
|
720
|
-
OAUTH_REFRESH_TOKEN: "ANTHROPIC_OAUTH_REFRESH_TOKEN",
|
|
721
|
-
/** OAuth token expiry timestamp (Unix epoch in seconds) */
|
|
722
|
-
OAUTH_TOKEN_EXPIRY: "ANTHROPIC_OAUTH_TOKEN_EXPIRY",
|
|
723
|
-
};
|
|
724
|
-
/**
|
|
725
|
-
* Valid subscription tier values for validation
|
|
726
|
-
*/
|
|
727
|
-
export const VALID_SUBSCRIPTION_TIERS = [
|
|
728
|
-
"free",
|
|
729
|
-
"pro",
|
|
730
|
-
"max",
|
|
731
|
-
"max_5",
|
|
732
|
-
"max_20",
|
|
733
|
-
"api",
|
|
734
|
-
];
|
|
735
|
-
/**
|
|
736
|
-
* Valid authentication method values for validation
|
|
737
|
-
*/
|
|
738
|
-
export const VALID_AUTH_METHODS = [
|
|
739
|
-
"api_key",
|
|
740
|
-
"oauth",
|
|
741
|
-
];
|
|
742
|
-
// =============================================================================
|
|
743
|
-
// SUBSCRIPTION TIER VALIDATION
|
|
744
|
-
// =============================================================================
|
|
745
|
-
/**
|
|
746
|
-
* Validates a subscription tier value
|
|
747
|
-
* @param tier The tier value to validate
|
|
748
|
-
* @returns True if the tier is valid, false otherwise
|
|
749
|
-
*/
|
|
750
|
-
export function isValidSubscriptionTier(tier) {
|
|
751
|
-
if (!tier) {
|
|
752
|
-
return false;
|
|
753
|
-
}
|
|
754
|
-
return VALID_SUBSCRIPTION_TIERS.includes(tier);
|
|
755
|
-
}
|
|
756
|
-
/**
|
|
757
|
-
* Validates an authentication method value
|
|
758
|
-
* @param method The method value to validate
|
|
759
|
-
* @returns True if the method is valid, false otherwise
|
|
760
|
-
*/
|
|
761
|
-
export function isValidAuthMethod(method) {
|
|
762
|
-
if (!method) {
|
|
763
|
-
return false;
|
|
764
|
-
}
|
|
765
|
-
return VALID_AUTH_METHODS.includes(method);
|
|
766
|
-
}
|
|
767
|
-
/**
|
|
768
|
-
* Validates subscription tier and returns a detailed result
|
|
769
|
-
* @param tier The tier value to validate
|
|
770
|
-
* @returns Validation result with error details if invalid
|
|
771
|
-
*/
|
|
772
|
-
export function validateSubscriptionTier(tier) {
|
|
773
|
-
if (!tier) {
|
|
774
|
-
return {
|
|
775
|
-
isValid: false,
|
|
776
|
-
error: "Subscription tier is required but not provided.",
|
|
777
|
-
};
|
|
778
|
-
}
|
|
779
|
-
const normalizedTier = tier.toLowerCase().trim();
|
|
780
|
-
if (isValidSubscriptionTier(normalizedTier)) {
|
|
781
|
-
return {
|
|
782
|
-
isValid: true,
|
|
783
|
-
tier: normalizedTier,
|
|
784
|
-
};
|
|
785
|
-
}
|
|
786
|
-
return {
|
|
787
|
-
isValid: false,
|
|
788
|
-
error: `Invalid subscription tier "${tier}". Valid values are: ${VALID_SUBSCRIPTION_TIERS.join(", ")}`,
|
|
789
|
-
};
|
|
790
|
-
}
|
|
791
|
-
// =============================================================================
|
|
792
|
-
// ANTHROPIC AUTH CONFIG FUNCTIONS
|
|
793
|
-
// =============================================================================
|
|
794
|
-
/**
|
|
795
|
-
* Gets the complete Anthropic authentication configuration
|
|
796
|
-
* Detects auth method from environment or config and loads appropriate credentials
|
|
797
|
-
*
|
|
798
|
-
* @returns Complete AnthropicAuthConfig with method, credentials, and tier
|
|
799
|
-
*/
|
|
800
|
-
export function getAnthropicAuthConfig() {
|
|
801
|
-
const method = getAnthropicAuthMethod();
|
|
802
|
-
const tier = detectSubscriptionTier();
|
|
803
|
-
if (method === "oauth") {
|
|
804
|
-
const accessToken = process.env[ANTHROPIC_ENV_VARS.OAUTH_ACCESS_TOKEN];
|
|
805
|
-
const refreshToken = process.env[ANTHROPIC_ENV_VARS.OAUTH_REFRESH_TOKEN];
|
|
806
|
-
const tokenExpiryStr = process.env[ANTHROPIC_ENV_VARS.OAUTH_TOKEN_EXPIRY];
|
|
807
|
-
// Parse token expiry if provided
|
|
808
|
-
let expiresAt;
|
|
809
|
-
if (tokenExpiryStr) {
|
|
810
|
-
const parsed = parseInt(tokenExpiryStr, 10);
|
|
811
|
-
if (!isNaN(parsed)) {
|
|
812
|
-
expiresAt = parsed;
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
// Build OAuth token object
|
|
816
|
-
const oauthToken = accessToken
|
|
817
|
-
? {
|
|
818
|
-
accessToken,
|
|
819
|
-
refreshToken,
|
|
820
|
-
expiresAt,
|
|
821
|
-
tokenType: "Bearer",
|
|
822
|
-
}
|
|
823
|
-
: undefined;
|
|
824
|
-
return {
|
|
825
|
-
method: "oauth",
|
|
826
|
-
oauthToken,
|
|
827
|
-
accessToken, // Legacy field for backward compatibility
|
|
828
|
-
refreshToken, // Legacy field for backward compatibility
|
|
829
|
-
tokenExpiry: expiresAt ? expiresAt * 1000 : undefined, // Convert to milliseconds
|
|
830
|
-
subscriptionTier: tier,
|
|
831
|
-
autoRefresh: !!refreshToken,
|
|
832
|
-
};
|
|
833
|
-
}
|
|
834
|
-
// API key authentication
|
|
835
|
-
const apiKey = process.env[ANTHROPIC_ENV_VARS.API_KEY];
|
|
836
|
-
return {
|
|
837
|
-
method: "api_key",
|
|
838
|
-
apiKey,
|
|
839
|
-
subscriptionTier: tier,
|
|
840
|
-
autoRefresh: false,
|
|
841
|
-
};
|
|
842
|
-
}
|
|
843
|
-
/**
|
|
844
|
-
* Detects the subscription tier from environment variables or config
|
|
845
|
-
* Checks environment variable first, then config, defaults to "api" if using API key
|
|
846
|
-
*
|
|
847
|
-
* @returns The detected subscription tier
|
|
848
|
-
*/
|
|
849
|
-
export function detectSubscriptionTier() {
|
|
850
|
-
// 1. Check environment variable first (highest priority)
|
|
851
|
-
const envTier = process.env[ANTHROPIC_ENV_VARS.SUBSCRIPTION_TIER];
|
|
852
|
-
if (envTier) {
|
|
853
|
-
const validation = validateSubscriptionTier(envTier);
|
|
854
|
-
if (validation.isValid && validation.tier) {
|
|
855
|
-
return validation.tier;
|
|
856
|
-
}
|
|
857
|
-
logger.warn("Invalid ANTHROPIC_SUBSCRIPTION_TIER value", {
|
|
858
|
-
value: envTier,
|
|
859
|
-
validValues: VALID_SUBSCRIPTION_TIERS,
|
|
860
|
-
fallback: "Defaulting based on auth method",
|
|
861
|
-
});
|
|
862
|
-
}
|
|
863
|
-
// 2. Check config file (could be extended to read from config file)
|
|
864
|
-
// For now, we check if there's a tier set via other means
|
|
865
|
-
// This is a placeholder for config file integration
|
|
866
|
-
// const configTier = loadConfigTier(); // Future: implement config file loading
|
|
867
|
-
// 3. Default based on authentication method
|
|
868
|
-
const authMethod = getAnthropicAuthMethod();
|
|
869
|
-
if (authMethod === "oauth") {
|
|
870
|
-
// OAuth users are typically subscription users, default to "pro"
|
|
871
|
-
// unless they've explicitly configured otherwise
|
|
872
|
-
logger.debug("[detectSubscriptionTier] OAuth auth detected, defaulting to pro tier");
|
|
873
|
-
return "pro";
|
|
874
|
-
}
|
|
875
|
-
// 4. API key users default to "api" tier
|
|
876
|
-
logger.debug("[detectSubscriptionTier] API key auth, defaulting to api tier");
|
|
877
|
-
return "api";
|
|
878
|
-
}
|
|
879
|
-
/**
|
|
880
|
-
* Determines whether beta features should be enabled
|
|
881
|
-
* Checks environment/config and defaults based on authentication method
|
|
882
|
-
*
|
|
883
|
-
* @returns True if beta features should be enabled
|
|
884
|
-
*/
|
|
885
|
-
export function shouldEnableBetaFeatures() {
|
|
886
|
-
// 1. Check explicit environment variable first (highest priority)
|
|
887
|
-
const envValue = process.env[ANTHROPIC_ENV_VARS.ENABLE_BETA_FEATURES];
|
|
888
|
-
if (envValue !== undefined) {
|
|
889
|
-
const normalized = envValue.toLowerCase().trim();
|
|
890
|
-
if (normalized === "true" || normalized === "1" || normalized === "yes") {
|
|
891
|
-
return true;
|
|
892
|
-
}
|
|
893
|
-
if (normalized === "false" || normalized === "0" || normalized === "no") {
|
|
894
|
-
return false;
|
|
895
|
-
}
|
|
896
|
-
logger.warn("Invalid ANTHROPIC_ENABLE_BETA_FEATURES value", {
|
|
897
|
-
value: envValue,
|
|
898
|
-
expected: ["true", "false"],
|
|
899
|
-
fallback: "Defaulting based on auth method",
|
|
900
|
-
});
|
|
901
|
-
}
|
|
902
|
-
// 2. Check config file (placeholder for future config integration)
|
|
903
|
-
// const configValue = loadConfigBetaFeatures();
|
|
904
|
-
// 3. Default based on authentication method
|
|
905
|
-
// OAuth users get beta features enabled by default
|
|
906
|
-
// API key users get beta features disabled by default for stability
|
|
907
|
-
const authMethod = getAnthropicAuthMethod();
|
|
908
|
-
return authMethod === "oauth";
|
|
909
|
-
}
|
|
910
|
-
/**
|
|
911
|
-
* Gets complete subscription configuration including auth, tier, and features
|
|
912
|
-
* Combines all configuration sources into a unified config object
|
|
913
|
-
*
|
|
914
|
-
* @returns Complete subscription configuration
|
|
915
|
-
*/
|
|
916
|
-
export function getAnthropicSubscriptionConfig() {
|
|
917
|
-
const auth = getAnthropicAuthConfig();
|
|
918
|
-
const tier = detectSubscriptionTier();
|
|
919
|
-
const betaFeaturesEnabled = shouldEnableBetaFeatures();
|
|
920
|
-
const limits = getSubscriptionTierLimits(tier);
|
|
921
|
-
// Determine if properly configured
|
|
922
|
-
let isConfigured = false;
|
|
923
|
-
let error;
|
|
924
|
-
if (auth.method === "oauth") {
|
|
925
|
-
if (auth.oauthToken?.accessToken || auth.accessToken) {
|
|
926
|
-
isConfigured = true;
|
|
927
|
-
}
|
|
928
|
-
else {
|
|
929
|
-
error =
|
|
930
|
-
"OAuth authentication method specified but no access token configured. " +
|
|
931
|
-
`Set ${ANTHROPIC_ENV_VARS.OAUTH_ACCESS_TOKEN} environment variable.`;
|
|
932
|
-
}
|
|
933
|
-
}
|
|
934
|
-
else {
|
|
935
|
-
if (auth.apiKey) {
|
|
936
|
-
isConfigured = true;
|
|
937
|
-
}
|
|
938
|
-
else {
|
|
939
|
-
error =
|
|
940
|
-
"API key authentication method specified but no API key configured. " +
|
|
941
|
-
`Set ${ANTHROPIC_ENV_VARS.API_KEY} environment variable.`;
|
|
942
|
-
}
|
|
943
|
-
}
|
|
944
|
-
return {
|
|
945
|
-
auth,
|
|
946
|
-
tier,
|
|
947
|
-
betaFeaturesEnabled,
|
|
948
|
-
limits,
|
|
949
|
-
isConfigured,
|
|
950
|
-
error,
|
|
951
|
-
};
|
|
952
|
-
}
|
|
953
|
-
/**
|
|
954
|
-
* Checks if the current subscription tier has access to a specific feature
|
|
955
|
-
* @param feature The feature to check
|
|
956
|
-
* @param currentTier The current subscription tier (optional, auto-detects if not provided)
|
|
957
|
-
* @returns True if the tier has access to the feature
|
|
958
|
-
*/
|
|
959
|
-
export function hasSubscriptionFeature(feature, currentTier) {
|
|
960
|
-
const tier = currentTier ?? detectSubscriptionTier();
|
|
961
|
-
const limits = getSubscriptionTierLimits(tier);
|
|
962
|
-
// Map features to tier capabilities
|
|
963
|
-
switch (feature) {
|
|
964
|
-
case "extended_thinking":
|
|
965
|
-
// Extended thinking requires pro or higher, or API tier
|
|
966
|
-
return tier !== "free";
|
|
967
|
-
case "priority_access":
|
|
968
|
-
return limits.priorityAccess;
|
|
969
|
-
case "vision":
|
|
970
|
-
case "file_analysis":
|
|
971
|
-
// Available on all tiers
|
|
972
|
-
return true;
|
|
973
|
-
case "mcp_tools":
|
|
974
|
-
// MCP tools require pro or higher
|
|
975
|
-
return tier !== "free";
|
|
976
|
-
case "computer_use":
|
|
977
|
-
// Computer use requires max tier or API
|
|
978
|
-
return (tier === "max" ||
|
|
979
|
-
tier === "max_5" ||
|
|
980
|
-
tier === "max_20" ||
|
|
981
|
-
tier === "api");
|
|
982
|
-
case "web_search":
|
|
983
|
-
// Web search available on pro or higher
|
|
984
|
-
return tier !== "free";
|
|
985
|
-
default:
|
|
986
|
-
return false;
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
/**
|
|
990
|
-
* Gets a human-readable description of the current authentication configuration
|
|
991
|
-
* Useful for debugging and user feedback
|
|
992
|
-
*
|
|
993
|
-
* @returns Human-readable configuration description
|
|
994
|
-
*/
|
|
995
|
-
export function describeAnthropicConfig() {
|
|
996
|
-
const config = getAnthropicSubscriptionConfig();
|
|
997
|
-
const lines = [];
|
|
998
|
-
lines.push(`Authentication Method: ${config.auth.method}`);
|
|
999
|
-
lines.push(`Subscription Tier: ${config.tier}`);
|
|
1000
|
-
lines.push(`Beta Features: ${config.betaFeaturesEnabled ? "Enabled" : "Disabled"}`);
|
|
1001
|
-
lines.push(`Configured: ${config.isConfigured ? "Yes" : "No"}`);
|
|
1002
|
-
if (config.error) {
|
|
1003
|
-
lines.push(`Error: ${config.error}`);
|
|
1004
|
-
}
|
|
1005
|
-
lines.push(`Daily Messages: ${config.limits.messagesPerDay}`);
|
|
1006
|
-
lines.push(`Context Window: ${config.limits.contextWindow.toLocaleString()} tokens`);
|
|
1007
|
-
lines.push(`Priority Access: ${config.limits.priorityAccess ? "Yes" : "No"}`);
|
|
1008
|
-
return lines.join("\n");
|
|
1009
|
-
}
|