@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,632 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hono Server Adapter
|
|
3
|
-
* Primary server adapter implementation using Hono framework
|
|
4
|
-
* Hono is chosen for its performance, TypeScript-first design, and edge compatibility
|
|
5
|
-
*/
|
|
6
|
-
import { Hono } from "hono";
|
|
7
|
-
import { cors } from "hono/cors";
|
|
8
|
-
import { HTTPException } from "hono/http-exception";
|
|
9
|
-
import { logger as honoLogger } from "hono/logger";
|
|
10
|
-
import { secureHeaders } from "hono/secure-headers";
|
|
11
|
-
import { streamSSE } from "hono/streaming";
|
|
12
|
-
import { timeout } from "hono/timeout";
|
|
13
|
-
import { logger } from "../../utils/logger.js";
|
|
14
|
-
import { AlreadyRunningError, ServerStopError, wrapError } from "../errors.js";
|
|
15
|
-
import { BaseServerAdapter } from "../abstract/baseServerAdapter.js";
|
|
16
|
-
import { isErrorResponse } from "../utils/validation.js";
|
|
17
|
-
/**
|
|
18
|
-
* Hono-specific server adapter
|
|
19
|
-
* Supports multiple runtimes: Bun, Deno, Node.js
|
|
20
|
-
*/
|
|
21
|
-
export class HonoServerAdapter extends BaseServerAdapter {
|
|
22
|
-
app;
|
|
23
|
-
server;
|
|
24
|
-
rateLimitStore = new Map();
|
|
25
|
-
rateLimitCleanupInterval;
|
|
26
|
-
// Store context by request ID for sharing between middleware and route handlers
|
|
27
|
-
requestContextStore = new Map();
|
|
28
|
-
constructor(neurolink, config = {}) {
|
|
29
|
-
super(neurolink, config);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Create rate limiter middleware for Hono
|
|
33
|
-
*/
|
|
34
|
-
createRateLimiter() {
|
|
35
|
-
return async (c, next) => {
|
|
36
|
-
// Skip rate limiting for excluded paths
|
|
37
|
-
if (this.config.rateLimit.skipPaths) {
|
|
38
|
-
for (const skipPath of this.config.rateLimit.skipPaths) {
|
|
39
|
-
if (c.req.path.startsWith(skipPath)) {
|
|
40
|
-
return next();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Use custom keyGenerator if provided, otherwise default to IP-based key
|
|
45
|
-
let key;
|
|
46
|
-
if (this.config.rateLimit.keyGenerator) {
|
|
47
|
-
// Build minimal context for keyGenerator
|
|
48
|
-
const headers = {};
|
|
49
|
-
c.req.raw.headers.forEach((value, name) => {
|
|
50
|
-
headers[name] = value;
|
|
51
|
-
});
|
|
52
|
-
const minCtx = {
|
|
53
|
-
requestId: c.req.header("X-Request-ID") || this.generateRequestId(),
|
|
54
|
-
method: c.req.method,
|
|
55
|
-
path: c.req.path,
|
|
56
|
-
headers,
|
|
57
|
-
query: this.extractQuery(c),
|
|
58
|
-
params: c.req.param(),
|
|
59
|
-
neurolink: this.neurolink,
|
|
60
|
-
toolRegistry: this.toolRegistry,
|
|
61
|
-
externalServerManager: this.externalServerManager,
|
|
62
|
-
timestamp: Date.now(),
|
|
63
|
-
metadata: {},
|
|
64
|
-
};
|
|
65
|
-
key = this.config.rateLimit.keyGenerator(minCtx);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
key =
|
|
69
|
-
c.req.header("x-forwarded-for") ||
|
|
70
|
-
c.req.header("x-real-ip") ||
|
|
71
|
-
"unknown";
|
|
72
|
-
}
|
|
73
|
-
const now = Date.now();
|
|
74
|
-
const windowMs = this.config.rateLimit.windowMs;
|
|
75
|
-
const maxRequests = this.config.rateLimit.maxRequests;
|
|
76
|
-
let record = this.rateLimitStore.get(key);
|
|
77
|
-
if (!record || now > record.resetAt) {
|
|
78
|
-
record = { count: 0, resetAt: now + windowMs };
|
|
79
|
-
this.rateLimitStore.set(key, record);
|
|
80
|
-
}
|
|
81
|
-
record.count++;
|
|
82
|
-
// Set rate limit headers
|
|
83
|
-
c.header("X-RateLimit-Limit", String(maxRequests));
|
|
84
|
-
c.header("X-RateLimit-Remaining", String(Math.max(0, maxRequests - record.count)));
|
|
85
|
-
c.header("X-RateLimit-Reset", String(Math.ceil(record.resetAt / 1000)));
|
|
86
|
-
if (record.count > maxRequests) {
|
|
87
|
-
const retryAfter = Math.ceil((record.resetAt - now) / 1000);
|
|
88
|
-
c.header("Retry-After", String(retryAfter));
|
|
89
|
-
return c.json({
|
|
90
|
-
error: {
|
|
91
|
-
code: "RATE_LIMIT_EXCEEDED",
|
|
92
|
-
message: this.config.rateLimit.message,
|
|
93
|
-
},
|
|
94
|
-
metadata: {
|
|
95
|
-
timestamp: new Date().toISOString(),
|
|
96
|
-
retryAfter,
|
|
97
|
-
},
|
|
98
|
-
}, 429);
|
|
99
|
-
}
|
|
100
|
-
return next();
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Periodically clean up expired rate limit entries
|
|
105
|
-
*/
|
|
106
|
-
cleanupRateLimitStore() {
|
|
107
|
-
const now = Date.now();
|
|
108
|
-
for (const [key, entry] of this.rateLimitStore.entries()) {
|
|
109
|
-
if (now > entry.resetAt) {
|
|
110
|
-
this.rateLimitStore.delete(key);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Initialize Hono framework
|
|
116
|
-
*/
|
|
117
|
-
initializeFramework() {
|
|
118
|
-
this.app = new Hono();
|
|
119
|
-
// Add secure headers
|
|
120
|
-
this.app.use("*", secureHeaders());
|
|
121
|
-
// Add CORS if enabled
|
|
122
|
-
if (this.config.cors.enabled) {
|
|
123
|
-
this.app.use("*", cors({
|
|
124
|
-
origin: this.config.cors.origins,
|
|
125
|
-
allowMethods: this.config.cors.methods,
|
|
126
|
-
allowHeaders: this.config.cors.headers,
|
|
127
|
-
credentials: this.config.cors.credentials,
|
|
128
|
-
maxAge: this.config.cors.maxAge,
|
|
129
|
-
}));
|
|
130
|
-
}
|
|
131
|
-
// Add timeout middleware
|
|
132
|
-
this.app.use("*", timeout(this.config.timeout));
|
|
133
|
-
// Add logging if enabled
|
|
134
|
-
if (this.config.logging.enabled) {
|
|
135
|
-
this.app.use("*", honoLogger());
|
|
136
|
-
}
|
|
137
|
-
// Add rate limiting if enabled
|
|
138
|
-
if (this.config.rateLimit.enabled) {
|
|
139
|
-
this.app.use("*", this.createRateLimiter());
|
|
140
|
-
// Schedule periodic cleanup of expired rate limit entries (every minute)
|
|
141
|
-
this.rateLimitCleanupInterval = setInterval(() => this.cleanupRateLimitStore(), 60000);
|
|
142
|
-
}
|
|
143
|
-
// Global error handler
|
|
144
|
-
this.app.onError((error, c) => {
|
|
145
|
-
const requestId = c.req.header("X-Request-ID") || this.generateRequestId();
|
|
146
|
-
logger.error("[HonoAdapter] Request error", {
|
|
147
|
-
requestId,
|
|
148
|
-
error: error.message,
|
|
149
|
-
stack: error.stack,
|
|
150
|
-
});
|
|
151
|
-
this.emit("error", {
|
|
152
|
-
requestId,
|
|
153
|
-
error,
|
|
154
|
-
timestamp: new Date(),
|
|
155
|
-
});
|
|
156
|
-
if (error instanceof HTTPException) {
|
|
157
|
-
return c.json({
|
|
158
|
-
error: {
|
|
159
|
-
code: `HTTP_${error.status}`,
|
|
160
|
-
message: error.message,
|
|
161
|
-
},
|
|
162
|
-
metadata: {
|
|
163
|
-
requestId,
|
|
164
|
-
timestamp: new Date().toISOString(),
|
|
165
|
-
},
|
|
166
|
-
}, error.status);
|
|
167
|
-
}
|
|
168
|
-
return c.json({
|
|
169
|
-
error: {
|
|
170
|
-
code: "INTERNAL_ERROR",
|
|
171
|
-
message: "An internal error occurred",
|
|
172
|
-
},
|
|
173
|
-
metadata: {
|
|
174
|
-
requestId,
|
|
175
|
-
timestamp: new Date().toISOString(),
|
|
176
|
-
},
|
|
177
|
-
}, 500);
|
|
178
|
-
});
|
|
179
|
-
// 404 handler
|
|
180
|
-
this.app.notFound((c) => {
|
|
181
|
-
return c.json({
|
|
182
|
-
error: {
|
|
183
|
-
code: "NOT_FOUND",
|
|
184
|
-
message: `Route ${c.req.method} ${c.req.path} not found`,
|
|
185
|
-
},
|
|
186
|
-
}, 404);
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Register route with Hono
|
|
191
|
-
*/
|
|
192
|
-
registerFrameworkRoute(route) {
|
|
193
|
-
const method = route.method.toLowerCase();
|
|
194
|
-
this.app[method](route.path, async (c) => {
|
|
195
|
-
const requestId = c.req.header("X-Request-ID") || this.generateRequestId();
|
|
196
|
-
const connectionId = `conn-${requestId}`;
|
|
197
|
-
const startTime = Date.now();
|
|
198
|
-
// Track connection for graceful shutdown
|
|
199
|
-
this.trackConnection(connectionId, undefined, requestId);
|
|
200
|
-
try {
|
|
201
|
-
// Extract path parameters
|
|
202
|
-
const params = c.req.param();
|
|
203
|
-
// Reuse existing context from middleware if available, otherwise create new one
|
|
204
|
-
const existingCtx = this.requestContextStore.get(requestId);
|
|
205
|
-
const ctx = existingCtx ||
|
|
206
|
-
this.createContext({
|
|
207
|
-
requestId,
|
|
208
|
-
method: c.req.method,
|
|
209
|
-
path: c.req.path,
|
|
210
|
-
headers: this.extractHeaders(c),
|
|
211
|
-
query: this.extractQuery(c),
|
|
212
|
-
params,
|
|
213
|
-
body: await this.extractBody(c),
|
|
214
|
-
});
|
|
215
|
-
// Emit request event
|
|
216
|
-
this.emit("request", {
|
|
217
|
-
requestId,
|
|
218
|
-
method: ctx.method,
|
|
219
|
-
path: ctx.path,
|
|
220
|
-
timestamp: new Date(),
|
|
221
|
-
});
|
|
222
|
-
// Handle streaming if configured
|
|
223
|
-
if (route.streaming?.enabled) {
|
|
224
|
-
return await this.handleStreamingResponse(c, ctx, route);
|
|
225
|
-
}
|
|
226
|
-
// Execute handler
|
|
227
|
-
const result = await route.handler(ctx);
|
|
228
|
-
const duration = Date.now() - startTime;
|
|
229
|
-
// Check if result is an error response
|
|
230
|
-
if (isErrorResponse(result)) {
|
|
231
|
-
const statusCode = result.httpStatus ?? 500;
|
|
232
|
-
// Emit response event with error status
|
|
233
|
-
this.emit("response", {
|
|
234
|
-
requestId,
|
|
235
|
-
statusCode,
|
|
236
|
-
duration,
|
|
237
|
-
timestamp: new Date(),
|
|
238
|
-
});
|
|
239
|
-
// Apply response headers from middleware
|
|
240
|
-
if (ctx.responseHeaders) {
|
|
241
|
-
for (const [key, value] of Object.entries(ctx.responseHeaders)) {
|
|
242
|
-
c.header(key, value);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
// Return error response with proper status code
|
|
246
|
-
// Cast to ContentfulStatusCode since we know error codes are valid HTTP status codes
|
|
247
|
-
return c.json({
|
|
248
|
-
error: result.error,
|
|
249
|
-
metadata: {
|
|
250
|
-
...result.metadata,
|
|
251
|
-
requestId,
|
|
252
|
-
timestamp: new Date().toISOString(),
|
|
253
|
-
duration,
|
|
254
|
-
},
|
|
255
|
-
}, statusCode);
|
|
256
|
-
}
|
|
257
|
-
// Emit response event
|
|
258
|
-
this.emit("response", {
|
|
259
|
-
requestId,
|
|
260
|
-
statusCode: 200,
|
|
261
|
-
duration,
|
|
262
|
-
timestamp: new Date(),
|
|
263
|
-
});
|
|
264
|
-
// Apply response headers from middleware
|
|
265
|
-
if (ctx.responseHeaders) {
|
|
266
|
-
for (const [key, value] of Object.entries(ctx.responseHeaders)) {
|
|
267
|
-
c.header(key, value);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
// Return formatted response
|
|
271
|
-
return c.json({
|
|
272
|
-
data: result,
|
|
273
|
-
metadata: {
|
|
274
|
-
requestId,
|
|
275
|
-
timestamp: new Date().toISOString(),
|
|
276
|
-
duration,
|
|
277
|
-
},
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
catch (error) {
|
|
281
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
282
|
-
logger.error("[HonoAdapter] Handler error", {
|
|
283
|
-
requestId,
|
|
284
|
-
route: route.path,
|
|
285
|
-
error: errorMessage,
|
|
286
|
-
});
|
|
287
|
-
throw new HTTPException(500, { message: errorMessage });
|
|
288
|
-
}
|
|
289
|
-
finally {
|
|
290
|
-
// Untrack connection when request completes
|
|
291
|
-
this.untrackConnection(connectionId);
|
|
292
|
-
// Clean up context store to prevent memory leaks
|
|
293
|
-
this.requestContextStore.delete(requestId);
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Handle streaming response using SSE
|
|
299
|
-
*/
|
|
300
|
-
async handleStreamingResponse(c, ctx, route) {
|
|
301
|
-
// Apply middleware response headers to streaming response before starting the stream
|
|
302
|
-
if (ctx.responseHeaders) {
|
|
303
|
-
for (const [key, value] of Object.entries(ctx.responseHeaders)) {
|
|
304
|
-
c.header(key, value);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
return streamSSE(c, async (stream) => {
|
|
308
|
-
try {
|
|
309
|
-
// Get streaming result from handler
|
|
310
|
-
const result = await route.handler(ctx);
|
|
311
|
-
// If result is an async iterable, stream it
|
|
312
|
-
if (result &&
|
|
313
|
-
typeof result === "object" &&
|
|
314
|
-
Symbol.asyncIterator in result) {
|
|
315
|
-
for await (const chunk of result) {
|
|
316
|
-
// Transform raw provider chunks into StreamEvent format
|
|
317
|
-
// The client SDK expects { type, content, timestamp, ... } objects
|
|
318
|
-
const streamEvent = this.toStreamEvent(chunk);
|
|
319
|
-
await stream.writeSSE({
|
|
320
|
-
data: JSON.stringify(streamEvent),
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
else if (result && isErrorResponse(result)) {
|
|
325
|
-
// Error result, send as error event
|
|
326
|
-
const errorResult = result;
|
|
327
|
-
const statusCode = errorResult.httpStatus ?? 500;
|
|
328
|
-
await stream.writeSSE({
|
|
329
|
-
data: JSON.stringify({
|
|
330
|
-
type: "error",
|
|
331
|
-
error: {
|
|
332
|
-
code: errorResult.error?.code ?? "STREAM_ERROR",
|
|
333
|
-
message: errorResult.error?.message ?? "Stream error",
|
|
334
|
-
status: statusCode,
|
|
335
|
-
},
|
|
336
|
-
timestamp: Date.now(),
|
|
337
|
-
}),
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
else {
|
|
341
|
-
// Single result, normalize into a StreamEvent so the client can
|
|
342
|
-
// match on the `type` field via handleEvent()
|
|
343
|
-
const streamEvent = this.toStreamEvent(result);
|
|
344
|
-
await stream.writeSSE({
|
|
345
|
-
data: JSON.stringify(streamEvent),
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
// Send [DONE] signal that the client SDK expects
|
|
349
|
-
await stream.writeSSE({
|
|
350
|
-
data: "[DONE]",
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
catch (error) {
|
|
354
|
-
await stream.writeSSE({
|
|
355
|
-
data: JSON.stringify({
|
|
356
|
-
type: "error",
|
|
357
|
-
error: {
|
|
358
|
-
code: "STREAM_ERROR",
|
|
359
|
-
message: error instanceof Error ? error.message : "Stream error",
|
|
360
|
-
status: 500,
|
|
361
|
-
},
|
|
362
|
-
timestamp: Date.now(),
|
|
363
|
-
}),
|
|
364
|
-
});
|
|
365
|
-
// Still send [DONE] after error so the client terminates cleanly
|
|
366
|
-
await stream.writeSSE({
|
|
367
|
-
data: "[DONE]",
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
/**
|
|
373
|
-
* Transform a raw provider chunk into a StreamEvent
|
|
374
|
-
* Provider chunks are typically { content: string } objects;
|
|
375
|
-
* the client SDK expects { type: "text", content: string, timestamp: number }
|
|
376
|
-
*/
|
|
377
|
-
toStreamEvent(chunk) {
|
|
378
|
-
// Already a StreamEvent (has a type field)
|
|
379
|
-
if (chunk &&
|
|
380
|
-
typeof chunk === "object" &&
|
|
381
|
-
"type" in chunk &&
|
|
382
|
-
typeof chunk.type === "string") {
|
|
383
|
-
return {
|
|
384
|
-
...chunk,
|
|
385
|
-
timestamp: chunk.timestamp ?? Date.now(),
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
// Raw text chunk from provider: { content: string }
|
|
389
|
-
if (chunk && typeof chunk === "object" && "content" in chunk) {
|
|
390
|
-
return {
|
|
391
|
-
type: "text",
|
|
392
|
-
content: String(chunk.content),
|
|
393
|
-
timestamp: Date.now(),
|
|
394
|
-
};
|
|
395
|
-
}
|
|
396
|
-
// String chunk
|
|
397
|
-
if (typeof chunk === "string") {
|
|
398
|
-
return {
|
|
399
|
-
type: "text",
|
|
400
|
-
content: chunk,
|
|
401
|
-
timestamp: Date.now(),
|
|
402
|
-
};
|
|
403
|
-
}
|
|
404
|
-
// Unknown shape — wrap as metadata event (StreamEventType has no "data" variant)
|
|
405
|
-
return {
|
|
406
|
-
type: "metadata",
|
|
407
|
-
metadata: chunk,
|
|
408
|
-
timestamp: Date.now(),
|
|
409
|
-
};
|
|
410
|
-
}
|
|
411
|
-
/**
|
|
412
|
-
* Register middleware with Hono
|
|
413
|
-
*/
|
|
414
|
-
registerFrameworkMiddleware(middleware) {
|
|
415
|
-
const paths = middleware.paths || ["*"];
|
|
416
|
-
for (const path of paths) {
|
|
417
|
-
this.app.use(path, async (c, next) => {
|
|
418
|
-
// Skip excluded paths
|
|
419
|
-
if (middleware.excludePaths?.some((p) => c.req.path.startsWith(p))) {
|
|
420
|
-
return next();
|
|
421
|
-
}
|
|
422
|
-
// Extract path parameters
|
|
423
|
-
const params = c.req.param();
|
|
424
|
-
// Get or generate request ID for context lookup
|
|
425
|
-
const requestId = c.req.header("X-Request-ID") || this.generateRequestId();
|
|
426
|
-
// Reuse existing context from previous middleware if available
|
|
427
|
-
let ctx = this.requestContextStore.get(requestId);
|
|
428
|
-
if (!ctx) {
|
|
429
|
-
// Create new context for the first middleware
|
|
430
|
-
ctx = this.createContext({
|
|
431
|
-
requestId,
|
|
432
|
-
method: c.req.method,
|
|
433
|
-
path: c.req.path,
|
|
434
|
-
headers: this.extractHeaders(c),
|
|
435
|
-
query: this.extractQuery(c),
|
|
436
|
-
params,
|
|
437
|
-
body: await this.extractBody(c),
|
|
438
|
-
});
|
|
439
|
-
// Store context for sharing between middleware and route handlers
|
|
440
|
-
this.requestContextStore.set(requestId, ctx);
|
|
441
|
-
}
|
|
442
|
-
// Execute middleware
|
|
443
|
-
return middleware.handler(ctx, next);
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
/**
|
|
448
|
-
* Start the Hono server
|
|
449
|
-
*/
|
|
450
|
-
async start() {
|
|
451
|
-
// Validate lifecycle state
|
|
452
|
-
this.validateLifecycleState("start", ["initialized", "stopped"]);
|
|
453
|
-
if (this.isRunning) {
|
|
454
|
-
throw new AlreadyRunningError(this.config.port, this.config.host);
|
|
455
|
-
}
|
|
456
|
-
this.lifecycleState = "starting";
|
|
457
|
-
const { port, host } = this.config;
|
|
458
|
-
try {
|
|
459
|
-
// Check if running in Bun environment
|
|
460
|
-
if (typeof Bun !== "undefined") {
|
|
461
|
-
this.server = Bun.serve({
|
|
462
|
-
port,
|
|
463
|
-
hostname: host,
|
|
464
|
-
fetch: this.app.fetch,
|
|
465
|
-
});
|
|
466
|
-
}
|
|
467
|
-
else if (typeof Deno !== "undefined") {
|
|
468
|
-
// Deno runtime
|
|
469
|
-
this.server = Deno.serve({
|
|
470
|
-
port,
|
|
471
|
-
hostname: host,
|
|
472
|
-
}, this.app.fetch);
|
|
473
|
-
}
|
|
474
|
-
else {
|
|
475
|
-
// Fallback to Node.js http module via @hono/node-server
|
|
476
|
-
const { serve } = await import("@hono/node-server");
|
|
477
|
-
this.server = serve({
|
|
478
|
-
fetch: this.app.fetch,
|
|
479
|
-
port,
|
|
480
|
-
hostname: host,
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
this.isRunning = true;
|
|
484
|
-
this.startTime = new Date();
|
|
485
|
-
this.lifecycleState = "running";
|
|
486
|
-
logger.info(`[HonoAdapter] Server started on ${host}:${port}`);
|
|
487
|
-
this.emit("started", {
|
|
488
|
-
port,
|
|
489
|
-
host,
|
|
490
|
-
timestamp: this.startTime,
|
|
491
|
-
});
|
|
492
|
-
}
|
|
493
|
-
catch (error) {
|
|
494
|
-
this.lifecycleState = "error";
|
|
495
|
-
throw error;
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Stop the Hono server with graceful shutdown
|
|
500
|
-
*/
|
|
501
|
-
async stop() {
|
|
502
|
-
if (!this.isRunning) {
|
|
503
|
-
return; // Already stopped, return gracefully (idempotent)
|
|
504
|
-
}
|
|
505
|
-
const uptime = this.startTime ? Date.now() - this.startTime.getTime() : 0;
|
|
506
|
-
try {
|
|
507
|
-
// Use graceful shutdown from base class
|
|
508
|
-
await this.gracefulShutdown();
|
|
509
|
-
// Clean up rate limit cleanup interval
|
|
510
|
-
if (this.rateLimitCleanupInterval) {
|
|
511
|
-
clearInterval(this.rateLimitCleanupInterval);
|
|
512
|
-
this.rateLimitCleanupInterval = undefined;
|
|
513
|
-
}
|
|
514
|
-
logger.info("[HonoAdapter] Server stopped", { uptime });
|
|
515
|
-
this.emit("stopped", {
|
|
516
|
-
uptime,
|
|
517
|
-
timestamp: new Date(),
|
|
518
|
-
});
|
|
519
|
-
// Reset state for restart capability
|
|
520
|
-
this.resetServerState();
|
|
521
|
-
this.server = undefined;
|
|
522
|
-
this.rateLimitStore.clear();
|
|
523
|
-
}
|
|
524
|
-
catch (error) {
|
|
525
|
-
const wrappedError = wrapError(error);
|
|
526
|
-
throw new ServerStopError(wrappedError.message, wrappedError);
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
// ============================================
|
|
530
|
-
// Lifecycle Methods (Framework-Specific)
|
|
531
|
-
// ============================================
|
|
532
|
-
/**
|
|
533
|
-
* Stop accepting new connections
|
|
534
|
-
*/
|
|
535
|
-
async stopAcceptingConnections() {
|
|
536
|
-
// For Hono, this is handled by the underlying server
|
|
537
|
-
logger.debug("[HonoAdapter] Stopping acceptance of new connections");
|
|
538
|
-
}
|
|
539
|
-
/**
|
|
540
|
-
* Close the underlying server
|
|
541
|
-
*/
|
|
542
|
-
async closeServer() {
|
|
543
|
-
if (!this.server) {
|
|
544
|
-
return;
|
|
545
|
-
}
|
|
546
|
-
// Handle different server types (Bun, Deno, Node.js)
|
|
547
|
-
const serverObj = this.server;
|
|
548
|
-
if (typeof serverObj.stop === "function") {
|
|
549
|
-
// Bun server
|
|
550
|
-
serverObj.stop();
|
|
551
|
-
}
|
|
552
|
-
else if (typeof serverObj.shutdown === "function") {
|
|
553
|
-
// Deno server
|
|
554
|
-
await serverObj.shutdown();
|
|
555
|
-
}
|
|
556
|
-
else if (typeof serverObj.close === "function") {
|
|
557
|
-
// Node.js http server
|
|
558
|
-
await new Promise((resolve, reject) => {
|
|
559
|
-
serverObj.close?.((err) => {
|
|
560
|
-
if (err) {
|
|
561
|
-
reject(err);
|
|
562
|
-
}
|
|
563
|
-
else {
|
|
564
|
-
resolve();
|
|
565
|
-
}
|
|
566
|
-
});
|
|
567
|
-
});
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
/**
|
|
571
|
-
* Force close all active connections
|
|
572
|
-
*/
|
|
573
|
-
async forceCloseConnections() {
|
|
574
|
-
logger.info("[HonoAdapter] Force closing connections", {
|
|
575
|
-
count: this.activeConnections.size,
|
|
576
|
-
});
|
|
577
|
-
if (this.server) {
|
|
578
|
-
const serverObj = this.server;
|
|
579
|
-
if (typeof serverObj.closeAllConnections === "function") {
|
|
580
|
-
serverObj.closeAllConnections();
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
this.activeConnections.clear();
|
|
584
|
-
}
|
|
585
|
-
/**
|
|
586
|
-
* Get the Hono app instance
|
|
587
|
-
*/
|
|
588
|
-
getFrameworkInstance() {
|
|
589
|
-
return this.app;
|
|
590
|
-
}
|
|
591
|
-
// ============================================
|
|
592
|
-
// Helper Methods
|
|
593
|
-
// ============================================
|
|
594
|
-
extractHeaders(c) {
|
|
595
|
-
const headers = {};
|
|
596
|
-
c.req.raw.headers.forEach((value, key) => {
|
|
597
|
-
headers[key] = value;
|
|
598
|
-
});
|
|
599
|
-
return headers;
|
|
600
|
-
}
|
|
601
|
-
extractQuery(c) {
|
|
602
|
-
const query = {};
|
|
603
|
-
const url = new URL(c.req.url);
|
|
604
|
-
url.searchParams.forEach((value, key) => {
|
|
605
|
-
query[key] = value;
|
|
606
|
-
});
|
|
607
|
-
return query;
|
|
608
|
-
}
|
|
609
|
-
async extractBody(c) {
|
|
610
|
-
if (!this.config.bodyParser.enabled) {
|
|
611
|
-
return undefined;
|
|
612
|
-
}
|
|
613
|
-
const contentType = c.req.header("Content-Type") || "";
|
|
614
|
-
if (contentType.includes("application/json")) {
|
|
615
|
-
try {
|
|
616
|
-
return await c.req.json();
|
|
617
|
-
}
|
|
618
|
-
catch {
|
|
619
|
-
return undefined;
|
|
620
|
-
}
|
|
621
|
-
}
|
|
622
|
-
if (contentType.includes("application/x-www-form-urlencoded")) {
|
|
623
|
-
try {
|
|
624
|
-
return await c.req.parseBody();
|
|
625
|
-
}
|
|
626
|
-
catch {
|
|
627
|
-
return undefined;
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
return undefined;
|
|
631
|
-
}
|
|
632
|
-
}
|