@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,586 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Enhanced proxy-aware fetch implementation for AI SDK providers
|
|
3
|
-
* Supports HTTP/HTTPS, SOCKS4/5, authentication, and NO_PROXY bypass
|
|
4
|
-
* Lightweight implementation extracted from research of major proxy packages
|
|
5
|
-
*/
|
|
6
|
-
import { logger } from "../utils/logger.js";
|
|
7
|
-
import { SpanStatusCode } from "@opentelemetry/api";
|
|
8
|
-
import { tracers } from "../telemetry/tracers.js";
|
|
9
|
-
import { shouldBypassProxy } from "./utils/noProxyUtils.js";
|
|
10
|
-
const fetchTracer = tracers.http;
|
|
11
|
-
/**
|
|
12
|
-
* Extract hostname from a URL string for safe logging (no auth tokens or paths).
|
|
13
|
-
* Returns "[unknown]" if parsing fails.
|
|
14
|
-
*/
|
|
15
|
-
function extractHostname(url) {
|
|
16
|
-
try {
|
|
17
|
-
const urlStr = typeof url === "string"
|
|
18
|
-
? url
|
|
19
|
-
: url instanceof URL
|
|
20
|
-
? url.href
|
|
21
|
-
: url.url;
|
|
22
|
-
const parsed = new URL(urlStr);
|
|
23
|
-
return parsed.hostname;
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return "[unknown]";
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Retry-aware fetch wrapper for transient network errors (ECONNRESET, ETIMEDOUT, socket hang up).
|
|
31
|
-
* Protects all LLM API calls and token refreshes that go through createProxyFetch().
|
|
32
|
-
* Instrumented with OpenTelemetry spans for retry visibility.
|
|
33
|
-
*/
|
|
34
|
-
async function fetchWithRetry(url, init, maxRetries = 3, baseDelay = 500) {
|
|
35
|
-
const hostname = extractHostname(url);
|
|
36
|
-
return fetchTracer.startActiveSpan("neurolink.http.fetchWithRetry", async (span) => {
|
|
37
|
-
span.setAttribute("http.request.max_retries", maxRetries);
|
|
38
|
-
span.setAttribute("http.request.hostname", hostname);
|
|
39
|
-
span.setAttribute("http.request.method", init?.method || "GET");
|
|
40
|
-
// eslint-disable-next-line no-useless-assignment
|
|
41
|
-
let totalAttempts = 0;
|
|
42
|
-
try {
|
|
43
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
44
|
-
totalAttempts = attempt + 1;
|
|
45
|
-
try {
|
|
46
|
-
const response = await fetch(url, init);
|
|
47
|
-
// Record success attributes
|
|
48
|
-
span.setAttribute("http.request.total_attempts", totalAttempts);
|
|
49
|
-
span.setAttribute("http.response.status_code", response.status);
|
|
50
|
-
span.setStatus({ code: SpanStatusCode.OK });
|
|
51
|
-
return response;
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
const err = error;
|
|
55
|
-
const isRetryable = err?.code === "ECONNRESET" ||
|
|
56
|
-
err?.code === "ETIMEDOUT" ||
|
|
57
|
-
err?.message?.includes("socket hang up") ||
|
|
58
|
-
err?.message?.includes("network socket disconnected");
|
|
59
|
-
if (!isRetryable || attempt === maxRetries) {
|
|
60
|
-
// Final failure — record on span and rethrow
|
|
61
|
-
span.setAttribute("http.request.total_attempts", totalAttempts);
|
|
62
|
-
span.setStatus({
|
|
63
|
-
code: SpanStatusCode.ERROR,
|
|
64
|
-
message: err?.message || err?.code || "fetchWithRetry final failure",
|
|
65
|
-
});
|
|
66
|
-
span.recordException(error instanceof Error ? error : new Error(String(error)));
|
|
67
|
-
throw error;
|
|
68
|
-
}
|
|
69
|
-
// Transient error — add retry event and continue loop
|
|
70
|
-
const delay = baseDelay * Math.pow(2, attempt);
|
|
71
|
-
span.addEvent("http.request.retry", {
|
|
72
|
-
"retry.attempt": attempt + 1,
|
|
73
|
-
"retry.delay_ms": delay,
|
|
74
|
-
"retry.error": (err?.code || err?.message || String(error)).slice(0, 256),
|
|
75
|
-
});
|
|
76
|
-
logger.debug(`[fetchWithRetry] Transient error (${err?.code || err?.message}), retrying in ${delay}ms (attempt ${attempt + 1}/${maxRetries})`);
|
|
77
|
-
await new Promise((r) => setTimeout(r, delay));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
throw new Error("fetchWithRetry exhausted"); // unreachable
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
span.end();
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Parse request body to readable format for debug logging
|
|
89
|
-
*/
|
|
90
|
-
function parseBody(body) {
|
|
91
|
-
if (!body) {
|
|
92
|
-
return { parsed: null, size: 0, type: "empty" };
|
|
93
|
-
}
|
|
94
|
-
if (typeof body === "string") {
|
|
95
|
-
try {
|
|
96
|
-
return { parsed: JSON.parse(body), size: body.length, type: "json" };
|
|
97
|
-
}
|
|
98
|
-
catch {
|
|
99
|
-
return { parsed: body, size: body.length, type: "text" };
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (body instanceof ArrayBuffer) {
|
|
103
|
-
return {
|
|
104
|
-
parsed: "[ArrayBuffer]",
|
|
105
|
-
size: body.byteLength,
|
|
106
|
-
type: "arraybuffer",
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
if (body instanceof Uint8Array) {
|
|
110
|
-
return { parsed: "[Uint8Array]", size: body.length, type: "uint8array" };
|
|
111
|
-
}
|
|
112
|
-
return { parsed: "[Stream]", size: -1, type: "stream" };
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Sensitive header names whose values should be redacted in logs
|
|
116
|
-
*/
|
|
117
|
-
const SENSITIVE_HEADERS = new Set([
|
|
118
|
-
"authorization",
|
|
119
|
-
"x-api-key",
|
|
120
|
-
"api-key",
|
|
121
|
-
"x-goog-api-key",
|
|
122
|
-
"proxy-authorization",
|
|
123
|
-
"cookie",
|
|
124
|
-
"set-cookie",
|
|
125
|
-
]);
|
|
126
|
-
/**
|
|
127
|
-
* Clone response and read body + headers for debug logging
|
|
128
|
-
*/
|
|
129
|
-
async function readResponseBody(response) {
|
|
130
|
-
const headers = {};
|
|
131
|
-
response.headers.forEach((value, key) => {
|
|
132
|
-
headers[key] = SENSITIVE_HEADERS.has(key.toLowerCase())
|
|
133
|
-
? `${value.substring(0, 4)}***`
|
|
134
|
-
: value;
|
|
135
|
-
});
|
|
136
|
-
try {
|
|
137
|
-
const cloned = response.clone();
|
|
138
|
-
const text = await cloned.text();
|
|
139
|
-
try {
|
|
140
|
-
return {
|
|
141
|
-
parsed: JSON.parse(text),
|
|
142
|
-
size: text.length,
|
|
143
|
-
type: "json",
|
|
144
|
-
headers,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
return { parsed: text, size: text.length, type: "text", headers };
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
catch {
|
|
152
|
-
return {
|
|
153
|
-
parsed: "[unable to read body]",
|
|
154
|
-
size: -1,
|
|
155
|
-
type: "error",
|
|
156
|
-
headers,
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
// ==================== LIGHTWEIGHT PROXY IMPLEMENTATIONS ====================
|
|
161
|
-
// ParsedProxyConfig interface moved to ../types/utilities.js
|
|
162
|
-
/**
|
|
163
|
-
* Parse proxy URL with authentication support
|
|
164
|
-
*/
|
|
165
|
-
function parseProxyUrl(proxyUrl) {
|
|
166
|
-
try {
|
|
167
|
-
const url = new URL(proxyUrl);
|
|
168
|
-
const config = {
|
|
169
|
-
protocol: url.protocol,
|
|
170
|
-
hostname: url.hostname,
|
|
171
|
-
port: parseInt(url.port) || getDefaultPort(url.protocol),
|
|
172
|
-
cleanUrl: `${url.protocol}//${url.hostname}:${url.port || getDefaultPort(url.protocol)}`,
|
|
173
|
-
};
|
|
174
|
-
// Extract authentication if present
|
|
175
|
-
if (url.username && url.password) {
|
|
176
|
-
config.auth = {
|
|
177
|
-
username: decodeURIComponent(url.username),
|
|
178
|
-
password: decodeURIComponent(url.password),
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
return config;
|
|
182
|
-
}
|
|
183
|
-
catch (error) {
|
|
184
|
-
// Sanitize proxy URL to avoid leaking credentials in logs/errors
|
|
185
|
-
let safeUrl;
|
|
186
|
-
try {
|
|
187
|
-
const u = new URL(proxyUrl);
|
|
188
|
-
u.username = "";
|
|
189
|
-
u.password = "";
|
|
190
|
-
safeUrl = u.toString();
|
|
191
|
-
}
|
|
192
|
-
catch {
|
|
193
|
-
safeUrl = "[invalid-url]";
|
|
194
|
-
}
|
|
195
|
-
logger.error("[Proxy] Failed to parse proxy URL", {
|
|
196
|
-
proxyUrl: safeUrl,
|
|
197
|
-
error,
|
|
198
|
-
});
|
|
199
|
-
throw new Error(`Invalid proxy URL: ${safeUrl}`, { cause: error });
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Get default port for protocol
|
|
204
|
-
*/
|
|
205
|
-
function getDefaultPort(protocol) {
|
|
206
|
-
switch (protocol) {
|
|
207
|
-
case "http:":
|
|
208
|
-
return 8080;
|
|
209
|
-
case "https:":
|
|
210
|
-
return 8080;
|
|
211
|
-
case "socks4:":
|
|
212
|
-
return 1080;
|
|
213
|
-
case "socks5:":
|
|
214
|
-
return 1080;
|
|
215
|
-
default:
|
|
216
|
-
return 8080;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Select appropriate proxy URL based on target and environment
|
|
221
|
-
*/
|
|
222
|
-
function selectProxyUrl(targetUrl) {
|
|
223
|
-
// Check NO_PROXY bypass first
|
|
224
|
-
if (shouldBypassProxy(targetUrl)) {
|
|
225
|
-
logger.debug("[Proxy] Bypassing proxy due to NO_PROXY", { targetUrl });
|
|
226
|
-
return null;
|
|
227
|
-
}
|
|
228
|
-
try {
|
|
229
|
-
const url = new URL(targetUrl);
|
|
230
|
-
const httpsProxy = process.env.HTTPS_PROXY || process.env.https_proxy;
|
|
231
|
-
const httpProxy = process.env.HTTP_PROXY || process.env.http_proxy;
|
|
232
|
-
const allProxy = process.env.ALL_PROXY || process.env.all_proxy;
|
|
233
|
-
const socksProxy = process.env.SOCKS_PROXY || process.env.socks_proxy;
|
|
234
|
-
// Priority: Protocol-specific > ALL_PROXY > SOCKS_PROXY
|
|
235
|
-
if (url.protocol === "https:" && httpsProxy) {
|
|
236
|
-
return httpsProxy;
|
|
237
|
-
}
|
|
238
|
-
if (url.protocol === "http:" && httpProxy) {
|
|
239
|
-
return httpProxy;
|
|
240
|
-
}
|
|
241
|
-
if (allProxy) {
|
|
242
|
-
return allProxy;
|
|
243
|
-
}
|
|
244
|
-
if (socksProxy) {
|
|
245
|
-
return socksProxy;
|
|
246
|
-
}
|
|
247
|
-
return null;
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
logger.warn("[Proxy] Error selecting proxy URL", { targetUrl, error });
|
|
251
|
-
return null;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Create appropriate proxy agent based on protocol
|
|
256
|
-
*/
|
|
257
|
-
async function createProxyAgent(proxyUrl) {
|
|
258
|
-
const parsed = parseProxyUrl(proxyUrl);
|
|
259
|
-
logger.debug("[Proxy] Creating proxy agent", {
|
|
260
|
-
protocol: parsed.protocol,
|
|
261
|
-
hostname: parsed.hostname,
|
|
262
|
-
port: parsed.port,
|
|
263
|
-
hasAuth: !!parsed.auth,
|
|
264
|
-
});
|
|
265
|
-
switch (parsed.protocol) {
|
|
266
|
-
case "http:":
|
|
267
|
-
case "https:": {
|
|
268
|
-
// Use existing undici ProxyAgent for HTTP/HTTPS
|
|
269
|
-
const { ProxyAgent } = await import("undici");
|
|
270
|
-
return new ProxyAgent(proxyUrl);
|
|
271
|
-
}
|
|
272
|
-
case "socks4:":
|
|
273
|
-
case "socks5:": {
|
|
274
|
-
// SOCKS proxy support is not included in the build to avoid optional dependencies
|
|
275
|
-
throw new Error(`SOCKS proxy support requires 'proxy-agent' package. ` +
|
|
276
|
-
`Install it with: npm install proxy-agent`);
|
|
277
|
-
}
|
|
278
|
-
default:
|
|
279
|
-
throw new Error(`Unsupported proxy protocol: ${parsed.protocol}`);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
// ==================== ENHANCED PROXY FETCH FUNCTION ====================
|
|
283
|
-
/**
|
|
284
|
-
* Create a proxy-aware fetch function with enhanced capabilities
|
|
285
|
-
* Supports HTTP/HTTPS, SOCKS4/5, authentication, and NO_PROXY bypass
|
|
286
|
-
*/
|
|
287
|
-
export function createProxyFetch() {
|
|
288
|
-
// Detect ALL proxy-related environment variables
|
|
289
|
-
const httpsProxy = process.env.HTTPS_PROXY || process.env.https_proxy;
|
|
290
|
-
const httpProxy = process.env.HTTP_PROXY || process.env.http_proxy;
|
|
291
|
-
const allProxy = process.env.ALL_PROXY || process.env.all_proxy;
|
|
292
|
-
const socksProxy = process.env.SOCKS_PROXY || process.env.socks_proxy;
|
|
293
|
-
const noProxy = process.env.NO_PROXY || process.env.no_proxy;
|
|
294
|
-
// ENHANCED LOGGING: Capture ALL proxy-related environment variables — credentials redacted
|
|
295
|
-
// Reuse module-level maskProxyUrl, defaulting to "NOT_SET" for undefined values
|
|
296
|
-
const sanitizeProxyUrl = (url) => maskProxyUrl(url) ?? "NOT_SET";
|
|
297
|
-
if (logger.shouldLog("debug")) {
|
|
298
|
-
const allProxyRelatedEnvVars = Object.keys(process.env)
|
|
299
|
-
.filter((key) => key.toLowerCase().includes("proxy"))
|
|
300
|
-
.reduce((acc, key) => {
|
|
301
|
-
const val = process.env[key] || "NOT_SET";
|
|
302
|
-
acc[key] =
|
|
303
|
-
key.toLowerCase() === "no_proxy" ? val : sanitizeProxyUrl(val);
|
|
304
|
-
return acc;
|
|
305
|
-
}, {});
|
|
306
|
-
logger.debug("[Proxy Fetch] ENHANCED_PROXY_ENV_DETECTION", {
|
|
307
|
-
httpProxy: sanitizeProxyUrl(httpProxy),
|
|
308
|
-
httpsProxy: sanitizeProxyUrl(httpsProxy),
|
|
309
|
-
allProxy: sanitizeProxyUrl(allProxy),
|
|
310
|
-
socksProxy: sanitizeProxyUrl(socksProxy),
|
|
311
|
-
noProxy: noProxy || "NOT_SET",
|
|
312
|
-
allProxyRelatedEnvVars,
|
|
313
|
-
message: "Enhanced proxy environment detection — credentials redacted",
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
// If no proxy configured, return instrumented standard fetch
|
|
317
|
-
if (!httpsProxy && !httpProxy && !allProxy && !socksProxy) {
|
|
318
|
-
logger.debug("[Proxy Fetch] No proxy environment variables found - using standard fetch");
|
|
319
|
-
return async (input, init) => {
|
|
320
|
-
const reqId = `req-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
321
|
-
const startTs = Date.now();
|
|
322
|
-
const url = typeof input === "string"
|
|
323
|
-
? input
|
|
324
|
-
: input instanceof URL
|
|
325
|
-
? input.href
|
|
326
|
-
: input.url;
|
|
327
|
-
if (logger.shouldLog("debug")) {
|
|
328
|
-
const { size: bodySize, type: bodyType } = parseBody(init?.body);
|
|
329
|
-
logger.debug("[Observability] HTTP request to LLM provider", {
|
|
330
|
-
requestId: reqId,
|
|
331
|
-
url,
|
|
332
|
-
method: init?.method || "POST",
|
|
333
|
-
bodySize,
|
|
334
|
-
bodyType,
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
try {
|
|
338
|
-
const response = await fetchWithRetry(input, init);
|
|
339
|
-
if (logger.shouldLog("debug")) {
|
|
340
|
-
const { parsed: responseBody, size: responseSize, type: responseType, headers: responseHeaders, } = await readResponseBody(response);
|
|
341
|
-
logger.debug("[Observability] HTTP response from LLM provider", {
|
|
342
|
-
requestId: reqId,
|
|
343
|
-
url,
|
|
344
|
-
status: response.status,
|
|
345
|
-
statusText: response.statusText,
|
|
346
|
-
durationMs: Date.now() - startTs,
|
|
347
|
-
contentLength: responseSize,
|
|
348
|
-
hasContent: !!responseBody,
|
|
349
|
-
bodyType: responseType,
|
|
350
|
-
responseHeaders,
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
return response;
|
|
354
|
-
}
|
|
355
|
-
catch (error) {
|
|
356
|
-
logger.debug("[Observability] HTTP request failed", {
|
|
357
|
-
requestId: reqId,
|
|
358
|
-
url,
|
|
359
|
-
error: error instanceof Error ? error.message : String(error),
|
|
360
|
-
durationMs: Date.now() - startTs,
|
|
361
|
-
});
|
|
362
|
-
throw error;
|
|
363
|
-
}
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
logger.debug(`[Proxy Fetch] Configuring enhanced proxy with multiple protocol support`);
|
|
367
|
-
logger.debug(`[Proxy Fetch] HTTP_PROXY: ${sanitizeProxyUrl(httpProxy)}`);
|
|
368
|
-
logger.debug(`[Proxy Fetch] HTTPS_PROXY: ${sanitizeProxyUrl(httpsProxy)}`);
|
|
369
|
-
logger.debug(`[Proxy Fetch] ALL_PROXY: ${sanitizeProxyUrl(allProxy)}`);
|
|
370
|
-
logger.debug(`[Proxy Fetch] SOCKS_PROXY: ${sanitizeProxyUrl(socksProxy)}`);
|
|
371
|
-
logger.debug(`[Proxy Fetch] NO_PROXY: ${noProxy || "not set"}`);
|
|
372
|
-
// Return enhanced proxy-aware fetch function
|
|
373
|
-
return async (input, init) => {
|
|
374
|
-
const requestId = `req-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
375
|
-
const requestStartTime = Date.now();
|
|
376
|
-
// Determine target URL
|
|
377
|
-
const targetUrl = typeof input === "string"
|
|
378
|
-
? input
|
|
379
|
-
: input instanceof URL
|
|
380
|
-
? input.href
|
|
381
|
-
: input.url;
|
|
382
|
-
// Request logging with sensitive header redaction — gated behind debug check
|
|
383
|
-
if (logger.shouldLog("debug")) {
|
|
384
|
-
const { size: bodySize, type: bodyType } = parseBody(init?.body);
|
|
385
|
-
logger.debug("[Observability] HTTP request to LLM provider", {
|
|
386
|
-
requestId,
|
|
387
|
-
url: targetUrl,
|
|
388
|
-
method: init?.method || "POST",
|
|
389
|
-
bodySize,
|
|
390
|
-
bodyType,
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
logger.debug(`[Proxy Fetch] ENHANCED REQUEST START`, {
|
|
394
|
-
requestId,
|
|
395
|
-
targetUrl,
|
|
396
|
-
timestamp: new Date().toISOString(),
|
|
397
|
-
httpProxy: sanitizeProxyUrl(httpProxy),
|
|
398
|
-
httpsProxy: sanitizeProxyUrl(httpsProxy),
|
|
399
|
-
allProxy: sanitizeProxyUrl(allProxy),
|
|
400
|
-
socksProxy: sanitizeProxyUrl(socksProxy),
|
|
401
|
-
initMethod: init?.method || "GET",
|
|
402
|
-
});
|
|
403
|
-
try {
|
|
404
|
-
// Enhanced proxy selection with NO_PROXY bypass and multiple protocols
|
|
405
|
-
const proxyUrl = selectProxyUrl(targetUrl);
|
|
406
|
-
if (proxyUrl) {
|
|
407
|
-
const url = new URL(targetUrl);
|
|
408
|
-
const sanitizedProxy = sanitizeProxyUrl(proxyUrl);
|
|
409
|
-
logger.debug(`[Proxy Fetch] 🔗 ENHANCED URL ANALYSIS`, {
|
|
410
|
-
requestId,
|
|
411
|
-
targetUrl,
|
|
412
|
-
urlHostname: url.hostname,
|
|
413
|
-
urlProtocol: url.protocol,
|
|
414
|
-
urlPort: url.port,
|
|
415
|
-
selectedProxyUrl: sanitizedProxy,
|
|
416
|
-
timestamp: new Date().toISOString(),
|
|
417
|
-
});
|
|
418
|
-
logger.debug(`[Proxy Fetch] 🎯 ENHANCED PROXY AGENT CREATION`, {
|
|
419
|
-
requestId,
|
|
420
|
-
proxyUrl: sanitizedProxy,
|
|
421
|
-
targetHostname: url.hostname,
|
|
422
|
-
targetProtocol: url.protocol,
|
|
423
|
-
aboutToCreateProxyAgent: true,
|
|
424
|
-
timestamp: new Date().toISOString(),
|
|
425
|
-
});
|
|
426
|
-
// Create/reuse proxy agent (HTTP/HTTPS/SOCKS)
|
|
427
|
-
const agentCache = globalThis.__NL_PROXY_AGENT_CACHE__ ??
|
|
428
|
-
(globalThis.__NL_PROXY_AGENT_CACHE__ = new Map());
|
|
429
|
-
const cacheKey = maskProxyUrl(proxyUrl) ?? proxyUrl; // mask credentials in cache key
|
|
430
|
-
const dispatcher = agentCache.get(cacheKey) || (await createProxyAgent(proxyUrl));
|
|
431
|
-
agentCache.set(cacheKey, dispatcher);
|
|
432
|
-
logger.debug(`[Proxy Fetch] ✅ ENHANCED PROXY AGENT CREATED`, {
|
|
433
|
-
requestId,
|
|
434
|
-
hasDispatcher: !!dispatcher,
|
|
435
|
-
dispatcherType: typeof dispatcher,
|
|
436
|
-
dispatcherConstructor: dispatcher?.constructor?.name || "unknown",
|
|
437
|
-
timestamp: new Date().toISOString(),
|
|
438
|
-
});
|
|
439
|
-
// Handle Request objects by extracting URL and merging properties
|
|
440
|
-
let fetchInput;
|
|
441
|
-
let fetchInit = { ...init };
|
|
442
|
-
if (input instanceof Request) {
|
|
443
|
-
fetchInput = input.url;
|
|
444
|
-
fetchInit = {
|
|
445
|
-
method: input.method,
|
|
446
|
-
headers: input.headers,
|
|
447
|
-
body: input.body,
|
|
448
|
-
...init, // Allow init to override Request properties
|
|
449
|
-
};
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
fetchInput = input;
|
|
453
|
-
}
|
|
454
|
-
// Use undici fetch with enhanced dispatcher (supports HTTP/HTTPS/SOCKS)
|
|
455
|
-
const undici = await import("undici");
|
|
456
|
-
const response = await undici.fetch(fetchInput, {
|
|
457
|
-
...fetchInit,
|
|
458
|
-
dispatcher: dispatcher,
|
|
459
|
-
});
|
|
460
|
-
if (logger.shouldLog("debug")) {
|
|
461
|
-
const { parsed: responseBody, size: responseSize, type: responseType, headers: responseHeaders, } = await readResponseBody(response);
|
|
462
|
-
logger.debug("[Observability] HTTP response from LLM provider", {
|
|
463
|
-
requestId,
|
|
464
|
-
url: targetUrl,
|
|
465
|
-
status: response?.status,
|
|
466
|
-
statusText: response?.statusText,
|
|
467
|
-
durationMs: Date.now() - requestStartTime,
|
|
468
|
-
contentLength: responseSize,
|
|
469
|
-
hasContent: !!responseBody,
|
|
470
|
-
bodyType: responseType,
|
|
471
|
-
proxied: true,
|
|
472
|
-
responseHeaders,
|
|
473
|
-
});
|
|
474
|
-
}
|
|
475
|
-
logger.debug(`[Proxy Fetch] ENHANCED PROXY SUCCESS`, {
|
|
476
|
-
requestId,
|
|
477
|
-
responseStatus: response?.status,
|
|
478
|
-
responseOk: response?.ok,
|
|
479
|
-
proxyUsed: true,
|
|
480
|
-
timestamp: new Date().toISOString(),
|
|
481
|
-
});
|
|
482
|
-
return response;
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
catch (error) {
|
|
486
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
487
|
-
logger.debug("[Observability] HTTP request failed", {
|
|
488
|
-
requestId,
|
|
489
|
-
url: targetUrl,
|
|
490
|
-
error: errorMessage,
|
|
491
|
-
durationMs: Date.now() - requestStartTime,
|
|
492
|
-
});
|
|
493
|
-
logger.debug(`[Proxy Fetch] ENHANCED ERROR ANALYSIS`, {
|
|
494
|
-
requestId,
|
|
495
|
-
error: errorMessage,
|
|
496
|
-
errorType: error instanceof Error ? error.constructor.name : typeof error,
|
|
497
|
-
willFallback: true,
|
|
498
|
-
timestamp: new Date().toISOString(),
|
|
499
|
-
});
|
|
500
|
-
logger.warn(`[Proxy Fetch] Enhanced proxy failed (${errorMessage}), falling back to direct connection`);
|
|
501
|
-
}
|
|
502
|
-
// Fallback to standard fetch
|
|
503
|
-
logger.debug(`[Proxy Fetch] ENHANCED FALLBACK TO STANDARD FETCH`, {
|
|
504
|
-
requestId,
|
|
505
|
-
fallbackReason: "No proxy configured or proxy failed",
|
|
506
|
-
timestamp: new Date().toISOString(),
|
|
507
|
-
});
|
|
508
|
-
try {
|
|
509
|
-
const response = await fetchWithRetry(input, init);
|
|
510
|
-
if (logger.shouldLog("debug")) {
|
|
511
|
-
const { parsed: responseBody, size: responseSize, type: responseType, headers: responseHeaders, } = await readResponseBody(response);
|
|
512
|
-
logger.debug("[Observability] HTTP response from LLM provider", {
|
|
513
|
-
requestId,
|
|
514
|
-
url: targetUrl,
|
|
515
|
-
status: response.status,
|
|
516
|
-
statusText: response.statusText,
|
|
517
|
-
durationMs: Date.now() - requestStartTime,
|
|
518
|
-
contentLength: responseSize,
|
|
519
|
-
hasContent: !!responseBody,
|
|
520
|
-
bodyType: responseType,
|
|
521
|
-
proxied: false,
|
|
522
|
-
responseHeaders,
|
|
523
|
-
});
|
|
524
|
-
}
|
|
525
|
-
return response;
|
|
526
|
-
}
|
|
527
|
-
catch (fallbackError) {
|
|
528
|
-
const fallbackMessage = fallbackError instanceof Error
|
|
529
|
-
? fallbackError.message
|
|
530
|
-
: String(fallbackError);
|
|
531
|
-
logger.debug("[Observability] HTTP request failed", {
|
|
532
|
-
requestId,
|
|
533
|
-
url: targetUrl,
|
|
534
|
-
error: fallbackMessage,
|
|
535
|
-
durationMs: Date.now() - requestStartTime,
|
|
536
|
-
});
|
|
537
|
-
throw fallbackError;
|
|
538
|
-
}
|
|
539
|
-
};
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* Mask credentials in a proxy URL for safe logging/reporting.
|
|
543
|
-
*/
|
|
544
|
-
function maskProxyUrl(url) {
|
|
545
|
-
if (!url) {
|
|
546
|
-
return null;
|
|
547
|
-
}
|
|
548
|
-
try {
|
|
549
|
-
const u = new URL(url);
|
|
550
|
-
if (u.username || u.password) {
|
|
551
|
-
u.username = "***";
|
|
552
|
-
u.password = "***";
|
|
553
|
-
}
|
|
554
|
-
return u.toString();
|
|
555
|
-
}
|
|
556
|
-
catch {
|
|
557
|
-
return "[invalid-url]";
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
/**
|
|
561
|
-
* Get enhanced proxy status information
|
|
562
|
-
*/
|
|
563
|
-
export function getProxyStatus() {
|
|
564
|
-
const httpsProxy = process.env.HTTPS_PROXY || process.env.https_proxy;
|
|
565
|
-
const httpProxy = process.env.HTTP_PROXY || process.env.http_proxy;
|
|
566
|
-
const allProxy = process.env.ALL_PROXY || process.env.all_proxy;
|
|
567
|
-
const socksProxy = process.env.SOCKS_PROXY || process.env.socks_proxy;
|
|
568
|
-
const noProxy = process.env.NO_PROXY || process.env.no_proxy;
|
|
569
|
-
return {
|
|
570
|
-
enabled: !!(httpsProxy || httpProxy || allProxy || socksProxy),
|
|
571
|
-
httpProxy: maskProxyUrl(httpProxy),
|
|
572
|
-
httpsProxy: maskProxyUrl(httpsProxy),
|
|
573
|
-
allProxy: maskProxyUrl(allProxy),
|
|
574
|
-
socksProxy: maskProxyUrl(socksProxy),
|
|
575
|
-
noProxy: noProxy || null,
|
|
576
|
-
method: "enhanced-proxy-agent",
|
|
577
|
-
capabilities: [
|
|
578
|
-
"HTTP/HTTPS Proxy",
|
|
579
|
-
"SOCKS4/SOCKS5 Proxy",
|
|
580
|
-
"Proxy Authentication",
|
|
581
|
-
"NO_PROXY Bypass",
|
|
582
|
-
"CIDR Range Matching",
|
|
583
|
-
"Wildcard Domain Matching",
|
|
584
|
-
],
|
|
585
|
-
};
|
|
586
|
-
}
|