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,256 +1,293 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Architecture
|
|
3
|
-
description: PostgreSQL database with automatic REST APIs via PostgREST
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
InsForge uses a powerful database stack that automatically generates REST APIs from your PostgreSQL schema, eliminating the need to write backend CRUD code.
|
|
9
|
-
|
|
10
|
-
## Technology Stack
|
|
11
|
-
|
|
12
|
-
```mermaid
|
|
13
|
-
graph TB
|
|
14
|
-
Client[Client Application] --> SDK[InsForge SDK]
|
|
15
|
-
SDK --> API[InsForge API]
|
|
16
|
-
API --> PostgREST[PostgREST v12.2]
|
|
17
|
-
PostgREST --> PG[(PostgreSQL 15)]
|
|
18
|
-
API --> PG
|
|
19
|
-
|
|
20
|
-
PG --> RLS[Row Level Security]
|
|
21
|
-
PG --> Triggers[Database Triggers]
|
|
22
|
-
PG --> Functions[Stored Functions]
|
|
23
|
-
PG --> Schemas[Multiple Schemas]
|
|
24
|
-
|
|
25
|
-
style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
|
|
26
|
-
style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
|
|
27
|
-
style API fill:#166534,stroke:#22c55e,color:#dcfce7
|
|
28
|
-
style PostgREST fill:#c2410c,stroke:#fb923c,color:#fed7aa
|
|
29
|
-
style PG fill:#0e7490,stroke:#06b6d4,color:#cffafe
|
|
30
|
-
style RLS fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
31
|
-
style Triggers fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
32
|
-
style Functions fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
33
|
-
style Schemas fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Core Components
|
|
37
|
-
|
|
38
|
-
| Component | Technology | Version | Purpose |
|
|
39
|
-
|-----------|------------|---------|---------|
|
|
40
|
-
| **Database** | PostgreSQL | 15.13 | ACID-compliant relational database |
|
|
41
|
-
| **REST API** | PostgREST | 12.2.12 | Auto-generates RESTful APIs from public schema only |
|
|
42
|
-
| **Query Engine** | PostgREST DSL | - | Powerful filtering with operators and functions |
|
|
43
|
-
| **Security** | Row Level Security | - | Fine-grained access control at the row level |
|
|
44
|
-
| **Roles** | PostgreSQL Roles | - | anon (read-only), authenticated (CRUD), project_admin (full) |
|
|
45
|
-
| **SDK** | @insforge/sdk | Latest | Type-safe JavaScript/TypeScript client |
|
|
46
|
-
|
|
47
|
-
## How It Works
|
|
48
|
-
|
|
49
|
-
### 1. Schema Definition
|
|
50
|
-
When you create a table through the InsForge API or migrations:
|
|
51
|
-
- Table structure is stored in PostgreSQL
|
|
52
|
-
- PostgREST discovers the schema via database introspection
|
|
53
|
-
- REST endpoints are instantly available
|
|
54
|
-
|
|
55
|
-
### 2. API Generation
|
|
56
|
-
PostgREST automatically creates endpoints:
|
|
57
|
-
- `GET /api/database/records/{table}` - Query records
|
|
58
|
-
- `POST /api/database/records/{table}` - Insert records
|
|
59
|
-
- `PATCH /api/database/records/{table}` - Update records
|
|
60
|
-
- `DELETE /api/database/records/{table}` - Delete records
|
|
61
|
-
|
|
62
|
-
### 3. Query Translation
|
|
63
|
-
HTTP requests are converted to optimized SQL:
|
|
64
|
-
```
|
|
65
|
-
GET /api/database/records/products?price=gte.100&category=eq.electronics
|
|
66
|
-
↓
|
|
67
|
-
SELECT * FROM products
|
|
68
|
-
WHERE price >= 100
|
|
69
|
-
AND category = 'electronics'
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
### 4. Security Layer
|
|
73
|
-
- JWT tokens are validated on each request
|
|
74
|
-
- User ID extracted from token
|
|
75
|
-
- RLS policies applied based on user context
|
|
76
|
-
- Only authorized rows are returned
|
|
77
|
-
|
|
78
|
-
### 5. Response Format
|
|
79
|
-
- Results returned as JSON arrays
|
|
80
|
-
- HTTP status codes indicate success/failure
|
|
81
|
-
- Headers include pagination info
|
|
82
|
-
|
|
83
|
-
## PostgREST Features
|
|
84
|
-
|
|
85
|
-
<CardGroup cols={2}>
|
|
86
|
-
<Card title="Instant APIs" icon="bolt">
|
|
87
|
-
Every table gets full CRUD endpoints automatically without writing any backend code
|
|
88
|
-
</Card>
|
|
89
|
-
|
|
90
|
-
<Card title="Advanced Filtering" icon="filter">
|
|
91
|
-
Complex queries with operators like `eq`, `gt`, `like`, `in`, `is`, `or`
|
|
92
|
-
</Card>
|
|
93
|
-
|
|
94
|
-
<Card title="Relationship Embedding" icon="link">
|
|
95
|
-
Join related tables in single requests using foreign key relationships
|
|
96
|
-
</Card>
|
|
97
|
-
|
|
98
|
-
<Card title="Bulk Operations" icon="layer-group">
|
|
99
|
-
Insert, update, or delete multiple records in a single atomic transaction
|
|
100
|
-
</Card>
|
|
101
|
-
|
|
102
|
-
<Card title="Computed Fields" icon="calculator">
|
|
103
|
-
Expose database functions and views as API endpoints
|
|
104
|
-
</Card>
|
|
105
|
-
|
|
106
|
-
<Card title="Real-time Updates" icon="sync">
|
|
107
|
-
NOTIFY/LISTEN for schema changes without restart
|
|
108
|
-
</Card>
|
|
109
|
-
</CardGroup>
|
|
110
|
-
|
|
111
|
-
## Database Structure
|
|
112
|
-
|
|
113
|
-
InsForge uses two PostgreSQL databases:
|
|
114
|
-
|
|
115
|
-
### Main Database (`insforge`)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
|
119
|
-
|
|
120
|
-
| **
|
|
121
|
-
| **
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
|
133
|
-
|
|
134
|
-
| `
|
|
135
|
-
| `
|
|
136
|
-
| `
|
|
137
|
-
| `
|
|
138
|
-
| `
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
|
150
|
-
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
|
157
|
-
|
|
158
|
-
| `
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
##
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
1
|
+
---
|
|
2
|
+
title: Database Architecture
|
|
3
|
+
description: PostgreSQL database with automatic REST APIs via PostgREST
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
InsForge uses a powerful database stack that automatically generates REST APIs from your PostgreSQL schema, eliminating the need to write backend CRUD code.
|
|
9
|
+
|
|
10
|
+
## Technology Stack
|
|
11
|
+
|
|
12
|
+
```mermaid
|
|
13
|
+
graph TB
|
|
14
|
+
Client[Client Application] --> SDK[InsForge SDK]
|
|
15
|
+
SDK --> API[InsForge API]
|
|
16
|
+
API --> PostgREST[PostgREST v12.2]
|
|
17
|
+
PostgREST --> PG[(PostgreSQL 15)]
|
|
18
|
+
API --> PG
|
|
19
|
+
|
|
20
|
+
PG --> RLS[Row Level Security]
|
|
21
|
+
PG --> Triggers[Database Triggers]
|
|
22
|
+
PG --> Functions[Stored Functions]
|
|
23
|
+
PG --> Schemas[Multiple Schemas]
|
|
24
|
+
|
|
25
|
+
style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
|
|
26
|
+
style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
|
|
27
|
+
style API fill:#166534,stroke:#22c55e,color:#dcfce7
|
|
28
|
+
style PostgREST fill:#c2410c,stroke:#fb923c,color:#fed7aa
|
|
29
|
+
style PG fill:#0e7490,stroke:#06b6d4,color:#cffafe
|
|
30
|
+
style RLS fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
31
|
+
style Triggers fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
32
|
+
style Functions fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
33
|
+
style Schemas fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Core Components
|
|
37
|
+
|
|
38
|
+
| Component | Technology | Version | Purpose |
|
|
39
|
+
|-----------|------------|---------|---------|
|
|
40
|
+
| **Database** | PostgreSQL | 15.13 | ACID-compliant relational database |
|
|
41
|
+
| **REST API** | PostgREST | 12.2.12 | Auto-generates RESTful APIs from public schema only |
|
|
42
|
+
| **Query Engine** | PostgREST DSL | - | Powerful filtering with operators and functions |
|
|
43
|
+
| **Security** | Row Level Security | - | Fine-grained access control at the row level |
|
|
44
|
+
| **Roles** | PostgreSQL Roles | - | anon (read-only), authenticated (CRUD), project_admin (full) |
|
|
45
|
+
| **SDK** | @insforge/sdk | Latest | Type-safe JavaScript/TypeScript client |
|
|
46
|
+
|
|
47
|
+
## How It Works
|
|
48
|
+
|
|
49
|
+
### 1. Schema Definition
|
|
50
|
+
When you create a table through the InsForge API or migrations:
|
|
51
|
+
- Table structure is stored in PostgreSQL
|
|
52
|
+
- PostgREST discovers the schema via database introspection
|
|
53
|
+
- REST endpoints are instantly available
|
|
54
|
+
|
|
55
|
+
### 2. API Generation
|
|
56
|
+
PostgREST automatically creates endpoints:
|
|
57
|
+
- `GET /api/database/records/{table}` - Query records
|
|
58
|
+
- `POST /api/database/records/{table}` - Insert records
|
|
59
|
+
- `PATCH /api/database/records/{table}` - Update records
|
|
60
|
+
- `DELETE /api/database/records/{table}` - Delete records
|
|
61
|
+
|
|
62
|
+
### 3. Query Translation
|
|
63
|
+
HTTP requests are converted to optimized SQL:
|
|
64
|
+
```
|
|
65
|
+
GET /api/database/records/products?price=gte.100&category=eq.electronics
|
|
66
|
+
↓
|
|
67
|
+
SELECT * FROM products
|
|
68
|
+
WHERE price >= 100
|
|
69
|
+
AND category = 'electronics'
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 4. Security Layer
|
|
73
|
+
- JWT tokens are validated on each request
|
|
74
|
+
- User ID extracted from token
|
|
75
|
+
- RLS policies applied based on user context
|
|
76
|
+
- Only authorized rows are returned
|
|
77
|
+
|
|
78
|
+
### 5. Response Format
|
|
79
|
+
- Results returned as JSON arrays
|
|
80
|
+
- HTTP status codes indicate success/failure
|
|
81
|
+
- Headers include pagination info
|
|
82
|
+
|
|
83
|
+
## PostgREST Features
|
|
84
|
+
|
|
85
|
+
<CardGroup cols={2}>
|
|
86
|
+
<Card title="Instant APIs" icon="bolt">
|
|
87
|
+
Every table gets full CRUD endpoints automatically without writing any backend code
|
|
88
|
+
</Card>
|
|
89
|
+
|
|
90
|
+
<Card title="Advanced Filtering" icon="filter">
|
|
91
|
+
Complex queries with operators like `eq`, `gt`, `like`, `in`, `is`, `or`
|
|
92
|
+
</Card>
|
|
93
|
+
|
|
94
|
+
<Card title="Relationship Embedding" icon="link">
|
|
95
|
+
Join related tables in single requests using foreign key relationships
|
|
96
|
+
</Card>
|
|
97
|
+
|
|
98
|
+
<Card title="Bulk Operations" icon="layer-group">
|
|
99
|
+
Insert, update, or delete multiple records in a single atomic transaction
|
|
100
|
+
</Card>
|
|
101
|
+
|
|
102
|
+
<Card title="Computed Fields" icon="calculator">
|
|
103
|
+
Expose database functions and views as API endpoints
|
|
104
|
+
</Card>
|
|
105
|
+
|
|
106
|
+
<Card title="Real-time Updates" icon="sync">
|
|
107
|
+
NOTIFY/LISTEN for schema changes without restart
|
|
108
|
+
</Card>
|
|
109
|
+
</CardGroup>
|
|
110
|
+
|
|
111
|
+
## Database Structure
|
|
112
|
+
|
|
113
|
+
InsForge uses two PostgreSQL databases:
|
|
114
|
+
|
|
115
|
+
### Main Database (`insforge`)
|
|
116
|
+
Tables are organized into dedicated schemas for better organization and security:
|
|
117
|
+
|
|
118
|
+
| Schema | Purpose | Access |
|
|
119
|
+
|--------|---------|--------|
|
|
120
|
+
| **public** | User-created tables | PostgREST (auto-generated APIs) |
|
|
121
|
+
| **auth** | Authentication & user data | Internal APIs only |
|
|
122
|
+
| **storage** | File storage metadata | Internal APIs only |
|
|
123
|
+
| **ai** | AI configuration & usage | Internal APIs only |
|
|
124
|
+
| **functions** | Edge function definitions | Internal APIs only |
|
|
125
|
+
| **realtime** | Real-time pub/sub channels | Internal APIs only |
|
|
126
|
+
| **system** | Core system data | Internal APIs only |
|
|
127
|
+
|
|
128
|
+
### Schema Details
|
|
129
|
+
|
|
130
|
+
#### `auth` Schema (Authentication)
|
|
131
|
+
|
|
132
|
+
| Table | Purpose |
|
|
133
|
+
|-------|---------|
|
|
134
|
+
| `users` | Core user records with metadata |
|
|
135
|
+
| `user_providers` | OAuth provider connections |
|
|
136
|
+
| `configs` | Authentication settings |
|
|
137
|
+
| `oauth_configs` | OAuth provider configurations |
|
|
138
|
+
| `email_otps` | Email verification codes |
|
|
139
|
+
|
|
140
|
+
#### `storage` Schema (File Storage)
|
|
141
|
+
|
|
142
|
+
| Table | Purpose |
|
|
143
|
+
|-------|---------|
|
|
144
|
+
| `buckets` | Storage bucket configuration |
|
|
145
|
+
| `objects` | File metadata and references |
|
|
146
|
+
|
|
147
|
+
#### `ai` Schema (AI Integration)
|
|
148
|
+
|
|
149
|
+
| Table | Purpose |
|
|
150
|
+
|-------|---------|
|
|
151
|
+
| `configs` | AI model configurations per project |
|
|
152
|
+
| `usage` | AI token usage tracking |
|
|
153
|
+
|
|
154
|
+
#### `functions` Schema (Edge Functions)
|
|
155
|
+
|
|
156
|
+
| Table | Purpose |
|
|
157
|
+
|-------|---------|
|
|
158
|
+
| `definitions` | Serverless function definitions |
|
|
159
|
+
|
|
160
|
+
#### `realtime` Schema (Real-time Pub/Sub)
|
|
161
|
+
|
|
162
|
+
| Table | Purpose |
|
|
163
|
+
|-------|---------|
|
|
164
|
+
| `channels` | Channel metadata and subscription configuration for real-time Pub/Sub |
|
|
165
|
+
| `messages` | Real-time message queue |
|
|
166
|
+
|
|
167
|
+
#### `system` Schema (Core System)
|
|
168
|
+
|
|
169
|
+
| Table | Purpose |
|
|
170
|
+
|-------|---------|
|
|
171
|
+
| `secrets` | Encrypted system secrets |
|
|
172
|
+
| `audit_logs` | Activity and audit logs |
|
|
173
|
+
| `mcp_usage` | MCP tool usage tracking |
|
|
174
|
+
| `migrations` | Database migration history |
|
|
175
|
+
|
|
176
|
+
<Note>
|
|
177
|
+
Only tables in the `public` schema are exposed via PostgREST auto-generated APIs. System schemas are accessible only through internal InsForge APIs.
|
|
178
|
+
</Note>
|
|
179
|
+
|
|
180
|
+
## Query Syntax
|
|
181
|
+
|
|
182
|
+
PostgREST provides a powerful query syntax that maps to SQL:
|
|
183
|
+
|
|
184
|
+
### Operators
|
|
185
|
+
|
|
186
|
+
| Operator | SQL Equivalent | Example |
|
|
187
|
+
|----------|---------------|---------|
|
|
188
|
+
| `eq` | `=` | `?id=eq.123` |
|
|
189
|
+
| `neq` | `!=` | `?status=neq.deleted` |
|
|
190
|
+
| `gt` | `>` | `?age=gt.18` |
|
|
191
|
+
| `gte` | `>=` | `?price=gte.100` |
|
|
192
|
+
| `lt` | `<` | `?created=lt.2024-01-01` |
|
|
193
|
+
| `lte` | `<=` | `?quantity=lte.10` |
|
|
194
|
+
| `like` | `LIKE` | `?name=like.*john*` |
|
|
195
|
+
| `ilike` | `ILIKE` | `?email=ilike.*gmail*` |
|
|
196
|
+
| `in` | `IN` | `?status=in.(active,pending)` |
|
|
197
|
+
| `is` | `IS` | `?deleted_at=is.null` |
|
|
198
|
+
|
|
199
|
+
### Complex Queries
|
|
200
|
+
|
|
201
|
+
```javascript
|
|
202
|
+
// Combine conditions with AND
|
|
203
|
+
GET /api/database/records/products?price=gte.100&category=eq.electronics
|
|
204
|
+
|
|
205
|
+
// OR conditions
|
|
206
|
+
GET /api/database/records/products?or=(price.lt.50,on_sale.is.true)
|
|
207
|
+
|
|
208
|
+
// Nested conditions
|
|
209
|
+
GET /api/database/records/orders?and=(status.eq.pending,or=(priority.eq.high,created_at.lt.2024-01-01))
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Performance Optimizations
|
|
213
|
+
|
|
214
|
+
### Connection Pooling
|
|
215
|
+
- PgBouncer manages database connections
|
|
216
|
+
- Reduces connection overhead
|
|
217
|
+
- Handles concurrent requests efficiently
|
|
218
|
+
|
|
219
|
+
### Query Optimization
|
|
220
|
+
- PostgREST generates optimized SQL
|
|
221
|
+
- Uses prepared statements
|
|
222
|
+
- Leverages PostgreSQL query planner
|
|
223
|
+
|
|
224
|
+
### Indexing Strategy
|
|
225
|
+
- Automatic indexes on primary keys
|
|
226
|
+
- Foreign key indexes for joins
|
|
227
|
+
- Custom indexes via migrations
|
|
228
|
+
|
|
229
|
+
### Caching
|
|
230
|
+
- ETags for conditional requests
|
|
231
|
+
- Client-side caching support
|
|
232
|
+
- Response compression
|
|
233
|
+
|
|
234
|
+
## Data Types
|
|
235
|
+
|
|
236
|
+
PostgreSQL types are automatically mapped to JSON:
|
|
237
|
+
|
|
238
|
+
| InsForge Type | PostgreSQL Type | JSON Type | Notes |
|
|
239
|
+
|---------------|----------------|-----------|-------|
|
|
240
|
+
| `string` | `TEXT` | string | Text of any length |
|
|
241
|
+
| `integer` | `INTEGER` | number | 32-bit integers |
|
|
242
|
+
| `float` | `DOUBLE PRECISION` | number | Decimal numbers |
|
|
243
|
+
| `boolean` | `BOOLEAN` | boolean | true/false |
|
|
244
|
+
| `date` | `DATE` | string | ISO 8601 date format |
|
|
245
|
+
| `datetime` | `TIMESTAMPTZ` | string | ISO 8601 with timezone |
|
|
246
|
+
| `uuid` | `UUID` | string | Auto-generated unique identifier |
|
|
247
|
+
| `json` | `JSONB` | object/array | Structured JSON data with indexing |
|
|
248
|
+
|
|
249
|
+
## Best Practices
|
|
250
|
+
|
|
251
|
+
<CardGroup cols={2}>
|
|
252
|
+
<Card title="Use Indexes" icon="gauge">
|
|
253
|
+
Create indexes on frequently queried columns
|
|
254
|
+
</Card>
|
|
255
|
+
|
|
256
|
+
<Card title="Leverage RLS" icon="shield">
|
|
257
|
+
Implement Row Level Security for data isolation
|
|
258
|
+
</Card>
|
|
259
|
+
|
|
260
|
+
<Card title="Batch Operations" icon="boxes">
|
|
261
|
+
Use bulk inserts/updates for better performance
|
|
262
|
+
</Card>
|
|
263
|
+
|
|
264
|
+
<Card title="Select Columns" icon="table-columns">
|
|
265
|
+
Query only needed columns to reduce payload
|
|
266
|
+
</Card>
|
|
267
|
+
|
|
268
|
+
<Card title="Use Views" icon="eye">
|
|
269
|
+
Create views for complex queries
|
|
270
|
+
</Card>
|
|
271
|
+
|
|
272
|
+
<Card title="Monitor Performance" icon="chart-line">
|
|
273
|
+
Use EXPLAIN ANALYZE for slow queries
|
|
274
|
+
</Card>
|
|
275
|
+
</CardGroup>
|
|
276
|
+
|
|
277
|
+
## Limitations
|
|
278
|
+
|
|
279
|
+
- **No Custom Business Logic**: PostgREST handles CRUD only
|
|
280
|
+
- **SQL Knowledge Helpful**: Complex queries benefit from SQL understanding
|
|
281
|
+
- **Schema Changes**: Require PostgREST reload (automatic via NOTIFY)
|
|
282
|
+
- **File Handling**: Use storage API for files, not database
|
|
283
|
+
|
|
284
|
+
## Comparison with Traditional APIs
|
|
285
|
+
|
|
286
|
+
| Aspect | Traditional REST API | InsForge + PostgREST |
|
|
287
|
+
|--------|---------------------|----------------------|
|
|
288
|
+
| **Development Time** | Write CRUD for each table | Instant APIs from schema |
|
|
289
|
+
| **Maintenance** | Update code for schema changes | Automatic updates |
|
|
290
|
+
| **Performance** | Depends on implementation | Optimized SQL generation |
|
|
291
|
+
| **Consistency** | Varies by developer | Uniform API patterns |
|
|
292
|
+
| **Documentation** | Manual updates needed | Auto-generated OpenAPI |
|
|
256
293
|
| **Security** | Custom implementation | Built-in RLS + JWT |
|