@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,207 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Proxy Request Logger
|
|
3
|
-
* Logs proxy request/response metadata to a rotating log file.
|
|
4
|
-
* Useful for debugging and auditing proxy traffic.
|
|
5
|
-
*/
|
|
6
|
-
import { join } from "path";
|
|
7
|
-
import { homedir } from "os";
|
|
8
|
-
import { logger } from "../utils/logger.js";
|
|
9
|
-
import { chmodSync, existsSync, mkdirSync, readdirSync, statSync, unlinkSync, } from "fs";
|
|
10
|
-
import { appendFile } from "fs/promises";
|
|
11
|
-
let logDir = null;
|
|
12
|
-
let logEnabled = false;
|
|
13
|
-
/** Maximum body size to log (bytes). Larger bodies are truncated. */
|
|
14
|
-
const MAX_BODY_LOG_SIZE = 32_768; // 32 KB
|
|
15
|
-
/** Headers whose values must always be redacted. */
|
|
16
|
-
const SENSITIVE_HEADER_NAMES = new Set([
|
|
17
|
-
"authorization",
|
|
18
|
-
"proxy-authorization",
|
|
19
|
-
"x-api-key",
|
|
20
|
-
"cookie",
|
|
21
|
-
"set-cookie",
|
|
22
|
-
]);
|
|
23
|
-
/** Pattern that matches header names likely to contain secrets. */
|
|
24
|
-
const SENSITIVE_HEADER_PATTERN = /token|secret|key|password|credential/i;
|
|
25
|
-
/** JSON keys whose values should be redacted in request/response bodies. */
|
|
26
|
-
const SENSITIVE_BODY_KEYS = /("(?:password|access_token|refresh_token|api_key|apiKey|secret|authorization|token|credential|x-api-key)"\s*:\s*)"(?:[^"\\]|\\.)*"/gi;
|
|
27
|
-
export function initRequestLogger(enabled = true) {
|
|
28
|
-
logEnabled = enabled;
|
|
29
|
-
if (!enabled) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
try {
|
|
33
|
-
logDir = join(homedir(), ".neurolink", "logs");
|
|
34
|
-
if (!existsSync(logDir)) {
|
|
35
|
-
mkdirSync(logDir, { recursive: true, mode: 0o700 });
|
|
36
|
-
}
|
|
37
|
-
chmodSync(logDir, 0o700);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
logEnabled = false;
|
|
41
|
-
logDir = null;
|
|
42
|
-
logger.warn(`[proxy] Request logging disabled — failed to create log directory: ${err instanceof Error ? err.message : String(err)}`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
export async function logRequest(entry) {
|
|
46
|
-
if (!logEnabled || !logDir) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
const logFile = join(logDir, `proxy-${new Date().toISOString().split("T")[0]}.jsonl`);
|
|
50
|
-
const line = JSON.stringify(entry) + "\n";
|
|
51
|
-
try {
|
|
52
|
-
await appendFile(logFile, line, { mode: 0o600 });
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
// Non-fatal — don't crash proxy for logging failures
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
export function getLogDir() {
|
|
59
|
-
return logDir;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Redact sensitive header values in-place.
|
|
63
|
-
*/
|
|
64
|
-
function redactHeaders(headers) {
|
|
65
|
-
if (!headers) {
|
|
66
|
-
return headers;
|
|
67
|
-
}
|
|
68
|
-
const redacted = {};
|
|
69
|
-
for (const [key, value] of Object.entries(headers)) {
|
|
70
|
-
const lower = key.toLowerCase();
|
|
71
|
-
if (SENSITIVE_HEADER_NAMES.has(lower) ||
|
|
72
|
-
SENSITIVE_HEADER_PATTERN.test(lower)) {
|
|
73
|
-
redacted[key] = "[REDACTED]";
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
redacted[key] = value;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return redacted;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Redact sensitive keys from a JSON body string and truncate if too large.
|
|
83
|
-
*/
|
|
84
|
-
function redactBody(body) {
|
|
85
|
-
if (body === undefined || body === null) {
|
|
86
|
-
return body;
|
|
87
|
-
}
|
|
88
|
-
let str = typeof body === "string" ? body : JSON.stringify(body);
|
|
89
|
-
// Redact known sensitive JSON keys BEFORE truncating so that a mid-string
|
|
90
|
-
// slice cannot leave a partially exposed secret (the regex needs closing
|
|
91
|
-
// quotes to match).
|
|
92
|
-
str = str.replace(SENSITIVE_BODY_KEYS, '$1"[REDACTED]"');
|
|
93
|
-
if (str.length > MAX_BODY_LOG_SIZE) {
|
|
94
|
-
str =
|
|
95
|
-
str.slice(0, MAX_BODY_LOG_SIZE) +
|
|
96
|
-
`... [TRUNCATED from ${str.length} bytes]`;
|
|
97
|
-
}
|
|
98
|
-
return str;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Log the FULL raw request and response for debugging.
|
|
102
|
-
* Writes to a separate file: proxy-debug-YYYY-MM-DD.jsonl
|
|
103
|
-
* Each entry has the complete request body and response body.
|
|
104
|
-
*
|
|
105
|
-
* Sensitive headers and body fields are redacted before writing.
|
|
106
|
-
*/
|
|
107
|
-
export async function logFullRequestResponse(entry) {
|
|
108
|
-
if (!logEnabled || !logDir) {
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
const sanitizedEntry = {
|
|
112
|
-
...entry,
|
|
113
|
-
requestHeaders: redactHeaders(entry.requestHeaders),
|
|
114
|
-
requestBody: redactBody(entry.requestBody),
|
|
115
|
-
responseHeaders: redactHeaders(entry.responseHeaders),
|
|
116
|
-
responseBody: redactBody(entry.responseBody),
|
|
117
|
-
};
|
|
118
|
-
const logFile = join(logDir, `proxy-debug-${new Date().toISOString().split("T")[0]}.jsonl`);
|
|
119
|
-
const line = JSON.stringify(sanitizedEntry) + "\n";
|
|
120
|
-
try {
|
|
121
|
-
await appendFile(logFile, line, { mode: 0o600 });
|
|
122
|
-
}
|
|
123
|
-
catch {
|
|
124
|
-
// Non-fatal
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Log a mid-stream error that occurs after the initial 200 was sent.
|
|
129
|
-
* These are invisible in normal request logs since the 200 was already recorded.
|
|
130
|
-
*/
|
|
131
|
-
export async function logStreamError(entry) {
|
|
132
|
-
if (!logEnabled || !logDir) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
const logFile = join(logDir, `proxy-${new Date().toISOString().split("T")[0]}.jsonl`);
|
|
136
|
-
const logEntry = {
|
|
137
|
-
...entry,
|
|
138
|
-
responseStatus: 200,
|
|
139
|
-
errorType: "stream_error",
|
|
140
|
-
note: "mid-stream failure after initial 200",
|
|
141
|
-
};
|
|
142
|
-
try {
|
|
143
|
-
await appendFile(logFile, JSON.stringify(logEntry) + "\n", {
|
|
144
|
-
mode: 0o600,
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
// Non-fatal — don't crash proxy for logging failures
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Clean up old log files by age and total size.
|
|
153
|
-
* - Deletes files older than maxAgeDays
|
|
154
|
-
* - If remaining files exceed maxSizeMb, deletes oldest until under limit
|
|
155
|
-
* Non-fatal — proxy keeps working even if cleanup fails.
|
|
156
|
-
*/
|
|
157
|
-
export function cleanupLogs(maxAgeDays = 7, maxSizeMb = 500) {
|
|
158
|
-
if (!logDir || !existsSync(logDir)) {
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
try {
|
|
162
|
-
const files = readdirSync(logDir)
|
|
163
|
-
.filter((f) => f.startsWith("proxy-") && f.endsWith(".jsonl"))
|
|
164
|
-
.map((f) => {
|
|
165
|
-
const filePath = join(logDir, f);
|
|
166
|
-
const stat = statSync(filePath);
|
|
167
|
-
return {
|
|
168
|
-
name: f,
|
|
169
|
-
path: filePath,
|
|
170
|
-
mtime: stat.mtimeMs,
|
|
171
|
-
size: stat.size,
|
|
172
|
-
};
|
|
173
|
-
})
|
|
174
|
-
.sort((a, b) => a.mtime - b.mtime); // oldest first
|
|
175
|
-
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
176
|
-
let deletedCount = 0;
|
|
177
|
-
let freedBytes = 0;
|
|
178
|
-
// Pass 1: delete files older than maxAgeDays
|
|
179
|
-
const remaining = [];
|
|
180
|
-
for (const file of files) {
|
|
181
|
-
if (file.mtime < cutoff) {
|
|
182
|
-
unlinkSync(file.path);
|
|
183
|
-
deletedCount++;
|
|
184
|
-
freedBytes += file.size;
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
remaining.push(file);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
// Pass 2: if total size exceeds maxSizeMb, delete oldest until under limit
|
|
191
|
-
const maxBytes = maxSizeMb * 1024 * 1024;
|
|
192
|
-
let totalSize = remaining.reduce((sum, f) => sum + f.size, 0);
|
|
193
|
-
while (totalSize > maxBytes && remaining.length > 0) {
|
|
194
|
-
const oldest = remaining.shift();
|
|
195
|
-
unlinkSync(oldest.path);
|
|
196
|
-
totalSize -= oldest.size;
|
|
197
|
-
deletedCount++;
|
|
198
|
-
freedBytes += oldest.size;
|
|
199
|
-
}
|
|
200
|
-
if (deletedCount > 0) {
|
|
201
|
-
logger.info(`[proxy] log cleanup: deleted ${deletedCount} file(s), freed ${(freedBytes / 1024 / 1024).toFixed(1)} MB`);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
catch {
|
|
205
|
-
// Non-fatal
|
|
206
|
-
}
|
|
207
|
-
}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { logger } from "../utils/logger.js";
|
|
2
|
-
import { tokenStore } from "../auth/tokenStore.js";
|
|
3
|
-
const REFRESH_URL = "https://api.anthropic.com/v1/oauth/token";
|
|
4
|
-
const REFRESH_URL_FALLBACK = "https://console.anthropic.com/v1/oauth/token";
|
|
5
|
-
const CLIENT_ID = "9d1c250a-e61b-44d9-88ed-5944d1962f5e";
|
|
6
|
-
const BUFFER_MS = 60 * 60 * 1000;
|
|
7
|
-
const USER_AGENT = "claude-cli/2.1.80 (external, cli)";
|
|
8
|
-
export function needsRefresh(account) {
|
|
9
|
-
return !!(account.expiresAt &&
|
|
10
|
-
account.expiresAt <= Date.now() + BUFFER_MS &&
|
|
11
|
-
account.refreshToken);
|
|
12
|
-
}
|
|
13
|
-
export async function refreshToken(account) {
|
|
14
|
-
if (!account.refreshToken) {
|
|
15
|
-
return { success: false, error: "No refresh token available" };
|
|
16
|
-
}
|
|
17
|
-
const formBody = new URLSearchParams({
|
|
18
|
-
grant_type: "refresh_token",
|
|
19
|
-
refresh_token: account.refreshToken,
|
|
20
|
-
client_id: CLIENT_ID,
|
|
21
|
-
}).toString();
|
|
22
|
-
const headers = {
|
|
23
|
-
"Content-Type": "application/x-www-form-urlencoded",
|
|
24
|
-
"User-Agent": USER_AGENT,
|
|
25
|
-
};
|
|
26
|
-
const urls = [REFRESH_URL, REFRESH_URL_FALLBACK];
|
|
27
|
-
for (const url of urls) {
|
|
28
|
-
try {
|
|
29
|
-
const resp = await fetch(url, {
|
|
30
|
-
method: "POST",
|
|
31
|
-
headers,
|
|
32
|
-
body: formBody,
|
|
33
|
-
signal: AbortSignal.timeout(10_000),
|
|
34
|
-
});
|
|
35
|
-
if (!resp.ok) {
|
|
36
|
-
const errorBody = await resp.text();
|
|
37
|
-
logger.warn(`[token-refresh] failed for ${account.label} at ${url}`, {
|
|
38
|
-
status: resp.status,
|
|
39
|
-
error: errorBody.slice(0, 500),
|
|
40
|
-
});
|
|
41
|
-
// If primary URL returned a non-ok status, try fallback
|
|
42
|
-
if (url === REFRESH_URL) {
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
return { success: false, error: errorBody, status: resp.status };
|
|
46
|
-
}
|
|
47
|
-
const data = (await resp.json());
|
|
48
|
-
const previousExpiresAt = account.expiresAt;
|
|
49
|
-
account.token = data.access_token;
|
|
50
|
-
account.expiresAt =
|
|
51
|
-
data.expires_in !== undefined
|
|
52
|
-
? Date.now() + data.expires_in * 1000
|
|
53
|
-
: previousExpiresAt && previousExpiresAt > Date.now()
|
|
54
|
-
? previousExpiresAt
|
|
55
|
-
: Date.now() + 55 * 60 * 1000;
|
|
56
|
-
if (data.refresh_token) {
|
|
57
|
-
account.refreshToken = data.refresh_token;
|
|
58
|
-
}
|
|
59
|
-
logger.debug(`[token-refresh] refreshed for ${account.label}`);
|
|
60
|
-
return { success: true };
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
logger.warn(`[token-refresh] exception for ${account.label} at ${url}`, {
|
|
64
|
-
error: String(e),
|
|
65
|
-
});
|
|
66
|
-
// If primary URL threw, try fallback
|
|
67
|
-
if (url === REFRESH_URL) {
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
return { success: false, error: String(e) };
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
// Should not reach here, but guard against empty urls array
|
|
74
|
-
return { success: false, error: "No refresh URLs available" };
|
|
75
|
-
}
|
|
76
|
-
export async function persistTokens(target, account) {
|
|
77
|
-
if (typeof target !== "string" && "providerKey" in target) {
|
|
78
|
-
await persistTokenStoreAccount(target.providerKey, account);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const credPath = typeof target === "string" ? target : target.credPath;
|
|
82
|
-
await persistLegacyCredentials(credPath, account);
|
|
83
|
-
}
|
|
84
|
-
async function persistLegacyCredentials(credPath, account) {
|
|
85
|
-
try {
|
|
86
|
-
const fs = await import("fs/promises");
|
|
87
|
-
const existing = JSON.parse(await fs.readFile(credPath, "utf8"));
|
|
88
|
-
existing.oauth = {
|
|
89
|
-
...existing.oauth,
|
|
90
|
-
accessToken: account.token,
|
|
91
|
-
expiresAt: account.expiresAt,
|
|
92
|
-
refreshToken: account.refreshToken,
|
|
93
|
-
};
|
|
94
|
-
existing.updatedAt = Date.now();
|
|
95
|
-
const tmpPath = credPath + ".tmp";
|
|
96
|
-
await fs.writeFile(tmpPath, JSON.stringify(existing, null, 2), {
|
|
97
|
-
mode: 0o600,
|
|
98
|
-
});
|
|
99
|
-
await fs.rename(tmpPath, credPath);
|
|
100
|
-
}
|
|
101
|
-
catch (err) {
|
|
102
|
-
logger.warn("[token-refresh] Failed to persist legacy credentials", {
|
|
103
|
-
error: err instanceof Error ? err.message : String(err),
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
async function persistTokenStoreAccount(providerKey, account) {
|
|
108
|
-
try {
|
|
109
|
-
const existing = await tokenStore.loadTokens(providerKey);
|
|
110
|
-
const merged = {
|
|
111
|
-
accessToken: account.token,
|
|
112
|
-
refreshToken: account.refreshToken ?? existing?.refreshToken,
|
|
113
|
-
expiresAt: account.expiresAt ?? existing?.expiresAt ?? Date.now() + 55 * 60 * 1000,
|
|
114
|
-
tokenType: existing?.tokenType ?? "Bearer",
|
|
115
|
-
...(existing?.scope ? { scope: existing.scope } : {}),
|
|
116
|
-
};
|
|
117
|
-
await tokenStore.saveTokens(providerKey, merged);
|
|
118
|
-
}
|
|
119
|
-
catch (err) {
|
|
120
|
-
logger.warn("[token-refresh] Failed to persist TokenStore credentials", {
|
|
121
|
-
error: err instanceof Error ? err.message : String(err),
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Proxy Usage Statistics
|
|
3
|
-
* Tracks per-account request counts, token usage, and error rates.
|
|
4
|
-
* In-memory only — resets on proxy restart.
|
|
5
|
-
*/
|
|
6
|
-
const stats = {
|
|
7
|
-
startedAt: Date.now(),
|
|
8
|
-
totalRequests: 0,
|
|
9
|
-
totalSuccess: 0,
|
|
10
|
-
totalErrors: 0,
|
|
11
|
-
totalRateLimits: 0,
|
|
12
|
-
accounts: {},
|
|
13
|
-
};
|
|
14
|
-
export function recordRequest(accountLabel, accountType) {
|
|
15
|
-
ensureAccount(accountLabel, accountType).requestCount++;
|
|
16
|
-
ensureAccount(accountLabel, accountType).lastRequestAt = Date.now();
|
|
17
|
-
}
|
|
18
|
-
export function recordSuccess(accountLabel, accountType) {
|
|
19
|
-
stats.totalRequests++;
|
|
20
|
-
stats.totalSuccess++;
|
|
21
|
-
const acct = ensureAccount(accountLabel, accountType);
|
|
22
|
-
acct.successCount++;
|
|
23
|
-
acct.currentBackoffLevel = 0;
|
|
24
|
-
}
|
|
25
|
-
export function recordError(accountLabel, accountType, status) {
|
|
26
|
-
stats.totalRequests++;
|
|
27
|
-
stats.totalErrors++;
|
|
28
|
-
const acct = ensureAccount(accountLabel, accountType);
|
|
29
|
-
acct.errorCount++;
|
|
30
|
-
acct.lastErrorAt = Date.now();
|
|
31
|
-
if (status === 429) {
|
|
32
|
-
stats.totalRateLimits++;
|
|
33
|
-
acct.rateLimitCount++;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export function recordCooldown(accountLabel, accountType, cooldownUntil, backoffLevel) {
|
|
37
|
-
const acct = ensureAccount(accountLabel, accountType);
|
|
38
|
-
acct.coolingUntil = cooldownUntil;
|
|
39
|
-
acct.currentBackoffLevel = backoffLevel;
|
|
40
|
-
}
|
|
41
|
-
export function getStats() {
|
|
42
|
-
const accounts = {};
|
|
43
|
-
for (const [label, account] of Object.entries(stats.accounts)) {
|
|
44
|
-
accounts[label] = { ...account };
|
|
45
|
-
}
|
|
46
|
-
return { ...stats, accounts };
|
|
47
|
-
}
|
|
48
|
-
export function getAccountStats(label) {
|
|
49
|
-
const account = stats.accounts[label];
|
|
50
|
-
return account ? { ...account } : undefined;
|
|
51
|
-
}
|
|
52
|
-
export function resetStats() {
|
|
53
|
-
stats.startedAt = Date.now();
|
|
54
|
-
stats.totalRequests = 0;
|
|
55
|
-
stats.totalSuccess = 0;
|
|
56
|
-
stats.totalErrors = 0;
|
|
57
|
-
stats.totalRateLimits = 0;
|
|
58
|
-
stats.accounts = {};
|
|
59
|
-
}
|
|
60
|
-
function ensureAccount(label, type) {
|
|
61
|
-
if (!stats.accounts[label]) {
|
|
62
|
-
stats.accounts[label] = {
|
|
63
|
-
label,
|
|
64
|
-
type,
|
|
65
|
-
requestCount: 0,
|
|
66
|
-
successCount: 0,
|
|
67
|
-
errorCount: 0,
|
|
68
|
-
rateLimitCount: 0,
|
|
69
|
-
lastRequestAt: 0,
|
|
70
|
-
currentBackoffLevel: 0,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
return stats.accounts[label];
|
|
74
|
-
}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared NO_PROXY utility functions
|
|
3
|
-
* Extracted from awsProxyIntegration.ts and proxyFetch.ts to eliminate duplication
|
|
4
|
-
* Supports comprehensive NO_PROXY pattern matching including wildcards, domains, ports, and CIDR
|
|
5
|
-
*/
|
|
6
|
-
import { logger } from "../../utils/logger.js";
|
|
7
|
-
/**
|
|
8
|
-
* Check if an IP address is within a CIDR range
|
|
9
|
-
*/
|
|
10
|
-
function isIpInCIDR(ip, cidr) {
|
|
11
|
-
try {
|
|
12
|
-
const [cidrIp, prefixLength] = cidr.split("/");
|
|
13
|
-
const prefix = parseInt(prefixLength, 10);
|
|
14
|
-
if (isNaN(prefix) || prefix < 0 || prefix > 32) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
const ipToNumber = (ipStr) => {
|
|
18
|
-
const parts = ipStr.split(".").map(Number);
|
|
19
|
-
return (parts[0] << 24) + (parts[1] << 16) + (parts[2] << 8) + parts[3];
|
|
20
|
-
};
|
|
21
|
-
const ipNum = ipToNumber(ip);
|
|
22
|
-
const cidrIpNum = ipToNumber(cidrIp);
|
|
23
|
-
const mask = (-1 << (32 - prefix)) >>> 0;
|
|
24
|
-
return (ipNum & mask) === (cidrIpNum & mask);
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Comprehensive NO_PROXY bypass check supporting multiple pattern types
|
|
32
|
-
*
|
|
33
|
-
* Supported patterns:
|
|
34
|
-
* - "*" - bypass all requests
|
|
35
|
-
* - "example.com" - exact hostname match
|
|
36
|
-
* - ".example.com" - domain suffix match (matches example.com and subdomains)
|
|
37
|
-
* - "localhost:8080" - hostname with specific port
|
|
38
|
-
* - "192.168.1.0/24" - CIDR notation for IP ranges
|
|
39
|
-
*
|
|
40
|
-
* @param targetUrl - The URL to check for proxy bypass
|
|
41
|
-
* @param noProxyEnv - Optional NO_PROXY environment variable value (if not provided, reads from process.env)
|
|
42
|
-
* @returns true if the URL should bypass proxy, false otherwise
|
|
43
|
-
*/
|
|
44
|
-
export function shouldBypassProxy(targetUrl, noProxyEnv) {
|
|
45
|
-
const noProxy = noProxyEnv || process.env.NO_PROXY || process.env.no_proxy;
|
|
46
|
-
if (!noProxy) {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
try {
|
|
50
|
-
const url = new URL(targetUrl);
|
|
51
|
-
const hostname = url.hostname.toLowerCase();
|
|
52
|
-
const port = url.port || (url.protocol === "https:" ? "443" : "80");
|
|
53
|
-
const patterns = noProxy
|
|
54
|
-
.split(",")
|
|
55
|
-
.map((p) => p.trim())
|
|
56
|
-
.filter(Boolean);
|
|
57
|
-
for (const pattern of patterns) {
|
|
58
|
-
const lowerPattern = pattern.toLowerCase();
|
|
59
|
-
// Wildcard match - bypass all
|
|
60
|
-
if (lowerPattern === "*") {
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
// Domain suffix match (.example.com)
|
|
64
|
-
if (lowerPattern.startsWith(".")) {
|
|
65
|
-
const suffix = lowerPattern.slice(1);
|
|
66
|
-
if (hostname.endsWith(suffix) || hostname === suffix) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
// Port-specific match (hostname:port)
|
|
71
|
-
else if (lowerPattern.includes(":")) {
|
|
72
|
-
const [patternHost, patternPort] = lowerPattern.split(":");
|
|
73
|
-
if (hostname === patternHost && port === patternPort) {
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
// CIDR notation (192.168.1.0/24) - only for IP addresses
|
|
78
|
-
else if (lowerPattern.includes("/")) {
|
|
79
|
-
// Only apply CIDR when target is an IP literal
|
|
80
|
-
if (/^\d{1,3}(\.\d{1,3}){3}$/.test(hostname) &&
|
|
81
|
-
isIpInCIDR(hostname, lowerPattern)) {
|
|
82
|
-
return true;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// Exact hostname match
|
|
86
|
-
else if (hostname === lowerPattern) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
logger.warn("[Proxy] Error in NO_PROXY bypass logic", { targetUrl, error });
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Get the current NO_PROXY environment variable value
|
|
99
|
-
* Checks both uppercase and lowercase variants
|
|
100
|
-
*/
|
|
101
|
-
export function getNoProxyEnv() {
|
|
102
|
-
return process.env.NO_PROXY || process.env.no_proxy;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Simple NO_PROXY bypass check with basic pattern support
|
|
106
|
-
* Legacy function for backward compatibility with simpler use cases
|
|
107
|
-
*
|
|
108
|
-
* Supports:
|
|
109
|
-
* - "*" - bypass all
|
|
110
|
-
* - "example.com" - exact match
|
|
111
|
-
* - ".example.com" - domain suffix match
|
|
112
|
-
*
|
|
113
|
-
* @param targetUrl - The URL to check
|
|
114
|
-
* @param noProxyValue - The NO_PROXY value to check against
|
|
115
|
-
* @returns true if should bypass proxy
|
|
116
|
-
*/
|
|
117
|
-
export function shouldBypassProxySimple(targetUrl, noProxyValue) {
|
|
118
|
-
try {
|
|
119
|
-
const url = new URL(targetUrl);
|
|
120
|
-
const hostname = url.hostname.toLowerCase();
|
|
121
|
-
// Split NO_PROXY by comma and check each pattern
|
|
122
|
-
const patterns = noProxyValue.split(",").map((p) => p.trim().toLowerCase());
|
|
123
|
-
for (const pattern of patterns) {
|
|
124
|
-
if (!pattern) {
|
|
125
|
-
continue;
|
|
126
|
-
}
|
|
127
|
-
// Exact match
|
|
128
|
-
if (hostname === pattern) {
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
// Wildcard match (starts with .)
|
|
132
|
-
if (pattern.startsWith(".") && hostname.endsWith(pattern)) {
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
// Simple wildcard
|
|
136
|
-
if (pattern === "*") {
|
|
137
|
-
return true;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
return false;
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
logger.warn("[Proxy] Error in simple NO_PROXY bypass logic", {
|
|
144
|
-
targetUrl,
|
|
145
|
-
error,
|
|
146
|
-
});
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
}
|