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
|
@@ -21,32 +21,38 @@ export const nameSchema = z
|
|
|
21
21
|
.max(100, 'Name must be less than 100 characters')
|
|
22
22
|
.trim();
|
|
23
23
|
|
|
24
|
-
export const roleSchema = z.enum(['authenticated', 'project_admin']);
|
|
24
|
+
export const roleSchema = z.enum(['anon', 'authenticated', 'project_admin']);
|
|
25
25
|
|
|
26
26
|
export const verificationMethodSchema = z.enum(['code', 'link']);
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* User profile schema with default fields and passthrough for custom fields
|
|
30
|
+
* Note: Using snake_case for fields as they are stored directly in PostgreSQL JSONB
|
|
31
|
+
*/
|
|
32
|
+
export const profileSchema = z
|
|
33
|
+
.object({
|
|
34
|
+
name: z.string().optional(),
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
36
|
+
avatar_url: z.string().url().optional(),
|
|
37
|
+
})
|
|
38
|
+
.passthrough();
|
|
39
|
+
|
|
28
40
|
// ============================================================================
|
|
29
41
|
// Core entity schemas
|
|
30
42
|
// ============================================================================
|
|
31
43
|
|
|
32
44
|
/**
|
|
33
|
-
* User entity schema - represents the
|
|
45
|
+
* User entity schema - represents the auth.users table in PostgreSQL
|
|
34
46
|
*/
|
|
35
47
|
export const userSchema = z.object({
|
|
36
48
|
id: userIdSchema,
|
|
37
49
|
email: emailSchema,
|
|
38
|
-
name: nameSchema,
|
|
39
50
|
emailVerified: z.boolean(),
|
|
40
|
-
|
|
41
|
-
.array(
|
|
42
|
-
z.object({
|
|
43
|
-
provider: z.string(),
|
|
44
|
-
})
|
|
45
|
-
)
|
|
46
|
-
.optional(),
|
|
47
|
-
providerType: z.string().optional(),
|
|
51
|
+
providers: z.array(z.string()).optional(),
|
|
48
52
|
createdAt: z.string(), // PostgreSQL timestamp
|
|
49
53
|
updatedAt: z.string(), // PostgreSQL timestamp
|
|
54
|
+
profile: profileSchema.nullable(), // User profile data (name, avatar_url, bio, etc.)
|
|
55
|
+
metadata: z.record(z.unknown()).nullable(), // System metadata (device ID, login IP, etc.)
|
|
50
56
|
});
|
|
51
57
|
|
|
52
58
|
/**
|
|
@@ -123,6 +129,7 @@ export type EmailSchema = z.infer<typeof emailSchema>;
|
|
|
123
129
|
export type PasswordSchema = z.infer<typeof passwordSchema>;
|
|
124
130
|
export type RoleSchema = z.infer<typeof roleSchema>;
|
|
125
131
|
export type VerificationMethodSchema = z.infer<typeof verificationMethodSchema>;
|
|
132
|
+
export type ProfileSchema = z.infer<typeof profileSchema>;
|
|
126
133
|
export type UserSchema = z.infer<typeof userSchema>;
|
|
127
134
|
export type TokenPayloadSchema = z.infer<typeof tokenPayloadSchema>;
|
|
128
135
|
export type OAuthConfigSchema = z.infer<typeof oAuthConfigSchema>;
|
|
@@ -37,6 +37,24 @@ export const navigateToUsageSchema = z.object({
|
|
|
37
37
|
type: z.literal('NAVIGATE_TO_USAGE'),
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
+
export const showContactModalEventSchema = z.object({
|
|
41
|
+
type: z.literal('SHOW_CONTACT_MODAL'),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export const showConnectOverlayEventSchema = z.object({
|
|
45
|
+
type: z.literal('SHOW_CONNECT_OVERLAY'),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export const authorizationCodeEventSchema = z.object({
|
|
49
|
+
type: z.literal('AUTHORIZATION_CODE'),
|
|
50
|
+
code: z.string(),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export const routeChangeEventSchema = z.object({
|
|
54
|
+
type: z.literal('ROUTE_CHANGE'),
|
|
55
|
+
path: z.string(),
|
|
56
|
+
});
|
|
57
|
+
|
|
40
58
|
export const cloudEventSchema = z.discriminatedUnion('type', [
|
|
41
59
|
appRouteChangeEventSchema,
|
|
42
60
|
authSuccessEventSchema,
|
|
@@ -46,6 +64,10 @@ export const cloudEventSchema = z.discriminatedUnion('type', [
|
|
|
46
64
|
showSettingsOverlayEventSchema,
|
|
47
65
|
onboardingSuccessSchema,
|
|
48
66
|
navigateToUsageSchema,
|
|
67
|
+
showContactModalEventSchema,
|
|
68
|
+
showConnectOverlayEventSchema,
|
|
69
|
+
authorizationCodeEventSchema,
|
|
70
|
+
routeChangeEventSchema,
|
|
49
71
|
]);
|
|
50
72
|
|
|
51
73
|
export type AppRouteChangeEvent = z.infer<typeof appRouteChangeEventSchema>;
|
|
@@ -55,3 +77,7 @@ export type McpConnectionStatusEvent = z.infer<typeof mcpConnectionStatusEventSc
|
|
|
55
77
|
export type CloudEvent = z.infer<typeof cloudEventSchema>;
|
|
56
78
|
export type ShowOnboardingOverlayEvent = z.infer<typeof showOnboardingOverlayEventSchema>;
|
|
57
79
|
export type ShowSettingsOverlayEvent = z.infer<typeof showSettingsOverlayEventSchema>;
|
|
80
|
+
export type ShowContactModalEvent = z.infer<typeof showContactModalEventSchema>;
|
|
81
|
+
export type ShowConnectOverlayEvent = z.infer<typeof showConnectOverlayEventSchema>;
|
|
82
|
+
export type AuthorizationCodeEvent = z.infer<typeof authorizationCodeEventSchema>;
|
|
83
|
+
export type RouteChangeEvent = z.infer<typeof routeChangeEventSchema>;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
columnSchema,
|
|
4
|
+
foreignKeySchema,
|
|
5
|
+
tableSchema,
|
|
6
|
+
databaseFunctionSchema,
|
|
7
|
+
databaseIndexSchema,
|
|
8
|
+
databasePolicySchema,
|
|
9
|
+
databaseTriggerSchema,
|
|
10
|
+
} from './database.schema';
|
|
3
11
|
|
|
4
12
|
export const createTableRequestSchema = tableSchema
|
|
5
13
|
.pick({
|
|
@@ -257,3 +265,26 @@ export type ImportDatabaseResponse = z.infer<typeof importResponseSchema>;
|
|
|
257
265
|
// Bulk Upsert Types
|
|
258
266
|
export type BulkUpsertRequest = z.infer<typeof bulkUpsertRequestSchema>;
|
|
259
267
|
export type BulkUpsertResponse = z.infer<typeof bulkUpsertResponseSchema>;
|
|
268
|
+
|
|
269
|
+
// Database Metadata Response Schemas
|
|
270
|
+
export const databaseFunctionsResponseSchema = z.object({
|
|
271
|
+
functions: z.array(databaseFunctionSchema),
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
export const databaseIndexesResponseSchema = z.object({
|
|
275
|
+
indexes: z.array(databaseIndexSchema),
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
export const databasePoliciesResponseSchema = z.object({
|
|
279
|
+
policies: z.array(databasePolicySchema),
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
export const databaseTriggersResponseSchema = z.object({
|
|
283
|
+
triggers: z.array(databaseTriggerSchema),
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
// Database Metadata Response Types
|
|
287
|
+
export type DatabaseFunctionsResponse = z.infer<typeof databaseFunctionsResponseSchema>;
|
|
288
|
+
export type DatabaseIndexesResponse = z.infer<typeof databaseIndexesResponseSchema>;
|
|
289
|
+
export type DatabasePoliciesResponse = z.infer<typeof databasePoliciesResponseSchema>;
|
|
290
|
+
export type DatabaseTriggersResponse = z.infer<typeof databaseTriggersResponseSchema>;
|
|
@@ -67,3 +67,42 @@ export type ColumnSchema = z.infer<typeof columnSchema>;
|
|
|
67
67
|
export type ForeignKeySchema = z.infer<typeof foreignKeySchema>;
|
|
68
68
|
export type OnUpdateActionSchema = z.infer<typeof onUpdateActionSchema>;
|
|
69
69
|
export type OnDeleteActionSchema = z.infer<typeof onDeleteActionSchema>;
|
|
70
|
+
|
|
71
|
+
// Database Metadata Object Schemas
|
|
72
|
+
export const databaseFunctionSchema = z.object({
|
|
73
|
+
functionName: z.string(),
|
|
74
|
+
functionDef: z.string(),
|
|
75
|
+
kind: z.string(),
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export const databaseIndexSchema = z.object({
|
|
79
|
+
tableName: z.string(),
|
|
80
|
+
indexName: z.string(),
|
|
81
|
+
indexDef: z.string(),
|
|
82
|
+
isUnique: z.boolean().nullable(),
|
|
83
|
+
isPrimary: z.boolean().nullable(),
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
export const databasePolicySchema = z.object({
|
|
87
|
+
tableName: z.string(),
|
|
88
|
+
policyName: z.string(),
|
|
89
|
+
cmd: z.string(),
|
|
90
|
+
roles: z.array(z.string()),
|
|
91
|
+
qual: z.string().nullable(),
|
|
92
|
+
withCheck: z.string().nullable(),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
export const databaseTriggerSchema = z.object({
|
|
96
|
+
tableName: z.string(),
|
|
97
|
+
triggerName: z.string(),
|
|
98
|
+
actionTiming: z.string(),
|
|
99
|
+
eventManipulation: z.string(),
|
|
100
|
+
actionOrientation: z.string(),
|
|
101
|
+
actionCondition: z.string().nullable(),
|
|
102
|
+
actionStatement: z.string(),
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
export type DatabaseFunction = z.infer<typeof databaseFunctionSchema>;
|
|
106
|
+
export type DatabaseIndex = z.infer<typeof databaseIndexSchema>;
|
|
107
|
+
export type DatabasePolicy = z.infer<typeof databasePolicySchema>;
|
|
108
|
+
export type DatabaseTrigger = z.infer<typeof databaseTriggerSchema>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { deploymentSchema } from './deployments.schema';
|
|
3
|
+
|
|
4
|
+
export const projectSettingsSchema = z.object({
|
|
5
|
+
buildCommand: z.string().nullable().optional(),
|
|
6
|
+
outputDirectory: z.string().nullable().optional(),
|
|
7
|
+
installCommand: z.string().nullable().optional(),
|
|
8
|
+
devCommand: z.string().nullable().optional(),
|
|
9
|
+
rootDirectory: z.string().nullable().optional(),
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
export const envVarSchema = z.object({
|
|
13
|
+
key: z.string(),
|
|
14
|
+
value: z.string(),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Response from creating a deployment - includes presigned upload info
|
|
19
|
+
*/
|
|
20
|
+
export const createDeploymentResponseSchema = z.object({
|
|
21
|
+
id: z.string().uuid(),
|
|
22
|
+
uploadUrl: z.string().url(),
|
|
23
|
+
uploadFields: z.record(z.string()), // Required for S3 presigned POST (policy, signature, key, etc.)
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Request to start a deployment (step 2)
|
|
28
|
+
* Triggers upload to Vercel and creates the actual deployment
|
|
29
|
+
*/
|
|
30
|
+
export const startDeploymentRequestSchema = z.object({
|
|
31
|
+
projectSettings: projectSettingsSchema.optional(),
|
|
32
|
+
envVars: z.array(envVarSchema).optional(),
|
|
33
|
+
meta: z.record(z.string()).optional(),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Response from starting a deployment
|
|
38
|
+
*/
|
|
39
|
+
export const startDeploymentResponseSchema = deploymentSchema;
|
|
40
|
+
|
|
41
|
+
export const listDeploymentsResponseSchema = z.object({
|
|
42
|
+
data: z.array(deploymentSchema),
|
|
43
|
+
pagination: z.object({
|
|
44
|
+
limit: z.number(),
|
|
45
|
+
offset: z.number(),
|
|
46
|
+
total: z.number(),
|
|
47
|
+
}),
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export type ProjectSettings = z.infer<typeof projectSettingsSchema>;
|
|
51
|
+
export type EnvVar = z.infer<typeof envVarSchema>;
|
|
52
|
+
export type CreateDeploymentResponse = z.infer<typeof createDeploymentResponseSchema>;
|
|
53
|
+
export type StartDeploymentRequest = z.infer<typeof startDeploymentRequestSchema>;
|
|
54
|
+
export type StartDeploymentResponse = z.infer<typeof startDeploymentResponseSchema>;
|
|
55
|
+
export type ListDeploymentsResponse = z.infer<typeof listDeploymentsResponseSchema>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Deployment status enum schema
|
|
5
|
+
* WAITING -> UPLOADING -> (Vercel statuses: QUEUED/BUILDING/READY/ERROR/CANCELED)
|
|
6
|
+
*/
|
|
7
|
+
export const deploymentStatusSchema = z.enum([
|
|
8
|
+
'WAITING', // Record created, waiting for client to upload zip to S3
|
|
9
|
+
'UPLOADING', // Server is downloading from S3 and uploading to Vercel
|
|
10
|
+
'QUEUED', // Vercel: deployment queued
|
|
11
|
+
'BUILDING', // Vercel: deployment building
|
|
12
|
+
'READY', // Vercel: deployment ready
|
|
13
|
+
'ERROR', // Vercel: deployment failed
|
|
14
|
+
'CANCELED', // Vercel: deployment canceled
|
|
15
|
+
]);
|
|
16
|
+
|
|
17
|
+
export type DeploymentStatusType = z.infer<typeof deploymentStatusSchema>;
|
|
18
|
+
|
|
19
|
+
export const deploymentSchema = z.object({
|
|
20
|
+
id: z.string().uuid(),
|
|
21
|
+
providerDeploymentId: z.string().nullable(), // Provider's deployment ID, null until deployment starts
|
|
22
|
+
provider: z.string(),
|
|
23
|
+
status: deploymentStatusSchema,
|
|
24
|
+
url: z.string().nullable(),
|
|
25
|
+
metadata: z.record(z.unknown()).nullable(),
|
|
26
|
+
createdAt: z.string().datetime(),
|
|
27
|
+
updatedAt: z.string().datetime(),
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export type DeploymentSchema = z.infer<typeof deploymentSchema>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
export const docTypeSchema = z
|
|
4
|
+
.enum([
|
|
5
|
+
'instructions',
|
|
6
|
+
'auth-sdk',
|
|
7
|
+
'db-sdk',
|
|
8
|
+
'storage-sdk',
|
|
9
|
+
'functions-sdk',
|
|
10
|
+
'ai-integration-sdk',
|
|
11
|
+
'auth-components-react',
|
|
12
|
+
'auth-components-nextjs',
|
|
13
|
+
'real-time',
|
|
14
|
+
'deployment',
|
|
15
|
+
])
|
|
16
|
+
.describe(
|
|
17
|
+
`
|
|
18
|
+
Documentation type:
|
|
19
|
+
"instructions" (essential backend setup - use FIRST),
|
|
20
|
+
"db-sdk" (database operations),
|
|
21
|
+
"storage-sdk" (file storage),
|
|
22
|
+
"functions-sdk" (edge functions),
|
|
23
|
+
"auth-sdk" (direct SDK methods for custom auth flows),
|
|
24
|
+
"auth-components-react" (authentication components for React+Vite applications),
|
|
25
|
+
"auth-components-nextjs" (authentication components for Next.js applications),
|
|
26
|
+
"ai-integration-sdk" (AI features),
|
|
27
|
+
"real-time" (real-time pub/sub through WebSockets),
|
|
28
|
+
"deployment" (deploy frontend applications via MCP tool)
|
|
29
|
+
`
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
export type DocTypeSchema = z.infer<typeof docTypeSchema>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { emailSchema } from './auth.schema';
|
|
3
|
+
|
|
4
|
+
const emailOrEmails = z.union([
|
|
5
|
+
emailSchema,
|
|
6
|
+
z
|
|
7
|
+
.array(emailSchema)
|
|
8
|
+
.min(1, 'At least one email is required')
|
|
9
|
+
.max(50, 'Maximum 50 recipients allowed'),
|
|
10
|
+
]);
|
|
11
|
+
|
|
12
|
+
export const sendRawEmailRequestSchema = z.object({
|
|
13
|
+
to: emailOrEmails,
|
|
14
|
+
subject: z.string().trim().min(1, 'Subject is required').max(500, 'Subject too long'),
|
|
15
|
+
html: z.string().trim().min(1, 'HTML content is required'),
|
|
16
|
+
cc: emailOrEmails.optional(),
|
|
17
|
+
bcc: emailOrEmails.optional(),
|
|
18
|
+
from: z.string().trim().max(100, 'From name too long').optional(),
|
|
19
|
+
replyTo: z.string().email('Reply-To must be a valid email').optional(),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
export type SendRawEmailRequest = z.infer<typeof sendRawEmailRequestSchema>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Response for POST /api/email/send-raw
|
|
26
|
+
* Empty on success - extend with optional fields later if needed
|
|
27
|
+
*/
|
|
28
|
+
export const sendEmailResponseSchema = z.object({});
|
|
29
|
+
|
|
30
|
+
export type SendEmailResponse = z.infer<typeof sendEmailResponseSchema>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { functionSchema } from './functions.schema';
|
|
2
3
|
|
|
3
|
-
export const
|
|
4
|
+
export const uploadFunctionRequestSchema = z.object({
|
|
4
5
|
name: z.string().min(1, 'Name is required'),
|
|
5
6
|
slug: z
|
|
6
7
|
.string()
|
|
@@ -14,12 +15,20 @@ export const functionUploadRequestSchema = z.object({
|
|
|
14
15
|
status: z.enum(['draft', 'active']).optional().default('active'),
|
|
15
16
|
});
|
|
16
17
|
|
|
17
|
-
export const
|
|
18
|
+
export const updateFunctionRequestSchema = z.object({
|
|
18
19
|
name: z.string().optional(),
|
|
19
20
|
code: z.string().optional(),
|
|
20
21
|
description: z.string().optional(),
|
|
21
22
|
status: z.enum(['draft', 'active']).optional(),
|
|
22
23
|
});
|
|
23
24
|
|
|
24
|
-
export
|
|
25
|
-
|
|
25
|
+
export const listFunctionsResponseSchema = z.object({
|
|
26
|
+
functions: z.array(functionSchema),
|
|
27
|
+
runtime: z.object({
|
|
28
|
+
status: z.enum(['running', 'unavailable']),
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export type UploadFunctionRequest = z.infer<typeof uploadFunctionRequestSchema>;
|
|
33
|
+
export type UpdateFunctionRequest = z.infer<typeof updateFunctionRequestSchema>;
|
|
34
|
+
export type ListFunctionsResponse = z.infer<typeof listFunctionsResponseSchema>;
|
|
@@ -7,7 +7,7 @@ export const functionSchema = z.object({
|
|
|
7
7
|
name: z.string(),
|
|
8
8
|
description: z.string().nullable(),
|
|
9
9
|
code: z.string(),
|
|
10
|
-
status: z.enum(['draft', 'active']),
|
|
10
|
+
status: z.enum(['draft', 'active', 'error']),
|
|
11
11
|
createdAt: z.string(),
|
|
12
12
|
updatedAt: z.string(),
|
|
13
13
|
deployedAt: z.string().nullable(),
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
export * from './database.schema';
|
|
2
|
-
export * from './database-api.schema';
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './
|
|
5
|
-
export * from './
|
|
6
|
-
export * from './
|
|
7
|
-
export * from './
|
|
8
|
-
export * from './
|
|
9
|
-
export * from './
|
|
10
|
-
export * from './
|
|
11
|
-
export * from './
|
|
12
|
-
export * from './
|
|
13
|
-
export * from './
|
|
14
|
-
export * from './
|
|
1
|
+
export * from './database.schema';
|
|
2
|
+
export * from './database-api.schema';
|
|
3
|
+
export * from './secrets.schema';
|
|
4
|
+
export * from './secrets-api.schema';
|
|
5
|
+
export * from './storage.schema';
|
|
6
|
+
export * from './storage-api.schema';
|
|
7
|
+
export * from './auth.schema';
|
|
8
|
+
export * from './auth-api.schema';
|
|
9
|
+
export * from './metadata.schema';
|
|
10
|
+
export * from './ai.schema';
|
|
11
|
+
export * from './ai-api.schema';
|
|
12
|
+
export * from './logs.schema';
|
|
13
|
+
export * from './logs-api.schema';
|
|
14
|
+
export * from './functions.schema';
|
|
15
|
+
export * from './functions-api.schema';
|
|
16
|
+
export * from './cloud-events.schema';
|
|
17
|
+
export * from './realtime.schema';
|
|
18
|
+
export * from './realtime-api.schema';
|
|
19
|
+
export * from './docs.schema';
|
|
20
|
+
export * from './email-api.schema';
|
|
21
|
+
export * from './deployments.schema';
|
|
22
|
+
export * from './deployments-api.schema';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { storageBucketSchema } from './storage.schema';
|
|
3
|
-
import {
|
|
3
|
+
import { realtimeChannelSchema } from './realtime.schema';
|
|
4
|
+
import { realtimePermissionsResponseSchema } from './realtime-api.schema';
|
|
5
|
+
import { getPublicAuthConfigResponseSchema } from './auth-api.schema';
|
|
4
6
|
|
|
5
|
-
export const authMetadataSchema =
|
|
6
|
-
oauths: z.array(oAuthConfigSchema),
|
|
7
|
-
});
|
|
7
|
+
export const authMetadataSchema = getPublicAuthConfigResponseSchema;
|
|
8
8
|
|
|
9
9
|
export const databaseMetadataSchema = z.object({
|
|
10
10
|
tables: z.array(
|
|
@@ -43,12 +43,18 @@ export const aiMetadataSchema = z.object({
|
|
|
43
43
|
),
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
+
export const realtimeMetadataSchema = z.object({
|
|
47
|
+
channels: z.array(realtimeChannelSchema),
|
|
48
|
+
permissions: realtimePermissionsResponseSchema,
|
|
49
|
+
});
|
|
50
|
+
|
|
46
51
|
export const appMetaDataSchema = z.object({
|
|
47
52
|
auth: authMetadataSchema,
|
|
48
53
|
database: databaseMetadataSchema,
|
|
49
54
|
storage: storageMetadataSchema,
|
|
50
55
|
aiIntegration: aiMetadataSchema.optional(),
|
|
51
56
|
functions: z.array(edgeFunctionMetadataSchema),
|
|
57
|
+
realtime: realtimeMetadataSchema.optional(),
|
|
52
58
|
version: z.string().optional(),
|
|
53
59
|
});
|
|
54
60
|
|
|
@@ -58,4 +64,33 @@ export type BucketMetadataSchema = z.infer<typeof bucketMetadataSchema>;
|
|
|
58
64
|
export type StorageMetadataSchema = z.infer<typeof storageMetadataSchema>;
|
|
59
65
|
export type EdgeFunctionMetadataSchema = z.infer<typeof edgeFunctionMetadataSchema>;
|
|
60
66
|
export type AIMetadataSchema = z.infer<typeof aiMetadataSchema>;
|
|
67
|
+
export type RealtimeMetadataSchema = z.infer<typeof realtimeMetadataSchema>;
|
|
61
68
|
export type AppMetadataSchema = z.infer<typeof appMetaDataSchema>;
|
|
69
|
+
|
|
70
|
+
// Database connection schemas
|
|
71
|
+
export const databaseConnectionParametersSchema = z.object({
|
|
72
|
+
host: z.string(),
|
|
73
|
+
port: z.number(),
|
|
74
|
+
database: z.string(),
|
|
75
|
+
user: z.string(),
|
|
76
|
+
password: z.string(),
|
|
77
|
+
sslmode: z.string(),
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
export const databaseConnectionInfoSchema = z.object({
|
|
81
|
+
connectionURL: z.string(),
|
|
82
|
+
parameters: databaseConnectionParametersSchema,
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export const databasePasswordInfoSchema = z.object({
|
|
86
|
+
databasePassword: z.string(),
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
export const apiKeyResponseSchema = z.object({
|
|
90
|
+
apiKey: z.string(),
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
export type DatabaseConnectionParameters = z.infer<typeof databaseConnectionParametersSchema>;
|
|
94
|
+
export type DatabaseConnectionInfo = z.infer<typeof databaseConnectionInfoSchema>;
|
|
95
|
+
export type DatabasePasswordInfo = z.infer<typeof databasePasswordInfoSchema>;
|
|
96
|
+
export type ApiKeyResponse = z.infer<typeof apiKeyResponseSchema>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { realtimeChannelSchema, realtimeMessageSchema } from './realtime.schema';
|
|
3
|
+
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Channel CRUD Schemas
|
|
6
|
+
// ============================================================================
|
|
7
|
+
|
|
8
|
+
// Create Channel
|
|
9
|
+
export const createChannelRequestSchema = z.object({
|
|
10
|
+
pattern: z.string().min(1, 'Channel pattern is required'),
|
|
11
|
+
description: z.string().optional(),
|
|
12
|
+
webhookUrls: z.array(z.string().url()).optional(),
|
|
13
|
+
enabled: z.boolean().optional().default(true),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export const createChannelResponseSchema = realtimeChannelSchema;
|
|
17
|
+
|
|
18
|
+
export type CreateChannelRequest = z.infer<typeof createChannelRequestSchema>;
|
|
19
|
+
export type CreateChannelResponse = z.infer<typeof createChannelResponseSchema>;
|
|
20
|
+
|
|
21
|
+
// Update Channel
|
|
22
|
+
export const updateChannelRequestSchema = z.object({
|
|
23
|
+
pattern: z.string().min(1).optional(),
|
|
24
|
+
description: z.string().optional(),
|
|
25
|
+
webhookUrls: z.array(z.string().url()).optional(),
|
|
26
|
+
enabled: z.boolean().optional(),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export const updateChannelResponseSchema = realtimeChannelSchema;
|
|
30
|
+
|
|
31
|
+
export type UpdateChannelRequest = z.infer<typeof updateChannelRequestSchema>;
|
|
32
|
+
export type UpdateChannelResponse = z.infer<typeof updateChannelResponseSchema>;
|
|
33
|
+
|
|
34
|
+
// Get Channel
|
|
35
|
+
export const getChannelResponseSchema = realtimeChannelSchema;
|
|
36
|
+
|
|
37
|
+
export type GetChannelResponse = z.infer<typeof getChannelResponseSchema>;
|
|
38
|
+
|
|
39
|
+
// List Channels
|
|
40
|
+
export const listChannelsResponseSchema = z.array(realtimeChannelSchema);
|
|
41
|
+
|
|
42
|
+
export type ListChannelsResponse = z.infer<typeof listChannelsResponseSchema>;
|
|
43
|
+
|
|
44
|
+
// Delete Channel
|
|
45
|
+
export const deleteChannelResponseSchema = z.object({
|
|
46
|
+
message: z.string(),
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export type DeleteChannelResponse = z.infer<typeof deleteChannelResponseSchema>;
|
|
50
|
+
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// Message Schemas
|
|
53
|
+
// ============================================================================
|
|
54
|
+
|
|
55
|
+
// List Messages
|
|
56
|
+
export const listMessagesRequestSchema = z.object({
|
|
57
|
+
channelId: z.string().uuid().optional(),
|
|
58
|
+
eventName: z.string().optional(),
|
|
59
|
+
limit: z.coerce.number().int().min(1).max(1000).optional().default(100),
|
|
60
|
+
offset: z.coerce.number().int().min(0).optional().default(0),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
export const listMessagesResponseSchema = z.array(realtimeMessageSchema);
|
|
64
|
+
|
|
65
|
+
export type ListMessagesRequest = z.infer<typeof listMessagesRequestSchema>;
|
|
66
|
+
export type ListMessagesResponse = z.infer<typeof listMessagesResponseSchema>;
|
|
67
|
+
|
|
68
|
+
// Message Stats
|
|
69
|
+
export const messageStatsRequestSchema = z.object({
|
|
70
|
+
channelId: z.string().uuid().optional(),
|
|
71
|
+
since: z.coerce.date().optional(),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export const messageStatsResponseSchema = z.object({
|
|
75
|
+
totalMessages: z.number().int().min(0),
|
|
76
|
+
whDeliveryRate: z.number().min(0).max(1),
|
|
77
|
+
topEvents: z.array(
|
|
78
|
+
z.object({
|
|
79
|
+
eventName: z.string(),
|
|
80
|
+
count: z.number().int().min(0),
|
|
81
|
+
})
|
|
82
|
+
),
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export type MessageStatsRequest = z.infer<typeof messageStatsRequestSchema>;
|
|
86
|
+
export type MessageStatsResponse = z.infer<typeof messageStatsResponseSchema>;
|
|
87
|
+
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// Permissions Schemas
|
|
90
|
+
// ============================================================================
|
|
91
|
+
|
|
92
|
+
export const rlsPolicySchema = z.object({
|
|
93
|
+
policyName: z.string(),
|
|
94
|
+
tableName: z.string(),
|
|
95
|
+
command: z.string(),
|
|
96
|
+
roles: z.array(z.string()),
|
|
97
|
+
using: z.string().nullable(),
|
|
98
|
+
withCheck: z.string().nullable(),
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
export const realtimePermissionsResponseSchema = z.object({
|
|
102
|
+
subscribe: z.object({
|
|
103
|
+
policies: z.array(rlsPolicySchema),
|
|
104
|
+
}),
|
|
105
|
+
publish: z.object({
|
|
106
|
+
policies: z.array(rlsPolicySchema),
|
|
107
|
+
}),
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
export type RlsPolicy = z.infer<typeof rlsPolicySchema>;
|
|
111
|
+
export type RealtimePermissionsResponse = z.infer<typeof realtimePermissionsResponseSchema>;
|