@crownpeak/dqm-react-component-dev-mcp 1.2.0
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/README.md +138 -0
- package/data/.env.example +22 -0
- package/data/.gitattributes +47 -0
- package/data/.glfrc.json +7 -0
- package/data/.husky/pre-commit +5 -0
- package/data/.nvmrc +1 -0
- package/data/CHANGELOG.md +75 -0
- package/data/CODE_OF_CONDUCT.md +129 -0
- package/data/CONTRIBUTING.md +203 -0
- package/data/DOCS-STRUCTURE.md +307 -0
- package/data/I18N.md +292 -0
- package/data/LICENSE +22 -0
- package/data/README.md +315 -0
- package/data/SECURITY.md +125 -0
- package/data/WIKI-DEPLOYMENT.md +348 -0
- package/data/docs/AI-FEATURES.md +610 -0
- package/data/docs/API-REFERENCE.md +1022 -0
- package/data/docs/AUTHENTICATION.md +301 -0
- package/data/docs/BACKEND-API.md +468 -0
- package/data/docs/DEVELOPMENT.md +375 -0
- package/data/docs/EXAMPLES.md +622 -0
- package/data/docs/MCP-SERVER.md +307 -0
- package/data/docs/MIGRATION-GUIDE.md +367 -0
- package/data/docs/NPM-PUBLISH.md +193 -0
- package/data/docs/QUICKSTART.md +206 -0
- package/data/docs/REDIS-SETUP.md +162 -0
- package/data/docs/SERVER.md +228 -0
- package/data/docs/TROUBLESHOOTING.md +657 -0
- package/data/docs/WIDGET-GUIDE.md +638 -0
- package/data/docs/WIKI-HOME.md +58 -0
- package/data/docs/WIKI-SIDEBAR.md +39 -0
- package/data/package.json +171 -0
- package/data/playwright.config.ts +64 -0
- package/data/probe/.cargo/config.toml +10 -0
- package/data/probe/.claude/commands/performance-review.md +15 -0
- package/data/probe/.clinerules +288 -0
- package/data/probe/.dockerignore +57 -0
- package/data/probe/.githooks/post-commit +11 -0
- package/data/probe/.githooks/pre-commit +99 -0
- package/data/probe/.githooks/pre-commit-vow +9 -0
- package/data/probe/.prompts/engineer.md +41 -0
- package/data/probe/.roomodes +28 -0
- package/data/probe/.windsurfrules +0 -0
- package/data/probe/BASH_TOOL_SUMMARY.md +148 -0
- package/data/probe/BENCHMARKING.md +256 -0
- package/data/probe/CLAUDE.md +226 -0
- package/data/probe/CODE_OF_CONDUCT.md +128 -0
- package/data/probe/CONTRIBUTING.md +193 -0
- package/data/probe/Cargo.toml +120 -0
- package/data/probe/Cross.toml +10 -0
- package/data/probe/DOCKER-README.md +224 -0
- package/data/probe/Dockerfile +32 -0
- package/data/probe/ENHANCED_DEBUG_TELEMETRY.md +188 -0
- package/data/probe/LICENSE +201 -0
- package/data/probe/Makefile +210 -0
- package/data/probe/README.md +824 -0
- package/data/probe/SECURITY.md +67 -0
- package/data/probe/WINDOWS-GUIDE.md +294 -0
- package/data/probe/benches/parsing_benchmarks.rs +370 -0
- package/data/probe/benches/search_benchmarks.rs +599 -0
- package/data/probe/benches/simd_benchmarks.rs +372 -0
- package/data/probe/benches/timing_benchmarks.rs +287 -0
- package/data/probe/build-windows.bat +229 -0
- package/data/probe/codex-config/config.toml +6 -0
- package/data/probe/docs/PERFORMANCE_OPTIMIZATION.md +161 -0
- package/data/probe/examples/cache_demo.rs +46 -0
- package/data/probe/examples/chat/.dockerignore +37 -0
- package/data/probe/examples/chat/ChatSessionManager.js +295 -0
- package/data/probe/examples/chat/Dockerfile +98 -0
- package/data/probe/examples/chat/LICENSE +201 -0
- package/data/probe/examples/chat/LOCAL_IMAGE_SUPPORT.md +195 -0
- package/data/probe/examples/chat/MCP_INTEGRATION.md +400 -0
- package/data/probe/examples/chat/README.md +338 -0
- package/data/probe/examples/chat/TRACING.md +226 -0
- package/data/probe/examples/chat/appTracer.js +968 -0
- package/data/probe/examples/chat/auth.js +76 -0
- package/data/probe/examples/chat/bin/probe-chat.js +13 -0
- package/data/probe/examples/chat/build.js +104 -0
- package/data/probe/examples/chat/cancelRequest.js +84 -0
- package/data/probe/examples/chat/demo-agentic-image-flow.js +88 -0
- package/data/probe/examples/chat/demo-local-images.js +128 -0
- package/data/probe/examples/chat/fileSpanExporter.js +181 -0
- package/data/probe/examples/chat/implement/README.md +228 -0
- package/data/probe/examples/chat/implement/backends/AiderBackend.js +750 -0
- package/data/probe/examples/chat/implement/backends/BaseBackend.js +276 -0
- package/data/probe/examples/chat/implement/backends/ClaudeCodeBackend.js +767 -0
- package/data/probe/examples/chat/implement/backends/MockBackend.js +237 -0
- package/data/probe/examples/chat/implement/backends/registry.js +85 -0
- package/data/probe/examples/chat/implement/core/BackendManager.js +567 -0
- package/data/probe/examples/chat/implement/core/ImplementTool.js +354 -0
- package/data/probe/examples/chat/implement/core/config.js +428 -0
- package/data/probe/examples/chat/implement/core/timeouts.js +58 -0
- package/data/probe/examples/chat/implement/core/utils.js +496 -0
- package/data/probe/examples/chat/implement/types/BackendTypes.js +126 -0
- package/data/probe/examples/chat/index.js +669 -0
- package/data/probe/examples/chat/mcpServer.js +341 -0
- package/data/probe/examples/chat/npm/LICENSE +15 -0
- package/data/probe/examples/chat/npm/README.md +168 -0
- package/data/probe/examples/chat/npm/bin/probe-chat.js +156 -0
- package/data/probe/examples/chat/npm/index.js +259 -0
- package/data/probe/examples/chat/npm/package.json +54 -0
- package/data/probe/examples/chat/package.json +102 -0
- package/data/probe/examples/chat/probeChat.js +456 -0
- package/data/probe/examples/chat/probeTool.js +491 -0
- package/data/probe/examples/chat/storage/JsonChatStorage.js +476 -0
- package/data/probe/examples/chat/telemetry.js +281 -0
- package/data/probe/examples/chat/test/integration/chatFlows.test.js +320 -0
- package/data/probe/examples/chat/test/integration/toolCalling.test.js +471 -0
- package/data/probe/examples/chat/test/mocks/mockLLMProvider.js +269 -0
- package/data/probe/examples/chat/test/test-backends.js +90 -0
- package/data/probe/examples/chat/test/testUtils.js +530 -0
- package/data/probe/examples/chat/test/unit/backendTimeout.test.js +161 -0
- package/data/probe/examples/chat/test/unit/packageFiles.test.js +120 -0
- package/data/probe/examples/chat/test/verify-tests.js +118 -0
- package/data/probe/examples/chat/test-agentic-image-loading.js +294 -0
- package/data/probe/examples/chat/test-ai-sdk-telemetry.js +204 -0
- package/data/probe/examples/chat/test-chat-tracing.js +38 -0
- package/data/probe/examples/chat/test-direct-function.js +49 -0
- package/data/probe/examples/chat/test-file-size-validation.js +103 -0
- package/data/probe/examples/chat/test-full-mcp-integration.js +258 -0
- package/data/probe/examples/chat/test-github-context.txt +12 -0
- package/data/probe/examples/chat/test-hierarchy.js +203 -0
- package/data/probe/examples/chat/test-image-spans.js +37 -0
- package/data/probe/examples/chat/test-local-image-reading.js +176 -0
- package/data/probe/examples/chat/test-mcp-integration.js +136 -0
- package/data/probe/examples/chat/test-mcp-probe-server.js +161 -0
- package/data/probe/examples/chat/test-mcp-with-ai.js +279 -0
- package/data/probe/examples/chat/test-multiple-allowed-dirs.js +111 -0
- package/data/probe/examples/chat/test-probe-mcp-server.js +110 -0
- package/data/probe/examples/chat/test-security-validation.js +145 -0
- package/data/probe/examples/chat/test-simple-tracing.js +32 -0
- package/data/probe/examples/chat/test-trace-verification.js +235 -0
- package/data/probe/examples/chat/test-tracing.js +114 -0
- package/data/probe/examples/chat/tokenCounter.js +419 -0
- package/data/probe/examples/chat/tokenUsageDisplay.js +134 -0
- package/data/probe/examples/chat/webServer.js +1103 -0
- package/data/probe/examples/reranker/Cargo.toml +33 -0
- package/data/probe/examples/reranker/DEBUG_OUTPUT_ANALYSIS.md +71 -0
- package/data/probe/examples/reranker/MODELS.md +66 -0
- package/data/probe/examples/reranker/MODEL_COMPARISON.md +60 -0
- package/data/probe/examples/reranker/MULTI_MODEL_ANALYSIS.md +176 -0
- package/data/probe/examples/reranker/PERFORMANCE_SUMMARY.md +156 -0
- package/data/probe/examples/reranker/README.md +347 -0
- package/data/probe/examples/reranker/RUST_BERT_COMPARISON.md +82 -0
- package/data/probe/examples/reranker/TOKENIZATION_GUIDE.md +120 -0
- package/data/probe/examples/reranker/check_rust_tokenizer.py +108 -0
- package/data/probe/examples/reranker/convert_to_torchscript.py +109 -0
- package/data/probe/examples/reranker/debug_scoring.py +189 -0
- package/data/probe/examples/reranker/debug_tokenization.py +154 -0
- package/data/probe/examples/reranker/download_models.sh +73 -0
- package/data/probe/examples/reranker/requirements.txt +13 -0
- package/data/probe/examples/reranker/run_comprehensive_benchmark.sh +83 -0
- package/data/probe/examples/reranker/rust_bert_test/Cargo.toml +12 -0
- package/data/probe/examples/reranker/rust_bert_test/README.md +54 -0
- package/data/probe/examples/reranker/simple_test.py +50 -0
- package/data/probe/examples/reranker/test_all_models.sh +63 -0
- package/data/probe/examples/reranker/test_bert_results.sh +44 -0
- package/data/probe/examples/reranker/test_cross_encoder.py +334 -0
- package/data/probe/examples/reranker/test_cross_encoder.sh +80 -0
- package/data/probe/examples/reranker/test_exact_comparison.py +151 -0
- package/data/probe/examples/reranker/test_parallel_performance.sh +56 -0
- package/data/probe/examples/reranker/test_scores.py +132 -0
- package/data/probe/install.ps1 +508 -0
- package/data/probe/install.sh +460 -0
- package/data/probe/npm/CLONE_METHOD_EXAMPLES.md +596 -0
- package/data/probe/npm/CONTEXT_COMPACTION.md +303 -0
- package/data/probe/npm/DELEGATE_TOOL_README.md +166 -0
- package/data/probe/npm/MAID_INTEGRATION.md +313 -0
- package/data/probe/npm/MCP_INTEGRATION_SUMMARY.md +241 -0
- package/data/probe/npm/README.md +824 -0
- package/data/probe/npm/bin/.gitignore +7 -0
- package/data/probe/npm/bin/.gitkeep +0 -0
- package/data/probe/npm/bin/README.md +12 -0
- package/data/probe/npm/bin/probe +167 -0
- package/data/probe/npm/docs/CLAUDE_CODE_INTEGRATION.md +414 -0
- package/data/probe/npm/docs/CODEX_INTEGRATION.md +502 -0
- package/data/probe/npm/docs/EDIT_CREATE_TOOLS.md +233 -0
- package/data/probe/npm/docs/RETRY_AND_FALLBACK.md +674 -0
- package/data/probe/npm/example-usage.js +335 -0
- package/data/probe/npm/examples/multi-engine-demo.js +117 -0
- package/data/probe/npm/examples/probe-agent-cli.js +113 -0
- package/data/probe/npm/examples/test-agent-edit.js +114 -0
- package/data/probe/npm/examples/test-edit-create.js +120 -0
- package/data/probe/npm/examples/test-edit-direct.js +114 -0
- package/data/probe/npm/index.d.ts +744 -0
- package/data/probe/npm/jest.config.js +52 -0
- package/data/probe/npm/package.json +117 -0
- package/data/probe/npm/scripts/build-agent.cjs +75 -0
- package/data/probe/npm/scripts/build-cjs.js +124 -0
- package/data/probe/npm/scripts/build-mcp.cjs +36 -0
- package/data/probe/npm/scripts/postinstall.js +216 -0
- package/data/probe/npm/test-codex-e2e.js +78 -0
- package/data/probe/npm/test-download-lock.js +109 -0
- package/data/probe/npm/test-grep-security.js +94 -0
- package/data/probe/npm/test-grep-simplified.js +63 -0
- package/data/probe/npm/test-grep.js +51 -0
- package/data/probe/npm/tests/README.md +96 -0
- package/data/probe/npm/tests/agent-compact-history.test.js +174 -0
- package/data/probe/npm/tests/allow-tests-default.test.js +151 -0
- package/data/probe/npm/tests/contextCompactor.test.js +498 -0
- package/data/probe/npm/tests/delegate-config.test.js +353 -0
- package/data/probe/npm/tests/delegate-integration.test.js +348 -0
- package/data/probe/npm/tests/extractor-integration.test.js +162 -0
- package/data/probe/npm/tests/extractor.test.js +317 -0
- package/data/probe/npm/tests/fixtures/sampleDiagrams.js +267 -0
- package/data/probe/npm/tests/integration/claude-code-auto-fallback.spec.js +148 -0
- package/data/probe/npm/tests/integration/claude-code-multi-step.spec.js +127 -0
- package/data/probe/npm/tests/integration/claude-code-tool-events.spec.js +163 -0
- package/data/probe/npm/tests/integration/codex-auto-fallback.spec.js +191 -0
- package/data/probe/npm/tests/integration/codex-tool-events.spec.js +147 -0
- package/data/probe/npm/tests/integration/examplesChatMcp.test.js +402 -0
- package/data/probe/npm/tests/integration/mcpDotenvSupport.test.js +174 -0
- package/data/probe/npm/tests/integration/mcpErrorHandling.test.js +566 -0
- package/data/probe/npm/tests/integration/mcpRobustness.test.js +564 -0
- package/data/probe/npm/tests/integration/mcpStdoutPurity.test.js +355 -0
- package/data/probe/npm/tests/integration/probeAgentMcp.test.js +398 -0
- package/data/probe/npm/tests/integration/retryFallback.test.js +368 -0
- package/data/probe/npm/tests/integration/schema-in-initial-message.test.js +318 -0
- package/data/probe/npm/tests/integration/schema-validation-loop-prevention.test.js +244 -0
- package/data/probe/npm/tests/integration/schemaRetryLogic.test.js +94 -0
- package/data/probe/npm/tests/integration/validationFlow.test.js +329 -0
- package/data/probe/npm/tests/manual/test-codex-basic.js +110 -0
- package/data/probe/npm/tests/mcp/mcpClientManager.test.js +614 -0
- package/data/probe/npm/tests/mcp/mcpConfig.test.js +359 -0
- package/data/probe/npm/tests/mcp/mcpXmlBridge.test.js +436 -0
- package/data/probe/npm/tests/mcp/mockMcpServer.js +510 -0
- package/data/probe/npm/tests/mcp-strict-syntax.test.js +319 -0
- package/data/probe/npm/tests/mermaidQuoteEscaping.test.js +214 -0
- package/data/probe/npm/tests/nestedQuoteFix.test.js +40 -0
- package/data/probe/npm/tests/setup.js +46 -0
- package/data/probe/npm/tests/unit/allowed-tools.test.js +513 -0
- package/data/probe/npm/tests/unit/attempt-completion-closing-tag-in-content.test.js +188 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonFix.test.js +238 -0
- package/data/probe/npm/tests/unit/attemptCompletionJsonIssue.test.js +128 -0
- package/data/probe/npm/tests/unit/backtickAutoFix.test.js +35 -0
- package/data/probe/npm/tests/unit/bash-probe-agent-integration.test.js +389 -0
- package/data/probe/npm/tests/unit/bash-simple-commands.test.js +324 -0
- package/data/probe/npm/tests/unit/bash-tool-comprehensive.test.js +371 -0
- package/data/probe/npm/tests/unit/bash-tool-integration.test.js +310 -0
- package/data/probe/npm/tests/unit/bash-tool.test.js +341 -0
- package/data/probe/npm/tests/unit/completion-prompt.test.js +379 -0
- package/data/probe/npm/tests/unit/cwd-path-options.test.js +287 -0
- package/data/probe/npm/tests/unit/delegate-limits.test.js +422 -0
- package/data/probe/npm/tests/unit/direct-content-attempt-completion.test.js +235 -0
- package/data/probe/npm/tests/unit/edit-create-tools.test.js +609 -0
- package/data/probe/npm/tests/unit/enhancedMermaidValidation.test.js +577 -0
- package/data/probe/npm/tests/unit/extract-content.test.js +83 -0
- package/data/probe/npm/tests/unit/extract-multiple-targets.test.js +89 -0
- package/data/probe/npm/tests/unit/fallbackManager.test.js +442 -0
- package/data/probe/npm/tests/unit/githubCompatibilityValidation.test.js +258 -0
- package/data/probe/npm/tests/unit/imageConfig.test.js +149 -0
- package/data/probe/npm/tests/unit/imagePathResolution.test.js +345 -0
- package/data/probe/npm/tests/unit/json-fixing-agent.test.js +238 -0
- package/data/probe/npm/tests/unit/json-validation-enhanced-errors.test.js +199 -0
- package/data/probe/npm/tests/unit/jsonValidationInfiniteLoopFix.test.js +228 -0
- package/data/probe/npm/tests/unit/maidIntegration.test.js +139 -0
- package/data/probe/npm/tests/unit/maxIterationsWarning.test.js +195 -0
- package/data/probe/npm/tests/unit/mermaidEdgeLabelFix.test.js +161 -0
- package/data/probe/npm/tests/unit/mermaidHtmlEntities.test.js +76 -0
- package/data/probe/npm/tests/unit/mermaidInfiniteLoopFix.test.js +64 -0
- package/data/probe/npm/tests/unit/mermaidValidation.test.js +723 -0
- package/data/probe/npm/tests/unit/mermaidValidationVisorExample.test.js +309 -0
- package/data/probe/npm/tests/unit/probe-agent-clone-realistic.test.js +643 -0
- package/data/probe/npm/tests/unit/probe-agent-clone.test.js +476 -0
- package/data/probe/npm/tests/unit/probe-agent-delegate.test.js +400 -0
- package/data/probe/npm/tests/unit/probe-agent-model-option.test.js +118 -0
- package/data/probe/npm/tests/unit/probeTool-security.test.js +283 -0
- package/data/probe/npm/tests/unit/readImageTool.test.js +418 -0
- package/data/probe/npm/tests/unit/retryManager.test.js +317 -0
- package/data/probe/npm/tests/unit/schema-aware-reminders.test.js +288 -0
- package/data/probe/npm/tests/unit/schemaDefinitionDetection.test.js +115 -0
- package/data/probe/npm/tests/unit/schemaUtils.test.js +1268 -0
- package/data/probe/npm/tests/unit/simpleTelemetry.test.js +282 -0
- package/data/probe/npm/tests/unit/simplified-attempt-completion.test.js +274 -0
- package/data/probe/npm/tests/unit/single-quote-json-bug.test.js +231 -0
- package/data/probe/npm/tests/unit/subgraphAutoFix.test.js +110 -0
- package/data/probe/npm/tests/unit/system-prompt.test.js +32 -0
- package/data/probe/npm/tests/unit/types-probe-agent-options.test.js +42 -0
- package/data/probe/npm/tests/unit/xmlParsing.test.js +720 -0
- package/data/probe/npm/tsconfig.json +21 -0
- package/data/probe/result1.txt +19 -0
- package/data/probe/result2.txt +26 -0
- package/data/probe/scripts/benchmark.sh +270 -0
- package/data/probe/scripts/cache_memory_analysis.rs +844 -0
- package/data/probe/scripts/claude-hook-wrapper.sh +56 -0
- package/data/probe/site/.env.example +10 -0
- package/data/probe/site/DEPLOYMENT.md +86 -0
- package/data/probe/site/README.md +183 -0
- package/data/probe/site/adding-languages.md +135 -0
- package/data/probe/site/ai-chat.md +427 -0
- package/data/probe/site/ai-integration.md +1488 -0
- package/data/probe/site/blog/agentic-flow-custom-xml-protocol.md +407 -0
- package/data/probe/site/blog/index.md +118 -0
- package/data/probe/site/blog/v0.6.0-release.md +426 -0
- package/data/probe/site/blog.md +8 -0
- package/data/probe/site/changelog.md +200 -0
- package/data/probe/site/cli-mode.md +437 -0
- package/data/probe/site/code-extraction.md +436 -0
- package/data/probe/site/contributing/README.md +9 -0
- package/data/probe/site/contributing/documentation-cross-references.md +215 -0
- package/data/probe/site/contributing/documentation-maintenance.md +275 -0
- package/data/probe/site/contributing/documentation-structure.md +75 -0
- package/data/probe/site/documentation-cross-references.md +215 -0
- package/data/probe/site/documentation-guide.md +132 -0
- package/data/probe/site/documentation-maintenance.md +275 -0
- package/data/probe/site/features.md +147 -0
- package/data/probe/site/how-it-works.md +118 -0
- package/data/probe/site/index.md +175 -0
- package/data/probe/site/index.md.bak +133 -0
- package/data/probe/site/installation.md +235 -0
- package/data/probe/site/integrations/docker.md +248 -0
- package/data/probe/site/integrations/github-actions.md +413 -0
- package/data/probe/site/language-support-overview.md +168 -0
- package/data/probe/site/mcp-integration.md +587 -0
- package/data/probe/site/mcp-server.md +304 -0
- package/data/probe/site/navigation-structure.md +76 -0
- package/data/probe/site/nodejs-sdk.md +798 -0
- package/data/probe/site/output-formats.md +625 -0
- package/data/probe/site/package.json +21 -0
- package/data/probe/site/public/_headers +28 -0
- package/data/probe/site/public/_redirects +11 -0
- package/data/probe/site/quick-start.md +289 -0
- package/data/probe/site/search-functionality.md +291 -0
- package/data/probe/site/search-reference.md +291 -0
- package/data/probe/site/supported-languages.md +215 -0
- package/data/probe/site/use-cases/README.md +8 -0
- package/data/probe/site/use-cases/advanced-cli.md +253 -0
- package/data/probe/site/use-cases/ai-code-editors.md +239 -0
- package/data/probe/site/use-cases/building-ai-tools.md +529 -0
- package/data/probe/site/use-cases/cli-ai-workflows.md +285 -0
- package/data/probe/site/use-cases/deploying-probe-web-interface.md +255 -0
- package/data/probe/site/use-cases/integrating-probe-into-ai-code-editors.md +161 -0
- package/data/probe/site/use-cases/nodejs-sdk.md +596 -0
- package/data/probe/site/use-cases/team-chat.md +350 -0
- package/data/probe/site/web-interface.md +434 -0
- package/data/probe/site/wrangler.toml +9 -0
- package/data/probe/test-api-key.sh +1 -0
- package/data/probe/test-probe-implementation/hello.js +7 -0
- package/data/probe/test_cases/demonstrate_early_termination_issues.sh +176 -0
- package/data/probe/test_cases/early_termination_issues.rs +533 -0
- package/data/probe/test_data/test_nested_struct.go +26 -0
- package/data/probe/tests/README.md +286 -0
- package/data/probe/tests/README_search_determinism_tests.md +116 -0
- package/data/probe/tests/adjacent_comment_test.rs +152 -0
- package/data/probe/tests/apostrophe_handling_tests.rs +132 -0
- package/data/probe/tests/block_filtering_with_ast_tests.rs +669 -0
- package/data/probe/tests/block_merging_tests.rs +396 -0
- package/data/probe/tests/c_outline_format_tests.rs +2179 -0
- package/data/probe/tests/cache_invalidation_issues.rs.disabled +682 -0
- package/data/probe/tests/cache_order_tests.rs +147 -0
- package/data/probe/tests/cache_query_scoping_tests.rs +221 -0
- package/data/probe/tests/cli_tests.rs +680 -0
- package/data/probe/tests/comment_context_integration_test.rs +240 -0
- package/data/probe/tests/common.rs +33 -0
- package/data/probe/tests/complex_block_merging_tests.rs +599 -0
- package/data/probe/tests/complex_query_block_filtering_tests.rs +422 -0
- package/data/probe/tests/control_flow_closing_braces_test.rs +91 -0
- package/data/probe/tests/cpp_outline_format_tests.rs +1507 -0
- package/data/probe/tests/csharp_outline_format_tests.rs +941 -0
- package/data/probe/tests/elastic_query_integration_tests.rs +922 -0
- package/data/probe/tests/extract_command_tests.rs +1848 -0
- package/data/probe/tests/extract_deduplication_tests.rs +146 -0
- package/data/probe/tests/extract_input_file_tests.rs +84 -0
- package/data/probe/tests/extract_prompt_tests.rs +102 -0
- package/data/probe/tests/filename_search_tests.rs +96 -0
- package/data/probe/tests/fixtures/user/AssemblyInfo.cs +3 -0
- package/data/probe/tests/github_extract_tests.rs +234 -0
- package/data/probe/tests/go_comment_test.rs +253 -0
- package/data/probe/tests/go_outline_format_tests.rs +2587 -0
- package/data/probe/tests/go_path_resolver_tests.rs +96 -0
- package/data/probe/tests/html_outline_format_tests.rs +637 -0
- package/data/probe/tests/integration_tests.rs +837 -0
- package/data/probe/tests/ip_whitelist_test.rs +148 -0
- package/data/probe/tests/java_outline_format_tests.rs +1611 -0
- package/data/probe/tests/javascript_extract_tests.rs +315 -0
- package/data/probe/tests/javascript_outline_format_tests.rs +1464 -0
- package/data/probe/tests/json_format_tests.rs +436 -0
- package/data/probe/tests/json_schema_validation_tests.rs +450 -0
- package/data/probe/tests/lib_usage.rs +60 -0
- package/data/probe/tests/line_comment_context_extension_test.rs +459 -0
- package/data/probe/tests/line_map_cache_tests.rs +114 -0
- package/data/probe/tests/markdown_integration_tests.rs +190 -0
- package/data/probe/tests/mocks/test_ip_whitelist.go +11 -0
- package/data/probe/tests/mocks/test_object.js +27 -0
- package/data/probe/tests/mocks/test_struct.go +50 -0
- package/data/probe/tests/multi_keyword_pattern_tests.rs +464 -0
- package/data/probe/tests/multi_language_syntax_integration_tests.rs +218 -0
- package/data/probe/tests/multiple_capture_groups_tests.rs +169 -0
- package/data/probe/tests/negative_compound_word_tests.rs +246 -0
- package/data/probe/tests/nested_symbol_extraction_tests.rs +99 -0
- package/data/probe/tests/outline_cross_file_interference_test.rs +335 -0
- package/data/probe/tests/outline_keyword_preservation_test.rs +67 -0
- package/data/probe/tests/output_format_edge_cases_tests.rs +693 -0
- package/data/probe/tests/parallel_extraction_tests.rs +178 -0
- package/data/probe/tests/parallel_search_tests.rs +355 -0
- package/data/probe/tests/path_resolver_tests.rs +698 -0
- package/data/probe/tests/php_outline_format_extended_tests.rs +928 -0
- package/data/probe/tests/php_outline_format_tests.rs +768 -0
- package/data/probe/tests/property_tests.proptest-regressions +9 -0
- package/data/probe/tests/property_tests.rs +118 -0
- package/data/probe/tests/python_outline_format_tests.rs +1538 -0
- package/data/probe/tests/query_command_json_tests.rs +438 -0
- package/data/probe/tests/query_command_tests.rs +232 -0
- package/data/probe/tests/query_command_xml_tests.rs +569 -0
- package/data/probe/tests/quoted_term_with_negative_keyword_tests.rs +216 -0
- package/data/probe/tests/required_terms_filename_tests.rs +116 -0
- package/data/probe/tests/ruby_outline_format_tests.rs +1011 -0
- package/data/probe/tests/rust_line_comment_context_test.rs +151 -0
- package/data/probe/tests/rust_outline_format_enhanced_tests.rs +725 -0
- package/data/probe/tests/rust_outline_format_tests.rs +843 -0
- package/data/probe/tests/schemas/xml_output_schema.xsd +38 -0
- package/data/probe/tests/search_determinism_tests.rs +451 -0
- package/data/probe/tests/search_hints_tests.rs +253 -0
- package/data/probe/tests/special_character_escaping_tests.rs +417 -0
- package/data/probe/tests/stemming_compound_word_filtering_tests.rs +535 -0
- package/data/probe/tests/strict_elastic_syntax_tests.rs +404 -0
- package/data/probe/tests/swift_outline_format_tests.rs +3319 -0
- package/data/probe/tests/symbols_tests.rs +166 -0
- package/data/probe/tests/test_file.rs +45 -0
- package/data/probe/tests/test_tokenize.rs +28 -0
- package/data/probe/tests/timeout_tests.rs +82 -0
- package/data/probe/tests/tokenization_tests.rs +195 -0
- package/data/probe/tests/tokenized_block_filtering_tests.rs +174 -0
- package/data/probe/tests/typescript_extract_tests.rs +214 -0
- package/data/probe/tests/typescript_outline_format_tests.rs +2188 -0
- package/data/probe/tests/xml_format_tests.rs +568 -0
- package/data/probe/tests/xml_schema_validation_tests.rs +497 -0
- package/data/scripts/postinstall.mjs +9 -0
- package/data/scripts/set-version.js +0 -0
- package/data/scripts/wiki-build.sh +111 -0
- package/data/scripts/wiki-deploy.sh +73 -0
- package/data/serve.json +12 -0
- package/data/test/demo-dynamic.html +134 -0
- package/data/test/demo-esm.html +105 -0
- package/data/test/demo-iife.html +78 -0
- package/data/tsconfig.json +7 -0
- package/data/vite.server.ts +483 -0
- package/data/vitest.config.ts +40 -0
- package/data/wiki/Home.md +58 -0
- package/data/wiki/_Sidebar.md +39 -0
- package/docs-mcp.config.json +20 -0
- package/package.json +56 -0
- package/src/config.js +111 -0
- package/src/index.js +395 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
## Prerequisites
|
|
2
|
+
|
|
3
|
+
1. **NPM Account**: Ensure you have an account on [npmjs.com](https://www.npmjs.com/)
|
|
4
|
+
2. **NPM Login**: Login to npm from your terminal:
|
|
5
|
+
```bash
|
|
6
|
+
npm login
|
|
7
|
+
```
|
|
8
|
+
3. **Organization Access**: If publishing to `@crownpeak` scope, ensure you have write permissions to the organization
|
|
9
|
+
|
|
10
|
+
## Pre-Publishing Checklist
|
|
11
|
+
|
|
12
|
+
- [ ] Update version in `package.json` (follow [Semantic Versioning](https://semver.org/))
|
|
13
|
+
- [ ] Update `CHANGELOG.md` with changes in this release
|
|
14
|
+
- [ ] Ensure all tests pass: `npm test` (if tests exist)
|
|
15
|
+
- [ ] Build succeeds: `npm run build`
|
|
16
|
+
- [ ] Lint passes: `npm run lint`
|
|
17
|
+
- [ ] Review package contents: `npm pack --dry-run`
|
|
18
|
+
|
|
19
|
+
## Version Update
|
|
20
|
+
|
|
21
|
+
Update the version number in `package.json`:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# For patches (bug fixes)
|
|
25
|
+
npm version patch
|
|
26
|
+
|
|
27
|
+
# For minor releases (new features, backwards compatible)
|
|
28
|
+
npm version minor
|
|
29
|
+
|
|
30
|
+
# For major releases (breaking changes)
|
|
31
|
+
npm version major
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
This will automatically:
|
|
35
|
+
- Update `package.json`
|
|
36
|
+
- Create a git commit
|
|
37
|
+
- Create a git tag
|
|
38
|
+
|
|
39
|
+
## Publish to NPM
|
|
40
|
+
|
|
41
|
+
### 1. First Time Publishing
|
|
42
|
+
|
|
43
|
+
For first-time publishing of a scoped package:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm publish --access public
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 2. Subsequent Publishes
|
|
50
|
+
|
|
51
|
+
For regular updates:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npm publish
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The `prepublishOnly` script will automatically:
|
|
58
|
+
1. Run `npm run build` to compile all code
|
|
59
|
+
2. Run `npm run lint` to check code quality
|
|
60
|
+
|
|
61
|
+
### 3. Beta/Pre-release Versions
|
|
62
|
+
|
|
63
|
+
For pre-release versions:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# Update to beta version
|
|
67
|
+
npm version prerelease --preid=beta
|
|
68
|
+
|
|
69
|
+
# Publish with beta tag
|
|
70
|
+
npm publish --tag beta
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Users can install with: `npm install @crownpeak/dqm-react-component@beta`
|
|
74
|
+
|
|
75
|
+
## Post-Publishing
|
|
76
|
+
|
|
77
|
+
1. **Push to Git**:
|
|
78
|
+
```bash
|
|
79
|
+
git push origin main --follow-tags
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
2. **Create GitHub Release**:
|
|
83
|
+
- Go to GitHub repository
|
|
84
|
+
- Create a new release from the version tag
|
|
85
|
+
- Add release notes from `CHANGELOG.md`
|
|
86
|
+
|
|
87
|
+
3. **Verify Installation**:
|
|
88
|
+
```bash
|
|
89
|
+
npm view @crownpeak/dqm-react-component
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
4. **Test Installation**:
|
|
93
|
+
```bash
|
|
94
|
+
npm install @crownpeak/dqm-react-component
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Package Contents
|
|
98
|
+
|
|
99
|
+
The published package includes:
|
|
100
|
+
|
|
101
|
+
- `dist/` - Compiled outputs
|
|
102
|
+
- `dist/index.js` - Library ESM build
|
|
103
|
+
- `dist/index.cjs` - Library CommonJS build
|
|
104
|
+
- `dist/index.d.ts` - Library type definitions
|
|
105
|
+
- `dist/dqm-widget.esm.js` - Standalone widget (ESM)
|
|
106
|
+
- `dist/dqm-widget.iife.js` - Standalone widget (IIFE)
|
|
107
|
+
- `dist/dqm-widget.d.ts` - Widget type definitions
|
|
108
|
+
- `dist/server/` - Backend server code
|
|
109
|
+
- `dist/auth-ui/` - Authentication UI bundle
|
|
110
|
+
- `README.md` - Main documentation
|
|
111
|
+
- `LICENSE` - MIT License
|
|
112
|
+
- `CHANGELOG.md` - Version history
|
|
113
|
+
- `QUICKSTART.md` - Quick start guide
|
|
114
|
+
- `EXAMPLES.md` - Usage examples
|
|
115
|
+
- `AUTHENTICATION.md` - Auth documentation
|
|
116
|
+
- `BACKEND-API.md` - Backend API docs
|
|
117
|
+
- `DEVELOPMENT.md` - Development guide
|
|
118
|
+
- `PUBLISHING.md` - Publishing workflow
|
|
119
|
+
|
|
120
|
+
## Files Excluded (via .npmignore)
|
|
121
|
+
|
|
122
|
+
- Source code (`src/`, `server/`, `server-ui/`)
|
|
123
|
+
- Development files (`.vscode/`, `.env`, config files)
|
|
124
|
+
- Build configuration files
|
|
125
|
+
- Test files
|
|
126
|
+
- Git files
|
|
127
|
+
|
|
128
|
+
## Unpublishing
|
|
129
|
+
|
|
130
|
+
⚠️ **Caution**: Unpublishing is discouraged and only allowed within 72 hours.
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm unpublish @crownpeak/dqm-react-component@1.0.0
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Deprecating a Version
|
|
137
|
+
|
|
138
|
+
If a version has issues, deprecate it instead of unpublishing:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
npm deprecate @crownpeak/dqm-react-component@1.0.0 "Critical bug, use version 1.0.1 instead"
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Troubleshooting
|
|
145
|
+
|
|
146
|
+
### Authentication Errors
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
npm logout
|
|
150
|
+
npm login
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Permission Errors
|
|
154
|
+
|
|
155
|
+
Ensure you have write access to the `@crownpeak` organization on npmjs.com.
|
|
156
|
+
|
|
157
|
+
### Build Errors
|
|
158
|
+
|
|
159
|
+
Clean and rebuild:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
rm -rf dist node_modules
|
|
163
|
+
npm install
|
|
164
|
+
npm run build
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Package Size Warnings
|
|
168
|
+
|
|
169
|
+
Check bundle size:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
npm pack --dry-run | grep "unpacked size"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Current package size: ~4.3 MB unpacked, ~1.2 MB packed
|
|
176
|
+
|
|
177
|
+
## NPM Scripts Reference
|
|
178
|
+
|
|
179
|
+
- `npm run build` - Build library, widget, server, and auth-ui
|
|
180
|
+
- `npm run build:lib` - Build library only
|
|
181
|
+
- `npm run build:widget` - Build standalone widget bundles + copy types
|
|
182
|
+
- `npm run build:server` - Build server only
|
|
183
|
+
- `npm run build:auth-ui` - Build auth-ui only
|
|
184
|
+
- `npm run lint` - Run ESLint
|
|
185
|
+
- `npm pack` - Create tarball locally for testing
|
|
186
|
+
- `npm publish` - Publish to npm registry
|
|
187
|
+
|
|
188
|
+
## Resources
|
|
189
|
+
|
|
190
|
+
- [NPM Publishing Docs](https://docs.npmjs.com/cli/v10/commands/npm-publish)
|
|
191
|
+
- [Semantic Versioning](https://semver.org/)
|
|
192
|
+
- [NPM Package Scope](https://docs.npmjs.com/cli/v10/using-npm/scope)
|
|
193
|
+
- [NPM Organizations](https://docs.npmjs.com/organizations)
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
## Installation
|
|
2
|
+
|
|
3
|
+
```bash
|
|
4
|
+
npm install
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
## Build
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm run build
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### Build widget only (for standalone script usage)
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm run build:widget
|
|
17
|
+
npm run serve:widget # preview demos at http://localhost:4173/test/demo-iife.html etc.
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Start Development
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm run dev # Vite dev server with integrated backend (port 5173)
|
|
24
|
+
npm run dev:server # Standalone Express server with Redis (port 3001)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This starts:
|
|
28
|
+
- ✅ **Frontend + Backend**: http://localhost:5173 (Vite Dev Server with integrated backend API)
|
|
29
|
+
- Backend routes (`/auth/*`, `/dqm/*`) are handled by Vite plugin
|
|
30
|
+
|
|
31
|
+
## Test the Integration
|
|
32
|
+
|
|
33
|
+
### 1. Open Frontend
|
|
34
|
+
Navigate to http://localhost:5173
|
|
35
|
+
|
|
36
|
+
### 2. Configure Backend Mode
|
|
37
|
+
The test harness is already configured to use the backend:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
config={{
|
|
41
|
+
authBackendUrl: '', // Empty = same origin (backend integrated in Vite dev server)
|
|
42
|
+
useLocalStorage: true,
|
|
43
|
+
}}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 3. Login with Credentials
|
|
47
|
+
- Enter your Crownpeak DQM API Key
|
|
48
|
+
- Enter your Website ID
|
|
49
|
+
- Click "Continue"
|
|
50
|
+
|
|
51
|
+
The backend will:
|
|
52
|
+
1. Validate credentials with Crownpeak DQM API
|
|
53
|
+
2. Issue a session token
|
|
54
|
+
3. Store token in localStorage
|
|
55
|
+
|
|
56
|
+
### 4. Analyze HTML
|
|
57
|
+
- Paste HTML in the editor
|
|
58
|
+
- Click "Start Analysis"
|
|
59
|
+
- All requests go through `/dqm/*` on the same origin (port 5173 in dev)
|
|
60
|
+
|
|
61
|
+
## Architecture
|
|
62
|
+
|
|
63
|
+
```mermaid
|
|
64
|
+
graph LR
|
|
65
|
+
A[React App + Backend API<br/>Port 5173]
|
|
66
|
+
B[Vite Dev Server<br/>with integrated backend]
|
|
67
|
+
C[Crownpeak DQM<br/>API]
|
|
68
|
+
|
|
69
|
+
A -->|HTTP Requests| B
|
|
70
|
+
B -->|Proxied Requests| C
|
|
71
|
+
|
|
72
|
+
A -.->|sessionToken<br/>localStorage| A
|
|
73
|
+
B -.->|apiKey + websiteId<br/>in-memory · Redis-ready| B
|
|
74
|
+
|
|
75
|
+
subgraph Frontend
|
|
76
|
+
A
|
|
77
|
+
A1[DQMSidebar]
|
|
78
|
+
A2[Login UI]
|
|
79
|
+
A3[HTML Editor]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
subgraph Backend
|
|
83
|
+
B
|
|
84
|
+
B1[Auth Routes]
|
|
85
|
+
B2[DQM Proxy]
|
|
86
|
+
B3[Sessions]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
subgraph External
|
|
90
|
+
C
|
|
91
|
+
C1[Analysis]
|
|
92
|
+
C2[Highlights]
|
|
93
|
+
C3[Checkpoints]
|
|
94
|
+
end
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Two Authentication Modes
|
|
98
|
+
|
|
99
|
+
### Backend Mode (Recommended)
|
|
100
|
+
```tsx
|
|
101
|
+
config={{
|
|
102
|
+
authBackendUrl: '', // Dev: empty (same origin) | Prod: 'https://your-backend.com'
|
|
103
|
+
}}
|
|
104
|
+
```
|
|
105
|
+
- ✅ Secure session tokens
|
|
106
|
+
- ✅ API keys remain server-side
|
|
107
|
+
- ✅ Centralized access control
|
|
108
|
+
|
|
109
|
+
### Direct Mode (Development)
|
|
110
|
+
```tsx
|
|
111
|
+
config={{
|
|
112
|
+
apiKey: 'YOUR_API_KEY',
|
|
113
|
+
websiteId: 'YOUR_WEBSITE_ID',
|
|
114
|
+
}}
|
|
115
|
+
```
|
|
116
|
+
- ✅ No backend required
|
|
117
|
+
- ✅ Quick testing
|
|
118
|
+
- ✅ Props or localStorage
|
|
119
|
+
|
|
120
|
+
## API Endpoints
|
|
121
|
+
|
|
122
|
+
### Authentication
|
|
123
|
+
- `POST /auth/login` - Login with credentials
|
|
124
|
+
- `POST /auth/logout` - Invalidate session
|
|
125
|
+
- `GET /auth/session` - Get session info
|
|
126
|
+
|
|
127
|
+
### DQM Proxy
|
|
128
|
+
- `POST /dqm/assets` - Start analysis
|
|
129
|
+
- `GET /dqm/assets/:id` - Get results
|
|
130
|
+
- `GET /dqm/assets/:id/pagehighlight/all` - All highlights
|
|
131
|
+
- `GET /dqm/assets/:id/pagehighlight/:cpId` - Single highlight
|
|
132
|
+
|
|
133
|
+
All DQM endpoints require `Authorization: Bearer <sessionToken>`
|
|
134
|
+
|
|
135
|
+
## Scripts
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# Development
|
|
139
|
+
npm run dev # Vite dev server with integrated backend (port 5173)
|
|
140
|
+
npm run dev:client # Same as npm run dev
|
|
141
|
+
npm run dev:server # Standalone Express server with Redis (port 3001)
|
|
142
|
+
|
|
143
|
+
# Build
|
|
144
|
+
npm run build # Build all
|
|
145
|
+
npm run build:lib # Build React library
|
|
146
|
+
npm run build:server # Build Express server
|
|
147
|
+
|
|
148
|
+
# Production
|
|
149
|
+
npm run start:server # Run built server
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Environment Setup
|
|
153
|
+
|
|
154
|
+
Copy `.env.example` to `.env`:
|
|
155
|
+
|
|
156
|
+
```env
|
|
157
|
+
PORT=3001
|
|
158
|
+
CORS_ORIGINS=http://localhost:5173
|
|
159
|
+
DQM_API_BASE_URL=https://api.crownpeak.net/dqm-cms/v1
|
|
160
|
+
JWT_SECRET=your-secret-key
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Documentation
|
|
164
|
+
|
|
165
|
+
- **[BACKEND-API.md](./BACKEND-API.md)** - Backend API specification
|
|
166
|
+
- **[DEVELOPMENT.md](./DEVELOPMENT.md)** - Development guide
|
|
167
|
+
- **[server/README.md](./server/README.md)** - Server documentation
|
|
168
|
+
- **[AUTHENTICATION.md](./AUTHENTICATION.md)** - Auth flow details
|
|
169
|
+
- **[EXAMPLES.md](./EXAMPLES.md)** - Integration examples
|
|
170
|
+
|
|
171
|
+
## Testing
|
|
172
|
+
|
|
173
|
+
### Test Backend Health (Dev Mode - Port 5173)
|
|
174
|
+
```bash
|
|
175
|
+
curl http://localhost:5173/health
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Test Login (Dev Mode)
|
|
179
|
+
```bash
|
|
180
|
+
curl -X POST http://localhost:5173/auth/login \
|
|
181
|
+
-H "Content-Type: application/json" \
|
|
182
|
+
-d '{"apiKey":"YOUR_KEY","websiteId":"YOUR_ID"}'
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### Test Analysis (Dev Mode)
|
|
186
|
+
```bash
|
|
187
|
+
curl -X POST http://localhost:5173/dqm/assets \
|
|
188
|
+
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
189
|
+
-H "Content-Type: application/json" \
|
|
190
|
+
-d '{"html":"<html><body>Test</body></html>"}'
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Features
|
|
194
|
+
|
|
195
|
+
✅ **Modular Backend** - Express.js with clean architecture
|
|
196
|
+
✅ **Session Management** - In-memory store (Redis-ready)
|
|
197
|
+
✅ **DQM API Proxy** - All analysis endpoints
|
|
198
|
+
✅ **CORS & Security** - Helmet.js, CORS whitelist
|
|
199
|
+
✅ **Auto-reload** - TSX watch mode for development
|
|
200
|
+
✅ **Concurrent Servers** - Frontend + Backend in one command
|
|
201
|
+
✅ **TypeScript** - Full type safety
|
|
202
|
+
✅ **Error Handling** - Centralized middleware
|
|
203
|
+
|
|
204
|
+
## License
|
|
205
|
+
|
|
206
|
+
MIT
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
## Problem
|
|
2
|
+
|
|
3
|
+
The backend uses **In-Memory Sessions** by default. These are lost on every server restart, which means:
|
|
4
|
+
- Users must log in again after every deployment
|
|
5
|
+
- Development with hot-reload causes frequent session losses
|
|
6
|
+
- Load-balancing across multiple servers doesn't work
|
|
7
|
+
|
|
8
|
+
## Solution: Redis
|
|
9
|
+
|
|
10
|
+
Redis stores sessions persistently and across servers. Sessions survive:
|
|
11
|
+
- ✅ Server restarts
|
|
12
|
+
- ✅ Deployments
|
|
13
|
+
- ✅ Load balancing
|
|
14
|
+
- ✅ Hot-reload during development
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
### Local Development (Docker)
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Start Redis
|
|
22
|
+
docker run -d -p 6379:6379 redis:alpine
|
|
23
|
+
|
|
24
|
+
# Set environment variable
|
|
25
|
+
export REDIS_URL=redis://localhost:6379
|
|
26
|
+
|
|
27
|
+
# Start server
|
|
28
|
+
npm run dev:server
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Local Development (without Docker)
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# macOS
|
|
35
|
+
brew install redis
|
|
36
|
+
redis-server
|
|
37
|
+
|
|
38
|
+
# Ubuntu/Debian
|
|
39
|
+
sudo apt-get install redis-server
|
|
40
|
+
sudo systemctl start redis-server
|
|
41
|
+
|
|
42
|
+
# Set environment variable
|
|
43
|
+
export REDIS_URL=redis://localhost:6379
|
|
44
|
+
|
|
45
|
+
# Start server
|
|
46
|
+
npm run dev:server
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Production Deployment
|
|
50
|
+
|
|
51
|
+
#### Option 1: Redis Cloud (Managed, Free Tier available)
|
|
52
|
+
|
|
53
|
+
1. Create an account on [Redis Cloud](https://redis.com/try-free/)
|
|
54
|
+
2. Create a new database
|
|
55
|
+
3. Copy the connection string
|
|
56
|
+
4. Set environment variable:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
REDIS_URL=redis://default:password@redis-xxxxx.redislabs.com:xxxxx
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### Option 2: AWS ElastiCache
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
REDIS_URL=redis://your-elasticache-cluster.xxxxx.cache.amazonaws.com:6379
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### Option 3: Azure Cache for Redis
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
REDIS_URL=redis://:password@your-cache.redis.cache.windows.net:6380?tls=true
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
#### Option 4: Heroku Redis
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Automatically set via REDIS_URL env var
|
|
78
|
+
heroku addons:create heroku-redis:mini
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Fallback Behavior
|
|
82
|
+
|
|
83
|
+
When **no Redis connection** is available:
|
|
84
|
+
- ⚠️ Automatic fallback to in-memory storage
|
|
85
|
+
- ⚠️ Warning log: "Redis not available, using in-memory storage"
|
|
86
|
+
- ⚠️ Sessions are lost on server restart
|
|
87
|
+
|
|
88
|
+
## Monitoring
|
|
89
|
+
|
|
90
|
+
The backend logs show:
|
|
91
|
+
```
|
|
92
|
+
[SessionStore] ✅ Connected to Redis
|
|
93
|
+
[SessionStore] Created Redis session: a285dde5... (expires in 1440 minutes)
|
|
94
|
+
[Auth] Current sessions in store: 5 (storage: redis)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Configuration
|
|
98
|
+
|
|
99
|
+
### Environment Variables
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# .env
|
|
103
|
+
REDIS_URL=redis://localhost:6379
|
|
104
|
+
|
|
105
|
+
# Optional Redis configuration
|
|
106
|
+
REDIS_PASSWORD=your-password
|
|
107
|
+
REDIS_TLS=true # For production with TLS
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Session TTL
|
|
111
|
+
|
|
112
|
+
Sessions expire after 24 hours (configurable in `server/config.ts`):
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
session: {
|
|
116
|
+
ttl: 24 * 60 * 60 * 1000, // 24 hours in milliseconds
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Troubleshooting
|
|
121
|
+
|
|
122
|
+
### "Redis connection failed"
|
|
123
|
+
- Check if Redis is running: `redis-cli ping` → should return "PONG"
|
|
124
|
+
- Check REDIS_URL format
|
|
125
|
+
- Check firewall/security groups
|
|
126
|
+
|
|
127
|
+
### "Session expired" despite Redis
|
|
128
|
+
- TTL might be too short → Increase in `config.ts`
|
|
129
|
+
- Redis memory full → Check `redis-cli info memory`
|
|
130
|
+
|
|
131
|
+
### Sessions are not being saved
|
|
132
|
+
- Check backend logs: Should show "Created Redis session"
|
|
133
|
+
- Check Redis: `redis-cli KEYS "session:*"`
|
|
134
|
+
|
|
135
|
+
## Best Practices
|
|
136
|
+
|
|
137
|
+
### Development
|
|
138
|
+
```bash
|
|
139
|
+
# Local Redis, no persistence needed
|
|
140
|
+
docker run -d -p 6379:6379 redis:alpine
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Staging/Production
|
|
144
|
+
```bash
|
|
145
|
+
# Managed Redis with backups and monitoring
|
|
146
|
+
# Redis Cloud, AWS ElastiCache, Azure Cache
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Security
|
|
150
|
+
- ✅ Use TLS in production (`rediss://` instead of `redis://`)
|
|
151
|
+
- ✅ Use strong passwords
|
|
152
|
+
- ✅ Restrict network access (security groups)
|
|
153
|
+
- ✅ Enable Redis AUTH
|
|
154
|
+
|
|
155
|
+
## Migration from In-Memory to Redis
|
|
156
|
+
|
|
157
|
+
No code changes required! Simply:
|
|
158
|
+
1. Set REDIS_URL environment variable
|
|
159
|
+
2. Restart server
|
|
160
|
+
3. Backend automatically detects Redis
|
|
161
|
+
|
|
162
|
+
Existing sessions are lost during migration (users must log in again).
|