insforge 1.2.10 → 1.4.8
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/.claude-plugin/marketplace.json +20 -20
- package/.dockerignore +60 -60
- package/.env.example +83 -77
- package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
- package/.github/ISSUE_TEMPLATE/config.yml +11 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
- package/.github/copilot-instructions.md +146 -146
- package/.github/workflows/build-image.yml +65 -65
- package/.github/workflows/ci-premerge-check.yml +23 -23
- package/.github/workflows/e2e.yml +63 -63
- package/.github/workflows/lint-and-format.yml +32 -32
- package/.prettierignore +64 -64
- package/CHANGELOG.md +46 -44
- package/CLAUDE_PLUGIN.md +104 -104
- package/CODE_OF_CONDUCT.md +128 -128
- package/CONTRIBUTING.md +125 -125
- package/Dockerfile +30 -30
- package/GITHUB_OAUTH_SETUP.md +49 -49
- package/GOOGLE_OAUTH_SETUP.md +148 -148
- package/LICENSE +201 -201
- package/README.md +182 -182
- package/assets/Dark.svg +23 -23
- package/auth/package.json +30 -28
- package/auth/src/lib/broadcastService.ts +4 -4
- package/auth/src/lib/insforge.ts +8 -0
- package/auth/src/main.tsx +2 -4
- package/auth/src/pages/SignInPage.tsx +5 -2
- package/auth/src/pages/SignUpPage.tsx +5 -2
- package/auth/src/pages/VerifyEmailPage.tsx +18 -0
- package/auth/tsconfig.json +33 -32
- package/auth/tsconfig.node.json +11 -11
- package/backend/package.json +82 -75
- package/backend/src/api/middlewares/rate-limiters.ts +127 -127
- package/backend/src/api/routes/ai/index.routes.ts +475 -468
- package/backend/src/api/routes/auth/index.routes.ts +720 -570
- package/backend/src/api/routes/auth/oauth.routes.ts +478 -448
- package/backend/src/api/routes/database/advance.routes.ts +37 -16
- package/backend/src/api/routes/database/index.routes.ts +80 -1
- package/backend/src/api/routes/database/records.routes.ts +48 -184
- package/backend/src/api/routes/database/rpc.routes.ts +69 -0
- package/backend/src/api/routes/database/tables.routes.ts +0 -14
- package/backend/src/api/routes/deployments/index.routes.ts +192 -0
- package/backend/src/api/routes/docs/index.routes.ts +76 -76
- package/backend/src/api/routes/email/index.routes.ts +35 -0
- package/backend/src/api/routes/functions/index.routes.ts +21 -15
- package/backend/src/api/routes/metadata/index.routes.ts +38 -0
- package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
- package/backend/src/api/routes/realtime/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
- package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
- package/backend/src/api/routes/storage/index.routes.ts +18 -12
- package/backend/src/api/routes/usage/index.routes.ts +6 -4
- package/backend/src/api/routes/webhooks/index.routes.ts +109 -0
- package/backend/src/infra/database/database.manager.ts +14 -11
- package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
- package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
- package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
- package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
- package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
- package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
- package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
- package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
- package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
- package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
- package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
- package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
- package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
- package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
- package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
- package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
- package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
- package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
- package/backend/src/infra/database/migrations/018_schema-rework.sql +441 -0
- package/backend/src/infra/database/migrations/019_create-deployments-table.sql +36 -0
- package/backend/src/infra/database/migrations/020_add-audio-modality.sql +11 -0
- package/backend/src/infra/database/migrations/bootstrap/bootstrap-migrations.js +103 -0
- package/backend/src/infra/realtime/realtime.manager.ts +246 -0
- package/backend/src/infra/realtime/webhook-sender.ts +82 -0
- package/backend/src/infra/security/token.manager.ts +216 -125
- package/backend/src/infra/socket/socket.manager.ts +198 -64
- package/backend/src/providers/ai/openrouter.provider.ts +24 -12
- package/backend/src/providers/database/base.provider.ts +39 -0
- package/backend/src/providers/database/cloud.provider.ts +159 -0
- package/backend/src/providers/deployments/vercel.provider.ts +516 -0
- package/backend/src/providers/email/base.provider.ts +4 -7
- package/backend/src/providers/email/cloud.provider.ts +84 -0
- package/backend/src/providers/oauth/apple.provider.ts +266 -0
- package/backend/src/providers/oauth/index.ts +1 -0
- package/backend/src/server.ts +329 -284
- package/backend/src/services/ai/ai-config.service.ts +6 -6
- package/backend/src/services/ai/ai-model.service.ts +60 -60
- package/backend/src/services/ai/ai-usage.service.ts +7 -7
- package/backend/src/services/ai/chat-completion.service.ts +415 -220
- package/backend/src/services/ai/helpers.ts +64 -64
- package/backend/src/services/ai/image-generation.service.ts +3 -3
- package/backend/src/services/ai/index.ts +13 -13
- package/backend/src/services/auth/auth-config.service.ts +4 -4
- package/backend/src/services/auth/auth-otp.service.ts +6 -6
- package/backend/src/services/auth/auth.service.ts +148 -74
- package/backend/src/services/auth/index.ts +4 -4
- package/backend/src/services/auth/oauth-config.service.ts +12 -12
- package/backend/src/services/database/database-advance.service.ts +19 -55
- package/backend/src/services/database/database-table.service.ts +38 -94
- package/backend/src/services/database/database.service.ts +127 -0
- package/backend/src/services/database/postgrest-proxy.service.ts +165 -0
- package/backend/src/services/deployments/deployment.service.ts +693 -0
- package/backend/src/services/email/email.service.ts +5 -7
- package/backend/src/services/functions/function.service.ts +61 -41
- package/backend/src/services/logs/audit.service.ts +10 -10
- package/backend/src/services/realtime/index.ts +3 -0
- package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
- package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
- package/backend/src/services/realtime/realtime-message.service.ts +260 -0
- package/backend/src/services/secrets/secret.service.ts +101 -27
- package/backend/src/services/storage/storage.service.ts +30 -30
- package/backend/src/services/usage/usage.service.ts +6 -6
- package/backend/src/types/ai.ts +8 -0
- package/backend/src/types/auth.ts +16 -1
- package/backend/src/types/database.ts +2 -0
- package/backend/src/types/deployments.ts +33 -0
- package/backend/src/types/realtime.ts +18 -0
- package/backend/src/types/socket.ts +7 -31
- package/backend/src/types/storage.ts +1 -1
- package/backend/src/types/webhooks.ts +45 -0
- package/backend/src/utils/cookies.ts +34 -0
- package/backend/src/utils/environment.ts +0 -14
- package/backend/src/utils/s3-config-loader.ts +64 -0
- package/backend/src/utils/seed.ts +79 -43
- package/backend/src/utils/sql-parser.ts +216 -0
- package/backend/src/utils/utils.ts +114 -114
- package/backend/src/utils/validations.ts +10 -10
- package/backend/tests/README.md +133 -133
- package/backend/tests/cleanup-all-test-data.sh +230 -230
- package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
- package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
- package/backend/tests/local/test-ai-config.sh +129 -129
- package/backend/tests/local/test-ai-usage.sh +80 -80
- package/backend/tests/local/test-auth-router.sh +143 -143
- package/backend/tests/local/test-database-router.sh +222 -222
- package/backend/tests/local/test-e2e.sh +240 -240
- package/backend/tests/local/test-fk-errors.sh +96 -96
- package/backend/tests/local/test-functions.sh +123 -123
- package/backend/tests/local/test-id-field.sh +200 -200
- package/backend/tests/local/test-logs.sh +132 -132
- package/backend/tests/local/test-public-bucket.sh +264 -264
- package/backend/tests/local/test-rpc.sh +141 -0
- package/backend/tests/local/test-secrets.sh +249 -249
- package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
- package/backend/tests/local/test-traditional-rest.sh +208 -208
- package/backend/tests/manual/README.md +50 -50
- package/backend/tests/manual/create-large-table-simple.sql +10 -10
- package/backend/tests/manual/seed-large-table.sql +100 -100
- package/backend/tests/manual/setup-large-table-extras.sql +33 -33
- package/backend/tests/manual/test-ai-model-plugins.sh +258 -0
- package/backend/tests/manual/test-bulk-upsert.sh +409 -409
- package/backend/tests/manual/test-database-advance.sh +296 -296
- package/backend/tests/manual/test-postgrest-stability.sh +191 -191
- package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
- package/backend/tests/manual/test-rawsql-modes.sh +244 -244
- package/backend/tests/manual/test-universal-storage.sh +263 -263
- package/backend/tests/manual/test-users.sql +17 -17
- package/backend/tests/run-all-tests.sh +139 -139
- package/backend/tests/setup.ts +0 -0
- package/backend/tests/test-config.sh +338 -338
- package/backend/tests/unit/analyze-query.test.ts +697 -0
- package/backend/tests/unit/database-advance.test.ts +326 -0
- package/backend/tests/unit/helpers.test.ts +2 -2
- package/backend/tsconfig.json +22 -22
- package/claude-plugin/.claude-plugin/plugin.json +24 -24
- package/claude-plugin/README.md +133 -133
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +273 -270
- package/docker-compose.prod.yml +204 -200
- package/docker-compose.yml +232 -228
- package/docker-init/db/db-init.sql +97 -97
- package/docker-init/db/jwt.sql +5 -5
- package/docker-init/db/postgresql.conf +16 -16
- package/docker-init/logs/vector.yml +236 -236
- package/docs/README.md +44 -44
- package/docs/agent-docs/deployment.md +79 -0
- package/docs/agent-docs/real-time.md +269 -0
- package/docs/changelog.mdx +212 -67
- package/docs/core-concepts/ai/architecture.mdx +350 -372
- package/docs/core-concepts/ai/sdk.mdx +238 -213
- package/docs/core-concepts/authentication/architecture.mdx +276 -278
- package/docs/core-concepts/authentication/sdk.mdx +710 -414
- package/docs/core-concepts/authentication/ui-components/customization.mdx +733 -529
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +247 -221
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +183 -184
- package/docs/core-concepts/authentication/ui-components/react.mdx +136 -129
- package/docs/core-concepts/database/architecture.mdx +292 -255
- package/docs/core-concepts/database/pgvector.mdx +138 -0
- package/docs/core-concepts/database/sdk.mdx +382 -382
- package/docs/core-concepts/deployments/architecture.mdx +152 -0
- package/docs/core-concepts/email/architecture.mdx +103 -0
- package/docs/core-concepts/email/sdk.mdx +53 -0
- package/docs/core-concepts/functions/architecture.mdx +105 -105
- package/docs/core-concepts/functions/sdk.mdx +183 -184
- package/docs/core-concepts/realtime/architecture.mdx +446 -0
- package/docs/core-concepts/realtime/sdk.mdx +409 -0
- package/docs/core-concepts/storage/architecture.mdx +243 -243
- package/docs/core-concepts/storage/sdk.mdx +253 -253
- package/docs/deployment/README.md +94 -94
- package/docs/deployment/deploy-to-aws-ec2.md +564 -564
- package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
- package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
- package/docs/deployment/deploy-to-render.md +441 -441
- package/docs/deprecated/insforge-auth-api.md +214 -214
- package/docs/deprecated/insforge-auth-sdk.md +99 -99
- package/docs/deprecated/insforge-db-api.md +358 -358
- package/docs/deprecated/insforge-db-sdk.md +139 -139
- package/docs/deprecated/insforge-debug-sdk.md +156 -156
- package/docs/deprecated/insforge-debug.md +64 -64
- package/docs/deprecated/insforge-instructions.md +123 -123
- package/docs/deprecated/insforge-project.md +117 -117
- package/docs/deprecated/insforge-storage-api.md +278 -278
- package/docs/deprecated/insforge-storage-sdk.md +158 -158
- package/docs/docs.json +240 -210
- package/docs/examples/framework-guides/nextjs.mdx +131 -131
- package/docs/examples/framework-guides/nuxt.mdx +165 -165
- package/docs/examples/framework-guides/react.mdx +165 -165
- package/docs/examples/framework-guides/svelte.mdx +153 -153
- package/docs/examples/framework-guides/vue.mdx +159 -159
- package/docs/examples/overview.mdx +67 -67
- package/docs/favicon.png +0 -0
- package/docs/favicon.svg +4 -19
- package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
- package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
- package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
- package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
- package/docs/images/changelog/dec-2025/apple-oauth.mp4 +0 -0
- package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
- package/docs/images/changelog/dec-2025/moreModels.png +0 -0
- package/docs/images/changelog/dec-2025/multi-region.webp +0 -0
- package/docs/images/changelog/dec-2025/postgres-connection.webp +0 -0
- package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
- package/docs/images/changelog/dec-2025/realtime2.png +0 -0
- package/docs/images/icons/ai.svg +4 -4
- package/docs/images/logos/nextjs.svg +4 -4
- package/docs/images/logos/nuxt.svg +4 -4
- package/docs/images/logos/react.svg +5 -5
- package/docs/images/logos/svelte.svg +4 -4
- package/docs/images/logos/vue.svg +5 -5
- package/docs/images/mcp-setup/CC-MCP-1.mp4 +0 -0
- package/docs/images/mcp-setup/CC-MCP-2.mp4 +0 -0
- package/docs/images/mcp-setup/Cursor-MCP-1.mp4 +0 -0
- package/docs/images/mcp-setup/Cursor-MCP-2.mp4 +0 -0
- package/docs/images/mcp-setup/Cursor-MCP-3.mp4 +0 -0
- package/docs/images/mcp-setup/claude-code-connect.png +0 -0
- package/docs/images/mcp-setup/cline-1.png +0 -0
- package/docs/images/mcp-setup/cline-2.png +0 -0
- package/docs/images/mcp-setup/cline-3.png +0 -0
- package/docs/images/mcp-setup/connect-project.png +0 -0
- package/docs/images/mcp-setup/copilot-1.png +0 -0
- package/docs/images/mcp-setup/copilot-2.png +0 -0
- package/docs/images/mcp-setup/copilot-3.png +0 -0
- package/docs/images/mcp-setup/mcp-json-1.png +0 -0
- package/docs/images/mcp-setup/mcp-json-2.png +0 -0
- package/docs/images/mcp-setup/qoder-1.png +0 -0
- package/docs/images/mcp-setup/qoder-2.png +0 -0
- package/docs/images/mcp-setup/roocode-1.png +0 -0
- package/docs/images/mcp-setup/roocode-2.png +0 -0
- package/docs/images/mcp-setup/trae-1.png +0 -0
- package/docs/images/mcp-setup/trae-2.png +0 -0
- package/docs/images/mcp-setup/trae-3.png +0 -0
- package/docs/images/mcp-setup/trae-4.png +0 -0
- package/docs/images/mcp-setup/trae-5.png +0 -0
- package/docs/images/mcp-setup/windsurf-1.png +0 -0
- package/docs/images/mcp-setup/windsurf-2.png +0 -0
- package/docs/insforge-instructions-sdk.md +93 -88
- package/docs/introduction.mdx +46 -45
- package/docs/logo/dark.svg +22 -22
- package/docs/logo/light.svg +20 -20
- package/docs/mcp-setup.mdx +332 -0
- package/docs/oauth-server.mdx +563 -0
- package/docs/partnership.mdx +720 -646
- package/docs/quickstart.mdx +82 -82
- package/docs/showcase.mdx +52 -52
- package/docs/snippets/sdk-installation.mdx +21 -21
- package/docs/snippets/service-icons.mdx +27 -27
- package/docs/vscode-extension.mdx +74 -0
- package/eslint.config.js +1 -0
- package/examples/oauth/frontend-oauth-example.html +250 -250
- package/examples/response-examples.md +443 -443
- package/frontend/components.json +17 -17
- package/frontend/package.json +69 -69
- package/frontend/src/App.tsx +8 -3
- package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
- package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
- package/frontend/src/assets/icons/checked.svg +3 -3
- package/frontend/src/assets/icons/connected.svg +3 -3
- package/frontend/src/assets/icons/error.svg +3 -3
- package/frontend/src/assets/icons/loader.svg +9 -9
- package/frontend/src/assets/icons/pencil.svg +4 -4
- package/frontend/src/assets/icons/refresh.svg +4 -4
- package/frontend/src/assets/icons/step_active.svg +3 -3
- package/frontend/src/assets/icons/step_inactive.svg +11 -11
- package/frontend/src/assets/icons/warning.svg +3 -3
- package/frontend/src/assets/logos/antigravity.svg +1 -0
- package/frontend/src/assets/logos/apple.svg +3 -3
- package/frontend/src/assets/logos/claude_code.svg +3 -3
- package/frontend/src/assets/logos/cline.svg +6 -6
- package/frontend/src/assets/logos/copilot.svg +10 -0
- package/frontend/src/assets/logos/cursor.svg +20 -20
- package/frontend/src/assets/logos/deepseek.svg +139 -0
- package/frontend/src/assets/logos/discord.svg +8 -8
- package/frontend/src/assets/logos/facebook.svg +3 -3
- package/frontend/src/assets/logos/gemini.svg +19 -19
- package/frontend/src/assets/logos/github.svg +5 -5
- package/frontend/src/assets/logos/google.svg +13 -13
- package/frontend/src/assets/logos/grok.svg +10 -10
- package/frontend/src/assets/logos/insforge_dark.svg +15 -15
- package/frontend/src/assets/logos/insforge_light.svg +15 -15
- package/frontend/src/assets/logos/instagram.svg +1 -1
- package/frontend/src/assets/logos/kiro.svg +9 -0
- package/frontend/src/assets/logos/linkedin.svg +3 -3
- package/frontend/src/assets/logos/openai.svg +10 -10
- package/frontend/src/assets/logos/qoder.svg +4 -0
- package/frontend/src/assets/logos/qwen.svg +15 -0
- package/frontend/src/assets/logos/roo_code.svg +9 -9
- package/frontend/src/assets/logos/spotify.svg +16 -16
- package/frontend/src/assets/logos/tiktok.svg +5 -5
- package/frontend/src/assets/logos/trae.svg +3 -3
- package/frontend/src/assets/logos/windsurf.svg +10 -10
- package/frontend/src/assets/logos/x.svg +3 -3
- package/frontend/src/components/CodeBlock.tsx +2 -2
- package/frontend/src/components/ConnectCTA.tsx +3 -2
- package/frontend/src/components/datagrid/DataGrid.tsx +90 -62
- package/frontend/src/components/datagrid/datagridTypes.tsx +2 -1
- package/frontend/src/components/datagrid/index.ts +1 -1
- package/frontend/src/components/index.ts +0 -1
- package/frontend/src/components/layout/AppHeader.tsx +13 -37
- package/frontend/src/components/layout/AppSidebar.tsx +85 -100
- package/frontend/src/components/layout/Layout.tsx +34 -32
- package/frontend/src/components/layout/PrimaryMenu.tsx +12 -4
- package/frontend/src/components/radix/Select.tsx +151 -151
- package/frontend/src/features/ai/components/AIConfigCard.tsx +200 -200
- package/frontend/src/features/ai/components/AIEmptyState.tsx +23 -23
- package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +102 -101
- package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -135
- package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -51
- package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -118
- package/frontend/src/features/ai/components/index.ts +6 -6
- package/frontend/src/features/ai/helpers.ts +147 -141
- package/frontend/src/features/ai/{page → pages}/AIPage.tsx +166 -166
- package/frontend/src/features/auth/components/AuthPreview.tsx +96 -96
- package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +61 -31
- package/frontend/src/features/auth/components/index.ts +5 -5
- package/frontend/src/features/auth/helpers.tsx +8 -0
- package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +275 -275
- package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
- package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +1 -1
- package/frontend/src/features/database/components/DatabaseDataGrid.tsx +0 -2
- package/frontend/src/features/database/components/ForeignKeyCell.tsx +38 -11
- package/frontend/src/features/database/components/ForeignKeyPopover.tsx +18 -8
- package/frontend/src/features/database/components/LinkRecordModal.tsx +61 -13
- package/frontend/src/features/database/components/RecordFormField.tsx +1 -1
- package/frontend/src/features/database/components/SQLModal.tsx +75 -0
- package/frontend/src/features/database/components/TableForm.tsx +0 -4
- package/frontend/src/features/database/components/TableSidebar.tsx +0 -3
- package/frontend/src/features/database/components/TablesEmptyState.tsx +1 -1
- package/frontend/src/features/database/components/TemplatePreview.tsx +1 -2
- package/frontend/src/features/database/constants.ts +16 -28
- package/frontend/src/features/database/hooks/useCSVImport.ts +3 -2
- package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
- package/frontend/src/features/database/hooks/useRawSQL.ts +3 -2
- package/frontend/src/features/database/hooks/useTables.ts +30 -28
- package/frontend/src/features/database/index.ts +1 -0
- package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -42
- package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +34 -51
- package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +42 -58
- package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +2 -2
- package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
- package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +34 -51
- package/frontend/src/features/database/services/advance.service.ts +1 -41
- package/frontend/src/features/database/services/database.service.ts +55 -0
- package/frontend/src/features/database/services/record.service.ts +4 -20
- package/frontend/src/features/database/services/table.service.ts +1 -10
- package/frontend/src/features/database/templates/ai-chatbot.ts +6 -6
- package/frontend/src/features/database/templates/ecommerce-platform.ts +2 -2
- package/frontend/src/features/database/templates/instagram-clone.ts +10 -10
- package/frontend/src/features/database/templates/notion-clone.ts +8 -8
- package/frontend/src/features/database/templates/reddit-clone.ts +10 -10
- package/frontend/src/features/deployments/components/DeploymentRow.tsx +93 -0
- package/frontend/src/features/deployments/components/DeploymentsEmptyState.tsx +15 -0
- package/frontend/src/features/deployments/hooks/useDeployments.ts +157 -0
- package/frontend/src/features/deployments/pages/DeploymentsPage.tsx +318 -0
- package/frontend/src/features/deployments/services/deployments.service.ts +63 -0
- package/frontend/src/features/functions/components/FunctionRow.tsx +72 -72
- package/frontend/src/features/functions/components/FunctionsSidebar.tsx +56 -56
- package/frontend/src/features/functions/components/SecretRow.tsx +3 -3
- package/frontend/src/features/functions/components/index.ts +5 -5
- package/frontend/src/features/functions/hooks/useFunctions.ts +5 -4
- package/frontend/src/features/functions/hooks/useSecrets.ts +6 -9
- package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
- package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +118 -116
- package/frontend/src/features/functions/services/function.service.ts +8 -25
- package/frontend/src/features/functions/services/secret.service.ts +23 -41
- package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +125 -118
- package/frontend/src/features/logs/components/LogDetailPanel.tsx +41 -0
- package/frontend/src/features/logs/components/LogsDataGrid.tsx +32 -1
- package/frontend/src/features/logs/components/index.ts +1 -0
- package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
- package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +36 -6
- package/frontend/src/features/onboard/components/ApiCredentialsSection.tsx +59 -0
- package/frontend/src/features/onboard/components/ConnectionStringSection.tsx +180 -0
- package/frontend/src/features/onboard/components/McpConnectionSection.tsx +159 -0
- package/frontend/src/features/onboard/components/OnboardingController.tsx +68 -0
- package/frontend/src/features/onboard/components/OnboardingModal.tsx +121 -267
- package/frontend/src/features/onboard/components/ShowPasswordButton.tsx +21 -0
- package/frontend/src/features/onboard/components/index.ts +9 -4
- package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +1 -1
- package/frontend/src/features/onboard/components/mcp/QoderDeeplinkGenerator.tsx +36 -0
- package/frontend/src/features/onboard/components/mcp/helpers.tsx +123 -98
- package/frontend/src/features/onboard/components/mcp/index.ts +4 -3
- package/frontend/src/features/onboard/index.ts +17 -13
- package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
- package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
- package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
- package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
- package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
- package/frontend/src/features/realtime/index.ts +11 -0
- package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
- package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
- package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
- package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
- package/frontend/src/features/settings/pages/SettingsPage.tsx +349 -0
- package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
- package/frontend/src/features/visualizer/components/AuthNode.tsx +4 -4
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +24 -11
- package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +11 -36
- package/frontend/src/index.css +249 -249
- package/frontend/src/lib/contexts/ModalContext.tsx +35 -0
- package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
- package/frontend/src/lib/hooks/useMetadata.ts +45 -1
- package/frontend/src/lib/hooks/useModal.tsx +2 -0
- package/frontend/src/lib/routing/AppRoutes.tsx +103 -84
- package/frontend/src/lib/services/metadata.service.ts +20 -3
- package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
- package/frontend/src/lib/utils/menuItems.ts +223 -183
- package/frontend/src/lib/utils/utils.ts +196 -183
- package/frontend/tsconfig.json +25 -25
- package/frontend/tsconfig.node.json +9 -9
- package/functions/deno.json +24 -24
- package/functions/server.ts +6 -6
- package/functions/worker-template.js +1 -1
- package/i18n/README.ar.md +130 -130
- package/i18n/README.de.md +130 -130
- package/i18n/README.es.md +154 -154
- package/i18n/README.fr.md +134 -134
- package/i18n/README.hi.md +129 -129
- package/i18n/README.ja.md +174 -174
- package/i18n/README.ko.md +136 -136
- package/i18n/README.pt-BR.md +131 -131
- package/i18n/README.ru.md +129 -129
- package/i18n/README.zh-CN.md +133 -133
- package/openapi/ai.yaml +825 -715
- package/openapi/auth.yaml +1324 -1244
- package/openapi/email.yaml +158 -0
- package/openapi/functions.yaml +475 -475
- package/openapi/health.yaml +29 -29
- package/openapi/logs.yaml +221 -223
- package/openapi/metadata.yaml +175 -177
- package/openapi/realtime.yaml +699 -0
- package/openapi/records.yaml +381 -381
- package/openapi/secrets.yaml +370 -370
- package/openapi/storage.yaml +875 -875
- package/openapi/tables.yaml +462 -463
- package/package.json +97 -97
- package/shared-schemas/package.json +31 -31
- package/shared-schemas/src/ai-api.schema.ts +251 -143
- package/shared-schemas/src/ai.schema.ts +8 -4
- package/shared-schemas/src/auth-api.schema.ts +380 -339
- package/shared-schemas/src/auth.schema.ts +18 -11
- package/shared-schemas/src/cloud-events.schema.ts +26 -0
- package/shared-schemas/src/database-api.schema.ts +32 -1
- package/shared-schemas/src/database.schema.ts +39 -0
- package/shared-schemas/src/deployments-api.schema.ts +55 -0
- package/shared-schemas/src/deployments.schema.ts +30 -0
- package/shared-schemas/src/docs.schema.ts +32 -0
- package/shared-schemas/src/email-api.schema.ts +30 -0
- package/shared-schemas/src/functions-api.schema.ts +13 -4
- package/shared-schemas/src/functions.schema.ts +1 -1
- package/shared-schemas/src/index.ts +22 -14
- package/shared-schemas/src/metadata.schema.ts +39 -4
- package/shared-schemas/src/realtime-api.schema.ts +111 -0
- package/shared-schemas/src/realtime.schema.ts +143 -0
- package/shared-schemas/src/secrets-api.schema.ts +44 -0
- package/shared-schemas/src/secrets.schema.ts +15 -0
- package/shared-schemas/tsconfig.json +21 -21
- package/tsconfig.json +7 -7
- package/zeabur/README.md +26 -13
- package/zeabur/template.yml +1001 -1032
- package/.cursor/rules/cursor-rules.mdc +0 -94
- package/backend/src/types/profile.ts +0 -55
- package/frontend/src/components/ProjectInfoModal.tsx +0 -128
- package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
- package/test-gemini.sh +0 -35
- package/test-usage-admin.sh +0 -57
- package/test-usage.sh +0 -50
- /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
- /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
- /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useMemo, useState
|
|
1
|
+
import { useMemo, useState } from 'react';
|
|
2
2
|
import RefreshIcon from '@/assets/icons/refresh.svg?react';
|
|
3
3
|
import {
|
|
4
4
|
Button,
|
|
@@ -13,16 +13,9 @@ import {
|
|
|
13
13
|
TooltipProvider,
|
|
14
14
|
TooltipTrigger,
|
|
15
15
|
} from '@/components';
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
DataUpdatePayload,
|
|
21
|
-
DataUpdateResourceType,
|
|
22
|
-
ServerEvents,
|
|
23
|
-
SocketMessage,
|
|
24
|
-
useSocket,
|
|
25
|
-
} from '@/lib/contexts/SocketContext';
|
|
16
|
+
import { useTriggers } from '../hooks/useDatabase';
|
|
17
|
+
import { SQLModal, SQLCellButton } from '../components/SQLModal';
|
|
18
|
+
import type { DatabaseTriggersResponse } from '@insforge/shared-schemas';
|
|
26
19
|
|
|
27
20
|
interface TriggerRow extends DataGridRowType {
|
|
28
21
|
id: string;
|
|
@@ -34,28 +27,21 @@ interface TriggerRow extends DataGridRowType {
|
|
|
34
27
|
[key: string]: ConvertedValue | { [key: string]: string }[];
|
|
35
28
|
}
|
|
36
29
|
|
|
37
|
-
function
|
|
38
|
-
if (!
|
|
30
|
+
function parseTriggersFromResponse(response: DatabaseTriggersResponse | undefined): TriggerRow[] {
|
|
31
|
+
if (!response?.triggers) {
|
|
39
32
|
return [];
|
|
40
33
|
}
|
|
41
34
|
|
|
42
|
-
const data = metadata.data as ExportDatabaseJsonData;
|
|
43
35
|
const triggers: TriggerRow[] = [];
|
|
44
36
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
tableName,
|
|
54
|
-
triggerName: trigger.triggerName,
|
|
55
|
-
actionTiming: trigger.actionTiming,
|
|
56
|
-
eventManipulation: trigger.eventManipulation,
|
|
57
|
-
actionStatement: trigger.actionStatement,
|
|
58
|
-
});
|
|
37
|
+
response.triggers.forEach((trigger) => {
|
|
38
|
+
triggers.push({
|
|
39
|
+
id: `${trigger.tableName}_${trigger.triggerName}`,
|
|
40
|
+
tableName: trigger.tableName,
|
|
41
|
+
triggerName: trigger.triggerName,
|
|
42
|
+
actionTiming: trigger.actionTiming,
|
|
43
|
+
eventManipulation: trigger.eventManipulation,
|
|
44
|
+
actionStatement: trigger.actionStatement,
|
|
59
45
|
});
|
|
60
46
|
});
|
|
61
47
|
|
|
@@ -65,29 +51,10 @@ function parseTriggersFromMetadata(metadata: ExportDatabaseResponse | undefined)
|
|
|
65
51
|
export default function TriggersPage() {
|
|
66
52
|
const [searchQuery, setSearchQuery] = useState('');
|
|
67
53
|
const [isRefreshing, setIsRefreshing] = useState(false);
|
|
68
|
-
const { data
|
|
69
|
-
|
|
70
|
-
const { socket, isConnected } = useSocket();
|
|
71
|
-
|
|
72
|
-
const allTriggers = useMemo(() => parseTriggersFromMetadata(metadata), [metadata]);
|
|
73
|
-
|
|
74
|
-
useEffect(() => {
|
|
75
|
-
if (!socket || !isConnected) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
54
|
+
const { data, isLoading, error, refetch } = useTriggers(true);
|
|
55
|
+
const [sqlModal, setSqlModal] = useState({ open: false, title: '', value: '' });
|
|
78
56
|
|
|
79
|
-
|
|
80
|
-
if (message.payload?.resource === DataUpdateResourceType.DATABASE) {
|
|
81
|
-
void refetch();
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
socket.on(ServerEvents.DATA_UPDATE, handleDataUpdate);
|
|
86
|
-
|
|
87
|
-
return () => {
|
|
88
|
-
socket.off(ServerEvents.DATA_UPDATE, handleDataUpdate);
|
|
89
|
-
};
|
|
90
|
-
}, [socket, isConnected, refetch]);
|
|
57
|
+
const allTriggers = useMemo(() => parseTriggersFromResponse(data), [data]);
|
|
91
58
|
|
|
92
59
|
const filteredTriggers = useMemo(() => {
|
|
93
60
|
if (!searchQuery.trim()) {
|
|
@@ -163,9 +130,17 @@ export default function TriggersPage() {
|
|
|
163
130
|
name: 'Statement',
|
|
164
131
|
width: 'minmax(300px, 3fr)',
|
|
165
132
|
resizable: true,
|
|
133
|
+
renderCell: ({ row }) => (
|
|
134
|
+
<SQLCellButton
|
|
135
|
+
value={row.actionStatement}
|
|
136
|
+
onClick={() =>
|
|
137
|
+
setSqlModal({ open: true, title: 'Trigger Statement', value: row.actionStatement })
|
|
138
|
+
}
|
|
139
|
+
/>
|
|
140
|
+
),
|
|
166
141
|
},
|
|
167
142
|
],
|
|
168
|
-
[]
|
|
143
|
+
[setSqlModal]
|
|
169
144
|
);
|
|
170
145
|
|
|
171
146
|
if (error) {
|
|
@@ -237,6 +212,14 @@ export default function TriggersPage() {
|
|
|
237
212
|
/>
|
|
238
213
|
</div>
|
|
239
214
|
)}
|
|
215
|
+
|
|
216
|
+
{/* SQL Detail Modal */}
|
|
217
|
+
<SQLModal
|
|
218
|
+
open={sqlModal.open}
|
|
219
|
+
onOpenChange={(open) => setSqlModal((prev) => ({ ...prev, open }))}
|
|
220
|
+
title={sqlModal.title}
|
|
221
|
+
value={sqlModal.value}
|
|
222
|
+
/>
|
|
240
223
|
</div>
|
|
241
224
|
);
|
|
242
225
|
}
|
|
@@ -1,20 +1,5 @@
|
|
|
1
1
|
import { apiClient } from '@/lib/api/client';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export interface RawSQLRequest {
|
|
5
|
-
query: string;
|
|
6
|
-
params?: unknown[];
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface RawSQLResponse {
|
|
10
|
-
rows?: unknown[];
|
|
11
|
-
rowCount?: number;
|
|
12
|
-
fields?: Array<{ name: string; dataTypeID: number }>;
|
|
13
|
-
success?: boolean;
|
|
14
|
-
data?: unknown[];
|
|
15
|
-
error?: string;
|
|
16
|
-
message?: string;
|
|
17
|
-
}
|
|
2
|
+
import { RawSQLRequest, RawSQLResponse } from '@insforge/shared-schemas';
|
|
18
3
|
|
|
19
4
|
export class AdvanceService {
|
|
20
5
|
/**
|
|
@@ -36,31 +21,6 @@ export class AdvanceService {
|
|
|
36
21
|
body: JSON.stringify(body),
|
|
37
22
|
});
|
|
38
23
|
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Get full database metadata including schema, functions, triggers, etc.
|
|
42
|
-
* Requires admin privileges.
|
|
43
|
-
*
|
|
44
|
-
* @returns Response with complete database metadata in JSON format
|
|
45
|
-
*/
|
|
46
|
-
async getDatabaseFullMetadata(): Promise<ExportDatabaseResponse> {
|
|
47
|
-
const body: ExportDatabaseRequest = {
|
|
48
|
-
format: 'json',
|
|
49
|
-
includeData: false,
|
|
50
|
-
includeFunctions: true,
|
|
51
|
-
includeSequences: false,
|
|
52
|
-
includeViews: false,
|
|
53
|
-
rowLimit: 1000,
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
return apiClient.request('/database/advance/export', {
|
|
57
|
-
method: 'POST',
|
|
58
|
-
headers: apiClient.withAccessToken({
|
|
59
|
-
'Content-Type': 'application/json',
|
|
60
|
-
}),
|
|
61
|
-
body: JSON.stringify(body),
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
24
|
}
|
|
65
25
|
|
|
66
26
|
export const advanceService = new AdvanceService();
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { apiClient } from '@/lib/api/client';
|
|
2
|
+
import type {
|
|
3
|
+
DatabaseFunctionsResponse,
|
|
4
|
+
DatabaseIndexesResponse,
|
|
5
|
+
DatabasePoliciesResponse,
|
|
6
|
+
DatabaseTriggersResponse,
|
|
7
|
+
} from '@insforge/shared-schemas';
|
|
8
|
+
|
|
9
|
+
export class DatabaseService {
|
|
10
|
+
/**
|
|
11
|
+
* Get all database functions.
|
|
12
|
+
* Requires admin privileges.
|
|
13
|
+
*/
|
|
14
|
+
async getFunctions(): Promise<DatabaseFunctionsResponse> {
|
|
15
|
+
return apiClient.request('/database/functions', {
|
|
16
|
+
method: 'GET',
|
|
17
|
+
headers: apiClient.withAccessToken({}),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Get all database indexes.
|
|
23
|
+
* Requires admin privileges.
|
|
24
|
+
*/
|
|
25
|
+
async getIndexes(): Promise<DatabaseIndexesResponse> {
|
|
26
|
+
return apiClient.request('/database/indexes', {
|
|
27
|
+
method: 'GET',
|
|
28
|
+
headers: apiClient.withAccessToken({}),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Get all RLS policies.
|
|
34
|
+
* Requires admin privileges.
|
|
35
|
+
*/
|
|
36
|
+
async getPolicies(): Promise<DatabasePoliciesResponse> {
|
|
37
|
+
return apiClient.request('/database/policies', {
|
|
38
|
+
method: 'GET',
|
|
39
|
+
headers: apiClient.withAccessToken({}),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Get all database triggers.
|
|
45
|
+
* Requires admin privileges.
|
|
46
|
+
*/
|
|
47
|
+
async getTriggers(): Promise<DatabaseTriggersResponse> {
|
|
48
|
+
return apiClient.request('/database/triggers', {
|
|
49
|
+
method: 'GET',
|
|
50
|
+
headers: apiClient.withAccessToken({}),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export const databaseService = new DatabaseService();
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
import { ConvertedValue } from '@/components/datagrid/datagridTypes';
|
|
2
2
|
import { apiClient } from '@/lib/api/client';
|
|
3
|
-
import { ColumnSchema } from '@insforge/shared-schemas';
|
|
3
|
+
import { ColumnSchema, BulkUpsertResponse } from '@insforge/shared-schemas';
|
|
4
4
|
import { tableService } from './table.service';
|
|
5
5
|
|
|
6
|
-
export interface CSVImportResponse {
|
|
7
|
-
success: boolean;
|
|
8
|
-
message?: string;
|
|
9
|
-
data?: {
|
|
10
|
-
rowCount: number;
|
|
11
|
-
};
|
|
12
|
-
error?: string; // For backend error messages
|
|
13
|
-
}
|
|
14
|
-
|
|
15
6
|
export class RecordService {
|
|
16
7
|
/**
|
|
17
8
|
* Data fetching method with built-in search, sorting, and pagination for UI components.
|
|
@@ -190,7 +181,7 @@ export class RecordService {
|
|
|
190
181
|
return { valid: true };
|
|
191
182
|
}
|
|
192
183
|
|
|
193
|
-
async importCSV(tableName: string, file: File): Promise<
|
|
184
|
+
async importCSV(tableName: string, file: File): Promise<BulkUpsertResponse> {
|
|
194
185
|
const validation = this.validateCSVFile(file);
|
|
195
186
|
if (!validation.valid) {
|
|
196
187
|
throw new Error(validation.error || 'Invalid CSV file.');
|
|
@@ -200,19 +191,12 @@ export class RecordService {
|
|
|
200
191
|
formData.append('file', file);
|
|
201
192
|
formData.append('table', tableName);
|
|
202
193
|
|
|
203
|
-
const response = await apiClient.request(`/database/advance/bulk-upsert`, {
|
|
194
|
+
const response: BulkUpsertResponse = await apiClient.request(`/database/advance/bulk-upsert`, {
|
|
204
195
|
method: 'POST',
|
|
205
196
|
headers: apiClient.withAccessToken(),
|
|
206
197
|
body: formData,
|
|
207
198
|
});
|
|
208
|
-
return
|
|
209
|
-
success: response.success,
|
|
210
|
-
message: response.message,
|
|
211
|
-
data: {
|
|
212
|
-
rowCount: response.rowsAffected,
|
|
213
|
-
},
|
|
214
|
-
error: response.error,
|
|
215
|
-
};
|
|
199
|
+
return response;
|
|
216
200
|
}
|
|
217
201
|
}
|
|
218
202
|
|
|
@@ -9,16 +9,7 @@ import {
|
|
|
9
9
|
|
|
10
10
|
export class TableService {
|
|
11
11
|
async listTables(): Promise<string[]> {
|
|
12
|
-
|
|
13
|
-
headers: apiClient.withAccessToken(),
|
|
14
|
-
});
|
|
15
|
-
// data is already unwrapped by request method and should be an array
|
|
16
|
-
// Filter out the 'users' table
|
|
17
|
-
return Array.isArray(data) ? data.filter((table) => table !== 'users') : [];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
getAllTableSchemas(): Promise<GetTableSchemaResponse[]> {
|
|
21
|
-
return apiClient.request('/database/tables/schemas', {
|
|
12
|
+
return await apiClient.request('/database/tables', {
|
|
22
13
|
headers: apiClient.withAccessToken(),
|
|
23
14
|
});
|
|
24
15
|
}
|
|
@@ -18,7 +18,7 @@ export const aiChatbotTemplate: DatabaseTemplate = {
|
|
|
18
18
|
isNullable: true,
|
|
19
19
|
isUnique: false,
|
|
20
20
|
foreignKey: {
|
|
21
|
-
referenceTable: 'users',
|
|
21
|
+
referenceTable: 'auth.users',
|
|
22
22
|
referenceColumn: 'id',
|
|
23
23
|
onDelete: 'CASCADE',
|
|
24
24
|
onUpdate: 'CASCADE',
|
|
@@ -125,7 +125,7 @@ export const aiChatbotTemplate: DatabaseTemplate = {
|
|
|
125
125
|
isNullable: true,
|
|
126
126
|
isUnique: false,
|
|
127
127
|
foreignKey: {
|
|
128
|
-
referenceTable: 'users',
|
|
128
|
+
referenceTable: 'auth.users',
|
|
129
129
|
referenceColumn: 'id',
|
|
130
130
|
onDelete: 'CASCADE',
|
|
131
131
|
onUpdate: 'CASCADE',
|
|
@@ -165,7 +165,7 @@ export const aiChatbotTemplate: DatabaseTemplate = {
|
|
|
165
165
|
isNullable: true,
|
|
166
166
|
isUnique: false,
|
|
167
167
|
foreignKey: {
|
|
168
|
-
referenceTable: 'users',
|
|
168
|
+
referenceTable: 'auth.users',
|
|
169
169
|
referenceColumn: 'id',
|
|
170
170
|
onDelete: 'CASCADE',
|
|
171
171
|
onUpdate: 'CASCADE',
|
|
@@ -229,7 +229,7 @@ export const aiChatbotTemplate: DatabaseTemplate = {
|
|
|
229
229
|
-- Conversations table
|
|
230
230
|
CREATE TABLE conversations (
|
|
231
231
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
232
|
-
user_id UUID REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
232
|
+
user_id UUID REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
233
233
|
title VARCHAR(255),
|
|
234
234
|
model VARCHAR(100) DEFAULT 'gpt-4',
|
|
235
235
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
@@ -250,7 +250,7 @@ CREATE TABLE messages (
|
|
|
250
250
|
CREATE TABLE feedback (
|
|
251
251
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
252
252
|
message_id UUID REFERENCES messages(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
253
|
-
user_id UUID REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
253
|
+
user_id UUID REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
254
254
|
rating INTEGER CHECK (rating >= 1 AND rating <= 5),
|
|
255
255
|
comment TEXT,
|
|
256
256
|
created_at TIMESTAMP DEFAULT NOW()
|
|
@@ -259,7 +259,7 @@ CREATE TABLE feedback (
|
|
|
259
259
|
-- Prompts library table
|
|
260
260
|
CREATE TABLE prompts (
|
|
261
261
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
262
|
-
user_id UUID REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
262
|
+
user_id UUID REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
263
263
|
title VARCHAR(255) NOT NULL,
|
|
264
264
|
content TEXT NOT NULL,
|
|
265
265
|
category VARCHAR(100),
|
|
@@ -94,7 +94,7 @@ export const ecommercePlatformTemplate: DatabaseTemplate = {
|
|
|
94
94
|
isNullable: false,
|
|
95
95
|
isUnique: true,
|
|
96
96
|
foreignKey: {
|
|
97
|
-
referenceTable: 'users',
|
|
97
|
+
referenceTable: 'auth.users',
|
|
98
98
|
referenceColumn: 'id',
|
|
99
99
|
onDelete: 'CASCADE',
|
|
100
100
|
onUpdate: 'CASCADE',
|
|
@@ -340,7 +340,7 @@ CREATE TABLE products (
|
|
|
340
340
|
-- Customers table (extends users with customer-specific data)
|
|
341
341
|
CREATE TABLE customers (
|
|
342
342
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
343
|
-
user_id UUID UNIQUE NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
343
|
+
user_id UUID UNIQUE NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
344
344
|
first_name VARCHAR(100) NOT NULL,
|
|
345
345
|
last_name VARCHAR(100) NOT NULL,
|
|
346
346
|
phone VARCHAR(50),
|
|
@@ -17,7 +17,7 @@ export const instagramCloneTemplate: DatabaseTemplate = {
|
|
|
17
17
|
isNullable: false,
|
|
18
18
|
isUnique: false,
|
|
19
19
|
foreignKey: {
|
|
20
|
-
referenceTable: 'users',
|
|
20
|
+
referenceTable: 'auth.users',
|
|
21
21
|
referenceColumn: 'id',
|
|
22
22
|
onDelete: 'CASCADE',
|
|
23
23
|
onUpdate: 'CASCADE',
|
|
@@ -70,7 +70,7 @@ export const instagramCloneTemplate: DatabaseTemplate = {
|
|
|
70
70
|
isNullable: false,
|
|
71
71
|
isUnique: false,
|
|
72
72
|
foreignKey: {
|
|
73
|
-
referenceTable: 'users',
|
|
73
|
+
referenceTable: 'auth.users',
|
|
74
74
|
referenceColumn: 'id',
|
|
75
75
|
onDelete: 'CASCADE',
|
|
76
76
|
onUpdate: 'CASCADE',
|
|
@@ -103,7 +103,7 @@ export const instagramCloneTemplate: DatabaseTemplate = {
|
|
|
103
103
|
isNullable: false,
|
|
104
104
|
isUnique: false,
|
|
105
105
|
foreignKey: {
|
|
106
|
-
referenceTable: 'users',
|
|
106
|
+
referenceTable: 'auth.users',
|
|
107
107
|
referenceColumn: 'id',
|
|
108
108
|
onDelete: 'CASCADE',
|
|
109
109
|
onUpdate: 'CASCADE',
|
|
@@ -142,7 +142,7 @@ export const instagramCloneTemplate: DatabaseTemplate = {
|
|
|
142
142
|
isNullable: false,
|
|
143
143
|
isUnique: false,
|
|
144
144
|
foreignKey: {
|
|
145
|
-
referenceTable: 'users',
|
|
145
|
+
referenceTable: 'auth.users',
|
|
146
146
|
referenceColumn: 'id',
|
|
147
147
|
onDelete: 'CASCADE',
|
|
148
148
|
onUpdate: 'CASCADE',
|
|
@@ -155,7 +155,7 @@ export const instagramCloneTemplate: DatabaseTemplate = {
|
|
|
155
155
|
isNullable: false,
|
|
156
156
|
isUnique: false,
|
|
157
157
|
foreignKey: {
|
|
158
|
-
referenceTable: 'users',
|
|
158
|
+
referenceTable: 'auth.users',
|
|
159
159
|
referenceColumn: 'id',
|
|
160
160
|
onDelete: 'CASCADE',
|
|
161
161
|
onUpdate: 'CASCADE',
|
|
@@ -176,7 +176,7 @@ export const instagramCloneTemplate: DatabaseTemplate = {
|
|
|
176
176
|
-- Posts table
|
|
177
177
|
CREATE TABLE posts (
|
|
178
178
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
179
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
179
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
180
180
|
image_url VARCHAR(500) NOT NULL,
|
|
181
181
|
caption TEXT,
|
|
182
182
|
created_at TIMESTAMP DEFAULT NOW()
|
|
@@ -186,7 +186,7 @@ CREATE TABLE posts (
|
|
|
186
186
|
CREATE TABLE comments (
|
|
187
187
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
188
188
|
post_id UUID NOT NULL REFERENCES posts(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
189
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
189
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
190
190
|
content TEXT NOT NULL,
|
|
191
191
|
created_at TIMESTAMP DEFAULT NOW()
|
|
192
192
|
);
|
|
@@ -194,7 +194,7 @@ CREATE TABLE comments (
|
|
|
194
194
|
-- Likes table
|
|
195
195
|
CREATE TABLE likes (
|
|
196
196
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
197
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
197
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
198
198
|
post_id UUID NOT NULL REFERENCES posts(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
199
199
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
200
200
|
UNIQUE(user_id, post_id)
|
|
@@ -203,8 +203,8 @@ CREATE TABLE likes (
|
|
|
203
203
|
-- Follows table
|
|
204
204
|
CREATE TABLE follows (
|
|
205
205
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
206
|
-
follower_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
207
|
-
following_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
206
|
+
follower_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
207
|
+
following_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
208
208
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
209
209
|
UNIQUE(follower_id, following_id),
|
|
210
210
|
CHECK (follower_id != following_id)
|
|
@@ -24,7 +24,7 @@ export const notionCloneTemplate: DatabaseTemplate = {
|
|
|
24
24
|
isNullable: false,
|
|
25
25
|
isUnique: false,
|
|
26
26
|
foreignKey: {
|
|
27
|
-
referenceTable: 'users',
|
|
27
|
+
referenceTable: 'auth.users',
|
|
28
28
|
referenceColumn: 'id',
|
|
29
29
|
onDelete: 'CASCADE',
|
|
30
30
|
onUpdate: 'CASCADE',
|
|
@@ -90,7 +90,7 @@ export const notionCloneTemplate: DatabaseTemplate = {
|
|
|
90
90
|
isNullable: false,
|
|
91
91
|
isUnique: false,
|
|
92
92
|
foreignKey: {
|
|
93
|
-
referenceTable: 'users',
|
|
93
|
+
referenceTable: 'auth.users',
|
|
94
94
|
referenceColumn: 'id',
|
|
95
95
|
onDelete: 'CASCADE',
|
|
96
96
|
onUpdate: 'CASCADE',
|
|
@@ -178,7 +178,7 @@ export const notionCloneTemplate: DatabaseTemplate = {
|
|
|
178
178
|
isNullable: false,
|
|
179
179
|
isUnique: false,
|
|
180
180
|
foreignKey: {
|
|
181
|
-
referenceTable: 'users',
|
|
181
|
+
referenceTable: 'auth.users',
|
|
182
182
|
referenceColumn: 'id',
|
|
183
183
|
onDelete: 'CASCADE',
|
|
184
184
|
onUpdate: 'CASCADE',
|
|
@@ -224,7 +224,7 @@ export const notionCloneTemplate: DatabaseTemplate = {
|
|
|
224
224
|
isNullable: false,
|
|
225
225
|
isUnique: false,
|
|
226
226
|
foreignKey: {
|
|
227
|
-
referenceTable: 'users',
|
|
227
|
+
referenceTable: 'auth.users',
|
|
228
228
|
referenceColumn: 'id',
|
|
229
229
|
onDelete: 'CASCADE',
|
|
230
230
|
onUpdate: 'CASCADE',
|
|
@@ -275,7 +275,7 @@ export const notionCloneTemplate: DatabaseTemplate = {
|
|
|
275
275
|
CREATE TABLE workspaces (
|
|
276
276
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
277
277
|
name VARCHAR(200) NOT NULL,
|
|
278
|
-
owner_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
278
|
+
owner_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
279
279
|
icon VARCHAR(100),
|
|
280
280
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
281
281
|
updated_at TIMESTAMP DEFAULT NOW()
|
|
@@ -286,7 +286,7 @@ CREATE TABLE pages (
|
|
|
286
286
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
287
287
|
workspace_id UUID NOT NULL REFERENCES workspaces(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
288
288
|
parent_page_id UUID REFERENCES pages(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
289
|
-
creator_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
289
|
+
creator_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
290
290
|
title VARCHAR(500) NOT NULL CHECK (LENGTH(TRIM(title)) > 0),
|
|
291
291
|
content TEXT,
|
|
292
292
|
icon VARCHAR(100),
|
|
@@ -301,7 +301,7 @@ CREATE TABLE pages (
|
|
|
301
301
|
CREATE TABLE page_shares (
|
|
302
302
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
303
303
|
page_id UUID NOT NULL REFERENCES pages(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
304
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
304
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
305
305
|
permission VARCHAR(20) NOT NULL CHECK (permission IN ('view', 'edit', 'admin')),
|
|
306
306
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
307
307
|
UNIQUE(page_id, user_id)
|
|
@@ -311,7 +311,7 @@ CREATE TABLE page_shares (
|
|
|
311
311
|
CREATE TABLE attachments (
|
|
312
312
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
313
313
|
page_id UUID NOT NULL REFERENCES pages(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
314
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
314
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
315
315
|
file_name VARCHAR(255) NOT NULL,
|
|
316
316
|
file_url VARCHAR(500) NOT NULL,
|
|
317
317
|
file_size INTEGER,
|
|
@@ -38,7 +38,7 @@ export const redditCloneTemplate: DatabaseTemplate = {
|
|
|
38
38
|
isNullable: false,
|
|
39
39
|
isUnique: false,
|
|
40
40
|
foreignKey: {
|
|
41
|
-
referenceTable: 'users',
|
|
41
|
+
referenceTable: 'auth.users',
|
|
42
42
|
referenceColumn: 'id',
|
|
43
43
|
onDelete: 'CASCADE',
|
|
44
44
|
onUpdate: 'CASCADE',
|
|
@@ -91,7 +91,7 @@ export const redditCloneTemplate: DatabaseTemplate = {
|
|
|
91
91
|
isNullable: false,
|
|
92
92
|
isUnique: false,
|
|
93
93
|
foreignKey: {
|
|
94
|
-
referenceTable: 'users',
|
|
94
|
+
referenceTable: 'auth.users',
|
|
95
95
|
referenceColumn: 'id',
|
|
96
96
|
onDelete: 'CASCADE',
|
|
97
97
|
onUpdate: 'CASCADE',
|
|
@@ -172,7 +172,7 @@ export const redditCloneTemplate: DatabaseTemplate = {
|
|
|
172
172
|
isNullable: false,
|
|
173
173
|
isUnique: false,
|
|
174
174
|
foreignKey: {
|
|
175
|
-
referenceTable: 'users',
|
|
175
|
+
referenceTable: 'auth.users',
|
|
176
176
|
referenceColumn: 'id',
|
|
177
177
|
onDelete: 'CASCADE',
|
|
178
178
|
onUpdate: 'CASCADE',
|
|
@@ -232,7 +232,7 @@ export const redditCloneTemplate: DatabaseTemplate = {
|
|
|
232
232
|
isNullable: false,
|
|
233
233
|
isUnique: false,
|
|
234
234
|
foreignKey: {
|
|
235
|
-
referenceTable: 'users',
|
|
235
|
+
referenceTable: 'auth.users',
|
|
236
236
|
referenceColumn: 'id',
|
|
237
237
|
onDelete: 'CASCADE',
|
|
238
238
|
onUpdate: 'CASCADE',
|
|
@@ -304,7 +304,7 @@ export const redditCloneTemplate: DatabaseTemplate = {
|
|
|
304
304
|
isNullable: false,
|
|
305
305
|
isUnique: false,
|
|
306
306
|
foreignKey: {
|
|
307
|
-
referenceTable: 'users',
|
|
307
|
+
referenceTable: 'auth.users',
|
|
308
308
|
referenceColumn: 'id',
|
|
309
309
|
onDelete: 'CASCADE',
|
|
310
310
|
onUpdate: 'CASCADE',
|
|
@@ -336,7 +336,7 @@ CREATE TABLE communities (
|
|
|
336
336
|
name VARCHAR(100) UNIQUE NOT NULL CHECK (name ~ '^[a-zA-Z0-9_]+$'),
|
|
337
337
|
display_name VARCHAR(200) NOT NULL,
|
|
338
338
|
description TEXT,
|
|
339
|
-
creator_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
339
|
+
creator_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
340
340
|
is_active BOOLEAN DEFAULT true,
|
|
341
341
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
342
342
|
updated_at TIMESTAMP DEFAULT NOW()
|
|
@@ -346,7 +346,7 @@ CREATE TABLE communities (
|
|
|
346
346
|
CREATE TABLE posts (
|
|
347
347
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
348
348
|
community_id UUID NOT NULL REFERENCES communities(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
349
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
349
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
350
350
|
title VARCHAR(300) NOT NULL CHECK (LENGTH(TRIM(title)) > 0),
|
|
351
351
|
content TEXT,
|
|
352
352
|
link_url VARCHAR(500),
|
|
@@ -365,7 +365,7 @@ CREATE TABLE posts (
|
|
|
365
365
|
CREATE TABLE comments (
|
|
366
366
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
367
367
|
post_id UUID NOT NULL REFERENCES posts(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
368
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
368
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
369
369
|
parent_comment_id UUID REFERENCES comments(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
370
370
|
content TEXT NOT NULL CHECK (LENGTH(TRIM(content)) > 0),
|
|
371
371
|
is_active BOOLEAN DEFAULT true,
|
|
@@ -376,7 +376,7 @@ CREATE TABLE comments (
|
|
|
376
376
|
-- Votes table (for both posts and comments)
|
|
377
377
|
CREATE TABLE votes (
|
|
378
378
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
379
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
379
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
380
380
|
post_id UUID REFERENCES posts(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
381
381
|
comment_id UUID REFERENCES comments(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
382
382
|
vote_type INTEGER NOT NULL CHECK (vote_type IN (-1, 1)),
|
|
@@ -393,7 +393,7 @@ CREATE TABLE votes (
|
|
|
393
393
|
CREATE TABLE community_members (
|
|
394
394
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
395
395
|
community_id UUID NOT NULL REFERENCES communities(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
396
|
-
user_id UUID NOT NULL REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
396
|
+
user_id UUID NOT NULL REFERENCES auth.users(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
397
397
|
role VARCHAR(20) NOT NULL DEFAULT 'member' CHECK (role IN ('member', 'moderator', 'admin')),
|
|
398
398
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
399
399
|
UNIQUE(community_id, user_id)
|