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
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# InsForge Deployment - Agent Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Deploy frontend applications to InsForge using the `create-deployment` MCP tool. The tool handles uploading source files, building, and deploying automatically.
|
|
6
|
+
|
|
7
|
+
## Deploy with MCP Tool
|
|
8
|
+
|
|
9
|
+
Use the `create-deployment` tool with these parameters:
|
|
10
|
+
|
|
11
|
+
| Parameter | Required | Description |
|
|
12
|
+
|-----------|----------|-------------|
|
|
13
|
+
| `sourceDirectory` | Yes | **Absolute path** to source directory (e.g., `/Users/me/project/frontend`). Relative paths do not work. |
|
|
14
|
+
| `projectSettings.buildCommand` | No | Build command (default: auto-detected) |
|
|
15
|
+
| `projectSettings.outputDirectory` | No | Build output directory (default: auto-detected) |
|
|
16
|
+
| `projectSettings.installCommand` | No | Install command (default: `npm install`) |
|
|
17
|
+
| `projectSettings.rootDirectory` | No | Root directory within source |
|
|
18
|
+
| `envVars` | No | Array of `{key, value}` objects |
|
|
19
|
+
| `meta` | No | Custom metadata key-value pairs |
|
|
20
|
+
|
|
21
|
+
### Example
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"sourceDirectory": "/Users/me/project/frontend",
|
|
26
|
+
"projectSettings": {
|
|
27
|
+
"buildCommand": "npm run build",
|
|
28
|
+
"outputDirectory": "dist"
|
|
29
|
+
},
|
|
30
|
+
"envVars": [
|
|
31
|
+
{ "key": "VITE_INSFORGE_BASE_URL", "value": "https://your-project.insforge.app" },
|
|
32
|
+
{ "key": "VITE_INSFORGE_ANON_KEY", "value": "your-anon-key" }
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Important**:
|
|
38
|
+
- `sourceDirectory` must be an **absolute path** (relative paths don't work on Windows)
|
|
39
|
+
- Pass the source directory, NOT pre-built static files
|
|
40
|
+
- Include all required environment variables (e.g., `VITE_*` for Vite apps)
|
|
41
|
+
|
|
42
|
+
## Check Deployment Status
|
|
43
|
+
|
|
44
|
+
After creating a deployment, query the status using `run-raw-sql`:
|
|
45
|
+
|
|
46
|
+
```sql
|
|
47
|
+
SELECT id, status, url, created_at
|
|
48
|
+
FROM system.deployments
|
|
49
|
+
ORDER BY created_at DESC
|
|
50
|
+
LIMIT 1;
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Status Values
|
|
54
|
+
|
|
55
|
+
| Status | Description |
|
|
56
|
+
|--------|-------------|
|
|
57
|
+
| `WAITING` | Waiting for source upload |
|
|
58
|
+
| `UPLOADING` | Uploading to build server |
|
|
59
|
+
| `QUEUED` | Queued for build |
|
|
60
|
+
| `BUILDING` | Building (typically ~1 min) |
|
|
61
|
+
| `READY` | Deployment complete, URL available |
|
|
62
|
+
| `ERROR` | Build or deployment failed |
|
|
63
|
+
| `CANCELED` | Deployment was cancelled |
|
|
64
|
+
|
|
65
|
+
### Get Deployment URL
|
|
66
|
+
|
|
67
|
+
Once status is `READY`, the `url` column contains the live deployment URL.
|
|
68
|
+
|
|
69
|
+
```sql
|
|
70
|
+
SELECT url FROM system.deployments WHERE id = '<deployment-id>';
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Quick Reference
|
|
74
|
+
|
|
75
|
+
| Task | Tool | Command |
|
|
76
|
+
|------|------|---------|
|
|
77
|
+
| Deploy app | `create-deployment` | Provide `sourceDirectory` and `envVars` |
|
|
78
|
+
| Check status | `run-raw-sql` | `SELECT status FROM system.deployments WHERE id = '...'` |
|
|
79
|
+
| List deployments | `run-raw-sql` | `SELECT * FROM system.deployments ORDER BY created_at DESC` |
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# InsForge Realtime - Agent Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
InsForge Realtime enables real-time pub/sub messaging via WebSockets:
|
|
6
|
+
- **Database events**: Emit events when data changes using triggers
|
|
7
|
+
- **Client events**: Clients can publish custom events to each other
|
|
8
|
+
|
|
9
|
+
## Backend Setup (Raw SQL)
|
|
10
|
+
|
|
11
|
+
### Step 1: Create Channel Patterns
|
|
12
|
+
|
|
13
|
+
Define which channels are available:
|
|
14
|
+
|
|
15
|
+
```sql
|
|
16
|
+
INSERT INTO realtime.channels (pattern, description, enabled)
|
|
17
|
+
VALUES
|
|
18
|
+
('orders', 'Global order events', true),
|
|
19
|
+
('order:%', 'Order-specific events (order:123, order:456)', true),
|
|
20
|
+
('chat:%', 'Chat room events', true);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Pattern syntax**: Use `:` as separator, `%` as wildcard (SQL LIKE pattern).
|
|
24
|
+
|
|
25
|
+
### Step 2: Create Triggers for Database Events
|
|
26
|
+
|
|
27
|
+
**IMPORTANT**: To emit events when database rows change, create a trigger that calls `realtime.publish()`:
|
|
28
|
+
|
|
29
|
+
```sql
|
|
30
|
+
-- Step 2a: Create the trigger function
|
|
31
|
+
CREATE OR REPLACE FUNCTION notify_order_changes()
|
|
32
|
+
RETURNS TRIGGER AS $$
|
|
33
|
+
BEGIN
|
|
34
|
+
PERFORM realtime.publish(
|
|
35
|
+
'order:' || NEW.id::text, -- channel name
|
|
36
|
+
TG_OP || '_order', -- event name: INSERT_order, UPDATE_order, DELETE_order
|
|
37
|
+
jsonb_build_object( -- payload (what clients receive)
|
|
38
|
+
'id', NEW.id,
|
|
39
|
+
'status', NEW.status,
|
|
40
|
+
'total', NEW.total
|
|
41
|
+
)
|
|
42
|
+
);
|
|
43
|
+
RETURN NEW;
|
|
44
|
+
END;
|
|
45
|
+
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
|
46
|
+
|
|
47
|
+
-- Step 2b: Attach trigger to table
|
|
48
|
+
CREATE TRIGGER order_realtime
|
|
49
|
+
AFTER INSERT OR UPDATE ON orders
|
|
50
|
+
FOR EACH ROW
|
|
51
|
+
EXECUTE FUNCTION notify_order_changes();
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Step 3: Add Access Control (Optional)
|
|
55
|
+
|
|
56
|
+
**RLS is disabled by default** for the best developer experience. All authenticated and anonymous users can subscribe to any channel and publish messages out of the box.
|
|
57
|
+
|
|
58
|
+
To restrict access, first enable RLS, then add policies:
|
|
59
|
+
|
|
60
|
+
#### Step 3a: Enable RLS
|
|
61
|
+
|
|
62
|
+
```sql
|
|
63
|
+
ALTER TABLE realtime.channels ENABLE ROW LEVEL SECURITY;
|
|
64
|
+
ALTER TABLE realtime.messages ENABLE ROW LEVEL SECURITY;
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### Step 3b: Restrict who can subscribe (SELECT on realtime.channels)
|
|
68
|
+
|
|
69
|
+
```sql
|
|
70
|
+
-- Only order owner can subscribe to their order channel
|
|
71
|
+
CREATE POLICY "users_subscribe_own_orders"
|
|
72
|
+
ON realtime.channels FOR SELECT
|
|
73
|
+
TO authenticated
|
|
74
|
+
USING (
|
|
75
|
+
pattern = 'order:%'
|
|
76
|
+
AND EXISTS (
|
|
77
|
+
SELECT 1 FROM orders
|
|
78
|
+
WHERE id = NULLIF(split_part(realtime.channel_name(), ':', 2), '')::uuid
|
|
79
|
+
AND user_id = auth.uid()
|
|
80
|
+
)
|
|
81
|
+
);
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Note**: Use `realtime.channel_name()` in subscribe policies to get the actual channel (e.g., `order:123`) since the table only stores patterns (e.g., `order:%`).
|
|
85
|
+
|
|
86
|
+
#### Step 3c: Restrict who can publish from client (INSERT on realtime.messages)
|
|
87
|
+
|
|
88
|
+
```sql
|
|
89
|
+
-- Only chat room members can publish messages
|
|
90
|
+
CREATE POLICY "members_publish_chat"
|
|
91
|
+
ON realtime.messages FOR INSERT
|
|
92
|
+
TO authenticated
|
|
93
|
+
WITH CHECK (
|
|
94
|
+
channel_name LIKE 'chat:%'
|
|
95
|
+
AND EXISTS (
|
|
96
|
+
SELECT 1 FROM chat_members
|
|
97
|
+
WHERE room_id = NULLIF(split_part(channel_name, ':', 2), '')::uuid
|
|
98
|
+
AND user_id = auth.uid()
|
|
99
|
+
)
|
|
100
|
+
);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Frontend SDK
|
|
104
|
+
|
|
105
|
+
### Setup
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { createClient } from '@insforge/sdk'
|
|
109
|
+
|
|
110
|
+
const insforge = createClient({
|
|
111
|
+
baseUrl: 'https://your-project.insforge.app'
|
|
112
|
+
})
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Core Methods
|
|
116
|
+
|
|
117
|
+
#### connect() - Establish WebSocket connection
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
await insforge.realtime.connect()
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
#### subscribe(channel) - Subscribe to a channel
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
const { ok, error } = await insforge.realtime.subscribe('order:123')
|
|
127
|
+
if (!ok) console.error('Failed:', error?.message)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### on(event, callback) - Listen for events
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
// Listen for database-triggered events
|
|
134
|
+
insforge.realtime.on('INSERT_order', (payload) => {
|
|
135
|
+
console.log('New order:', payload.id, payload.status)
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
insforge.realtime.on('UPDATE_order', (payload) => {
|
|
139
|
+
console.log('Order updated:', payload)
|
|
140
|
+
})
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### once(event, callback) - Listen for event once
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
// Auto-removes after first invocation
|
|
147
|
+
insforge.realtime.once('order_completed', (payload) => {
|
|
148
|
+
console.log('Order completed:', payload)
|
|
149
|
+
})
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
#### publish(channel, event, payload) - Send client events
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// Must be subscribed to channel first
|
|
156
|
+
await insforge.realtime.publish('chat:room-1', 'new_message', {
|
|
157
|
+
text: 'Hello!',
|
|
158
|
+
sender: 'Alice'
|
|
159
|
+
})
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### unsubscribe(channel)
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
insforge.realtime.unsubscribe('order:123')
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
#### off(event, callback) - Remove listener
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
insforge.realtime.off('UPDATE_order', handler)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
#### disconnect() - Close connection
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
insforge.realtime.disconnect()
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Connection Events
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
insforge.realtime.on('connect', () => console.log('Connected'))
|
|
184
|
+
insforge.realtime.on('disconnect', (reason) => console.log('Disconnected:', reason))
|
|
185
|
+
insforge.realtime.on('connect_error', (err) => console.error('Connection failed:', err))
|
|
186
|
+
insforge.realtime.on('error', ({ code, message }) => console.error('Error:', code, message))
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**Error codes**: `UNAUTHORIZED`, `NOT_SUBSCRIBED`, `INTERNAL_ERROR`
|
|
190
|
+
|
|
191
|
+
### Properties
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
insforge.realtime.isConnected // boolean
|
|
195
|
+
insforge.realtime.connectionState // 'disconnected' | 'connecting' | 'connected'
|
|
196
|
+
insforge.realtime.socketId // string (when connected)
|
|
197
|
+
insforge.realtime.getSubscribedChannels() // string[]
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Message Metadata
|
|
201
|
+
|
|
202
|
+
All received messages include a `meta` field:
|
|
203
|
+
|
|
204
|
+
```typescript
|
|
205
|
+
insforge.realtime.on('UPDATE_order', (payload) => {
|
|
206
|
+
console.log(payload.meta.messageId) // UUID
|
|
207
|
+
console.log(payload.meta.channel) // 'order:123'
|
|
208
|
+
console.log(payload.meta.senderType) // 'system' (trigger) or 'user' (client)
|
|
209
|
+
console.log(payload.meta.timestamp) // Date
|
|
210
|
+
|
|
211
|
+
// Your payload fields
|
|
212
|
+
console.log(payload.status)
|
|
213
|
+
})
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Complete Example
|
|
217
|
+
|
|
218
|
+
**Backend SQL:**
|
|
219
|
+
```sql
|
|
220
|
+
-- 1. Create channel
|
|
221
|
+
INSERT INTO realtime.channels (pattern, description, enabled)
|
|
222
|
+
VALUES ('order:%', 'Order updates', true);
|
|
223
|
+
|
|
224
|
+
-- 2. Create trigger for database events
|
|
225
|
+
CREATE OR REPLACE FUNCTION notify_order_status()
|
|
226
|
+
RETURNS TRIGGER AS $$
|
|
227
|
+
BEGIN
|
|
228
|
+
PERFORM realtime.publish(
|
|
229
|
+
'order:' || NEW.id::text,
|
|
230
|
+
'status_changed',
|
|
231
|
+
jsonb_build_object('id', NEW.id, 'status', NEW.status, 'updated_at', NEW.updated_at)
|
|
232
|
+
);
|
|
233
|
+
RETURN NEW;
|
|
234
|
+
END;
|
|
235
|
+
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
|
236
|
+
|
|
237
|
+
CREATE TRIGGER order_status_trigger
|
|
238
|
+
AFTER UPDATE ON orders
|
|
239
|
+
FOR EACH ROW
|
|
240
|
+
WHEN (OLD.status IS DISTINCT FROM NEW.status)
|
|
241
|
+
EXECUTE FUNCTION notify_order_status();
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Frontend:**
|
|
245
|
+
```typescript
|
|
246
|
+
await insforge.realtime.connect()
|
|
247
|
+
await insforge.realtime.subscribe(`order:${orderId}`)
|
|
248
|
+
|
|
249
|
+
// Listen for database-triggered events
|
|
250
|
+
insforge.realtime.on('status_changed', (payload) => {
|
|
251
|
+
updateUI(payload.status)
|
|
252
|
+
})
|
|
253
|
+
|
|
254
|
+
// Client can also publish events to the same channel
|
|
255
|
+
await insforge.realtime.publish(`order:${orderId}`, 'customer_viewed', {
|
|
256
|
+
viewedAt: new Date().toISOString()
|
|
257
|
+
})
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Quick Reference
|
|
261
|
+
|
|
262
|
+
| Task | How |
|
|
263
|
+
|------|-----|
|
|
264
|
+
| Emit event on DB change | Create trigger calling `realtime.publish(channel, event, payload)` |
|
|
265
|
+
| Client sends event | `insforge.realtime.publish(channel, event, payload)` |
|
|
266
|
+
| Listen for events | `insforge.realtime.on(eventName, callback)` |
|
|
267
|
+
| Listen once | `insforge.realtime.once(eventName, callback)` |
|
|
268
|
+
| Restrict subscribe access | Enable RLS on `realtime.channels`, then add SELECT policy |
|
|
269
|
+
| Restrict client publish | Enable RLS on `realtime.messages`, then add INSERT policy |
|
package/docs/changelog.mdx
CHANGED
|
@@ -1,67 +1,212 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: "Changelog"
|
|
3
|
-
description: "
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
1
|
+
---
|
|
2
|
+
title: "Changelog"
|
|
3
|
+
description: "New features, improvements, and fixes shipped to InsForge."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<Update label="Dec 21, 2025" tags={["Realtime", "Auth", "Payments", "AI"]}>
|
|
7
|
+
## Realtime Module
|
|
8
|
+
|
|
9
|
+
We launched a new Realtime module built on WebSockets with a pub/sub architecture. It supports channels for live updates, message history for state syncing, and RLS-based permissions out of the box—making it well suited for real-time apps, games, chat, and collaborative experiences.
|
|
10
|
+
|
|
11
|
+
<Frame>
|
|
12
|
+
<img src="/images/changelog/dec-2025/realtime2.png" alt="Realtime module with collaborative cursors and messaging" />
|
|
13
|
+
</Frame>
|
|
14
|
+
|
|
15
|
+
### Apple OAuth
|
|
16
|
+
|
|
17
|
+
Apple OAuth is now available in InsForge Auth, as requested by the community. You can enable Sign in with Apple in a few clicks and ship apps with Apple login without manual OAuth setup.
|
|
18
|
+
|
|
19
|
+
<Frame>
|
|
20
|
+
<video autoPlay muted loop playsInline src="/images/changelog/dec-2025/apple-oauth.mp4" />
|
|
21
|
+
</Frame>
|
|
22
|
+
|
|
23
|
+
### Alipay Payments
|
|
24
|
+
|
|
25
|
+
Alipay is now supported for InsForge subscriptions, so you can subscribe without a credit card. This removes a major payment barrier for users in the APAC region.
|
|
26
|
+
|
|
27
|
+
### More Models in the Model Gateway
|
|
28
|
+
|
|
29
|
+
We have added more popular and state-of-the-art models to the InsForge Model Gateway so you can choose the right model for each use case:
|
|
30
|
+
|
|
31
|
+
- **GPT 5.2** - Stronger reasoning and longer context
|
|
32
|
+
- **DeepSeek V3** - High performance at a lower cost
|
|
33
|
+
- **Gemini 3 Flash** - Low latency real-time inference
|
|
34
|
+
|
|
35
|
+
More models are coming soon.
|
|
36
|
+
|
|
37
|
+
<Frame>
|
|
38
|
+
<img src="/images/changelog/dec-2025/moreModels.png" alt="AI Integration dashboard with new models" />
|
|
39
|
+
</Frame>
|
|
40
|
+
|
|
41
|
+
[View AI SDK documentation →](/core-concepts/ai/sdk)
|
|
42
|
+
</Update>
|
|
43
|
+
|
|
44
|
+
<Update label="Dec 19, 2025" tags={["Multi Region", "Postgres Connection"]}>
|
|
45
|
+
## Multi-Region Deployments
|
|
46
|
+
Deploy your project to the appropriate region for improved latency and compliance. We currently support `us-east`, `us-west`, `eu-central` and `ap-southeast` regions. More regions will be added based on demand.
|
|
47
|
+
|
|
48
|
+
<Frame>
|
|
49
|
+
<img src="/images/changelog/dec-2025/multi-region.webp" alt="Multi-Region Deployments" />
|
|
50
|
+
</Frame>
|
|
51
|
+
|
|
52
|
+
## Postgres Connection
|
|
53
|
+
Connect to your project's Postgres database and query it directly from your database clients. This also allows you to integrate InsForge with external services and tools like n8n.
|
|
54
|
+
|
|
55
|
+
<Frame>
|
|
56
|
+
<img src="/images/changelog/dec-2025/postgres-connection.webp" alt="Postgres Connection" />
|
|
57
|
+
</Frame>
|
|
58
|
+
</Update>
|
|
59
|
+
|
|
60
|
+
<Update label="Dec 16, 2025" tags={["Email"]}>
|
|
61
|
+
## Custom Emails (Private Preview)
|
|
62
|
+
Send custom transactional emails directly from your app using the SDK. Supports multiple recipients, CC/BCC, custom sender names, and full HTML content.
|
|
63
|
+
|
|
64
|
+
[View Email SDK documentation →](/core-concepts/email/sdk)
|
|
65
|
+
</Update>
|
|
66
|
+
|
|
67
|
+
<Update label="Dec 12, 2025" tags={["Payments", "AI"]}>
|
|
68
|
+
## Alipay Payment Support
|
|
69
|
+
Added **Alipay** as an alternative payment method. Users can now pay for InsForge subscriptions without a credit card.
|
|
70
|
+
|
|
71
|
+
<Frame>
|
|
72
|
+
<img src="/images/changelog/dec-2025/alipay-payment.webp" alt="Alipay payment method option" />
|
|
73
|
+
</Frame>
|
|
74
|
+
|
|
75
|
+
## New AI Models
|
|
76
|
+
Expanded AI model support:
|
|
77
|
+
- **GPT-5.2** - OpenAI's latest flagship model with enhanced reasoning, longer context windows, and improved instruction following
|
|
78
|
+
- **DeepSeek V3** - Open-weight model offering strong performance at lower cost, ideal for high-volume workloads
|
|
79
|
+
|
|
80
|
+
[View AI SDK documentation →](/core-concepts/ai/sdk)
|
|
81
|
+
|
|
82
|
+
<Frame>
|
|
83
|
+
<img src="/images/changelog/dec-2025/ai-models.webp" alt="AI Integration with new models" />
|
|
84
|
+
</Frame>
|
|
85
|
+
</Update>
|
|
86
|
+
|
|
87
|
+
<Update label="Dec 11, 2025" tags={["Auth", "Realtime"]}>
|
|
88
|
+
## Apple Login
|
|
89
|
+
**Sign in with Apple** is now available as an OAuth provider. Enable it in your project settings and let users authenticate with their Apple ID. Like other social providers, InsForge Cloud offers shared credentials for quick testing.
|
|
90
|
+
|
|
91
|
+
[View Authentication docs →](/core-concepts/authentication/sdk)
|
|
92
|
+
|
|
93
|
+
<Frame>
|
|
94
|
+
<img src="/images/changelog/dec-2025/apple-login.jpg" alt="Sign in with Apple authentication" />
|
|
95
|
+
</Frame>
|
|
96
|
+
|
|
97
|
+
## Realtime Module
|
|
98
|
+
Build apps with **realtime pub/sub messaging**. Whether you're creating a chat room, multiplayer game, or collaborative document editor, the new Realtime module handles WebSocket connections, channel subscriptions, and message delivery out of the box.
|
|
99
|
+
|
|
100
|
+
Key features include:
|
|
101
|
+
- **Channel patterns** with wildcard support (e.g., `chat:*`, `game:lobby`)
|
|
102
|
+
- **Webhook integrations** for server-side event processing
|
|
103
|
+
- **Message history** and delivery analytics
|
|
104
|
+
- **RLS-based permissions** for secure subscribe and publish operations
|
|
105
|
+
|
|
106
|
+
[View Realtime SDK documentation →](/core-concepts/realtime/sdk)
|
|
107
|
+
|
|
108
|
+
<Frame>
|
|
109
|
+
<img src="/images/changelog/dec-2025/realtime-module.jpg" alt="Realtime multiplayer chess game demo" />
|
|
110
|
+
</Frame>
|
|
111
|
+
</Update>
|
|
112
|
+
|
|
113
|
+
<Update label="Dec 7, 2025" tags={["AI", "Security"]}>
|
|
114
|
+
## AI Integration
|
|
115
|
+
Expanded model support with smarter defaults for different use cases.
|
|
116
|
+
|
|
117
|
+
- **Gemini 3 Pro** is now the default image generation model.
|
|
118
|
+
- **Grok 4.1 Fast** added to model selection for quicker, lightweight inference.
|
|
119
|
+
|
|
120
|
+
[View AI SDK documentation →](/core-concepts/ai/sdk)
|
|
121
|
+
|
|
122
|
+
<Frame>
|
|
123
|
+
<img src="/images/changelog/dec-2025/ai-integration.png" alt="AI Integration with new models" />
|
|
124
|
+
</Frame>
|
|
125
|
+
|
|
126
|
+
## MCP Installer
|
|
127
|
+
Updated installer experience with a new InsForge-branded startup screen and clearer next-step instructions.
|
|
128
|
+
|
|
129
|
+
<Frame>
|
|
130
|
+
<img src="/images/changelog/dec-2025/mcp-installer.png" alt="MCP Installer with InsForge branding" />
|
|
131
|
+
</Frame>
|
|
132
|
+
|
|
133
|
+
## Security & Framework Updates
|
|
134
|
+
Updated Next.js and React versions in response to a [security incident](https://nextjs.org/blog/CVE-2025-66478).
|
|
135
|
+
</Update>
|
|
136
|
+
|
|
137
|
+
<Update label="Nov 30, 2025" tags={["Dashboard", "Auth"]}>
|
|
138
|
+
## QuickStart Prompts & Templates
|
|
139
|
+
Get started faster with our new quickstart prompts and templates for common apps. Builders can now start with one click and get a fullstack app running in **5 minutes**.
|
|
140
|
+
|
|
141
|
+
[Try the quickstart →](/quickstart)
|
|
142
|
+
|
|
143
|
+
<Frame>
|
|
144
|
+
<img src="/images/changelog/nov-2025/quickstart-prompts.webp" alt="QuickStart Prompts and Templates" />
|
|
145
|
+
</Frame>
|
|
146
|
+
|
|
147
|
+
## Auth Components
|
|
148
|
+
Drop-in prebuilt React auth components for your app. Get a working auth flow right away with social sign-on support built in by default.
|
|
149
|
+
|
|
150
|
+
[View Auth Components docs →](/core-concepts/authentication/ui-components/react)
|
|
151
|
+
|
|
152
|
+
<Frame>
|
|
153
|
+
<img src="/images/changelog/nov-2025/auth-components.webp" alt="Auth Components with Social Sign-on" />
|
|
154
|
+
</Frame>
|
|
155
|
+
|
|
156
|
+
## Database Metadata Dashboard
|
|
157
|
+
View your RLS policies, triggers, functions, and indexes all in one place. This makes debugging and understanding your project security much easier.
|
|
158
|
+
|
|
159
|
+
<Frame>
|
|
160
|
+
<img src="/images/changelog/nov-2025/database-metadata.webp" alt="Database Metadata Dashboard" />
|
|
161
|
+
</Frame>
|
|
162
|
+
|
|
163
|
+
## SQL Editor
|
|
164
|
+
Run SQL queries directly in the InsForge dashboard. No external tools required.
|
|
165
|
+
|
|
166
|
+
<Frame>
|
|
167
|
+
<img src="/images/changelog/nov-2025/sql-editor.webp" alt="SQL Editor in Dashboard" />
|
|
168
|
+
</Frame>
|
|
169
|
+
|
|
170
|
+
## Usage Page
|
|
171
|
+
A new dashboard section that displays a clear breakdown of your resource usage and what your plan includes.
|
|
172
|
+
|
|
173
|
+
<Frame>
|
|
174
|
+
<img src="/images/changelog/nov-2025/usage-page.webp" alt="Usage Page Dashboard" />
|
|
175
|
+
</Frame>
|
|
176
|
+
</Update>
|
|
177
|
+
|
|
178
|
+
<Update label="Oct 30, 2025" tags={["Auth", "SDK"]}>
|
|
179
|
+
## OAuth: 4 New Third-Party Providers
|
|
180
|
+
You can now enable third-party logins with **LinkedIn, Microsoft, Facebook, and Discord**. On InsForge Cloud, we provide shared credentials for developers who want to quickly test these login flows.
|
|
181
|
+
|
|
182
|
+
After enabling, you can implement these logins directly through your agent by sending a simple prompt:
|
|
183
|
+
|
|
184
|
+
```text
|
|
185
|
+
implement Discord login
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
[View Authentication docs →](/core-concepts/authentication/sdk)
|
|
189
|
+
|
|
190
|
+
<Frame>
|
|
191
|
+
<img src="/images/changelog/october-2025/oauth-providers.webp" alt="OAuth Providers - LinkedIn, Microsoft, Facebook, and Discord" />
|
|
192
|
+
</Frame>
|
|
193
|
+
|
|
194
|
+
## Import CSV to Your Table
|
|
195
|
+
You can now upload `.csv` files directly into any table from the dashboard. Perfect for bringing in sample data or migrating from other tools.
|
|
196
|
+
|
|
197
|
+
<Frame>
|
|
198
|
+
<img src="/images/changelog/october-2025/csv-upload.webp" alt="CSV Upload to Tables Feature" />
|
|
199
|
+
</Frame>
|
|
200
|
+
|
|
201
|
+
## InsForge.js SDK
|
|
202
|
+
We've released our **insforge-js SDK** to make it easier for developers to integrate InsForge into their workflows. Manage auth, query databases, and control your backend programmatically with a few lines of code.
|
|
203
|
+
|
|
204
|
+
[GitHub](https://github.com/InsForge/InsForge-sdk-js) · [Database SDK →](/core-concepts/database/sdk)
|
|
205
|
+
|
|
206
|
+
## Logs
|
|
207
|
+
The new logs page lets you monitor container logs in real time. You can watch your backend activity directly in the dashboard, or let AI coding agents query logs through the InsForge MCP to automatically debug and search for errors.
|
|
208
|
+
|
|
209
|
+
<Frame>
|
|
210
|
+
<img src="/images/changelog/october-2025/logs-feature.webp" alt="Real-time Logs Monitoring Feature" />
|
|
211
|
+
</Frame>
|
|
212
|
+
</Update>
|