@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,108 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NeuroLink Server Adapters
|
|
3
|
-
* Expose NeuroLink capabilities through HTTP APIs
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* ```typescript
|
|
7
|
-
* import { NeuroLink } from "@juspay/neurolink";
|
|
8
|
-
* import { createServer, createAllRoutes } from "@juspay/neurolink/server";
|
|
9
|
-
*
|
|
10
|
-
* const neurolink = new NeuroLink({
|
|
11
|
-
* provider: "openai",
|
|
12
|
-
* apiKey: process.env.OPENAI_API_KEY,
|
|
13
|
-
* });
|
|
14
|
-
*
|
|
15
|
-
* // Create and start server
|
|
16
|
-
* const server = await createServer(neurolink, {
|
|
17
|
-
* framework: "hono",
|
|
18
|
-
* config: { port: 3000 },
|
|
19
|
-
* });
|
|
20
|
-
*
|
|
21
|
-
* await server.initialize();
|
|
22
|
-
* await server.start();
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
// ============================================
|
|
26
|
-
// Abstract Base Class
|
|
27
|
-
// ============================================
|
|
28
|
-
export { BaseServerAdapter } from "./abstract/baseServerAdapter.js";
|
|
29
|
-
export { ExpressServerAdapter } from "./adapters/expressAdapter.js";
|
|
30
|
-
export { FastifyServerAdapter } from "./adapters/fastifyAdapter.js";
|
|
31
|
-
// ============================================
|
|
32
|
-
// Framework Adapters
|
|
33
|
-
// ============================================
|
|
34
|
-
export { HonoServerAdapter } from "./adapters/honoAdapter.js";
|
|
35
|
-
export { KoaServerAdapter } from "./adapters/koaAdapter.js";
|
|
36
|
-
// ============================================
|
|
37
|
-
// Errors
|
|
38
|
-
// ============================================
|
|
39
|
-
export { AlreadyRunningError,
|
|
40
|
-
// Authentication/Authorization errors
|
|
41
|
-
AuthenticationError, AuthorizationError,
|
|
42
|
-
// Configuration errors
|
|
43
|
-
ConfigurationError,
|
|
44
|
-
// Error recovery
|
|
45
|
-
ErrorRecoveryStrategies,
|
|
46
|
-
// Handler errors
|
|
47
|
-
HandlerError, InvalidAuthenticationError,
|
|
48
|
-
// Dependency errors
|
|
49
|
-
MissingDependencyError, NotRunningError,
|
|
50
|
-
// Rate limit errors
|
|
51
|
-
RateLimitError as ServerRateLimitError, RouteConflictError, RouteNotFoundError,
|
|
52
|
-
// Base error class
|
|
53
|
-
ServerAdapterError,
|
|
54
|
-
// Server lifecycle errors
|
|
55
|
-
ServerStartError, ServerStopError, StreamAbortedError,
|
|
56
|
-
// Streaming errors
|
|
57
|
-
StreamingError,
|
|
58
|
-
// Timeout errors
|
|
59
|
-
TimeoutError,
|
|
60
|
-
// Validation errors
|
|
61
|
-
ValidationError as ServerValidationError, WebSocketConnectionError,
|
|
62
|
-
// WebSocket errors
|
|
63
|
-
WebSocketError,
|
|
64
|
-
// Utilities
|
|
65
|
-
wrapError, } from "./errors.js";
|
|
66
|
-
// ============================================
|
|
67
|
-
// Factory
|
|
68
|
-
// ============================================
|
|
69
|
-
export { createServer, ServerAdapterFactory, } from "./factory/serverAdapterFactory.js";
|
|
70
|
-
export { createAbortSignalMiddleware, createExpressAbortMiddleware, } from "./middleware/abortSignal.js";
|
|
71
|
-
// ============================================
|
|
72
|
-
// Middleware
|
|
73
|
-
// ============================================
|
|
74
|
-
export { createAuthMiddleware, createRoleMiddleware, } from "./middleware/auth.js";
|
|
75
|
-
export { createCacheInvalidator, createCacheMiddleware, InMemoryCacheStore, } from "./middleware/cache.js";
|
|
76
|
-
export { createCompressionMiddleware, createErrorHandlingMiddleware, createLoggingMiddleware, createRequestIdMiddleware, createSecurityHeadersMiddleware, createTimingMiddleware, } from "./middleware/common.js";
|
|
77
|
-
export { createDeprecationMiddleware, } from "./middleware/deprecation.js";
|
|
78
|
-
export { createMCPBodyAttachmentMiddleware, fastifyMCPBodyHook, } from "./middleware/mcpBodyAttachment.js";
|
|
79
|
-
export { createRateLimitMiddleware, createSlidingWindowRateLimitMiddleware, InMemoryRateLimitStore, RateLimitError, } from "./middleware/rateLimit.js";
|
|
80
|
-
export { CommonSchemas, createFieldValidator, createRequestValidationMiddleware, ValidationError, } from "./middleware/validation.js";
|
|
81
|
-
// ============================================
|
|
82
|
-
// OpenAPI
|
|
83
|
-
// ============================================
|
|
84
|
-
export { AgentExecuteRequestSchema as OpenAPIAgentExecuteRequestSchema, AgentExecuteResponseSchema, AgentInputSchema, ApiKeySecurityScheme, BasicSecurityScheme, BearerSecurityScheme, CommonParameters, ConversationMessageSchema, createApiInfo, createDeleteOperation, createErrorResponse as createOpenAPIErrorResponse, createGetOperation, createHeaderParameter, createOpenAPIGenerator, createPathParameter, createPostOperation, createQueryParameter, createServer as createOpenAPIServer, createStreamingPostOperation, createStreamingResponse,
|
|
85
|
-
// Templates
|
|
86
|
-
createSuccessResponse, DefaultServers,
|
|
87
|
-
// Schemas
|
|
88
|
-
ErrorResponseSchema, generateOpenAPIFromConfig, generateOpenAPISpec, HealthResponseSchema, MCPServerStatusSchema, MCPServersListResponseSchema, MCPServerToolSchema, MetricsResponseSchema, NeuroLinkApiInfo,
|
|
89
|
-
// Generator
|
|
90
|
-
OpenAPIGenerator, OpenAPISchemas, ProviderInfoSchema, ReadyResponseSchema, SessionSchema, SessionsListResponseSchema, StandardErrorResponses, StandardTags, TokenUsageSchema, ToolCallSchema, ToolDefinitionSchema, ToolExecuteRequestSchema as OpenAPIToolExecuteRequestSchema, ToolExecuteResponseSchema, ToolListResponseSchema, ToolParameterSchema, } from "./openapi/index.js";
|
|
91
|
-
// ============================================
|
|
92
|
-
// Routes
|
|
93
|
-
// ============================================
|
|
94
|
-
export { createAgentRoutes, createAllRoutes, createHealthRoutes, createMCPRoutes, createMemoryRoutes, createOpenApiRoutes, createToolRoutes, registerAllRoutes, } from "./routes/index.js";
|
|
95
|
-
// ============================================
|
|
96
|
-
// Streaming
|
|
97
|
-
// ============================================
|
|
98
|
-
export { BaseDataStreamWriter, createDataStreamResponse, createDataStreamWriter, createNDJSONHeaders, createSSEHeaders, DataStreamResponse, formatSSEEvent,
|
|
99
|
-
// Helpers
|
|
100
|
-
pipeAsyncIterableToDataStream, WebStreamWriter, } from "./streaming/index.js";
|
|
101
|
-
// Export error constants
|
|
102
|
-
export { ErrorCategory, ErrorSeverity, ServerAdapterErrorCode, } from "./types.js";
|
|
103
|
-
export { createStreamRedactor, redactStreamChunk } from "./utils/redaction.js";
|
|
104
|
-
export { AgentExecuteRequestSchema, createErrorResponse, ServerNameParamSchema, SessionIdParamSchema, ToolArgumentsSchema, ToolExecuteRequestSchema, ToolNameParamSchema, ToolSearchQuerySchema, validateParams, validateQuery, validateRequest, } from "./utils/validation.js";
|
|
105
|
-
// ============================================
|
|
106
|
-
// WebSocket
|
|
107
|
-
// ============================================
|
|
108
|
-
export { createAgentWebSocketHandler, WebSocketConnectionManager, WebSocketMessageRouter, } from "./websocket/index.js";
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Abort Signal Middleware
|
|
3
|
-
* Provides client disconnection handling for long-running requests
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Create abort signal middleware for handling client disconnections.
|
|
7
|
-
*
|
|
8
|
-
* This middleware creates an AbortController and attaches its signal to the context,
|
|
9
|
-
* allowing route handlers to check for client disconnection during long-running operations.
|
|
10
|
-
*
|
|
11
|
-
* @param options - Optional configuration
|
|
12
|
-
* @returns Middleware that attaches abort signal to context
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* const abortMiddleware = createAbortSignalMiddleware();
|
|
17
|
-
* server.registerMiddleware(abortMiddleware);
|
|
18
|
-
*
|
|
19
|
-
* // In route handler:
|
|
20
|
-
* const signal = ctx.abortSignal;
|
|
21
|
-
* await longRunningOperation({ signal });
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export function createAbortSignalMiddleware(options) {
|
|
25
|
-
const { onAbort, timeout } = options ?? {};
|
|
26
|
-
return {
|
|
27
|
-
name: "abort-signal",
|
|
28
|
-
order: 5, // Early in middleware chain
|
|
29
|
-
handler: async (ctx, next) => {
|
|
30
|
-
const controller = new AbortController();
|
|
31
|
-
let timeoutId;
|
|
32
|
-
// Set up timeout if configured
|
|
33
|
-
if (timeout && timeout > 0) {
|
|
34
|
-
timeoutId = setTimeout(() => {
|
|
35
|
-
controller.abort(new Error(`Request timeout after ${timeout}ms`));
|
|
36
|
-
}, timeout);
|
|
37
|
-
}
|
|
38
|
-
// Framework-specific abort handling
|
|
39
|
-
setupFrameworkAbortHandler(ctx, controller, onAbort);
|
|
40
|
-
// Attach signal to context
|
|
41
|
-
ctx.abortSignal = controller.signal;
|
|
42
|
-
ctx.abortController = controller;
|
|
43
|
-
try {
|
|
44
|
-
return await next();
|
|
45
|
-
}
|
|
46
|
-
finally {
|
|
47
|
-
// Clean up timeout
|
|
48
|
-
if (timeoutId) {
|
|
49
|
-
clearTimeout(timeoutId);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Set up framework-specific abort handling
|
|
57
|
-
*/
|
|
58
|
-
function setupFrameworkAbortHandler(ctx, controller, onAbort) {
|
|
59
|
-
const frameworkResponse = ctx.rawResponse;
|
|
60
|
-
if (!frameworkResponse) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
// Express: res.on('close')
|
|
64
|
-
if (typeof frameworkResponse.on === "function") {
|
|
65
|
-
const res = frameworkResponse;
|
|
66
|
-
res.on("close", () => {
|
|
67
|
-
if (!res.writableFinished) {
|
|
68
|
-
controller.abort(new Error("Client disconnected"));
|
|
69
|
-
onAbort?.(ctx);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
// Hono/Fastify: May have different event patterns
|
|
74
|
-
// Add additional framework support as needed
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Express-specific middleware factory.
|
|
78
|
-
* Use this directly with Express adapter for optimal handling.
|
|
79
|
-
*
|
|
80
|
-
* This is a lower-level middleware that works directly with Express
|
|
81
|
-
* request/response objects rather than the unified ServerContext.
|
|
82
|
-
*
|
|
83
|
-
* @param options - Optional configuration
|
|
84
|
-
* @returns Express middleware function
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* ```typescript
|
|
88
|
-
* // In Express adapter
|
|
89
|
-
* app.use(createExpressAbortMiddleware());
|
|
90
|
-
*
|
|
91
|
-
* // Access in route handler
|
|
92
|
-
* app.get('/api/stream', (req, res) => {
|
|
93
|
-
* const signal = res.locals.abortSignal;
|
|
94
|
-
* // Use signal for cancellation
|
|
95
|
-
* });
|
|
96
|
-
* ```
|
|
97
|
-
*/
|
|
98
|
-
export function createExpressAbortMiddleware(options) {
|
|
99
|
-
return (_req, res, next) => {
|
|
100
|
-
const controller = new AbortController();
|
|
101
|
-
res.on("close", () => {
|
|
102
|
-
if (!res.writableFinished) {
|
|
103
|
-
controller.abort(new Error("Client disconnected"));
|
|
104
|
-
options?.onAbort?.({});
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
res.locals.abortSignal = controller.signal;
|
|
108
|
-
res.locals.abortController = controller;
|
|
109
|
-
next();
|
|
110
|
-
};
|
|
111
|
-
}
|
|
@@ -1,388 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Authentication Middleware
|
|
3
|
-
* Provides flexible authentication support for server adapters
|
|
4
|
-
*/
|
|
5
|
-
import { AuthenticationError, AuthorizationError, InvalidAuthenticationError, } from "../errors.js";
|
|
6
|
-
/**
|
|
7
|
-
* Check if request is from development playground.
|
|
8
|
-
* Detects playground requests via special headers for development mode.
|
|
9
|
-
*
|
|
10
|
-
* @param headers - Request headers to check
|
|
11
|
-
* @returns True if request is from dev playground
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* if (isDevPlayground(ctx.headers)) {
|
|
16
|
-
* // Skip authentication for playground
|
|
17
|
-
* }
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export function isDevPlayground(headers) {
|
|
21
|
-
const getHeader = (name) => {
|
|
22
|
-
const value = headers[name.toLowerCase()];
|
|
23
|
-
return Array.isArray(value) ? value[0] : value;
|
|
24
|
-
};
|
|
25
|
-
return (getHeader("x-neurolink-dev-playground") === "true" ||
|
|
26
|
-
getHeader("x-neurolink-playground") === "true");
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Default dev user for playground requests
|
|
30
|
-
*/
|
|
31
|
-
export const DEV_PLAYGROUND_USER = {
|
|
32
|
-
id: "playground",
|
|
33
|
-
roles: ["developer"],
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Create authentication middleware
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```typescript
|
|
40
|
-
* const authMiddleware = createAuthMiddleware({
|
|
41
|
-
* type: "bearer",
|
|
42
|
-
* validate: async (token) => {
|
|
43
|
-
* const user = await verifyJWT(token);
|
|
44
|
-
* return user ? { id: user.id, email: user.email } : null;
|
|
45
|
-
* },
|
|
46
|
-
* skipPaths: ["/api/health", "/api/ready"],
|
|
47
|
-
* });
|
|
48
|
-
*
|
|
49
|
-
* server.registerMiddleware(authMiddleware);
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export function createAuthMiddleware(config) {
|
|
53
|
-
const { type, validate, skipPaths = [], errorMessage = "Authentication required", skipDevPlayground = true, } = config;
|
|
54
|
-
// Determine header name based on auth type
|
|
55
|
-
const headerName = config.headerName ?? getDefaultHeaderName(type);
|
|
56
|
-
return {
|
|
57
|
-
name: "authentication",
|
|
58
|
-
order: 10, // Run early but after request ID
|
|
59
|
-
excludePaths: skipPaths,
|
|
60
|
-
handler: async (ctx, next) => {
|
|
61
|
-
// Skip auth for dev playground in non-production
|
|
62
|
-
if (skipDevPlayground &&
|
|
63
|
-
process.env.NODE_ENV !== "production" &&
|
|
64
|
-
isDevPlayground(ctx.headers)) {
|
|
65
|
-
ctx.user = {
|
|
66
|
-
id: DEV_PLAYGROUND_USER.id,
|
|
67
|
-
email: DEV_PLAYGROUND_USER.email,
|
|
68
|
-
roles: DEV_PLAYGROUND_USER.roles,
|
|
69
|
-
};
|
|
70
|
-
return next();
|
|
71
|
-
}
|
|
72
|
-
try {
|
|
73
|
-
// Extract token based on auth type
|
|
74
|
-
const token = extractToken(ctx, type, headerName, config.extractToken);
|
|
75
|
-
if (!token) {
|
|
76
|
-
throw new AuthenticationError(errorMessage);
|
|
77
|
-
}
|
|
78
|
-
// Validate token
|
|
79
|
-
const result = await validate(token, ctx);
|
|
80
|
-
if (!result) {
|
|
81
|
-
throw new InvalidAuthenticationError("Invalid authentication token");
|
|
82
|
-
}
|
|
83
|
-
// Set user information in context
|
|
84
|
-
ctx.user = {
|
|
85
|
-
id: result.id,
|
|
86
|
-
email: result.email,
|
|
87
|
-
roles: result.roles,
|
|
88
|
-
};
|
|
89
|
-
// Store additional metadata
|
|
90
|
-
if (result.metadata) {
|
|
91
|
-
ctx.metadata.auth = result.metadata;
|
|
92
|
-
}
|
|
93
|
-
return next();
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
if (error instanceof AuthenticationError ||
|
|
97
|
-
error instanceof InvalidAuthenticationError) {
|
|
98
|
-
throw error;
|
|
99
|
-
}
|
|
100
|
-
throw new AuthenticationError(error instanceof Error ? error.message : "Authentication failed");
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get default header name for auth type
|
|
107
|
-
*/
|
|
108
|
-
function getDefaultHeaderName(type) {
|
|
109
|
-
switch (type) {
|
|
110
|
-
case "bearer":
|
|
111
|
-
case "basic":
|
|
112
|
-
return "authorization";
|
|
113
|
-
case "api-key":
|
|
114
|
-
return "x-api-key";
|
|
115
|
-
case "custom":
|
|
116
|
-
return "authorization";
|
|
117
|
-
default:
|
|
118
|
-
return "authorization";
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Extract token from request based on auth type
|
|
123
|
-
*/
|
|
124
|
-
function extractToken(ctx, type, headerName, customExtractor) {
|
|
125
|
-
// Use custom extractor if provided
|
|
126
|
-
if (type === "custom" && customExtractor) {
|
|
127
|
-
return customExtractor(ctx);
|
|
128
|
-
}
|
|
129
|
-
const headerValue = ctx.headers[headerName.toLowerCase()];
|
|
130
|
-
if (!headerValue) {
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
switch (type) {
|
|
134
|
-
case "bearer": {
|
|
135
|
-
// Extract token from "Bearer <token>"
|
|
136
|
-
const match = headerValue.match(/^Bearer\s+(.+)$/i);
|
|
137
|
-
return match ? match[1] : null;
|
|
138
|
-
}
|
|
139
|
-
case "basic": {
|
|
140
|
-
// Extract credentials from "Basic <base64>"
|
|
141
|
-
const match = headerValue.match(/^Basic\s+(.+)$/i);
|
|
142
|
-
return match ? match[1] : null;
|
|
143
|
-
}
|
|
144
|
-
case "api-key":
|
|
145
|
-
// API key is the raw header value
|
|
146
|
-
return headerValue;
|
|
147
|
-
case "custom":
|
|
148
|
-
// For custom type without extractor, return raw header
|
|
149
|
-
return headerValue;
|
|
150
|
-
default:
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Role-based access control middleware
|
|
156
|
-
* Use after authentication middleware
|
|
157
|
-
*
|
|
158
|
-
* @example
|
|
159
|
-
* ```typescript
|
|
160
|
-
* const adminOnly = createRoleMiddleware({
|
|
161
|
-
* requiredRoles: ["admin"],
|
|
162
|
-
* errorMessage: "Admin access required",
|
|
163
|
-
* });
|
|
164
|
-
* ```
|
|
165
|
-
*/
|
|
166
|
-
export function createRoleMiddleware(config) {
|
|
167
|
-
const { requiredRoles, requireAll = false, errorMessage = "Insufficient permissions", } = config;
|
|
168
|
-
return {
|
|
169
|
-
name: "role-check",
|
|
170
|
-
order: 11, // Run after authentication
|
|
171
|
-
handler: async (ctx, next) => {
|
|
172
|
-
if (!ctx.user) {
|
|
173
|
-
throw new AuthenticationError("Authentication required");
|
|
174
|
-
}
|
|
175
|
-
const userRoles = ctx.user.roles || [];
|
|
176
|
-
const hasAccess = requireAll
|
|
177
|
-
? requiredRoles.every((role) => userRoles.includes(role))
|
|
178
|
-
: requiredRoles.some((role) => userRoles.includes(role));
|
|
179
|
-
if (!hasAccess) {
|
|
180
|
-
throw new AuthorizationError(errorMessage, ctx.requestId, requiredRoles);
|
|
181
|
-
}
|
|
182
|
-
return next();
|
|
183
|
-
},
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
// ============================================
|
|
187
|
-
// API Key Store
|
|
188
|
-
// ============================================
|
|
189
|
-
/**
|
|
190
|
-
* In-memory API key store for managing API keys
|
|
191
|
-
*
|
|
192
|
-
* @example
|
|
193
|
-
* ```typescript
|
|
194
|
-
* const store = new ApiKeyStore();
|
|
195
|
-
*
|
|
196
|
-
* // Add an API key
|
|
197
|
-
* store.addKey("my-api-key", { id: "user_1", email: "user@example.com" });
|
|
198
|
-
*
|
|
199
|
-
* // Validate a key
|
|
200
|
-
* const user = store.validate("my-api-key");
|
|
201
|
-
* if (user) {
|
|
202
|
-
* console.log("Valid key for user:", user.id);
|
|
203
|
-
* }
|
|
204
|
-
*
|
|
205
|
-
* // Remove a key
|
|
206
|
-
* store.removeKey("my-api-key");
|
|
207
|
-
*
|
|
208
|
-
* // Clear all keys
|
|
209
|
-
* store.clear();
|
|
210
|
-
* ```
|
|
211
|
-
*/
|
|
212
|
-
export class ApiKeyStore {
|
|
213
|
-
keys = new Map();
|
|
214
|
-
/**
|
|
215
|
-
* Add an API key with associated user
|
|
216
|
-
*/
|
|
217
|
-
addKey(apiKey, user) {
|
|
218
|
-
this.keys.set(apiKey, user);
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Validate an API key
|
|
222
|
-
* @returns The user associated with the key, or null if invalid
|
|
223
|
-
*/
|
|
224
|
-
validate(apiKey) {
|
|
225
|
-
return this.keys.get(apiKey) ?? null;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Remove an API key
|
|
229
|
-
*/
|
|
230
|
-
removeKey(apiKey) {
|
|
231
|
-
return this.keys.delete(apiKey);
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Clear all API keys
|
|
235
|
-
*/
|
|
236
|
-
clear() {
|
|
237
|
-
this.keys.clear();
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Get the number of stored keys
|
|
241
|
-
*/
|
|
242
|
-
get size() {
|
|
243
|
-
return this.keys.size;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Create bearer token authentication middleware
|
|
248
|
-
*
|
|
249
|
-
* @example
|
|
250
|
-
* ```typescript
|
|
251
|
-
* const authMiddleware = createBearerAuthMiddleware(
|
|
252
|
-
* async (token) => {
|
|
253
|
-
* const user = await verifyJWT(token);
|
|
254
|
-
* return user ? { id: user.id, roles: user.roles } : null;
|
|
255
|
-
* },
|
|
256
|
-
* { required: true }
|
|
257
|
-
* );
|
|
258
|
-
* ```
|
|
259
|
-
*/
|
|
260
|
-
export function createBearerAuthMiddleware(validate, options = {}) {
|
|
261
|
-
const { required = true, headerName = "authorization", skipPaths = [], } = options;
|
|
262
|
-
return {
|
|
263
|
-
name: "bearer-auth",
|
|
264
|
-
order: 10,
|
|
265
|
-
excludePaths: skipPaths,
|
|
266
|
-
handler: async (ctx, next) => {
|
|
267
|
-
const authHeader = ctx.headers[headerName.toLowerCase()];
|
|
268
|
-
// Extract bearer token
|
|
269
|
-
let token = null;
|
|
270
|
-
if (authHeader) {
|
|
271
|
-
const match = authHeader.match(/^Bearer\s+(.+)$/i);
|
|
272
|
-
token = match ? match[1] : null;
|
|
273
|
-
}
|
|
274
|
-
// Handle missing token
|
|
275
|
-
if (!token) {
|
|
276
|
-
if (required) {
|
|
277
|
-
throw new AuthenticationError("Authentication required");
|
|
278
|
-
}
|
|
279
|
-
return next();
|
|
280
|
-
}
|
|
281
|
-
// Validate token
|
|
282
|
-
const user = await validate(token);
|
|
283
|
-
if (!user) {
|
|
284
|
-
throw new AuthenticationError("Invalid authentication token");
|
|
285
|
-
}
|
|
286
|
-
// Set user in context
|
|
287
|
-
ctx.user = user;
|
|
288
|
-
return next();
|
|
289
|
-
},
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Create API key authentication middleware
|
|
294
|
-
*
|
|
295
|
-
* @example
|
|
296
|
-
* ```typescript
|
|
297
|
-
* const store = new ApiKeyStore();
|
|
298
|
-
* store.addKey("my-key", { id: "user_1" });
|
|
299
|
-
*
|
|
300
|
-
* const authMiddleware = createApiKeyAuthMiddleware(store);
|
|
301
|
-
* ```
|
|
302
|
-
*/
|
|
303
|
-
export function createApiKeyAuthMiddleware(store, options = {}) {
|
|
304
|
-
const { headerName = "x-api-key", skipPaths = [] } = options;
|
|
305
|
-
return {
|
|
306
|
-
name: "api-key-auth",
|
|
307
|
-
order: 10,
|
|
308
|
-
excludePaths: skipPaths,
|
|
309
|
-
handler: async (ctx, next) => {
|
|
310
|
-
const apiKey = ctx.headers[headerName.toLowerCase()];
|
|
311
|
-
if (!apiKey) {
|
|
312
|
-
throw new AuthenticationError("API key required");
|
|
313
|
-
}
|
|
314
|
-
const user = store.validate(apiKey);
|
|
315
|
-
if (!user) {
|
|
316
|
-
throw new AuthenticationError("Invalid API key");
|
|
317
|
-
}
|
|
318
|
-
ctx.user = user;
|
|
319
|
-
return next();
|
|
320
|
-
},
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
// ============================================
|
|
324
|
-
// Role-based Authorization (Simple)
|
|
325
|
-
// ============================================
|
|
326
|
-
/**
|
|
327
|
-
* Create role-based authorization middleware (simple version)
|
|
328
|
-
*
|
|
329
|
-
* @example
|
|
330
|
-
* ```typescript
|
|
331
|
-
* const adminMiddleware = createRoleAuthMiddleware(["admin"]);
|
|
332
|
-
* const editorMiddleware = createRoleAuthMiddleware(["admin", "editor"]);
|
|
333
|
-
* ```
|
|
334
|
-
*/
|
|
335
|
-
export function createRoleAuthMiddleware(requiredRoles, options = {}) {
|
|
336
|
-
const { requireAll = false } = options;
|
|
337
|
-
return {
|
|
338
|
-
name: "role-auth",
|
|
339
|
-
order: 11,
|
|
340
|
-
handler: async (ctx, next) => {
|
|
341
|
-
if (!ctx.user) {
|
|
342
|
-
throw new AuthenticationError("Authentication required");
|
|
343
|
-
}
|
|
344
|
-
const userRoles = ctx.user.roles || [];
|
|
345
|
-
const hasAccess = requireAll
|
|
346
|
-
? requiredRoles.every((role) => userRoles.includes(role))
|
|
347
|
-
: requiredRoles.some((role) => userRoles.includes(role));
|
|
348
|
-
if (!hasAccess) {
|
|
349
|
-
throw new AuthorizationError(`Required roles: ${requiredRoles.join(", ")}. User has: ${userRoles.join(", ") || "none"}`, ctx.requestId, requiredRoles);
|
|
350
|
-
}
|
|
351
|
-
return next();
|
|
352
|
-
},
|
|
353
|
-
};
|
|
354
|
-
}
|
|
355
|
-
// ============================================
|
|
356
|
-
// Permission-based Authorization
|
|
357
|
-
// ============================================
|
|
358
|
-
/**
|
|
359
|
-
* Create permission-based authorization middleware
|
|
360
|
-
*
|
|
361
|
-
* @example
|
|
362
|
-
* ```typescript
|
|
363
|
-
* const canEditMiddleware = createPermissionAuthMiddleware(["posts:edit"]);
|
|
364
|
-
* const canManageMiddleware = createPermissionAuthMiddleware(["users:read", "users:write"]);
|
|
365
|
-
* ```
|
|
366
|
-
*/
|
|
367
|
-
export function createPermissionAuthMiddleware(requiredPermissions, options = {}) {
|
|
368
|
-
const { requireAll = false } = options;
|
|
369
|
-
return {
|
|
370
|
-
name: "permission-auth",
|
|
371
|
-
order: 11,
|
|
372
|
-
handler: async (ctx, next) => {
|
|
373
|
-
if (!ctx.user) {
|
|
374
|
-
throw new AuthenticationError("Authentication required");
|
|
375
|
-
}
|
|
376
|
-
// Get permissions from user metadata or roles
|
|
377
|
-
const userPermissions = ctx.user
|
|
378
|
-
.permissions || [];
|
|
379
|
-
const hasAccess = requireAll
|
|
380
|
-
? requiredPermissions.every((perm) => userPermissions.includes(perm))
|
|
381
|
-
: requiredPermissions.some((perm) => userPermissions.includes(perm));
|
|
382
|
-
if (!hasAccess) {
|
|
383
|
-
throw new AuthorizationError(`Required permissions: ${requiredPermissions.join(", ")}. User has: ${userPermissions.join(", ") || "none"}`, ctx.requestId, requiredPermissions);
|
|
384
|
-
}
|
|
385
|
-
return next();
|
|
386
|
-
},
|
|
387
|
-
};
|
|
388
|
-
}
|