@libredb/studio 0.9.7 → 0.9.12
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/dist/chunk-34YQUUCM.mjs +319 -0
- package/dist/chunk-34YQUUCM.mjs.map +1 -0
- package/dist/chunk-4LVB3K53.mjs +37 -0
- package/dist/chunk-4LVB3K53.mjs.map +1 -0
- package/dist/chunk-6DRZXXNT.mjs +100 -0
- package/dist/chunk-6DRZXXNT.mjs.map +1 -0
- package/dist/chunk-CZVV3JJB.mjs +160 -0
- package/dist/chunk-CZVV3JJB.mjs.map +1 -0
- package/dist/chunk-D4WVWWWF.js +332 -0
- package/dist/chunk-D4WVWWWF.js.map +1 -0
- package/dist/chunk-DY3KXE44.mjs +3 -0
- package/dist/chunk-DY3KXE44.mjs.map +1 -0
- package/dist/chunk-DZ2UB3C6.mjs +6679 -0
- package/dist/chunk-DZ2UB3C6.mjs.map +1 -0
- package/dist/chunk-FYSE52VB.js +242 -0
- package/dist/chunk-FYSE52VB.js.map +1 -0
- package/dist/chunk-G4WYE6TI.js +4 -0
- package/dist/chunk-G4WYE6TI.js.map +1 -0
- package/dist/chunk-JOGLIOFO.js +1310 -0
- package/dist/chunk-JOGLIOFO.js.map +1 -0
- package/dist/chunk-JZO5KRZN.js +165 -0
- package/dist/chunk-JZO5KRZN.js.map +1 -0
- package/dist/chunk-KV356UXJ.js +253 -0
- package/dist/chunk-KV356UXJ.js.map +1 -0
- package/dist/chunk-PPODO6HX.mjs +237 -0
- package/dist/chunk-PPODO6HX.mjs.map +1 -0
- package/dist/chunk-PTIRB2JO.js +258 -0
- package/dist/chunk-PTIRB2JO.js.map +1 -0
- package/dist/chunk-Q6LRDBK7.js +42 -0
- package/dist/chunk-Q6LRDBK7.js.map +1 -0
- package/dist/chunk-QJP5FZRY.mjs +255 -0
- package/dist/chunk-QJP5FZRY.mjs.map +1 -0
- package/dist/chunk-R3POCJK6.mjs +248 -0
- package/dist/chunk-R3POCJK6.mjs.map +1 -0
- package/dist/chunk-RBVDMLFV.js +6747 -0
- package/dist/chunk-RBVDMLFV.js.map +1 -0
- package/dist/chunk-RCQB4FCE.js +186 -0
- package/dist/chunk-RCQB4FCE.js.map +1 -0
- package/dist/chunk-SR5DRGBX.mjs +174 -0
- package/dist/chunk-SR5DRGBX.mjs.map +1 -0
- package/dist/chunk-VLCRUZX7.js +102 -0
- package/dist/chunk-VLCRUZX7.js.map +1 -0
- package/dist/chunk-VWVRUCQO.mjs +1289 -0
- package/dist/chunk-VWVRUCQO.mjs.map +1 -0
- package/dist/components.d.mts +273 -0
- package/dist/components.d.ts +273 -0
- package/dist/components.js +59 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +6 -0
- package/dist/components.mjs.map +1 -0
- package/dist/custom-BNDOYC5P.js +134 -0
- package/dist/custom-BNDOYC5P.js.map +1 -0
- package/dist/custom-S2EKFMP3.mjs +132 -0
- package/dist/custom-S2EKFMP3.mjs.map +1 -0
- package/dist/gemini-4ASHNK4H.js +81 -0
- package/dist/gemini-4ASHNK4H.js.map +1 -0
- package/dist/gemini-C5RBLQEJ.mjs +79 -0
- package/dist/gemini-C5RBLQEJ.mjs.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mongodb-XMZEZA4A.mjs +748 -0
- package/dist/mongodb-XMZEZA4A.mjs.map +1 -0
- package/dist/mongodb-YQJJTLX3.js +750 -0
- package/dist/mongodb-YQJJTLX3.js.map +1 -0
- package/dist/mssql-PMOU4D36.js +916 -0
- package/dist/mssql-PMOU4D36.js.map +1 -0
- package/{src/lib/db/providers/sql/mssql.ts → dist/mssql-ZH5VP2C5.mjs} +268 -423
- package/dist/mssql-ZH5VP2C5.mjs.map +1 -0
- package/{src/lib/db/providers/sql/mysql.ts → dist/mysql-I3WJQXN2.mjs} +277 -428
- package/dist/mysql-I3WJQXN2.mjs.map +1 -0
- package/dist/mysql-Y3MSA5QY.js +833 -0
- package/dist/mysql-Y3MSA5QY.js.map +1 -0
- package/dist/ollama-26BYLVEV.mjs +115 -0
- package/dist/ollama-26BYLVEV.mjs.map +1 -0
- package/dist/ollama-HVWAGKQC.js +117 -0
- package/dist/ollama-HVWAGKQC.js.map +1 -0
- package/dist/openai-4U56KPG7.mjs +111 -0
- package/dist/openai-4U56KPG7.mjs.map +1 -0
- package/dist/openai-AK3R37BS.js +113 -0
- package/dist/openai-AK3R37BS.js.map +1 -0
- package/dist/oracle-L6VEAVXO.js +917 -0
- package/dist/oracle-L6VEAVXO.js.map +1 -0
- package/{src/lib/db/providers/sql/oracle.ts → dist/oracle-P2G7T4P4.mjs} +321 -454
- package/dist/oracle-P2G7T4P4.mjs.map +1 -0
- package/{src/lib/db/providers/sql/postgres.ts → dist/postgres-O5KOQUVP.mjs} +261 -471
- package/dist/postgres-O5KOQUVP.mjs.map +1 -0
- package/dist/postgres-RLCWNFFX.js +971 -0
- package/dist/postgres-RLCWNFFX.js.map +1 -0
- package/dist/providers.d.mts +149 -0
- package/dist/providers.d.ts +149 -0
- package/dist/providers.js +44 -0
- package/dist/providers.js.map +1 -0
- package/dist/providers.mjs +7 -0
- package/dist/providers.mjs.map +1 -0
- package/dist/redis-4WMQOVLX.mjs +435 -0
- package/dist/redis-4WMQOVLX.mjs.map +1 -0
- package/dist/redis-QVQ6YU62.js +441 -0
- package/dist/redis-QVQ6YU62.js.map +1 -0
- package/dist/sqlite-4I2P2OGQ.js +554 -0
- package/dist/sqlite-4I2P2OGQ.js.map +1 -0
- package/dist/sqlite-OA4YJX5S.mjs +531 -0
- package/dist/sqlite-OA4YJX5S.mjs.map +1 -0
- package/dist/types-BJvJfxSY.d.mts +141 -0
- package/dist/types-BJvJfxSY.d.ts +141 -0
- package/dist/types-ClAg_v5k.d.mts +343 -0
- package/dist/types-Der_X8E8.d.ts +343 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/dist/workspace.d.mts +80 -0
- package/dist/workspace.d.ts +80 -0
- package/dist/workspace.js +4182 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace.mjs +4155 -0
- package/dist/workspace.mjs.map +1 -0
- package/package.json +60 -5
- package/.claude/settings.local.json +0 -127
- package/.cursorrules +0 -426
- package/.devin/wiki.json +0 -143
- package/.dockerignore +0 -80
- package/.env.example +0 -159
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -49
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -29
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -57
- package/.github/workflows/ci.yml +0 -185
- package/.github/workflows/codeql.yml +0 -57
- package/.github/workflows/docker-build-push.yml +0 -118
- package/.github/workflows/helm-release.yml +0 -113
- package/CLAUDE.md +0 -265
- package/CODE_OF_CONDUCT.md +0 -124
- package/CONTRIBUTING.md +0 -154
- package/Dockerfile +0 -73
- package/SECURITY.md +0 -107
- package/artifacthub-repo.yml +0 -4
- package/bun.lock +0 -1714
- package/bunfig.toml +0 -3
- package/charts/libredb-studio/.helmignore +0 -11
- package/charts/libredb-studio/Chart.lock +0 -6
- package/charts/libredb-studio/Chart.yaml +0 -50
- package/charts/libredb-studio/README.md +0 -206
- package/charts/libredb-studio/templates/NOTES.txt +0 -59
- package/charts/libredb-studio/templates/_helpers.tpl +0 -135
- package/charts/libredb-studio/templates/configmap.yaml +0 -37
- package/charts/libredb-studio/templates/deployment.yaml +0 -184
- package/charts/libredb-studio/templates/hpa.yaml +0 -32
- package/charts/libredb-studio/templates/ingress.yaml +0 -41
- package/charts/libredb-studio/templates/networkpolicy.yaml +0 -50
- package/charts/libredb-studio/templates/pdb.yaml +0 -18
- package/charts/libredb-studio/templates/pvc.yaml +0 -23
- package/charts/libredb-studio/templates/secret.yaml +0 -30
- package/charts/libredb-studio/templates/seed-configmap.yaml +0 -11
- package/charts/libredb-studio/templates/service.yaml +0 -22
- package/charts/libredb-studio/templates/serviceaccount.yaml +0 -13
- package/charts/libredb-studio/values.schema.json +0 -246
- package/charts/libredb-studio/values.yaml +0 -286
- package/components.json +0 -22
- package/conductor/code_styleguides/typescript.md +0 -43
- package/conductor/product-guidelines.md +0 -43
- package/conductor/product.md +0 -3
- package/conductor/setup_state.json +0 -1
- package/conductor/tech-stack.md +0 -39
- package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +0 -8
- package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +0 -44
- package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +0 -31
- package/conductor/tracks.md +0 -8
- package/conductor/workflow.md +0 -333
- package/database-compose.yml +0 -55
- package/docker/postgres-init/01-extensions.sql +0 -10
- package/docker/postgres-init/02-sample-data.sql +0 -585
- package/docker/postgres.yml +0 -68
- package/docker-compose.yml +0 -38
- package/docs/AI_PLAN.md +0 -74
- package/docs/API_DOCS.md +0 -875
- package/docs/ARCHITECTURE.md +0 -218
- package/docs/DATABASE_PROVIDERS.md +0 -358
- package/docs/FEATURES.md +0 -116
- package/docs/HELM_CHART.md +0 -252
- package/docs/LOGIN_PAGE.md +0 -178
- package/docs/MONACO_EDITOR_PERFORMANCE.md +0 -315
- package/docs/OIDC_ARCH.md +0 -681
- package/docs/OIDC_SETUP.md +0 -322
- package/docs/POSTGRES_METRICS.md +0 -516
- package/docs/QUERY_OPTIMIZATION.md +0 -370
- package/docs/SEED_CONNECTIONS.md +0 -468
- package/docs/SQL_ALIAS_COMPLETION.md +0 -190
- package/docs/STORAGE_ARCHITECTURE.md +0 -565
- package/docs/STORAGE_QUICK_SETUP.md +0 -419
- package/docs/TECHNICAL_PLAN.md +0 -36
- package/docs/THEMING.md +0 -345
- package/docs/adding-a-new-database-provider.md +0 -642
- package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +0 -360
- package/docs/backlogs/001-INLINE_DATA_EDITING.md +0 -118
- package/docs/backlogs/002-DATA_IMPORT.md +0 -215
- package/docs/backlogs/003-QUERY_TIME_MACHINE.md +0 -183
- package/docs/backlogs/004-AI_DATA_STORYTELLER.md +0 -292
- package/docs/backlogs/005-QUERY_PLAYGROUND.md +0 -352
- package/docs/backlogs/006-DATA_MASKING.md +0 -418
- package/docs/enterprise-features.md +0 -718
- package/docs/kubernetes-helm-chart-artifacthub-plan.md +0 -803
- package/docs/medium-koyeb-article-en.md +0 -215
- package/docs/plans/test-plans.md +0 -445
- package/docs/releases/RELEASE.V0.3.0.md +0 -22
- package/docs/releases/RELEASE.V0.4.0.md +0 -154
- package/docs/releases/RELEASE.V0.5.0.md +0 -252
- package/docs/releases/RELEASE_v0.5.6.md +0 -145
- package/docs/releases/RELEASE_v0.6.1.md +0 -303
- package/docs/releases/RELEASE_v0.6.7.md +0 -292
- package/docs/releases/RELEASE_v0.7.0.md +0 -332
- package/docs/releases/RELEASE_v0.8.0.md +0 -521
- package/docs/sampledb/titanic.sql +0 -1379
- package/docs/superpowers/plans/2026-03-25-seed-connections.md +0 -1362
- package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +0 -590
- package/e2e/admin-dashboard.spec.ts +0 -64
- package/e2e/connection-management.spec.ts +0 -58
- package/e2e/export.spec.ts +0 -34
- package/e2e/login.spec.ts +0 -85
- package/e2e/query-execution.spec.ts +0 -35
- package/e2e/tab-management.spec.ts +0 -64
- package/eslint.config.mjs +0 -28
- package/fly.toml +0 -43
- package/next.config.ts +0 -32
- package/playwright.config.ts +0 -34
- package/postcss.config.mjs +0 -7
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +0 -1
- package/public/globe.svg +0 -1
- package/public/logo.svg +0 -32
- package/public/next.svg +0 -1
- package/public/screenshots/code-generator.png +0 -0
- package/public/screenshots/connection-modal.png +0 -0
- package/public/screenshots/data-profiler.png +0 -0
- package/public/screenshots/erd-diagram.png +0 -0
- package/public/screenshots/hero-editor.png +0 -0
- package/public/screenshots/nl2sql.png +0 -0
- package/public/vercel.svg +0 -1
- package/public/window.svg +0 -1
- package/render.yaml +0 -58
- package/scripts/merge-lcov.mjs +0 -239
- package/sonar-project.properties +0 -16
- package/src/app/admin/error.tsx +0 -46
- package/src/app/admin/page.tsx +0 -10
- package/src/app/api/admin/audit/route.ts +0 -52
- package/src/app/api/admin/fleet-health/route.ts +0 -81
- package/src/app/api/ai/autopilot/route.ts +0 -105
- package/src/app/api/ai/chat/route.ts +0 -132
- package/src/app/api/ai/describe-schema/route.ts +0 -52
- package/src/app/api/ai/explain/route.ts +0 -86
- package/src/app/api/ai/impact/route.ts +0 -97
- package/src/app/api/ai/index-advisor/route.ts +0 -98
- package/src/app/api/ai/nl2sql/route.ts +0 -87
- package/src/app/api/ai/query-safety/route.ts +0 -87
- package/src/app/api/auth/login/route.ts +0 -62
- package/src/app/api/auth/logout/route.ts +0 -25
- package/src/app/api/auth/me/route.ts +0 -10
- package/src/app/api/auth/oidc/callback/route.ts +0 -82
- package/src/app/api/auth/oidc/login/route.ts +0 -43
- package/src/app/api/connections/managed/route.ts +0 -35
- package/src/app/api/db/cancel/route.ts +0 -42
- package/src/app/api/db/disconnect/route.ts +0 -28
- package/src/app/api/db/health/route.ts +0 -49
- package/src/app/api/db/maintenance/route.ts +0 -72
- package/src/app/api/db/monitoring/route.ts +0 -62
- package/src/app/api/db/multi-query/route.ts +0 -116
- package/src/app/api/db/pool-stats/route.ts +0 -37
- package/src/app/api/db/profile/route.ts +0 -144
- package/src/app/api/db/provider-meta/route.ts +0 -49
- package/src/app/api/db/query/route.ts +0 -50
- package/src/app/api/db/schema/route.ts +0 -47
- package/src/app/api/db/schema-snapshot/route.ts +0 -42
- package/src/app/api/db/test-connection/route.ts +0 -55
- package/src/app/api/db/transaction/route.ts +0 -111
- package/src/app/api/storage/[collection]/route.ts +0 -67
- package/src/app/api/storage/config/route.ts +0 -17
- package/src/app/api/storage/migrate/route.ts +0 -45
- package/src/app/api/storage/route.ts +0 -32
- package/src/app/error.tsx +0 -49
- package/src/app/global-error.tsx +0 -55
- package/src/app/globals.css +0 -146
- package/src/app/icon.svg +0 -42
- package/src/app/layout.tsx +0 -34
- package/src/app/login/login-form.tsx +0 -301
- package/src/app/login/page.tsx +0 -11
- package/src/app/monitoring/page.tsx +0 -8
- package/src/app/not-found.tsx +0 -29
- package/src/app/page.tsx +0 -5
- package/src/components/AIAutopilotPanel.tsx +0 -238
- package/src/components/CodeGenerator.tsx +0 -271
- package/src/components/CommandPalette.tsx +0 -227
- package/src/components/ConnectionModal.tsx +0 -759
- package/src/components/CreateTableModal.tsx +0 -281
- package/src/components/DataCharts.tsx +0 -962
- package/src/components/DataImportModal.tsx +0 -582
- package/src/components/DataProfiler.tsx +0 -335
- package/src/components/DatabaseDocs.tsx +0 -251
- package/src/components/MaskingSettings.tsx +0 -414
- package/src/components/MobileNav.tsx +0 -50
- package/src/components/NL2SQLPanel.tsx +0 -281
- package/src/components/PivotTable.tsx +0 -257
- package/src/components/QueryEditor.tsx +0 -760
- package/src/components/QueryHistory.tsx +0 -344
- package/src/components/QuerySafetyDialog.tsx +0 -290
- package/src/components/ResultsGrid.tsx +0 -644
- package/src/components/SaveQueryModal.tsx +0 -104
- package/src/components/SavedQueries.tsx +0 -128
- package/src/components/SchemaDiagram.tsx +0 -473
- package/src/components/SchemaDiff.tsx +0 -473
- package/src/components/SnapshotTimeline.tsx +0 -116
- package/src/components/Studio.tsx +0 -639
- package/src/components/TestDataGenerator.tsx +0 -261
- package/src/components/VisualExplain.tsx +0 -820
- package/src/components/admin/AdminDashboard.tsx +0 -163
- package/src/components/admin/tabs/AuditTab.tsx +0 -531
- package/src/components/admin/tabs/MonitoringEmbed.tsx +0 -11
- package/src/components/admin/tabs/OperationsTab.tsx +0 -646
- package/src/components/admin/tabs/OverviewTab.tsx +0 -1328
- package/src/components/admin/tabs/SecurityTab.tsx +0 -284
- package/src/components/community-section.tsx +0 -92
- package/src/components/icons/db-icons.tsx +0 -84
- package/src/components/libredb-logo.tsx +0 -61
- package/src/components/monitoring/MonitoringDashboard.tsx +0 -345
- package/src/components/monitoring/tabs/MetricChart.tsx +0 -82
- package/src/components/monitoring/tabs/OverviewTab.tsx +0 -263
- package/src/components/monitoring/tabs/PerformanceTab.tsx +0 -254
- package/src/components/monitoring/tabs/PoolTab.tsx +0 -174
- package/src/components/monitoring/tabs/QueriesTab.tsx +0 -287
- package/src/components/monitoring/tabs/SessionsTab.tsx +0 -316
- package/src/components/monitoring/tabs/StorageTab.tsx +0 -335
- package/src/components/monitoring/tabs/TablesTab.tsx +0 -300
- package/src/components/results-grid/ResultCard.tsx +0 -111
- package/src/components/results-grid/RowDetailSheet.tsx +0 -178
- package/src/components/results-grid/StatsBar.tsx +0 -201
- package/src/components/results-grid/index.ts +0 -1
- package/src/components/results-grid/utils.ts +0 -23
- package/src/components/schema-explorer/ColumnList.tsx +0 -53
- package/src/components/schema-explorer/SchemaExplorer.tsx +0 -182
- package/src/components/schema-explorer/TableItem.tsx +0 -210
- package/src/components/schema-explorer/index.ts +0 -1
- package/src/components/sidebar/ConnectionItem.tsx +0 -105
- package/src/components/sidebar/ConnectionsList.tsx +0 -62
- package/src/components/sidebar/Sidebar.tsx +0 -130
- package/src/components/sidebar/index.ts +0 -2
- package/src/components/studio/BottomPanel.tsx +0 -286
- package/src/components/studio/QueryToolbar.tsx +0 -180
- package/src/components/studio/StudioDesktopHeader.tsx +0 -114
- package/src/components/studio/StudioMobileHeader.tsx +0 -340
- package/src/components/studio/StudioTabBar.tsx +0 -82
- package/src/components/studio/index.ts +0 -5
- package/src/components/ui/accordion.tsx +0 -66
- package/src/components/ui/alert-dialog.tsx +0 -157
- package/src/components/ui/alert.tsx +0 -66
- package/src/components/ui/aspect-ratio.tsx +0 -11
- package/src/components/ui/avatar.tsx +0 -53
- package/src/components/ui/badge.tsx +0 -46
- package/src/components/ui/breadcrumb.tsx +0 -109
- package/src/components/ui/button-group.tsx +0 -83
- package/src/components/ui/button.tsx +0 -60
- package/src/components/ui/calendar.tsx +0 -216
- package/src/components/ui/card.tsx +0 -92
- package/src/components/ui/carousel.tsx +0 -241
- package/src/components/ui/chart.tsx +0 -357
- package/src/components/ui/checkbox.tsx +0 -32
- package/src/components/ui/collapsible.tsx +0 -33
- package/src/components/ui/command.tsx +0 -184
- package/src/components/ui/context-menu.tsx +0 -252
- package/src/components/ui/dialog.tsx +0 -143
- package/src/components/ui/drawer.tsx +0 -135
- package/src/components/ui/dropdown-menu.tsx +0 -257
- package/src/components/ui/empty.tsx +0 -104
- package/src/components/ui/field.tsx +0 -248
- package/src/components/ui/form.tsx +0 -167
- package/src/components/ui/hover-card.tsx +0 -44
- package/src/components/ui/input-group.tsx +0 -170
- package/src/components/ui/input-otp.tsx +0 -77
- package/src/components/ui/input.tsx +0 -21
- package/src/components/ui/item.tsx +0 -193
- package/src/components/ui/kbd.tsx +0 -28
- package/src/components/ui/label.tsx +0 -24
- package/src/components/ui/menubar.tsx +0 -276
- package/src/components/ui/navigation-menu.tsx +0 -168
- package/src/components/ui/pagination.tsx +0 -127
- package/src/components/ui/popover.tsx +0 -48
- package/src/components/ui/progress.tsx +0 -31
- package/src/components/ui/radio-group.tsx +0 -45
- package/src/components/ui/resizable.tsx +0 -56
- package/src/components/ui/scroll-area.tsx +0 -58
- package/src/components/ui/select.tsx +0 -187
- package/src/components/ui/separator.tsx +0 -28
- package/src/components/ui/sheet.tsx +0 -139
- package/src/components/ui/sidebar.tsx +0 -726
- package/src/components/ui/skeleton.tsx +0 -13
- package/src/components/ui/slider.tsx +0 -63
- package/src/components/ui/sonner.tsx +0 -40
- package/src/components/ui/spinner.tsx +0 -16
- package/src/components/ui/switch.tsx +0 -31
- package/src/components/ui/table.tsx +0 -116
- package/src/components/ui/tabs.tsx +0 -66
- package/src/components/ui/textarea.tsx +0 -18
- package/src/components/ui/toggle-group.tsx +0 -83
- package/src/components/ui/toggle.tsx +0 -47
- package/src/components/ui/tooltip.tsx +0 -61
- package/src/exports/components.ts +0 -15
- package/src/exports/index.ts +0 -4
- package/src/exports/providers.ts +0 -4
- package/src/exports/types.ts +0 -26
- package/src/hooks/use-ai-chat.ts +0 -182
- package/src/hooks/use-all-connections.ts +0 -66
- package/src/hooks/use-api-call.ts +0 -71
- package/src/hooks/use-auth.ts +0 -51
- package/src/hooks/use-connection-form.ts +0 -349
- package/src/hooks/use-connection-manager.ts +0 -169
- package/src/hooks/use-connection-payload.ts +0 -15
- package/src/hooks/use-inline-editing.ts +0 -109
- package/src/hooks/use-mobile.ts +0 -20
- package/src/hooks/use-monitoring-data.ts +0 -270
- package/src/hooks/use-provider-metadata.ts +0 -62
- package/src/hooks/use-query-execution.ts +0 -478
- package/src/hooks/use-storage-sync.ts +0 -259
- package/src/hooks/use-tab-manager.ts +0 -231
- package/src/hooks/use-toast.ts +0 -20
- package/src/hooks/use-transaction-control.ts +0 -64
- package/src/lib/api/error-codes.ts +0 -30
- package/src/lib/api/errors.ts +0 -236
- package/src/lib/api/with-error-handler.ts +0 -41
- package/src/lib/audit.ts +0 -105
- package/src/lib/auth.ts +0 -87
- package/src/lib/connection-string-parser.ts +0 -172
- package/src/lib/data-masking.ts +0 -385
- package/src/lib/db/base-provider.ts +0 -325
- package/src/lib/db/errors.ts +0 -317
- package/src/lib/db/factory.ts +0 -324
- package/src/lib/db/index.ts +0 -123
- package/src/lib/db/providers/document/index.ts +0 -6
- package/src/lib/db/providers/document/mongodb.ts +0 -992
- package/src/lib/db/providers/keyvalue/redis.ts +0 -554
- package/src/lib/db/providers/sql/index.ts +0 -11
- package/src/lib/db/providers/sql/sql-base.ts +0 -174
- package/src/lib/db/providers/sql/sqlite.ts +0 -721
- package/src/lib/db/types.ts +0 -437
- package/src/lib/db/utils/pool-manager.ts +0 -287
- package/src/lib/db/utils/query-limiter.ts +0 -239
- package/src/lib/db-ui-config.ts +0 -86
- package/src/lib/editor/mongodb-completions.ts +0 -172
- package/src/lib/editor/sql-completions.ts +0 -280
- package/src/lib/llm/base-provider.ts +0 -117
- package/src/lib/llm/factory.ts +0 -102
- package/src/lib/llm/index.ts +0 -90
- package/src/lib/llm/providers/custom.ts +0 -181
- package/src/lib/llm/providers/gemini.ts +0 -126
- package/src/lib/llm/providers/ollama.ts +0 -154
- package/src/lib/llm/providers/openai.ts +0 -146
- package/src/lib/llm/types.ts +0 -173
- package/src/lib/llm/utils/config.ts +0 -187
- package/src/lib/llm/utils/retry.ts +0 -119
- package/src/lib/llm/utils/streaming.ts +0 -202
- package/src/lib/logger.ts +0 -127
- package/src/lib/monitoring-thresholds.ts +0 -44
- package/src/lib/oidc.ts +0 -262
- package/src/lib/query-generators.ts +0 -61
- package/src/lib/schema-diff/diff-engine.ts +0 -273
- package/src/lib/schema-diff/migration-generator.ts +0 -208
- package/src/lib/schema-diff/types.ts +0 -55
- package/src/lib/seed/config-loader.ts +0 -79
- package/src/lib/seed/connection-filter.ts +0 -49
- package/src/lib/seed/credential-resolver.ts +0 -62
- package/src/lib/seed/index.ts +0 -40
- package/src/lib/seed/resolve-connection.ts +0 -57
- package/src/lib/seed/types.ts +0 -69
- package/src/lib/sql/alias-extractor.ts +0 -267
- package/src/lib/sql/index.ts +0 -8
- package/src/lib/sql/statement-splitter.ts +0 -167
- package/src/lib/sql/types.ts +0 -40
- package/src/lib/ssh/tunnel.ts +0 -142
- package/src/lib/storage/factory.ts +0 -84
- package/src/lib/storage/index.ts +0 -14
- package/src/lib/storage/local-storage.ts +0 -99
- package/src/lib/storage/providers/postgres.ts +0 -225
- package/src/lib/storage/providers/sqlite.ts +0 -153
- package/src/lib/storage/storage-facade.ts +0 -272
- package/src/lib/storage/types.ts +0 -75
- package/src/lib/time-series-buffer.ts +0 -58
- package/src/lib/types.ts +0 -173
- package/src/lib/utils.ts +0 -6
- package/src/proxy.ts +0 -104
- package/src/types/db-drivers.d.ts +0 -23
- package/src/types/html2canvas.d.ts +0 -9
- package/tests/api/admin/audit.test.ts +0 -178
- package/tests/api/admin/fleet-health.test.ts +0 -183
- package/tests/api/ai/autopilot.test.ts +0 -174
- package/tests/api/ai/chat.test.ts +0 -250
- package/tests/api/ai/describe-schema.test.ts +0 -266
- package/tests/api/ai/explain.test.ts +0 -199
- package/tests/api/ai/impact.test.ts +0 -168
- package/tests/api/ai/index-advisor.test.ts +0 -171
- package/tests/api/ai/nl2sql.test.ts +0 -202
- package/tests/api/ai/query-safety.test.ts +0 -196
- package/tests/api/auth/login.test.ts +0 -170
- package/tests/api/auth/logout.test.ts +0 -140
- package/tests/api/auth/me.test.ts +0 -73
- package/tests/api/auth/oidc-callback.test.ts +0 -215
- package/tests/api/auth/oidc-login.test.ts +0 -127
- package/tests/api/db/cancel.test.ts +0 -198
- package/tests/api/db/disconnect.test.ts +0 -124
- package/tests/api/db/health.test.ts +0 -222
- package/tests/api/db/maintenance.test.ts +0 -263
- package/tests/api/db/monitoring.test.ts +0 -221
- package/tests/api/db/multi-query.test.ts +0 -316
- package/tests/api/db/pool-stats.test.ts +0 -135
- package/tests/api/db/profile.test.ts +0 -330
- package/tests/api/db/provider-meta.test.ts +0 -193
- package/tests/api/db/query.test.ts +0 -314
- package/tests/api/db/schema-snapshot.test.ts +0 -170
- package/tests/api/db/schema.test.ts +0 -191
- package/tests/api/db/test-connection.test.ts +0 -185
- package/tests/api/db/transaction.test.ts +0 -314
- package/tests/api/proxy.test.ts +0 -191
- package/tests/api/seed/managed-route.test.ts +0 -113
- package/tests/api/storage/config.test.ts +0 -42
- package/tests/api/storage/storage-routes.test.ts +0 -309
- package/tests/components/AIAutopilotPanel.test.tsx +0 -756
- package/tests/components/AdminPage.test.tsx +0 -33
- package/tests/components/CodeGenerator.test.tsx +0 -182
- package/tests/components/CommandPalette.test.tsx +0 -428
- package/tests/components/CommunitySection.test.tsx +0 -91
- package/tests/components/ConnectionModal.mobile.test.tsx +0 -284
- package/tests/components/ConnectionModal.test.tsx +0 -570
- package/tests/components/CreateTableModal.test.tsx +0 -383
- package/tests/components/DataCharts.test.tsx +0 -739
- package/tests/components/DataImportModal.test.tsx +0 -751
- package/tests/components/DataProfiler.test.tsx +0 -589
- package/tests/components/DatabaseDocs.test.tsx +0 -353
- package/tests/components/LoginPage.test.tsx +0 -163
- package/tests/components/LoginPageOIDC.test.tsx +0 -92
- package/tests/components/MaskingSettings.test.tsx +0 -498
- package/tests/components/MobileNav.test.tsx +0 -30
- package/tests/components/MonitoringPage.test.tsx +0 -32
- package/tests/components/NL2SQLPanel.test.tsx +0 -621
- package/tests/components/Page.test.tsx +0 -33
- package/tests/components/PivotTable.test.tsx +0 -350
- package/tests/components/QueryEditor.test.tsx +0 -1730
- package/tests/components/QueryHistory.test.tsx +0 -572
- package/tests/components/QuerySafetyDialog.test.tsx +0 -586
- package/tests/components/ResultsGrid.test.tsx +0 -804
- package/tests/components/RootLayout.test.tsx +0 -83
- package/tests/components/SaveQueryModal.test.tsx +0 -25
- package/tests/components/SavedQueries.test.tsx +0 -43
- package/tests/components/SchemaDiagram.test.tsx +0 -1034
- package/tests/components/SchemaDiff.test.tsx +0 -906
- package/tests/components/SnapshotTimeline.test.tsx +0 -174
- package/tests/components/Studio.test.tsx +0 -1030
- package/tests/components/TestDataGenerator.test.tsx +0 -291
- package/tests/components/VisualExplain.test.tsx +0 -704
- package/tests/components/admin/AdminDashboard.test.tsx +0 -205
- package/tests/components/admin/AuditTab.test.tsx +0 -220
- package/tests/components/admin/MonitoringEmbed.test.tsx +0 -58
- package/tests/components/admin/OperationsTab.test.tsx +0 -975
- package/tests/components/admin/OverviewTab.test.tsx +0 -254
- package/tests/components/admin/SecurityTab.test.tsx +0 -467
- package/tests/components/monitoring/MetricChart.test.tsx +0 -111
- package/tests/components/monitoring/MonitoringDashboard.test.tsx +0 -259
- package/tests/components/monitoring/OverviewTab.test.tsx +0 -78
- package/tests/components/monitoring/PerformanceTab.test.tsx +0 -87
- package/tests/components/monitoring/PoolTab.test.tsx +0 -42
- package/tests/components/monitoring/QueriesTab.test.tsx +0 -80
- package/tests/components/monitoring/SessionsTab.test.tsx +0 -154
- package/tests/components/monitoring/StorageTab.test.tsx +0 -127
- package/tests/components/monitoring/TablesTab.test.tsx +0 -153
- package/tests/components/results-grid/ResultCard.test.tsx +0 -105
- package/tests/components/results-grid/RowDetailSheet.test.tsx +0 -308
- package/tests/components/results-grid/StatsBar.test.tsx +0 -162
- package/tests/components/schema-explorer/ColumnList.test.tsx +0 -151
- package/tests/components/schema-explorer/SchemaExplorer.test.tsx +0 -461
- package/tests/components/schema-explorer/TableItem.test.tsx +0 -415
- package/tests/components/sidebar/ConnectionItem.test.tsx +0 -201
- package/tests/components/sidebar/ConnectionsList.test.tsx +0 -176
- package/tests/components/sidebar/Sidebar.test.tsx +0 -187
- package/tests/components/studio/BottomPanel.test.tsx +0 -383
- package/tests/components/studio/QueryToolbar.test.tsx +0 -321
- package/tests/components/studio/StudioDesktopHeader.test.tsx +0 -377
- package/tests/components/studio/StudioMobileHeader.test.tsx +0 -198
- package/tests/components/studio/StudioTabBar.test.tsx +0 -331
- package/tests/fixtures/connections.ts +0 -96
- package/tests/fixtures/masking-configs.ts +0 -86
- package/tests/fixtures/query-results.ts +0 -71
- package/tests/fixtures/schemas.ts +0 -64
- package/tests/fixtures/seed-connections/invalid-config.yaml +0 -7
- package/tests/fixtures/seed-connections/minimal-config.yaml +0 -8
- package/tests/fixtures/seed-connections/mixed-credentials.yaml +0 -23
- package/tests/fixtures/seed-connections/multi-role-config.yaml +0 -30
- package/tests/fixtures/seed-connections/valid-config.json +0 -15
- package/tests/fixtures/seed-connections/valid-config.yaml +0 -51
- package/tests/helpers/mock-fetch.ts +0 -59
- package/tests/helpers/mock-monaco.ts +0 -112
- package/tests/helpers/mock-navigation.ts +0 -28
- package/tests/helpers/mock-next.ts +0 -80
- package/tests/helpers/mock-provider.ts +0 -133
- package/tests/helpers/mock-sonner.ts +0 -29
- package/tests/helpers/render-with-providers.tsx +0 -19
- package/tests/hooks/use-ai-chat.test.ts +0 -600
- package/tests/hooks/use-auth.test.ts +0 -371
- package/tests/hooks/use-connection-form.test.ts +0 -743
- package/tests/hooks/use-connection-manager.test.ts +0 -466
- package/tests/hooks/use-inline-editing.test.ts +0 -321
- package/tests/hooks/use-mobile.test.ts +0 -177
- package/tests/hooks/use-monitoring-data.test.ts +0 -819
- package/tests/hooks/use-provider-metadata.test.ts +0 -228
- package/tests/hooks/use-query-execution.test.ts +0 -1212
- package/tests/hooks/use-tab-manager.test.ts +0 -756
- package/tests/hooks/use-toast.test.ts +0 -74
- package/tests/hooks/use-transaction-control.test.ts +0 -211
- package/tests/integration/db/mongodb-provider.test.ts +0 -698
- package/tests/integration/db/mssql-provider.test.ts +0 -840
- package/tests/integration/db/mysql-provider.test.ts +0 -872
- package/tests/integration/db/oracle-provider.test.ts +0 -843
- package/tests/integration/db/postgres-provider.test.ts +0 -1382
- package/tests/integration/db/redis-provider.test.ts +0 -526
- package/tests/integration/db/sqlite-provider.test.ts +0 -480
- package/tests/integration/seed/seed-pipeline.test.ts +0 -102
- package/tests/isolated/factory-singleton.test.ts +0 -150
- package/tests/isolated/use-storage-sync.test.ts +0 -389
- package/tests/run-components.sh +0 -196
- package/tests/setup-dom.ts +0 -58
- package/tests/setup.ts +0 -40
- package/tests/unit/api-errors.test.ts +0 -210
- package/tests/unit/code-generator-functions.test.ts +0 -271
- package/tests/unit/components/column-list.test.tsx +0 -190
- package/tests/unit/components/data-import-modal.test.tsx +0 -441
- package/tests/unit/components/studio-mobile-header.test.tsx +0 -327
- package/tests/unit/data-charts-functions.test.ts +0 -496
- package/tests/unit/data-import-functions.test.ts +0 -320
- package/tests/unit/data-import-utils.test.ts +0 -125
- package/tests/unit/db/base-provider.test.ts +0 -517
- package/tests/unit/db/errors.test.ts +0 -403
- package/tests/unit/db/factory.test.ts +0 -436
- package/tests/unit/db/pool-manager.test.ts +0 -440
- package/tests/unit/db/query-limiter.test.ts +0 -387
- package/tests/unit/db/sql-base.test.ts +0 -438
- package/tests/unit/lib/api/error-codes.test.ts +0 -39
- package/tests/unit/lib/audit.test.ts +0 -326
- package/tests/unit/lib/auth.test.ts +0 -146
- package/tests/unit/lib/connection-string-parser.test.ts +0 -424
- package/tests/unit/lib/data-masking.test.ts +0 -583
- package/tests/unit/lib/db-icons.test.tsx +0 -41
- package/tests/unit/lib/monitoring-thresholds.test.ts +0 -133
- package/tests/unit/lib/oidc.test.ts +0 -509
- package/tests/unit/lib/query-generators.test.ts +0 -127
- package/tests/unit/lib/storage/factory.test.ts +0 -71
- package/tests/unit/lib/storage/local-storage.test.ts +0 -114
- package/tests/unit/lib/storage/providers/postgres.test.ts +0 -312
- package/tests/unit/lib/storage/providers/sqlite.test.ts +0 -232
- package/tests/unit/lib/storage/storage-facade-extended.test.ts +0 -331
- package/tests/unit/lib/storage/storage-facade.test.ts +0 -184
- package/tests/unit/lib/storage.test.ts +0 -317
- package/tests/unit/lib/time-series-buffer.test.ts +0 -212
- package/tests/unit/lib/utils.test.ts +0 -24
- package/tests/unit/llm/base-provider.test.ts +0 -238
- package/tests/unit/llm/config.test.ts +0 -262
- package/tests/unit/llm/custom-provider.test.ts +0 -281
- package/tests/unit/llm/gemini-provider.test.ts +0 -248
- package/tests/unit/llm/llm-factory.test.ts +0 -155
- package/tests/unit/llm/ollama-provider.test.ts +0 -288
- package/tests/unit/llm/openai-provider.test.ts +0 -324
- package/tests/unit/llm/retry.test.ts +0 -180
- package/tests/unit/llm/streaming.test.ts +0 -355
- package/tests/unit/logger.test.ts +0 -198
- package/tests/unit/mongodb-completions.test.ts +0 -516
- package/tests/unit/pivot-table-functions.test.ts +0 -76
- package/tests/unit/query-cancelled-error.test.ts +0 -81
- package/tests/unit/schema-diff/diff-engine.test.ts +0 -367
- package/tests/unit/schema-diff/migration-generator.test.ts +0 -513
- package/tests/unit/seed/config-loader.test.ts +0 -73
- package/tests/unit/seed/connection-filter.test.ts +0 -91
- package/tests/unit/seed/credential-resolver.test.ts +0 -85
- package/tests/unit/seed/index.test.ts +0 -72
- package/tests/unit/seed/resolve-connection.test.ts +0 -74
- package/tests/unit/seed/types.test.ts +0 -129
- package/tests/unit/sql/alias-extractor.test.ts +0 -444
- package/tests/unit/sql/statement-splitter.test.ts +0 -348
- package/tests/unit/sql-completions.test.ts +0 -463
- package/tests/unit/ssh-tunnel.test.ts +0 -465
- package/tsconfig.json +0 -42
package/docs/API_DOCS.md
DELETED
|
@@ -1,875 +0,0 @@
|
|
|
1
|
-
# LibreDB Studio API Documentation
|
|
2
|
-
|
|
3
|
-
> **Version:** 0.5.2
|
|
4
|
-
> **Base URL:** `https://your-domain.com` or `http://localhost:3000`
|
|
5
|
-
> **Content-Type:** `application/json`
|
|
6
|
-
|
|
7
|
-
## Table of Contents
|
|
8
|
-
|
|
9
|
-
- [Overview](#overview)
|
|
10
|
-
- [Authentication](#authentication)
|
|
11
|
-
- [API Endpoints](#api-endpoints)
|
|
12
|
-
- [Auth API](#auth-api)
|
|
13
|
-
- [Database API](#database-api)
|
|
14
|
-
- [AI API](#ai-api)
|
|
15
|
-
- [Data Types](#data-types)
|
|
16
|
-
- [Error Handling](#error-handling)
|
|
17
|
-
- [Rate Limiting](#rate-limiting)
|
|
18
|
-
- [Examples](#examples)
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Overview
|
|
23
|
-
|
|
24
|
-
LibreDB Studio provides a RESTful API for database management operations. The API supports multiple database types including PostgreSQL, MySQL, SQLite, MongoDB
|
|
25
|
-
|
|
26
|
-
### Key Features
|
|
27
|
-
|
|
28
|
-
- **JWT Authentication** - Secure token-based authentication stored in HTTP-only cookies
|
|
29
|
-
- **Multi-Database Support** - PostgreSQL, MySQL, SQLite, MongoDB
|
|
30
|
-
- **AI-Powered Queries** - Natural language to SQL with streaming responses
|
|
31
|
-
- **Real-time Health Monitoring** - Database metrics and performance insights
|
|
32
|
-
|
|
33
|
-
### Request Format
|
|
34
|
-
|
|
35
|
-
All API requests must include:
|
|
36
|
-
- `Content-Type: application/json` header
|
|
37
|
-
- Valid authentication cookie (except public endpoints)
|
|
38
|
-
|
|
39
|
-
### Response Format
|
|
40
|
-
|
|
41
|
-
All responses are JSON with the following structure:
|
|
42
|
-
|
|
43
|
-
```json
|
|
44
|
-
// Success
|
|
45
|
-
{
|
|
46
|
-
"data": { ... },
|
|
47
|
-
"status": "success"
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Error
|
|
51
|
-
{
|
|
52
|
-
"error": "Error message",
|
|
53
|
-
"code": "ERROR_CODE",
|
|
54
|
-
"status": 400
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## Authentication
|
|
61
|
-
|
|
62
|
-
LibreDB Studio uses JWT (JSON Web Tokens) for authentication. Tokens are stored in HTTP-only cookies for security.
|
|
63
|
-
|
|
64
|
-
### Authentication Flow
|
|
65
|
-
|
|
66
|
-
1. Client sends credentials to `/api/auth/login`
|
|
67
|
-
2. Server validates and returns JWT in `auth-token` cookie
|
|
68
|
-
3. Client includes cookie in subsequent requests
|
|
69
|
-
4. Middleware validates token on protected routes
|
|
70
|
-
|
|
71
|
-
### Roles
|
|
72
|
-
|
|
73
|
-
| Role | Access Level |
|
|
74
|
-
|------|--------------|
|
|
75
|
-
| `admin` | Full access including maintenance operations and admin panel |
|
|
76
|
-
| `user` | Query execution, schema viewing (no maintenance) |
|
|
77
|
-
|
|
78
|
-
### Public Endpoints (No Auth Required)
|
|
79
|
-
|
|
80
|
-
- `POST /api/auth/login`
|
|
81
|
-
- `POST /api/auth/logout`
|
|
82
|
-
- `GET /api/db/health` (service health check only)
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## API Endpoints
|
|
87
|
-
|
|
88
|
-
### Auth API
|
|
89
|
-
|
|
90
|
-
#### POST /api/auth/login
|
|
91
|
-
|
|
92
|
-
Authenticate user and create session.
|
|
93
|
-
|
|
94
|
-
**Request:**
|
|
95
|
-
```json
|
|
96
|
-
{
|
|
97
|
-
"password": "your-password"
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
**Response (200 OK):**
|
|
102
|
-
```json
|
|
103
|
-
{
|
|
104
|
-
"success": true,
|
|
105
|
-
"role": "admin"
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**Response (401 Unauthorized):**
|
|
110
|
-
```json
|
|
111
|
-
{
|
|
112
|
-
"success": false,
|
|
113
|
-
"message": "Invalid password"
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
**Notes:**
|
|
118
|
-
- Password is matched against `ADMIN_PASSWORD` or `USER_PASSWORD` environment variables
|
|
119
|
-
- Sets `auth-token` HTTP-only cookie on success
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
#### POST /api/auth/logout
|
|
124
|
-
|
|
125
|
-
Terminate current session.
|
|
126
|
-
|
|
127
|
-
**Request:** No body required
|
|
128
|
-
|
|
129
|
-
**Response (200 OK):**
|
|
130
|
-
```json
|
|
131
|
-
{
|
|
132
|
-
"success": true
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
**Notes:**
|
|
137
|
-
- Clears the `auth-token` cookie
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
#### GET /api/auth/me
|
|
142
|
-
|
|
143
|
-
Get current authenticated user information.
|
|
144
|
-
|
|
145
|
-
**Response (200 OK):**
|
|
146
|
-
```json
|
|
147
|
-
{
|
|
148
|
-
"authenticated": true,
|
|
149
|
-
"user": {
|
|
150
|
-
"role": "admin",
|
|
151
|
-
"iat": 1703345678,
|
|
152
|
-
"exp": 1703432078
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
**Response (401 Unauthorized):**
|
|
158
|
-
```json
|
|
159
|
-
{
|
|
160
|
-
"authenticated": false
|
|
161
|
-
}
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
### Database API
|
|
167
|
-
|
|
168
|
-
#### GET /api/db/health
|
|
169
|
-
|
|
170
|
-
Simple health check for load balancers and container orchestration.
|
|
171
|
-
|
|
172
|
-
**Authentication:** Not required
|
|
173
|
-
|
|
174
|
-
**Response (200 OK):**
|
|
175
|
-
```json
|
|
176
|
-
{
|
|
177
|
-
"status": "healthy",
|
|
178
|
-
"timestamp": "2025-12-24T12:00:00.000Z",
|
|
179
|
-
"service": "libredb-studio"
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
---
|
|
184
|
-
|
|
185
|
-
#### POST /api/db/health
|
|
186
|
-
|
|
187
|
-
Detailed health check for a specific database connection.
|
|
188
|
-
|
|
189
|
-
**Authentication:** Required
|
|
190
|
-
|
|
191
|
-
**Request:**
|
|
192
|
-
```json
|
|
193
|
-
{
|
|
194
|
-
"connection": {
|
|
195
|
-
"id": "conn-123",
|
|
196
|
-
"name": "Production DB",
|
|
197
|
-
"type": "postgres",
|
|
198
|
-
"host": "localhost",
|
|
199
|
-
"port": 5432,
|
|
200
|
-
"database": "mydb",
|
|
201
|
-
"user": "admin",
|
|
202
|
-
"password": "secret"
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
**Response (200 OK):**
|
|
208
|
-
```json
|
|
209
|
-
{
|
|
210
|
-
"activeConnections": 5,
|
|
211
|
-
"databaseSize": "256 MB",
|
|
212
|
-
"cacheHitRatio": "99.2%",
|
|
213
|
-
"slowQueries": [
|
|
214
|
-
{
|
|
215
|
-
"query": "SELECT * FROM large_table...",
|
|
216
|
-
"calls": 150,
|
|
217
|
-
"avgTime": "245ms"
|
|
218
|
-
}
|
|
219
|
-
],
|
|
220
|
-
"activeSessions": [
|
|
221
|
-
{
|
|
222
|
-
"pid": 12345,
|
|
223
|
-
"user": "admin",
|
|
224
|
-
"database": "mydb",
|
|
225
|
-
"state": "active",
|
|
226
|
-
"query": "SELECT * FROM users",
|
|
227
|
-
"duration": "1.5s"
|
|
228
|
-
}
|
|
229
|
-
]
|
|
230
|
-
}
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
**Response (503 Service Unavailable):**
|
|
234
|
-
```json
|
|
235
|
-
{
|
|
236
|
-
"error": "Connection failed: timeout",
|
|
237
|
-
"activeConnections": 0,
|
|
238
|
-
"databaseSize": "N/A",
|
|
239
|
-
"cacheHitRatio": "N/A",
|
|
240
|
-
"slowQueries": [],
|
|
241
|
-
"activeSessions": []
|
|
242
|
-
}
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
#### POST /api/db/query
|
|
248
|
-
|
|
249
|
-
Execute SQL query on connected database.
|
|
250
|
-
|
|
251
|
-
**Authentication:** Required
|
|
252
|
-
|
|
253
|
-
**Request:**
|
|
254
|
-
```json
|
|
255
|
-
{
|
|
256
|
-
"connection": {
|
|
257
|
-
"id": "conn-123",
|
|
258
|
-
"name": "My Database",
|
|
259
|
-
"type": "postgres",
|
|
260
|
-
"host": "localhost",
|
|
261
|
-
"port": 5432,
|
|
262
|
-
"database": "mydb",
|
|
263
|
-
"user": "admin",
|
|
264
|
-
"password": "secret"
|
|
265
|
-
},
|
|
266
|
-
"sql": "SELECT id, name, email FROM users WHERE active = true LIMIT 100"
|
|
267
|
-
}
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
**Response (200 OK):**
|
|
271
|
-
```json
|
|
272
|
-
{
|
|
273
|
-
"rows": [
|
|
274
|
-
{ "id": 1, "name": "John Doe", "email": "john@example.com" },
|
|
275
|
-
{ "id": 2, "name": "Jane Smith", "email": "jane@example.com" }
|
|
276
|
-
],
|
|
277
|
-
"fields": ["id", "name", "email"],
|
|
278
|
-
"rowCount": 2,
|
|
279
|
-
"executionTime": 12
|
|
280
|
-
}
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
**Response (400 Bad Request):**
|
|
284
|
-
```json
|
|
285
|
-
{
|
|
286
|
-
"error": "syntax error at or near \"SELEC\"",
|
|
287
|
-
"code": "QUERY_ERROR"
|
|
288
|
-
}
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
**Response (408 Request Timeout):**
|
|
292
|
-
```json
|
|
293
|
-
{
|
|
294
|
-
"error": "Query timed out. Please try a simpler query or increase timeout."
|
|
295
|
-
}
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
##### MongoDB Query Format
|
|
299
|
-
|
|
300
|
-
For MongoDB connections, the `sql` field should contain a JSON query:
|
|
301
|
-
|
|
302
|
-
```json
|
|
303
|
-
{
|
|
304
|
-
"connection": {
|
|
305
|
-
"type": "mongodb",
|
|
306
|
-
"connectionString": "mongodb://localhost:27017/mydb"
|
|
307
|
-
},
|
|
308
|
-
"sql": "{\"collection\":\"users\",\"operation\":\"find\",\"filter\":{\"active\":true},\"options\":{\"limit\":50}}"
|
|
309
|
-
}
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
**Supported MongoDB Operations:**
|
|
313
|
-
- `find` - Query documents
|
|
314
|
-
- `findOne` - Get single document
|
|
315
|
-
- `insertOne` - Insert document
|
|
316
|
-
- `insertMany` - Insert multiple documents
|
|
317
|
-
- `updateOne` - Update single document
|
|
318
|
-
- `updateMany` - Update multiple documents
|
|
319
|
-
- `deleteOne` - Delete single document
|
|
320
|
-
- `deleteMany` - Delete multiple documents
|
|
321
|
-
- `aggregate` - Aggregation pipeline
|
|
322
|
-
- `countDocuments` - Count documents
|
|
323
|
-
|
|
324
|
-
---
|
|
325
|
-
|
|
326
|
-
#### POST /api/db/schema
|
|
327
|
-
|
|
328
|
-
Get database schema including tables, columns, indexes, and foreign keys.
|
|
329
|
-
|
|
330
|
-
**Authentication:** Required
|
|
331
|
-
|
|
332
|
-
**Request:**
|
|
333
|
-
```json
|
|
334
|
-
{
|
|
335
|
-
"id": "conn-123",
|
|
336
|
-
"name": "My Database",
|
|
337
|
-
"type": "postgres",
|
|
338
|
-
"host": "localhost",
|
|
339
|
-
"port": 5432,
|
|
340
|
-
"database": "mydb",
|
|
341
|
-
"user": "admin",
|
|
342
|
-
"password": "secret"
|
|
343
|
-
}
|
|
344
|
-
```
|
|
345
|
-
|
|
346
|
-
**Response (200 OK):**
|
|
347
|
-
```json
|
|
348
|
-
[
|
|
349
|
-
{
|
|
350
|
-
"name": "users",
|
|
351
|
-
"rowCount": 1500,
|
|
352
|
-
"size": "2.4 MB",
|
|
353
|
-
"columns": [
|
|
354
|
-
{
|
|
355
|
-
"name": "id",
|
|
356
|
-
"type": "integer",
|
|
357
|
-
"nullable": false,
|
|
358
|
-
"isPrimary": true,
|
|
359
|
-
"defaultValue": "nextval('users_id_seq')"
|
|
360
|
-
},
|
|
361
|
-
{
|
|
362
|
-
"name": "email",
|
|
363
|
-
"type": "varchar(255)",
|
|
364
|
-
"nullable": false,
|
|
365
|
-
"isPrimary": false
|
|
366
|
-
},
|
|
367
|
-
{
|
|
368
|
-
"name": "created_at",
|
|
369
|
-
"type": "timestamp",
|
|
370
|
-
"nullable": true,
|
|
371
|
-
"isPrimary": false,
|
|
372
|
-
"defaultValue": "CURRENT_TIMESTAMP"
|
|
373
|
-
}
|
|
374
|
-
],
|
|
375
|
-
"indexes": [
|
|
376
|
-
{
|
|
377
|
-
"name": "users_pkey",
|
|
378
|
-
"columns": ["id"],
|
|
379
|
-
"unique": true
|
|
380
|
-
},
|
|
381
|
-
{
|
|
382
|
-
"name": "users_email_idx",
|
|
383
|
-
"columns": ["email"],
|
|
384
|
-
"unique": true
|
|
385
|
-
}
|
|
386
|
-
],
|
|
387
|
-
"foreignKeys": [
|
|
388
|
-
{
|
|
389
|
-
"columnName": "org_id",
|
|
390
|
-
"referencedTable": "organizations",
|
|
391
|
-
"referencedColumn": "id"
|
|
392
|
-
}
|
|
393
|
-
]
|
|
394
|
-
}
|
|
395
|
-
]
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
**Response (503 Service Unavailable):**
|
|
399
|
-
```json
|
|
400
|
-
{
|
|
401
|
-
"error": "Connection failed: ECONNREFUSED"
|
|
402
|
-
}
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
---
|
|
406
|
-
|
|
407
|
-
#### POST /api/db/maintenance
|
|
408
|
-
|
|
409
|
-
Run database maintenance operations.
|
|
410
|
-
|
|
411
|
-
**Authentication:** Required (Admin only)
|
|
412
|
-
|
|
413
|
-
**Request:**
|
|
414
|
-
```json
|
|
415
|
-
{
|
|
416
|
-
"connection": {
|
|
417
|
-
"id": "conn-123",
|
|
418
|
-
"name": "Production DB",
|
|
419
|
-
"type": "postgres",
|
|
420
|
-
"host": "localhost",
|
|
421
|
-
"port": 5432,
|
|
422
|
-
"database": "mydb",
|
|
423
|
-
"user": "admin",
|
|
424
|
-
"password": "secret"
|
|
425
|
-
},
|
|
426
|
-
"type": "vacuum",
|
|
427
|
-
"target": "users"
|
|
428
|
-
}
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
**Parameters:**
|
|
432
|
-
|
|
433
|
-
| Field | Type | Required | Description |
|
|
434
|
-
|-------|------|----------|-------------|
|
|
435
|
-
| `connection` | object | Yes | Database connection configuration |
|
|
436
|
-
| `type` | string | Yes | Maintenance operation type |
|
|
437
|
-
| `target` | string | No | Target table name or PID (for kill) |
|
|
438
|
-
|
|
439
|
-
**Maintenance Types:**
|
|
440
|
-
|
|
441
|
-
| Type | PostgreSQL | MySQL | SQLite | Description |
|
|
442
|
-
|------|------------|-------|--------|-------------|
|
|
443
|
-
| `vacuum` | VACUUM ANALYZE | OPTIMIZE | VACUUM | Reclaim storage and update statistics |
|
|
444
|
-
| `analyze` | ANALYZE | ANALYZE | ANALYZE | Update query planner statistics |
|
|
445
|
-
| `reindex` | REINDEX | - | REINDEX | Rebuild indexes |
|
|
446
|
-
| `optimize` | - | OPTIMIZE | - | Optimize table (MySQL only) |
|
|
447
|
-
| `check` | - | CHECK | PRAGMA integrity_check | Check table integrity |
|
|
448
|
-
| `kill` | pg_terminate_backend | KILL | - | Terminate a session by PID |
|
|
449
|
-
|
|
450
|
-
**Response (200 OK):**
|
|
451
|
-
```json
|
|
452
|
-
{
|
|
453
|
-
"success": true,
|
|
454
|
-
"executionTime": 1234,
|
|
455
|
-
"message": "VACUUM completed successfully"
|
|
456
|
-
}
|
|
457
|
-
```
|
|
458
|
-
|
|
459
|
-
**Response (403 Forbidden):**
|
|
460
|
-
```json
|
|
461
|
-
{
|
|
462
|
-
"error": "Unauthorized. Admin access required."
|
|
463
|
-
}
|
|
464
|
-
```
|
|
465
|
-
|
|
466
|
-
**Response (400 Bad Request):**
|
|
467
|
-
```json
|
|
468
|
-
{
|
|
469
|
-
"error": "Invalid maintenance type. Valid types: vacuum, analyze, reindex, kill, optimize, check"
|
|
470
|
-
}
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
---
|
|
474
|
-
|
|
475
|
-
### AI API
|
|
476
|
-
|
|
477
|
-
#### POST /api/ai/chat
|
|
478
|
-
|
|
479
|
-
Generate SQL queries using AI with streaming response.
|
|
480
|
-
|
|
481
|
-
**Authentication:** Required
|
|
482
|
-
|
|
483
|
-
**Request:**
|
|
484
|
-
```json
|
|
485
|
-
{
|
|
486
|
-
"prompt": "Show me all users who signed up in the last 30 days",
|
|
487
|
-
"databaseType": "postgres",
|
|
488
|
-
"schemaContext": "Table: users (id, email, name, created_at, status)"
|
|
489
|
-
}
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
**Parameters:**
|
|
493
|
-
|
|
494
|
-
| Field | Type | Required | Description |
|
|
495
|
-
|-------|------|----------|-------------|
|
|
496
|
-
| `prompt` | string | Yes | Natural language query or question |
|
|
497
|
-
| `databaseType` | string | No | Database type for syntax (default: postgres) |
|
|
498
|
-
| `schemaContext` | string | No | Schema info for context-aware queries |
|
|
499
|
-
|
|
500
|
-
**Response (200 OK - Streaming):**
|
|
501
|
-
|
|
502
|
-
Returns `text/plain` with chunked transfer encoding. The response streams the generated SQL:
|
|
503
|
-
|
|
504
|
-
```sql
|
|
505
|
-
SELECT id, email, name, created_at
|
|
506
|
-
FROM users
|
|
507
|
-
WHERE created_at >= NOW() - INTERVAL '30 days'
|
|
508
|
-
ORDER BY created_at DESC;
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
**Response (401 Unauthorized):**
|
|
512
|
-
```json
|
|
513
|
-
{
|
|
514
|
-
"error": "Invalid API key. Please check your configuration."
|
|
515
|
-
}
|
|
516
|
-
```
|
|
517
|
-
|
|
518
|
-
**Response (429 Too Many Requests):**
|
|
519
|
-
```json
|
|
520
|
-
{
|
|
521
|
-
"error": "AI usage limit reached. Please try again later or check your billing status."
|
|
522
|
-
}
|
|
523
|
-
```
|
|
524
|
-
|
|
525
|
-
**Response (400 Bad Request):**
|
|
526
|
-
```json
|
|
527
|
-
{
|
|
528
|
-
"error": "The prompt was blocked by safety filters."
|
|
529
|
-
}
|
|
530
|
-
```
|
|
531
|
-
|
|
532
|
-
**LLM Configuration:**
|
|
533
|
-
|
|
534
|
-
Configure AI provider via environment variables:
|
|
535
|
-
|
|
536
|
-
```env
|
|
537
|
-
LLM_PROVIDER=gemini # gemini, openai, ollama, custom
|
|
538
|
-
LLM_API_KEY=your-api-key
|
|
539
|
-
LLM_MODEL=gemini-2.0-flash # Model name
|
|
540
|
-
LLM_API_URL=http://localhost:11434/v1 # For ollama/custom
|
|
541
|
-
```
|
|
542
|
-
|
|
543
|
-
---
|
|
544
|
-
|
|
545
|
-
## Data Types
|
|
546
|
-
|
|
547
|
-
### DatabaseConnection
|
|
548
|
-
|
|
549
|
-
```typescript
|
|
550
|
-
interface DatabaseConnection {
|
|
551
|
-
id: string; // Unique identifier
|
|
552
|
-
name: string; // Display name
|
|
553
|
-
type: DatabaseType; // Database type
|
|
554
|
-
host?: string; // Hostname or IP
|
|
555
|
-
port?: number; // Port number
|
|
556
|
-
user?: string; // Username
|
|
557
|
-
password?: string; // Password
|
|
558
|
-
database?: string; // Database name
|
|
559
|
-
connectionString?: string; // Full connection string (alternative)
|
|
560
|
-
createdAt: Date; // Creation timestamp
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
type DatabaseType = 'postgres' | 'mysql' | 'sqlite' | 'mongodb' | 'redis' | 'oracle' | 'mssql';
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
### TableSchema
|
|
567
|
-
|
|
568
|
-
```typescript
|
|
569
|
-
interface TableSchema {
|
|
570
|
-
name: string; // Table name
|
|
571
|
-
columns: ColumnSchema[]; // Column definitions
|
|
572
|
-
indexes: IndexSchema[]; // Index definitions
|
|
573
|
-
foreignKeys?: ForeignKeySchema[];
|
|
574
|
-
rowCount?: number; // Approximate row count
|
|
575
|
-
size?: string; // Table size (e.g., "2.4 MB")
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
interface ColumnSchema {
|
|
579
|
-
name: string; // Column name
|
|
580
|
-
type: string; // Data type
|
|
581
|
-
nullable: boolean; // Allows NULL
|
|
582
|
-
isPrimary: boolean; // Primary key
|
|
583
|
-
defaultValue?: string; // Default value
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
interface IndexSchema {
|
|
587
|
-
name: string; // Index name
|
|
588
|
-
columns: string[]; // Indexed columns
|
|
589
|
-
unique: boolean; // Unique constraint
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
interface ForeignKeySchema {
|
|
593
|
-
columnName: string; // Local column
|
|
594
|
-
referencedTable: string; // Foreign table
|
|
595
|
-
referencedColumn: string; // Foreign column
|
|
596
|
-
}
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
### QueryResult
|
|
600
|
-
|
|
601
|
-
```typescript
|
|
602
|
-
interface QueryResult {
|
|
603
|
-
rows: any[]; // Result rows
|
|
604
|
-
fields: string[]; // Column names
|
|
605
|
-
rowCount: number; // Number of rows returned
|
|
606
|
-
executionTime: number; // Execution time in ms
|
|
607
|
-
explainPlan?: any; // Query execution plan (if requested)
|
|
608
|
-
}
|
|
609
|
-
```
|
|
610
|
-
|
|
611
|
-
### HealthInfo
|
|
612
|
-
|
|
613
|
-
```typescript
|
|
614
|
-
interface HealthInfo {
|
|
615
|
-
activeConnections: number;
|
|
616
|
-
databaseSize: string;
|
|
617
|
-
cacheHitRatio: string;
|
|
618
|
-
slowQueries: SlowQuery[];
|
|
619
|
-
activeSessions: ActiveSession[];
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
interface SlowQuery {
|
|
623
|
-
query: string; // Query text (truncated)
|
|
624
|
-
calls: number; // Number of executions
|
|
625
|
-
avgTime: string; // Average execution time
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
interface ActiveSession {
|
|
629
|
-
pid: number | string; // Process/Session ID
|
|
630
|
-
user: string; // Database user
|
|
631
|
-
database: string; // Database name
|
|
632
|
-
state: string; // Session state
|
|
633
|
-
query: string; // Current query
|
|
634
|
-
duration: string; // Query duration
|
|
635
|
-
}
|
|
636
|
-
```
|
|
637
|
-
|
|
638
|
-
---
|
|
639
|
-
|
|
640
|
-
## Error Handling
|
|
641
|
-
|
|
642
|
-
### HTTP Status Codes
|
|
643
|
-
|
|
644
|
-
| Code | Description |
|
|
645
|
-
|------|-------------|
|
|
646
|
-
| `200` | Success |
|
|
647
|
-
| `400` | Bad Request - Invalid parameters or query syntax |
|
|
648
|
-
| `401` | Unauthorized - Missing or invalid authentication |
|
|
649
|
-
| `403` | Forbidden - Insufficient permissions |
|
|
650
|
-
| `408` | Request Timeout - Query exceeded time limit |
|
|
651
|
-
| `429` | Too Many Requests - Rate limit exceeded (AI) |
|
|
652
|
-
| `500` | Internal Server Error |
|
|
653
|
-
| `503` | Service Unavailable - Database connection failed |
|
|
654
|
-
|
|
655
|
-
### Error Response Format
|
|
656
|
-
|
|
657
|
-
```json
|
|
658
|
-
{
|
|
659
|
-
"error": "Human-readable error message",
|
|
660
|
-
"code": "ERROR_CODE"
|
|
661
|
-
}
|
|
662
|
-
```
|
|
663
|
-
|
|
664
|
-
### Error Codes
|
|
665
|
-
|
|
666
|
-
| Code | Description |
|
|
667
|
-
|------|-------------|
|
|
668
|
-
| `QUERY_ERROR` | SQL syntax or execution error |
|
|
669
|
-
| `CONNECTION_ERROR` | Database connection failed |
|
|
670
|
-
| `TIMEOUT_ERROR` | Query exceeded time limit |
|
|
671
|
-
| `AUTH_ERROR` | Authentication failed |
|
|
672
|
-
| `CONFIG_ERROR` | Invalid configuration |
|
|
673
|
-
|
|
674
|
-
---
|
|
675
|
-
|
|
676
|
-
## Rate Limiting
|
|
677
|
-
|
|
678
|
-
### AI Endpoint
|
|
679
|
-
|
|
680
|
-
The AI chat endpoint (`/api/ai/chat`) is subject to rate limits from the underlying LLM provider:
|
|
681
|
-
|
|
682
|
-
| Provider | Limits |
|
|
683
|
-
|----------|--------|
|
|
684
|
-
| Gemini | 15 RPM (free tier) |
|
|
685
|
-
| OpenAI | Varies by plan |
|
|
686
|
-
| Ollama | No limits (local) |
|
|
687
|
-
|
|
688
|
-
### Database Operations
|
|
689
|
-
|
|
690
|
-
Database operations have a default timeout of 60 seconds (`DEFAULT_QUERY_TIMEOUT`).
|
|
691
|
-
|
|
692
|
-
---
|
|
693
|
-
|
|
694
|
-
## Examples
|
|
695
|
-
|
|
696
|
-
### cURL Examples
|
|
697
|
-
|
|
698
|
-
#### Login
|
|
699
|
-
```bash
|
|
700
|
-
curl -X POST http://localhost:3000/api/auth/login \
|
|
701
|
-
-H "Content-Type: application/json" \
|
|
702
|
-
-d '{"password": "admin123"}' \
|
|
703
|
-
-c cookies.txt
|
|
704
|
-
```
|
|
705
|
-
|
|
706
|
-
#### Execute Query
|
|
707
|
-
```bash
|
|
708
|
-
curl -X POST http://localhost:3000/api/db/query \
|
|
709
|
-
-H "Content-Type: application/json" \
|
|
710
|
-
-b cookies.txt \
|
|
711
|
-
-d '{
|
|
712
|
-
"connection": {
|
|
713
|
-
"id": "1",
|
|
714
|
-
"name": "Local PG",
|
|
715
|
-
"type": "postgres",
|
|
716
|
-
"host": "localhost",
|
|
717
|
-
"port": 5432,
|
|
718
|
-
"database": "mydb",
|
|
719
|
-
"user": "postgres",
|
|
720
|
-
"password": "postgres"
|
|
721
|
-
},
|
|
722
|
-
"sql": "SELECT * FROM users LIMIT 10"
|
|
723
|
-
}'
|
|
724
|
-
```
|
|
725
|
-
|
|
726
|
-
#### Get Schema
|
|
727
|
-
```bash
|
|
728
|
-
curl -X POST http://localhost:3000/api/db/schema \
|
|
729
|
-
-H "Content-Type: application/json" \
|
|
730
|
-
-b cookies.txt \
|
|
731
|
-
-d '{
|
|
732
|
-
"id": "1",
|
|
733
|
-
"name": "Local PG",
|
|
734
|
-
"type": "postgres",
|
|
735
|
-
"host": "localhost",
|
|
736
|
-
"port": 5432,
|
|
737
|
-
"database": "mydb",
|
|
738
|
-
"user": "postgres",
|
|
739
|
-
"password": "postgres"
|
|
740
|
-
}'
|
|
741
|
-
```
|
|
742
|
-
|
|
743
|
-
#### AI Query Generation
|
|
744
|
-
```bash
|
|
745
|
-
curl -X POST http://localhost:3000/api/ai/chat \
|
|
746
|
-
-H "Content-Type: application/json" \
|
|
747
|
-
-b cookies.txt \
|
|
748
|
-
-d '{
|
|
749
|
-
"prompt": "Count users by country",
|
|
750
|
-
"databaseType": "postgres",
|
|
751
|
-
"schemaContext": "users(id, name, country, created_at)"
|
|
752
|
-
}'
|
|
753
|
-
```
|
|
754
|
-
|
|
755
|
-
#### Health Check
|
|
756
|
-
```bash
|
|
757
|
-
curl http://localhost:3000/api/db/health
|
|
758
|
-
```
|
|
759
|
-
|
|
760
|
-
#### Run Maintenance (Admin)
|
|
761
|
-
```bash
|
|
762
|
-
curl -X POST http://localhost:3000/api/db/maintenance \
|
|
763
|
-
-H "Content-Type: application/json" \
|
|
764
|
-
-b cookies.txt \
|
|
765
|
-
-d '{
|
|
766
|
-
"connection": {
|
|
767
|
-
"id": "1",
|
|
768
|
-
"name": "Local PG",
|
|
769
|
-
"type": "postgres",
|
|
770
|
-
"host": "localhost",
|
|
771
|
-
"port": 5432,
|
|
772
|
-
"database": "mydb",
|
|
773
|
-
"user": "postgres",
|
|
774
|
-
"password": "postgres"
|
|
775
|
-
},
|
|
776
|
-
"type": "vacuum",
|
|
777
|
-
"target": "users"
|
|
778
|
-
}'
|
|
779
|
-
```
|
|
780
|
-
|
|
781
|
-
### JavaScript/TypeScript Examples
|
|
782
|
-
|
|
783
|
-
```typescript
|
|
784
|
-
// Login and execute query
|
|
785
|
-
async function executeQuery(sql: string) {
|
|
786
|
-
// Login
|
|
787
|
-
await fetch('/api/auth/login', {
|
|
788
|
-
method: 'POST',
|
|
789
|
-
headers: { 'Content-Type': 'application/json' },
|
|
790
|
-
body: JSON.stringify({ password: 'admin123' }),
|
|
791
|
-
credentials: 'include'
|
|
792
|
-
});
|
|
793
|
-
|
|
794
|
-
// Execute query
|
|
795
|
-
const response = await fetch('/api/db/query', {
|
|
796
|
-
method: 'POST',
|
|
797
|
-
headers: { 'Content-Type': 'application/json' },
|
|
798
|
-
credentials: 'include',
|
|
799
|
-
body: JSON.stringify({
|
|
800
|
-
connection: {
|
|
801
|
-
id: '1',
|
|
802
|
-
name: 'My DB',
|
|
803
|
-
type: 'postgres',
|
|
804
|
-
host: 'localhost',
|
|
805
|
-
port: 5432,
|
|
806
|
-
database: 'mydb',
|
|
807
|
-
user: 'postgres',
|
|
808
|
-
password: 'postgres'
|
|
809
|
-
},
|
|
810
|
-
sql
|
|
811
|
-
})
|
|
812
|
-
});
|
|
813
|
-
|
|
814
|
-
return response.json();
|
|
815
|
-
}
|
|
816
|
-
|
|
817
|
-
// Stream AI response
|
|
818
|
-
async function streamAIQuery(prompt: string) {
|
|
819
|
-
const response = await fetch('/api/ai/chat', {
|
|
820
|
-
method: 'POST',
|
|
821
|
-
headers: { 'Content-Type': 'application/json' },
|
|
822
|
-
credentials: 'include',
|
|
823
|
-
body: JSON.stringify({
|
|
824
|
-
prompt,
|
|
825
|
-
databaseType: 'postgres',
|
|
826
|
-
schemaContext: 'users(id, name, email)'
|
|
827
|
-
})
|
|
828
|
-
});
|
|
829
|
-
|
|
830
|
-
const reader = response.body?.getReader();
|
|
831
|
-
const decoder = new TextDecoder();
|
|
832
|
-
|
|
833
|
-
while (true) {
|
|
834
|
-
const { done, value } = await reader!.read();
|
|
835
|
-
if (done) break;
|
|
836
|
-
console.log(decoder.decode(value));
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
```
|
|
840
|
-
|
|
841
|
-
---
|
|
842
|
-
|
|
843
|
-
## Environment Variables
|
|
844
|
-
|
|
845
|
-
| Variable | Required | Description |
|
|
846
|
-
|----------|----------|-------------|
|
|
847
|
-
| `JWT_SECRET` | Yes (prod) | JWT signing secret (min 32 chars) |
|
|
848
|
-
| `ADMIN_PASSWORD` | Yes (prod) | Admin user password |
|
|
849
|
-
| `USER_PASSWORD` | Yes (prod) | Regular user password |
|
|
850
|
-
| `LLM_PROVIDER` | No | AI provider: gemini, openai, ollama, custom |
|
|
851
|
-
| `LLM_API_KEY` | No | AI provider API key |
|
|
852
|
-
| `LLM_MODEL` | No | AI model name |
|
|
853
|
-
| `LLM_API_URL` | No | Custom AI endpoint URL |
|
|
854
|
-
|
|
855
|
-
---
|
|
856
|
-
|
|
857
|
-
## Changelog
|
|
858
|
-
|
|
859
|
-
### v0.5.2
|
|
860
|
-
- Added memory optimization with dynamic imports
|
|
861
|
-
- Improved Docker deployment for low-memory environments
|
|
862
|
-
- Added `serverExternalPackages` for native modules
|
|
863
|
-
|
|
864
|
-
### v0.5.0
|
|
865
|
-
- Full MongoDB support
|
|
866
|
-
- Strategy Pattern for database providers
|
|
867
|
-
- LLM provider abstraction
|
|
868
|
-
|
|
869
|
-
### v0.4.0
|
|
870
|
-
- AI Query Assistant with streaming
|
|
871
|
-
- Multi-provider LLM support
|
|
872
|
-
|
|
873
|
-
---
|
|
874
|
-
|
|
875
|
-
**Last Updated:** December 2025
|