@juspay/neurolink 9.31.2 → 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 +12 -0
- package/dist/auth/AuthProviderFactory.d.ts +71 -0
- package/dist/auth/AuthProviderFactory.js +111 -0
- package/dist/auth/AuthProviderRegistry.d.ts +33 -0
- package/dist/auth/AuthProviderRegistry.js +190 -0
- package/dist/auth/RequestContext.d.ts +23 -0
- package/dist/auth/RequestContext.js +78 -0
- package/dist/auth/anthropicOAuth.js +1 -1
- package/dist/auth/authContext.d.ts +198 -0
- package/dist/auth/authContext.js +314 -0
- package/dist/auth/errors.d.ts +63 -0
- package/dist/auth/errors.js +39 -0
- package/dist/auth/index.d.ts +20 -8
- package/dist/auth/index.js +35 -7
- package/dist/auth/middleware/AuthMiddleware.d.ts +181 -0
- package/dist/auth/middleware/AuthMiddleware.js +519 -0
- package/dist/auth/middleware/rateLimitByUser.d.ts +282 -0
- package/dist/auth/middleware/rateLimitByUser.js +554 -0
- package/dist/auth/providers/BaseAuthProvider.d.ts +259 -0
- package/dist/auth/providers/BaseAuthProvider.js +723 -0
- package/dist/auth/providers/CognitoProvider.d.ts +61 -0
- package/dist/auth/providers/CognitoProvider.js +304 -0
- package/dist/auth/providers/KeycloakProvider.d.ts +61 -0
- package/dist/auth/providers/KeycloakProvider.js +393 -0
- package/dist/auth/providers/auth0.d.ts +59 -0
- package/dist/auth/providers/auth0.js +274 -0
- package/dist/auth/providers/betterAuth.d.ts +51 -0
- package/dist/auth/providers/betterAuth.js +182 -0
- package/dist/auth/providers/clerk.d.ts +65 -0
- package/dist/auth/providers/clerk.js +317 -0
- package/dist/auth/providers/custom.d.ts +64 -0
- package/dist/auth/providers/custom.js +112 -0
- package/dist/auth/providers/firebase.d.ts +63 -0
- package/dist/auth/providers/firebase.js +226 -0
- package/dist/auth/providers/jwt.d.ts +68 -0
- package/dist/auth/providers/jwt.js +212 -0
- package/dist/auth/providers/oauth2.d.ts +73 -0
- package/dist/auth/providers/oauth2.js +303 -0
- package/dist/auth/providers/supabase.d.ts +63 -0
- package/dist/auth/providers/supabase.js +259 -0
- package/dist/auth/providers/workos.d.ts +61 -0
- package/dist/auth/providers/workos.js +284 -0
- package/dist/auth/serverBridge.d.ts +14 -0
- package/dist/auth/serverBridge.js +25 -0
- package/dist/auth/sessionManager.d.ts +142 -0
- package/dist/auth/sessionManager.js +437 -0
- package/dist/cli/commands/authProviders.d.ts +43 -0
- package/dist/cli/commands/authProviders.js +399 -0
- package/dist/cli/commands/proxy.js +18 -5
- package/dist/cli/factories/authCommandFactory.d.ts +23 -5
- package/dist/cli/factories/authCommandFactory.js +108 -5
- package/dist/cli/parser.js +1 -1
- package/dist/client/aiSdkAdapter.js +1 -1
- package/dist/client/index.js +138 -477
- package/dist/core/factory.js +0 -1
- package/dist/core/infrastructure/baseRegistry.d.ts +3 -1
- package/dist/core/infrastructure/baseRegistry.js +5 -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/index.d.ts +1 -0
- package/dist/index.js +25 -0
- package/dist/lib/auth/AuthProviderFactory.d.ts +71 -0
- package/dist/lib/auth/AuthProviderFactory.js +112 -0
- package/dist/lib/auth/AuthProviderRegistry.d.ts +33 -0
- package/dist/lib/auth/AuthProviderRegistry.js +191 -0
- package/dist/lib/auth/RequestContext.d.ts +23 -0
- package/dist/lib/auth/RequestContext.js +79 -0
- package/dist/lib/auth/authContext.d.ts +198 -0
- package/dist/lib/auth/authContext.js +315 -0
- package/dist/lib/auth/errors.d.ts +63 -0
- package/dist/lib/auth/errors.js +40 -0
- package/dist/lib/auth/index.d.ts +20 -8
- package/dist/lib/auth/index.js +35 -7
- package/dist/lib/auth/middleware/AuthMiddleware.d.ts +181 -0
- package/dist/lib/auth/middleware/AuthMiddleware.js +520 -0
- package/dist/lib/auth/middleware/rateLimitByUser.d.ts +282 -0
- package/dist/lib/auth/middleware/rateLimitByUser.js +555 -0
- package/dist/lib/auth/providers/BaseAuthProvider.d.ts +259 -0
- package/dist/lib/auth/providers/BaseAuthProvider.js +724 -0
- package/dist/lib/auth/providers/CognitoProvider.d.ts +61 -0
- package/dist/lib/auth/providers/CognitoProvider.js +305 -0
- package/dist/lib/auth/providers/KeycloakProvider.d.ts +61 -0
- package/dist/lib/auth/providers/KeycloakProvider.js +394 -0
- package/dist/lib/auth/providers/auth0.d.ts +59 -0
- package/dist/lib/auth/providers/auth0.js +275 -0
- package/dist/lib/auth/providers/betterAuth.d.ts +51 -0
- package/dist/lib/auth/providers/betterAuth.js +183 -0
- package/dist/lib/auth/providers/clerk.d.ts +65 -0
- package/dist/lib/auth/providers/clerk.js +318 -0
- package/dist/lib/auth/providers/custom.d.ts +64 -0
- package/dist/lib/auth/providers/custom.js +113 -0
- package/dist/lib/auth/providers/firebase.d.ts +63 -0
- package/dist/lib/auth/providers/firebase.js +227 -0
- package/dist/lib/auth/providers/jwt.d.ts +68 -0
- package/dist/lib/auth/providers/jwt.js +213 -0
- package/dist/lib/auth/providers/oauth2.d.ts +73 -0
- package/dist/lib/auth/providers/oauth2.js +304 -0
- package/dist/lib/auth/providers/supabase.d.ts +63 -0
- package/dist/lib/auth/providers/supabase.js +260 -0
- package/dist/lib/auth/providers/workos.d.ts +61 -0
- package/dist/lib/auth/providers/workos.js +285 -0
- package/dist/lib/auth/serverBridge.d.ts +14 -0
- package/dist/lib/auth/serverBridge.js +26 -0
- package/dist/lib/auth/sessionManager.d.ts +142 -0
- package/dist/lib/auth/sessionManager.js +438 -0
- package/dist/lib/core/infrastructure/baseRegistry.d.ts +3 -1
- package/dist/lib/core/infrastructure/baseRegistry.js +5 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +25 -0
- package/dist/lib/mcp/toolRegistry.js +11 -1
- package/dist/lib/neurolink.d.ts +42 -1
- package/dist/lib/neurolink.js +218 -0
- package/dist/lib/rag/ChunkerRegistry.js +2 -2
- package/dist/lib/rag/metadata/MetadataExtractorRegistry.js +2 -2
- package/dist/lib/rag/reranker/RerankerRegistry.js +2 -2
- package/dist/lib/server/routes/agentRoutes.js +20 -2
- package/dist/lib/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/lib/types/authTypes.d.ts +937 -1
- package/dist/lib/types/authTypes.js +2 -1
- package/dist/lib/types/configTypes.d.ts +46 -0
- package/dist/lib/types/generateTypes.d.ts +6 -0
- package/dist/lib/types/index.d.ts +1 -0
- package/dist/lib/types/streamTypes.d.ts +6 -0
- package/dist/mcp/elicitationProtocol.js +1 -1
- package/dist/mcp/servers/agent/directToolsServer.js +0 -1
- package/dist/mcp/toolRegistry.js +11 -1
- package/dist/neurolink.d.ts +42 -1
- package/dist/neurolink.js +218 -0
- package/dist/providers/azureOpenai.js +1 -1
- package/dist/providers/huggingFace.js +0 -1
- package/dist/providers/openaiCompatible.js +0 -1
- package/dist/rag/ChunkerRegistry.js +2 -2
- package/dist/rag/metadata/MetadataExtractorRegistry.js +2 -2
- package/dist/rag/reranker/RerankerRegistry.js +2 -2
- package/dist/sdk/toolRegistration.js +0 -1
- package/dist/server/openapi/generator.js +1 -1
- package/dist/server/routes/agentRoutes.js +20 -2
- package/dist/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/types/authTypes.d.ts +937 -1
- package/dist/types/authTypes.js +2 -1
- package/dist/types/configTypes.d.ts +46 -0
- package/dist/types/configTypes.js +0 -5
- package/dist/types/generateTypes.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/modelTypes.js +0 -1
- package/dist/types/streamTypes.d.ts +6 -0
- 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 +3 -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/anthropicOAuth.js +0 -974
- 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 -49
- 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 -719
- 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 -8015
- 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 -171
- 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 -8
- 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
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
// src/lib/auth/providers/oauth2.ts
|
|
2
|
+
import * as jose from "jose";
|
|
3
|
+
import { createProxyFetch } from "../../proxy/proxyFetch.js";
|
|
4
|
+
import { logger } from "../../utils/logger.js";
|
|
5
|
+
import { AuthError } from "../errors.js";
|
|
6
|
+
import { BaseAuthProvider } from "./BaseAuthProvider.js";
|
|
7
|
+
/**
|
|
8
|
+
* Generic OAuth2/OIDC Provider
|
|
9
|
+
*
|
|
10
|
+
* Supports any OAuth2-compliant identity provider with configurable endpoints.
|
|
11
|
+
* Works with both JWKS-based JWT validation and token introspection.
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - JWT validation with JWKS (if jwksUrl provided)
|
|
15
|
+
* - Token introspection endpoint support
|
|
16
|
+
* - User info endpoint integration
|
|
17
|
+
* - PKCE support
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const oauth2 = new OAuth2Provider({
|
|
22
|
+
* type: "oauth2",
|
|
23
|
+
* authorizationUrl: "https://idp.example.com/oauth/authorize",
|
|
24
|
+
* tokenUrl: "https://idp.example.com/oauth/token",
|
|
25
|
+
* userInfoUrl: "https://idp.example.com/userinfo",
|
|
26
|
+
* jwksUrl: "https://idp.example.com/.well-known/jwks.json",
|
|
27
|
+
* clientId: "your-client-id",
|
|
28
|
+
* clientSecret: "your-client-secret",
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* const result = await oauth2.authenticateToken(accessToken);
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export class OAuth2Provider extends BaseAuthProvider {
|
|
35
|
+
type = "oauth2";
|
|
36
|
+
authorizationUrl;
|
|
37
|
+
tokenUrl;
|
|
38
|
+
userInfoUrl;
|
|
39
|
+
jwksUrl;
|
|
40
|
+
clientId;
|
|
41
|
+
clientSecret;
|
|
42
|
+
scopes;
|
|
43
|
+
redirectUrl;
|
|
44
|
+
usePKCE;
|
|
45
|
+
jwks = null;
|
|
46
|
+
constructor(config) {
|
|
47
|
+
super(config);
|
|
48
|
+
if (!config.authorizationUrl) {
|
|
49
|
+
throw AuthError.create("CONFIGURATION_ERROR", "OAuth2 authorizationUrl is required");
|
|
50
|
+
}
|
|
51
|
+
if (!config.tokenUrl) {
|
|
52
|
+
throw AuthError.create("CONFIGURATION_ERROR", "OAuth2 tokenUrl is required");
|
|
53
|
+
}
|
|
54
|
+
if (!config.clientId) {
|
|
55
|
+
throw AuthError.create("CONFIGURATION_ERROR", "OAuth2 clientId is required");
|
|
56
|
+
}
|
|
57
|
+
this.authorizationUrl = config.authorizationUrl;
|
|
58
|
+
this.tokenUrl = config.tokenUrl;
|
|
59
|
+
this.userInfoUrl = config.userInfoUrl;
|
|
60
|
+
this.jwksUrl = config.jwksUrl;
|
|
61
|
+
this.clientId = config.clientId;
|
|
62
|
+
this.clientSecret = config.clientSecret;
|
|
63
|
+
this.scopes = config.scopes ?? ["openid", "profile", "email"];
|
|
64
|
+
this.redirectUrl = config.redirectUrl;
|
|
65
|
+
this.usePKCE = config.usePKCE ?? false;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Initialize JWKS for JWT verification (if jwksUrl is provided)
|
|
69
|
+
*/
|
|
70
|
+
async initialize() {
|
|
71
|
+
if (this.jwksUrl) {
|
|
72
|
+
try {
|
|
73
|
+
const jwksUrl = new URL(this.jwksUrl);
|
|
74
|
+
this.jwks = jose.createRemoteJWKSet(jwksUrl);
|
|
75
|
+
logger.debug(`OAuth2 provider initialized with JWKS: ${this.jwksUrl}`);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
throw AuthError.create("PROVIDER_INIT_FAILED", "Failed to initialize OAuth2 JWKS", {
|
|
79
|
+
cause: error instanceof Error ? error : new Error(String(error)),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validate OAuth2 access token
|
|
86
|
+
*
|
|
87
|
+
* Uses JWKS validation if available, otherwise falls back to userinfo endpoint
|
|
88
|
+
*/
|
|
89
|
+
async authenticateToken(token, _context) {
|
|
90
|
+
// Try JWKS validation first if available
|
|
91
|
+
if (this.jwksUrl) {
|
|
92
|
+
// Lazy-init JWKS on first use if initialize() was not called
|
|
93
|
+
if (!this.jwks) {
|
|
94
|
+
await this.initialize();
|
|
95
|
+
}
|
|
96
|
+
if (!this.jwks) {
|
|
97
|
+
return {
|
|
98
|
+
valid: false,
|
|
99
|
+
error: "JWKS not available after initialization",
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const { payload } = await jose.jwtVerify(token, this.jwks);
|
|
104
|
+
// Validate issuer against the authorization server origin
|
|
105
|
+
if (payload.iss) {
|
|
106
|
+
const expectedIssuerOrigin = new URL(this.authorizationUrl).origin;
|
|
107
|
+
if (!payload.iss.startsWith(expectedIssuerOrigin)) {
|
|
108
|
+
return {
|
|
109
|
+
valid: false,
|
|
110
|
+
error: `Invalid issuer: ${payload.iss}. Expected origin: ${expectedIssuerOrigin}`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Validate audience against the configured clientId
|
|
115
|
+
if (payload.aud) {
|
|
116
|
+
const audiences = Array.isArray(payload.aud)
|
|
117
|
+
? payload.aud
|
|
118
|
+
: [payload.aud];
|
|
119
|
+
if (!audiences.includes(this.clientId)) {
|
|
120
|
+
return {
|
|
121
|
+
valid: false,
|
|
122
|
+
error: `Invalid audience: ${audiences.join(", ")}. Expected: ${this.clientId}`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (!payload.sub) {
|
|
127
|
+
return {
|
|
128
|
+
valid: false,
|
|
129
|
+
error: "JWT is missing required 'sub' claim: cannot identify user",
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const user = {
|
|
133
|
+
id: payload.sub,
|
|
134
|
+
email: payload.email,
|
|
135
|
+
name: payload.name,
|
|
136
|
+
picture: payload.picture,
|
|
137
|
+
roles: payload.roles ?? [],
|
|
138
|
+
permissions: payload.permissions ?? [],
|
|
139
|
+
metadata: payload,
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
valid: true,
|
|
143
|
+
payload: payload,
|
|
144
|
+
user,
|
|
145
|
+
expiresAt: payload.exp ? new Date(payload.exp * 1000) : undefined,
|
|
146
|
+
tokenType: "jwt",
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
logger.debug("JWKS validation failed, trying userinfo endpoint");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Fall back to userinfo endpoint if available
|
|
154
|
+
if (this.userInfoUrl) {
|
|
155
|
+
return this.validateViaUserInfo(token);
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
valid: false,
|
|
159
|
+
error: "No validation method available (provide jwksUrl or userInfoUrl)",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Validate token via userinfo endpoint
|
|
164
|
+
*/
|
|
165
|
+
async validateViaUserInfo(token) {
|
|
166
|
+
try {
|
|
167
|
+
const proxyFetch = createProxyFetch();
|
|
168
|
+
if (!this.userInfoUrl) {
|
|
169
|
+
return {
|
|
170
|
+
valid: false,
|
|
171
|
+
error: "UserInfo URL not configured",
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
const response = await proxyFetch(this.userInfoUrl, {
|
|
175
|
+
headers: {
|
|
176
|
+
Authorization: `Bearer ${token}`,
|
|
177
|
+
},
|
|
178
|
+
signal: AbortSignal.timeout(5000),
|
|
179
|
+
});
|
|
180
|
+
if (!response.ok) {
|
|
181
|
+
return {
|
|
182
|
+
valid: false,
|
|
183
|
+
error: `UserInfo endpoint returned ${response.status}`,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const data = (await response.json());
|
|
187
|
+
const userId = data.sub ?? data.id;
|
|
188
|
+
if (!userId) {
|
|
189
|
+
return {
|
|
190
|
+
valid: false,
|
|
191
|
+
error: "UserInfo response is missing 'sub' and 'id': cannot identify user",
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
const user = {
|
|
195
|
+
id: userId,
|
|
196
|
+
email: data.email,
|
|
197
|
+
name: data.name,
|
|
198
|
+
picture: data.picture,
|
|
199
|
+
emailVerified: data.email_verified,
|
|
200
|
+
roles: data.roles ?? [],
|
|
201
|
+
permissions: data.permissions ?? [],
|
|
202
|
+
metadata: data,
|
|
203
|
+
};
|
|
204
|
+
return {
|
|
205
|
+
valid: true,
|
|
206
|
+
payload: data,
|
|
207
|
+
user,
|
|
208
|
+
tokenType: "oauth",
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
213
|
+
logger.warn("OAuth2 userinfo validation failed:", message);
|
|
214
|
+
return {
|
|
215
|
+
valid: false,
|
|
216
|
+
error: message,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get authorization URL for OAuth2 flow
|
|
222
|
+
*/
|
|
223
|
+
getAuthorizationUrl(state, codeChallenge) {
|
|
224
|
+
const params = new URLSearchParams({
|
|
225
|
+
response_type: "code",
|
|
226
|
+
client_id: this.clientId,
|
|
227
|
+
scope: this.scopes.join(" "),
|
|
228
|
+
state,
|
|
229
|
+
});
|
|
230
|
+
if (this.redirectUrl) {
|
|
231
|
+
params.set("redirect_uri", this.redirectUrl);
|
|
232
|
+
}
|
|
233
|
+
if (this.usePKCE && codeChallenge) {
|
|
234
|
+
params.set("code_challenge", codeChallenge);
|
|
235
|
+
params.set("code_challenge_method", "S256");
|
|
236
|
+
}
|
|
237
|
+
return `${this.authorizationUrl}?${params.toString()}`;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Exchange authorization code for tokens
|
|
241
|
+
*/
|
|
242
|
+
async exchangeCode(code, codeVerifier) {
|
|
243
|
+
const proxyFetch = createProxyFetch();
|
|
244
|
+
const body = new URLSearchParams({
|
|
245
|
+
grant_type: "authorization_code",
|
|
246
|
+
client_id: this.clientId,
|
|
247
|
+
code,
|
|
248
|
+
});
|
|
249
|
+
if (this.clientSecret) {
|
|
250
|
+
body.set("client_secret", this.clientSecret);
|
|
251
|
+
}
|
|
252
|
+
if (this.redirectUrl) {
|
|
253
|
+
body.set("redirect_uri", this.redirectUrl);
|
|
254
|
+
}
|
|
255
|
+
if (this.usePKCE && codeVerifier) {
|
|
256
|
+
body.set("code_verifier", codeVerifier);
|
|
257
|
+
}
|
|
258
|
+
const response = await proxyFetch(this.tokenUrl, {
|
|
259
|
+
method: "POST",
|
|
260
|
+
headers: {
|
|
261
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
262
|
+
},
|
|
263
|
+
body: body.toString(),
|
|
264
|
+
signal: AbortSignal.timeout(5000),
|
|
265
|
+
});
|
|
266
|
+
if (!response.ok) {
|
|
267
|
+
throw AuthError.create("PROVIDER_ERROR", `Token exchange failed: ${response.status}`);
|
|
268
|
+
}
|
|
269
|
+
const data = (await response.json());
|
|
270
|
+
return {
|
|
271
|
+
accessToken: data.access_token,
|
|
272
|
+
refreshToken: data.refresh_token,
|
|
273
|
+
idToken: data.id_token,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Health check
|
|
278
|
+
*/
|
|
279
|
+
async healthCheck() {
|
|
280
|
+
try {
|
|
281
|
+
// Try to fetch JWKS or authorization endpoint to check connectivity
|
|
282
|
+
const proxyFetch = createProxyFetch();
|
|
283
|
+
const checkUrl = this.jwksUrl ?? this.authorizationUrl;
|
|
284
|
+
const response = await proxyFetch(checkUrl, { method: "HEAD" });
|
|
285
|
+
return {
|
|
286
|
+
healthy: response.ok || response.status === 405, // 405 is ok for HEAD
|
|
287
|
+
providerConnected: true,
|
|
288
|
+
sessionStorageHealthy: true,
|
|
289
|
+
error: response.ok || response.status === 405
|
|
290
|
+
? undefined
|
|
291
|
+
: `HTTP ${response.status}`,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
return {
|
|
296
|
+
healthy: false,
|
|
297
|
+
providerConnected: false,
|
|
298
|
+
sessionStorageHealthy: true,
|
|
299
|
+
error: error instanceof Error ? error.message : String(error),
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=oauth2.js.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { BaseAuthProvider } from "./BaseAuthProvider.js";
|
|
2
|
+
import type { AuthProviderConfig, SupabaseConfig, AuthUser, TokenValidationResult, AuthRequestContext, AuthHealthCheck, AuthProviderType } from "../../types/authTypes.js";
|
|
3
|
+
/**
|
|
4
|
+
* Supabase Authentication Provider
|
|
5
|
+
*
|
|
6
|
+
* Supports Supabase JWT validation and user management.
|
|
7
|
+
* Can validate tokens locally with JWT secret or via Supabase API.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Local JWT validation with JWT secret
|
|
11
|
+
* - API-based token validation
|
|
12
|
+
* - User profile fetching (requires service role key)
|
|
13
|
+
* - Role extraction from app_metadata
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const supabase = new SupabaseAuthProvider({
|
|
18
|
+
* type: "supabase",
|
|
19
|
+
* url: "https://your-project.supabase.co",
|
|
20
|
+
* anonKey: "your-anon-key",
|
|
21
|
+
* jwtSecret: "your-jwt-secret" // Optional for local validation
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* const result = await supabase.authenticateToken(accessToken);
|
|
25
|
+
* if (result.valid) {
|
|
26
|
+
* console.log("Authenticated user:", result.user);
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class SupabaseAuthProvider extends BaseAuthProvider {
|
|
31
|
+
readonly type: AuthProviderType;
|
|
32
|
+
private supabaseUrl;
|
|
33
|
+
private anonKey;
|
|
34
|
+
private serviceRoleKey?;
|
|
35
|
+
private jwtSecret?;
|
|
36
|
+
constructor(config: AuthProviderConfig & SupabaseConfig);
|
|
37
|
+
/**
|
|
38
|
+
* Validate Supabase JWT
|
|
39
|
+
*/
|
|
40
|
+
authenticateToken(token: string, _context?: AuthRequestContext): Promise<TokenValidationResult>;
|
|
41
|
+
/**
|
|
42
|
+
* Convert JWT payload to AuthUser
|
|
43
|
+
*/
|
|
44
|
+
private payloadToUser;
|
|
45
|
+
/**
|
|
46
|
+
* Convert Supabase user to AuthUser
|
|
47
|
+
*/
|
|
48
|
+
private supabaseUserToAuthUser;
|
|
49
|
+
/**
|
|
50
|
+
* Get user by ID via Supabase Admin API
|
|
51
|
+
* Requires service role key
|
|
52
|
+
*/
|
|
53
|
+
getUser(userId: string): Promise<AuthUser | null>;
|
|
54
|
+
/**
|
|
55
|
+
* Get user by email via Supabase Admin API
|
|
56
|
+
* Requires service role key
|
|
57
|
+
*/
|
|
58
|
+
getUserByEmail(email: string): Promise<AuthUser | null>;
|
|
59
|
+
/**
|
|
60
|
+
* Health check
|
|
61
|
+
*/
|
|
62
|
+
healthCheck(): Promise<AuthHealthCheck>;
|
|
63
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
// src/lib/auth/providers/supabase.ts
|
|
2
|
+
import { BaseAuthProvider } from "./BaseAuthProvider.js";
|
|
3
|
+
import { AuthError } from "../errors.js";
|
|
4
|
+
import { logger } from "../../utils/logger.js";
|
|
5
|
+
import { createProxyFetch } from "../../proxy/proxyFetch.js";
|
|
6
|
+
import * as jose from "jose";
|
|
7
|
+
/**
|
|
8
|
+
* Supabase Authentication Provider
|
|
9
|
+
*
|
|
10
|
+
* Supports Supabase JWT validation and user management.
|
|
11
|
+
* Can validate tokens locally with JWT secret or via Supabase API.
|
|
12
|
+
*
|
|
13
|
+
* Features:
|
|
14
|
+
* - Local JWT validation with JWT secret
|
|
15
|
+
* - API-based token validation
|
|
16
|
+
* - User profile fetching (requires service role key)
|
|
17
|
+
* - Role extraction from app_metadata
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const supabase = new SupabaseAuthProvider({
|
|
22
|
+
* type: "supabase",
|
|
23
|
+
* url: "https://your-project.supabase.co",
|
|
24
|
+
* anonKey: "your-anon-key",
|
|
25
|
+
* jwtSecret: "your-jwt-secret" // Optional for local validation
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* const result = await supabase.authenticateToken(accessToken);
|
|
29
|
+
* if (result.valid) {
|
|
30
|
+
* console.log("Authenticated user:", result.user);
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export class SupabaseAuthProvider extends BaseAuthProvider {
|
|
35
|
+
type = "supabase";
|
|
36
|
+
supabaseUrl;
|
|
37
|
+
anonKey;
|
|
38
|
+
serviceRoleKey;
|
|
39
|
+
jwtSecret;
|
|
40
|
+
constructor(config) {
|
|
41
|
+
super(config);
|
|
42
|
+
if (!config.url) {
|
|
43
|
+
throw AuthError.create("CONFIGURATION_ERROR", "Supabase URL is required", { details: { missingFields: ["url"] } });
|
|
44
|
+
}
|
|
45
|
+
if (!config.anonKey) {
|
|
46
|
+
throw AuthError.create("CONFIGURATION_ERROR", "Supabase anon key is required", { details: { missingFields: ["anonKey"] } });
|
|
47
|
+
}
|
|
48
|
+
this.supabaseUrl = config.url.replace(/\/$/, ""); // Remove trailing slash
|
|
49
|
+
this.anonKey = config.anonKey;
|
|
50
|
+
this.serviceRoleKey = config.serviceRoleKey;
|
|
51
|
+
this.jwtSecret = config.jwtSecret;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate Supabase JWT
|
|
55
|
+
*/
|
|
56
|
+
async authenticateToken(token, _context) {
|
|
57
|
+
try {
|
|
58
|
+
// If JWT secret is provided, verify locally
|
|
59
|
+
if (this.jwtSecret) {
|
|
60
|
+
const secret = new TextEncoder().encode(this.jwtSecret);
|
|
61
|
+
const { payload } = await jose.jwtVerify(token, secret);
|
|
62
|
+
// Reject tokens without a sub claim (anon/service_role JWTs)
|
|
63
|
+
if (!payload.sub) {
|
|
64
|
+
return {
|
|
65
|
+
valid: false,
|
|
66
|
+
error: "Token missing sub claim: cannot authenticate without a user identity",
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Only accept tokens with "authenticated" role
|
|
70
|
+
const role = payload.role;
|
|
71
|
+
if (role && role !== "authenticated") {
|
|
72
|
+
return {
|
|
73
|
+
valid: false,
|
|
74
|
+
error: `Invalid token role: ${role}. Only "authenticated" role is accepted`,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const user = this.payloadToUser(payload);
|
|
78
|
+
return {
|
|
79
|
+
valid: true,
|
|
80
|
+
payload: payload,
|
|
81
|
+
user,
|
|
82
|
+
expiresAt: payload.exp ? new Date(payload.exp * 1000) : undefined,
|
|
83
|
+
tokenType: "jwt",
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Otherwise, validate via Supabase API
|
|
87
|
+
const proxyFetch = createProxyFetch();
|
|
88
|
+
const response = await proxyFetch(`${this.supabaseUrl}/auth/v1/user`, {
|
|
89
|
+
headers: {
|
|
90
|
+
Authorization: `Bearer ${token}`,
|
|
91
|
+
apikey: this.anonKey,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
return {
|
|
96
|
+
valid: false,
|
|
97
|
+
error: `Token validation failed: HTTP ${response.status}`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const userData = (await response.json());
|
|
101
|
+
const user = this.supabaseUserToAuthUser(userData);
|
|
102
|
+
return {
|
|
103
|
+
valid: true,
|
|
104
|
+
payload: userData,
|
|
105
|
+
user,
|
|
106
|
+
tokenType: "jwt",
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
return {
|
|
111
|
+
valid: false,
|
|
112
|
+
error: error instanceof Error ? error.message : String(error),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Convert JWT payload to AuthUser
|
|
118
|
+
*/
|
|
119
|
+
payloadToUser(payload) {
|
|
120
|
+
const appMetadata = payload.app_metadata;
|
|
121
|
+
const userMetadata = payload.user_metadata;
|
|
122
|
+
// Use payload.role (Supabase standard claim) for the roles array
|
|
123
|
+
const role = payload.role;
|
|
124
|
+
return {
|
|
125
|
+
id: payload.sub,
|
|
126
|
+
email: payload.email,
|
|
127
|
+
name: userMetadata?.full_name || userMetadata?.name,
|
|
128
|
+
picture: userMetadata?.avatar_url,
|
|
129
|
+
emailVerified: payload.email_confirmed || false,
|
|
130
|
+
roles: role ? [role] : appMetadata?.roles || [],
|
|
131
|
+
permissions: appMetadata?.permissions || [],
|
|
132
|
+
metadata: userMetadata,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Convert Supabase user to AuthUser
|
|
137
|
+
*/
|
|
138
|
+
supabaseUserToAuthUser(userData) {
|
|
139
|
+
const appMetadata = userData.app_metadata;
|
|
140
|
+
const userMetadata = userData.user_metadata;
|
|
141
|
+
return {
|
|
142
|
+
id: userData.id,
|
|
143
|
+
email: userData.email,
|
|
144
|
+
name: userMetadata?.full_name || userMetadata?.name,
|
|
145
|
+
picture: userMetadata?.avatar_url,
|
|
146
|
+
emailVerified: !!userData.email_confirmed_at,
|
|
147
|
+
roles: appMetadata?.roles || [],
|
|
148
|
+
permissions: appMetadata?.permissions || [],
|
|
149
|
+
createdAt: userData.created_at
|
|
150
|
+
? new Date(userData.created_at)
|
|
151
|
+
: undefined,
|
|
152
|
+
lastLoginAt: userData.last_sign_in_at
|
|
153
|
+
? new Date(userData.last_sign_in_at)
|
|
154
|
+
: undefined,
|
|
155
|
+
metadata: userMetadata,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get user by ID via Supabase Admin API
|
|
160
|
+
* Requires service role key
|
|
161
|
+
*/
|
|
162
|
+
async getUser(userId) {
|
|
163
|
+
if (!this.serviceRoleKey) {
|
|
164
|
+
logger.warn("Service role key required for user lookup");
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
try {
|
|
168
|
+
const proxyFetch = createProxyFetch();
|
|
169
|
+
const response = await proxyFetch(`${this.supabaseUrl}/auth/v1/admin/users/${userId}`, {
|
|
170
|
+
headers: {
|
|
171
|
+
Authorization: `Bearer ${this.serviceRoleKey}`,
|
|
172
|
+
apikey: this.anonKey,
|
|
173
|
+
},
|
|
174
|
+
});
|
|
175
|
+
if (!response.ok) {
|
|
176
|
+
if (response.status === 404) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
throw AuthError.create("PROVIDER_ERROR", `Supabase API returned ${response.status}`, { details: { statusCode: response.status } });
|
|
180
|
+
}
|
|
181
|
+
const userData = (await response.json());
|
|
182
|
+
return this.supabaseUserToAuthUser(userData);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
logger.error("Failed to fetch Supabase user:", error);
|
|
186
|
+
if (error &&
|
|
187
|
+
typeof error === "object" &&
|
|
188
|
+
"code" in error &&
|
|
189
|
+
typeof error.code === "string") {
|
|
190
|
+
throw error;
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get user by email via Supabase Admin API
|
|
197
|
+
* Requires service role key
|
|
198
|
+
*/
|
|
199
|
+
async getUserByEmail(email) {
|
|
200
|
+
if (!this.serviceRoleKey) {
|
|
201
|
+
logger.warn("Service role key required for user lookup by email");
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
const proxyFetch = createProxyFetch();
|
|
206
|
+
const response = await proxyFetch(`${this.supabaseUrl}/auth/v1/admin/users?email=${encodeURIComponent(email)}`, {
|
|
207
|
+
headers: {
|
|
208
|
+
Authorization: `Bearer ${this.serviceRoleKey}`,
|
|
209
|
+
apikey: this.anonKey,
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
if (!response.ok) {
|
|
213
|
+
throw AuthError.create("PROVIDER_ERROR", `Supabase API returned ${response.status}`, { details: { statusCode: response.status } });
|
|
214
|
+
}
|
|
215
|
+
const result = (await response.json());
|
|
216
|
+
const users = result.users || [];
|
|
217
|
+
if (users.length === 0) {
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
return this.supabaseUserToAuthUser(users[0]);
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
logger.error("Failed to fetch Supabase user by email:", error);
|
|
224
|
+
if (error &&
|
|
225
|
+
typeof error === "object" &&
|
|
226
|
+
"code" in error &&
|
|
227
|
+
typeof error.code === "string") {
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Health check
|
|
235
|
+
*/
|
|
236
|
+
async healthCheck() {
|
|
237
|
+
try {
|
|
238
|
+
const proxyFetch = createProxyFetch();
|
|
239
|
+
const response = await proxyFetch(`${this.supabaseUrl}/auth/v1/health`, {
|
|
240
|
+
headers: {
|
|
241
|
+
apikey: this.anonKey,
|
|
242
|
+
},
|
|
243
|
+
});
|
|
244
|
+
return {
|
|
245
|
+
healthy: response.ok,
|
|
246
|
+
providerConnected: response.ok,
|
|
247
|
+
sessionStorageHealthy: true,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
return {
|
|
252
|
+
healthy: false,
|
|
253
|
+
providerConnected: false,
|
|
254
|
+
sessionStorageHealthy: true,
|
|
255
|
+
error: error instanceof Error ? error.message : String(error),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=supabase.js.map
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { AuthProviderConfig, WorkOSConfig, AuthUser, TokenValidationResult, AuthRequestContext, AuthHealthCheck } from "../../types/authTypes.js";
|
|
2
|
+
import { BaseAuthProvider } from "./BaseAuthProvider.js";
|
|
3
|
+
/**
|
|
4
|
+
* WorkOS Authentication Provider
|
|
5
|
+
*
|
|
6
|
+
* Supports WorkOS for enterprise SSO and user management.
|
|
7
|
+
* Validates JWTs issued by WorkOS and fetches user information.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - JWT validation using WorkOS JWKS
|
|
11
|
+
* - SSO token validation
|
|
12
|
+
* - Enterprise directory integration
|
|
13
|
+
* - Organization support for multi-tenant apps
|
|
14
|
+
* - Session management (inherited from BaseAuthProvider)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const workos = new WorkOSProvider({
|
|
19
|
+
* type: "workos",
|
|
20
|
+
* apiKey: "sk_...",
|
|
21
|
+
* clientId: "client_..."
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* const result = await workos.authenticateToken(accessToken);
|
|
25
|
+
* if (result.valid) {
|
|
26
|
+
* console.log("Authenticated user:", result.user);
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class WorkOSProvider extends BaseAuthProvider {
|
|
31
|
+
readonly type: "workos";
|
|
32
|
+
private apiKey;
|
|
33
|
+
private clientId;
|
|
34
|
+
private organizationId?;
|
|
35
|
+
private jwks;
|
|
36
|
+
constructor(config: AuthProviderConfig & WorkOSConfig);
|
|
37
|
+
/**
|
|
38
|
+
* Initialize JWKS for WorkOS token verification
|
|
39
|
+
*/
|
|
40
|
+
initialize(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Validate WorkOS access token
|
|
43
|
+
*/
|
|
44
|
+
authenticateToken(token: string, _context?: AuthRequestContext): Promise<TokenValidationResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Validate session via WorkOS API
|
|
47
|
+
*/
|
|
48
|
+
private validateSessionViaAPI;
|
|
49
|
+
/**
|
|
50
|
+
* Get user by ID via WorkOS API
|
|
51
|
+
*/
|
|
52
|
+
getUser(userId: string): Promise<AuthUser | null>;
|
|
53
|
+
/**
|
|
54
|
+
* Get user by email via WorkOS API
|
|
55
|
+
*/
|
|
56
|
+
getUserByEmail(email: string): Promise<AuthUser | null>;
|
|
57
|
+
/**
|
|
58
|
+
* Health check
|
|
59
|
+
*/
|
|
60
|
+
healthCheck(): Promise<AuthHealthCheck>;
|
|
61
|
+
}
|