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,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Deployment Architecture
|
|
3
|
+
description: Zero-config web app deployments powered by Vercel
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<Warning>
|
|
7
|
+
Deployments is an experimental feature. APIs and behavior may change.
|
|
8
|
+
</Warning>
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
InsForge Deployments enable developers to deploy web applications with a single prompt. By integrating with coding agents via InsForge MCP, developers can simply say "Deploy my app" and have their application live within a minute—no configuration required.
|
|
13
|
+
|
|
14
|
+
## Technology Stack
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
graph TB
|
|
18
|
+
Agent[Coding Agent] --> MCP[InsForge MCP]
|
|
19
|
+
MCP --> API[InsForge Server]
|
|
20
|
+
|
|
21
|
+
API --> S3[AWS S3]
|
|
22
|
+
S3 --> Vercel[Vercel Edge Network]
|
|
23
|
+
|
|
24
|
+
API --> DB[(PostgreSQL)]
|
|
25
|
+
DB --> Metadata[Deployment Metadata]
|
|
26
|
+
DB --> Status[Status Tracking]
|
|
27
|
+
|
|
28
|
+
Vercel --> Live[Live Application]
|
|
29
|
+
|
|
30
|
+
style Agent fill:#1e293b,stroke:#475569,color:#e2e8f0
|
|
31
|
+
style MCP fill:#1e40af,stroke:#3b82f6,color:#dbeafe
|
|
32
|
+
style API fill:#166534,stroke:#22c55e,color:#dcfce7
|
|
33
|
+
style S3 fill:#ea580c,stroke:#f97316,color:#fed7aa
|
|
34
|
+
style Vercel fill:#000000,stroke:#ffffff,color:#ffffff
|
|
35
|
+
style DB fill:#0e7490,stroke:#06b6d4,color:#cffafe
|
|
36
|
+
style Metadata fill:#0e7490,stroke:#22d3ee,color:#cffafe
|
|
37
|
+
style Status fill:#0e7490,stroke:#22d3ee,color:#cffafe
|
|
38
|
+
style Live fill:#166534,stroke:#22c55e,color:#dcfce7
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Core Components
|
|
42
|
+
|
|
43
|
+
| Component | Technology | Purpose |
|
|
44
|
+
|-----------|------------|---------|
|
|
45
|
+
| **Edge Storage** | AWS S3 | Temporary source file staging |
|
|
46
|
+
| **Build Platform** | Vercel | Production builds and hosting |
|
|
47
|
+
| **Status Tracking** | PostgreSQL | Deployment state and metadata |
|
|
48
|
+
| **Webhook Handler** | HMAC-SHA1 | Real-time build status updates |
|
|
49
|
+
|
|
50
|
+
## How It Works
|
|
51
|
+
|
|
52
|
+
### Deployment Flow
|
|
53
|
+
|
|
54
|
+
```mermaid
|
|
55
|
+
sequenceDiagram
|
|
56
|
+
participant Agent as Coding Agent
|
|
57
|
+
participant API as InsForge Server
|
|
58
|
+
participant S3 as AWS S3
|
|
59
|
+
participant Vercel as Vercel
|
|
60
|
+
|
|
61
|
+
Agent->>API: Create deployment
|
|
62
|
+
API-->>Agent: Upload URL + deployment ID
|
|
63
|
+
|
|
64
|
+
Agent->>S3: Upload source.zip
|
|
65
|
+
S3-->>Agent: Upload complete
|
|
66
|
+
|
|
67
|
+
Agent->>API: Start deployment
|
|
68
|
+
API->>S3: Download source
|
|
69
|
+
API->>Vercel: Upload files
|
|
70
|
+
API->>Vercel: Create deployment
|
|
71
|
+
API-->>Agent: Deployment started
|
|
72
|
+
|
|
73
|
+
Vercel->>Vercel: Build application
|
|
74
|
+
Vercel->>API: Webhook: Build complete
|
|
75
|
+
|
|
76
|
+
Agent->>API: Check status
|
|
77
|
+
API-->>Agent: READY + live URL
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Step-by-Step Process
|
|
81
|
+
|
|
82
|
+
1. **Create Deployment**: Agent requests a new deployment, receiving a presigned S3 upload URL
|
|
83
|
+
2. **Upload Source**: Source files are zipped and uploaded directly to S3 via edge network
|
|
84
|
+
3. **Start Build**: InsForge downloads the source, extracts files, and uploads to Vercel
|
|
85
|
+
4. **Build & Deploy**: Vercel builds the application and deploys to its edge network
|
|
86
|
+
5. **Go Live**: Application becomes available at `https://{app-key}.insforge.site`
|
|
87
|
+
|
|
88
|
+
The entire process typically completes in about one minute.
|
|
89
|
+
|
|
90
|
+
## Deployment Status
|
|
91
|
+
|
|
92
|
+
| Status | Description |
|
|
93
|
+
|--------|-------------|
|
|
94
|
+
| `WAITING` | Deployment created, awaiting source upload |
|
|
95
|
+
| `UPLOADING` | Source files being processed |
|
|
96
|
+
| `QUEUED` | Build queued on Vercel |
|
|
97
|
+
| `BUILDING` | Application being built |
|
|
98
|
+
| `READY` | Live and accessible |
|
|
99
|
+
| `ERROR` | Build failed |
|
|
100
|
+
| `CANCELED` | Deployment canceled |
|
|
101
|
+
|
|
102
|
+
## Environment Variables
|
|
103
|
+
|
|
104
|
+
Environment variables can be passed during deployment for build-time configuration. They are encrypted at rest and in transit, and are only accessible during the build process. For auditing purposes, only variable names are logged, never values.
|
|
105
|
+
|
|
106
|
+
<Warning>
|
|
107
|
+
While environment variables are encrypted, avoid storing sensitive credentials in frontend applications. Variables prefixed with `NEXT_PUBLIC_` or similar are embedded in client bundles.
|
|
108
|
+
</Warning>
|
|
109
|
+
|
|
110
|
+
## Current Limitations
|
|
111
|
+
|
|
112
|
+
<Note>
|
|
113
|
+
This is an experimental feature with the following constraints:
|
|
114
|
+
</Note>
|
|
115
|
+
|
|
116
|
+
| Limitation | Details |
|
|
117
|
+
|------------|---------|
|
|
118
|
+
| **Environment** | Production deployments only |
|
|
119
|
+
| **Custom Domains** | Coming soon |
|
|
120
|
+
| **Preview Deployments** | Coming soon |
|
|
121
|
+
| **Build Logs** | Limited visibility |
|
|
122
|
+
|
|
123
|
+
## Performance
|
|
124
|
+
|
|
125
|
+
### Edge Network Optimization
|
|
126
|
+
|
|
127
|
+
Both AWS S3 and Vercel utilize global edge networks, enabling:
|
|
128
|
+
|
|
129
|
+
- **Fast Uploads**: Source files uploaded to nearest S3 edge location
|
|
130
|
+
- **Rapid Builds**: Vercel's distributed build infrastructure
|
|
131
|
+
- **Global Distribution**: Deployed applications served from edge locations worldwide
|
|
132
|
+
- **Low Latency**: Sub-100ms response times for static assets
|
|
133
|
+
|
|
134
|
+
## Best Practices
|
|
135
|
+
|
|
136
|
+
<CardGroup cols={2}>
|
|
137
|
+
<Card title="Keep Builds Small" icon="minimize">
|
|
138
|
+
Avoid uploading large assets. Use InsForge Storage and access via URLs.
|
|
139
|
+
</Card>
|
|
140
|
+
|
|
141
|
+
<Card title="Use Environment Variables" icon="key">
|
|
142
|
+
Configure builds via env vars, not hardcoded values
|
|
143
|
+
</Card>
|
|
144
|
+
|
|
145
|
+
<Card title="Test Locally First" icon="flask">
|
|
146
|
+
Verify builds work locally before deploying
|
|
147
|
+
</Card>
|
|
148
|
+
|
|
149
|
+
<Card title="Monitor Status" icon="chart-line">
|
|
150
|
+
Check deployment status for build errors
|
|
151
|
+
</Card>
|
|
152
|
+
</CardGroup>
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Email Architecture
|
|
3
|
+
description: Transactional email delivery powered by AWS SES
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<Warning>
|
|
7
|
+
Email is an experimental feature. APIs and behavior may change.
|
|
8
|
+
</Warning>
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
|
|
12
|
+
InsForge provides a managed email service for sending transactional emails. Built on AWS SES, it offers high deliverability and scalability without requiring you to configure email infrastructure.
|
|
13
|
+
|
|
14
|
+
## Technology Stack
|
|
15
|
+
|
|
16
|
+
```mermaid
|
|
17
|
+
graph TB
|
|
18
|
+
Client[Client Application] --> SDK[InsForge SDK]
|
|
19
|
+
SDK --> API[Email API]
|
|
20
|
+
API --> Cloud[InsForge Cloud]
|
|
21
|
+
Cloud --> SES[AWS SES]
|
|
22
|
+
SES --> Inbox[Recipient Inbox]
|
|
23
|
+
|
|
24
|
+
style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
|
|
25
|
+
style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
|
|
26
|
+
style API fill:#166534,stroke:#22c55e,color:#dcfce7
|
|
27
|
+
style Cloud fill:#7c3aed,stroke:#a78bfa,color:#ede9fe
|
|
28
|
+
style SES fill:#ea580c,stroke:#f97316,color:#fed7aa
|
|
29
|
+
style Inbox fill:#0e7490,stroke:#06b6d4,color:#cffafe
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## How It Works
|
|
33
|
+
|
|
34
|
+
1. **SDK Call** - Your application calls `emails.send()` with recipients and HTML content
|
|
35
|
+
2. **API Processing** - Request is validated and authenticated
|
|
36
|
+
3. **Cloud Delivery** - InsForge Cloud queues and sends via AWS SES
|
|
37
|
+
4. **Delivery** - Email is delivered to recipient inboxes
|
|
38
|
+
|
|
39
|
+
```mermaid
|
|
40
|
+
sequenceDiagram
|
|
41
|
+
participant App as Your App
|
|
42
|
+
participant SDK as InsForge SDK
|
|
43
|
+
participant API as Email API
|
|
44
|
+
participant SES as AWS SES
|
|
45
|
+
|
|
46
|
+
App->>SDK: emails.send({to, subject, html})
|
|
47
|
+
SDK->>API: POST /api/email/send-raw
|
|
48
|
+
API->>SES: Queue for delivery
|
|
49
|
+
SES-->>API: Accepted
|
|
50
|
+
API-->>SDK: Success
|
|
51
|
+
SDK-->>App: {data, error}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Key Features
|
|
55
|
+
|
|
56
|
+
<CardGroup cols={2}>
|
|
57
|
+
<Card title="High Deliverability" icon="inbox">
|
|
58
|
+
AWS SES infrastructure with optimized sending reputation
|
|
59
|
+
</Card>
|
|
60
|
+
|
|
61
|
+
<Card title="Multiple Recipients" icon="users">
|
|
62
|
+
Send to up to 50 recipients per request with CC/BCC support
|
|
63
|
+
</Card>
|
|
64
|
+
|
|
65
|
+
<Card title="Custom Sender" icon="signature">
|
|
66
|
+
Customize the sender display name for your brand
|
|
67
|
+
</Card>
|
|
68
|
+
|
|
69
|
+
<Card title="HTML Content" icon="code">
|
|
70
|
+
Full HTML email support for rich formatting
|
|
71
|
+
</Card>
|
|
72
|
+
</CardGroup>
|
|
73
|
+
|
|
74
|
+
## Rate Limits
|
|
75
|
+
|
|
76
|
+
| Plan | Limit |
|
|
77
|
+
|------|-------|
|
|
78
|
+
| **Starter** | 10 emails per hour |
|
|
79
|
+
| **Pro** | 50 emails per hour |
|
|
80
|
+
|
|
81
|
+
<Note>
|
|
82
|
+
Custom transactional emails require a paid plan. Authentication emails (verification, password reset) are included in all plans.
|
|
83
|
+
</Note>
|
|
84
|
+
|
|
85
|
+
## Best Practices
|
|
86
|
+
|
|
87
|
+
<CardGroup cols={2}>
|
|
88
|
+
<Card title="Validate Recipients" icon="at">
|
|
89
|
+
Verify email addresses before sending to maintain deliverability
|
|
90
|
+
</Card>
|
|
91
|
+
|
|
92
|
+
<Card title="Meaningful Content" icon="envelope-open-text">
|
|
93
|
+
Send relevant, expected emails to avoid spam reports
|
|
94
|
+
</Card>
|
|
95
|
+
|
|
96
|
+
<Card title="Handle Errors" icon="triangle-exclamation">
|
|
97
|
+
Always check the error response and handle failures gracefully
|
|
98
|
+
</Card>
|
|
99
|
+
|
|
100
|
+
<Card title="Respect Limits" icon="gauge">
|
|
101
|
+
Implement queuing for bulk sends to stay within rate limits
|
|
102
|
+
</Card>
|
|
103
|
+
</CardGroup>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Emails SDK Reference
|
|
3
|
+
description: Send custom transactional emails with the InsForge SDK
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<Note>**Private Preview** - This feature is currently in private preview.</Note>
|
|
7
|
+
|
|
8
|
+
import Installation from '/snippets/sdk-installation.mdx';
|
|
9
|
+
|
|
10
|
+
<Installation />
|
|
11
|
+
|
|
12
|
+
## emails.send()
|
|
13
|
+
|
|
14
|
+
Send custom HTML emails to one or more recipients.
|
|
15
|
+
|
|
16
|
+
### Parameters
|
|
17
|
+
|
|
18
|
+
- `to` (string | string[], required) - Recipient email(s), max 50 recipients
|
|
19
|
+
- `subject` (string, required) - Email subject line, max 500 characters
|
|
20
|
+
- `html` (string, required) - HTML content of the email
|
|
21
|
+
- `cc` (string | string[], optional) - CC recipient(s), max 50 recipients
|
|
22
|
+
- `bcc` (string | string[], optional) - BCC recipient(s), max 50 recipients
|
|
23
|
+
- `from` (string, optional) - Custom sender name, max 100 characters
|
|
24
|
+
- `replyTo` (string, optional) - Reply-to email address, must be a valid email address
|
|
25
|
+
|
|
26
|
+
### Returns
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
{
|
|
30
|
+
data: {} | null, // Empty object on success
|
|
31
|
+
error: Error | null
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Example
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
const { data, error } = await insforge.emails.send({
|
|
39
|
+
to: ['user1@example.com', 'user2@example.com'],
|
|
40
|
+
cc: 'manager@example.com',
|
|
41
|
+
from: 'Acme Support Team',
|
|
42
|
+
subject: 'Team Update',
|
|
43
|
+
html: '<h1>Weekly Update</h1><p>Here are this week\'s highlights...</p>',
|
|
44
|
+
replyTo: 'support@example.com'
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
if (error) {
|
|
48
|
+
console.error('Failed to send email:', error.message);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
console.log('Email sent successfully');
|
|
53
|
+
```
|
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Architecture
|
|
3
|
-
description: Serverless JavaScript functions running in isolated Deno runtime
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## Overview
|
|
7
|
-
|
|
8
|
-
InsForge Functions provide a secure, scalable serverless compute platform that runs JavaScript/TypeScript code in isolated Deno workers with full access to the InsForge SDK.
|
|
9
|
-
|
|
10
|
-
## Technology Stack
|
|
11
|
-
|
|
12
|
-
```mermaid
|
|
13
|
-
graph TB
|
|
14
|
-
Client[Client Application] --> Backend[Backend API :7130]
|
|
15
|
-
Backend --> Proxy[Proxy Layer]
|
|
16
|
-
Proxy --> Deno[Deno Runtime :7133]
|
|
17
|
-
Deno --> Worker[Web Worker]
|
|
18
|
-
Worker --> Sandbox[Isolated Sandbox]
|
|
19
|
-
|
|
20
|
-
Backend --> DB[(PostgreSQL)]
|
|
21
|
-
Deno --> DB
|
|
22
|
-
Worker --> SDK[InsForge SDK]
|
|
23
|
-
SDK --> Backend
|
|
24
|
-
|
|
25
|
-
style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
|
|
26
|
-
style Backend fill:#166534,stroke:#22c55e,color:#dcfce7
|
|
27
|
-
style Proxy fill:#1e40af,stroke:#3b82f6,color:#dbeafe
|
|
28
|
-
style Deno fill:#c2410c,stroke:#fb923c,color:#fed7aa
|
|
29
|
-
style Worker fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
30
|
-
style Sandbox fill:#7c2d12,stroke:#f97316,color:#fed7aa
|
|
31
|
-
style DB fill:#0e7490,stroke:#06b6d4,color:#cffafe
|
|
32
|
-
style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Core Components
|
|
36
|
-
|
|
37
|
-
| Component | Technology | Port | Purpose |
|
|
38
|
-
|-----------|------------|------|---------|
|
|
39
|
-
| **Backend API** | Node.js/Express | 7130 | Function management, authentication, proxy |
|
|
40
|
-
| **Runtime** | Deno v2.0.6 | 7133 | Secure JavaScript/TypeScript execution |
|
|
41
|
-
| **Sandbox** | Web Workers | - | Isolated execution environment |
|
|
42
|
-
| **Database** | PostgreSQL | 5432 | Function code and metadata storage |
|
|
43
|
-
| **SDK** | @insforge/sdk | - | Pre-injected client for backend access |
|
|
44
|
-
| **Secrets** | AES-256-GCM | - | Encrypted environment variables |
|
|
45
|
-
|
|
46
|
-
## How It Works
|
|
47
|
-
|
|
48
|
-
When a client makes a request to `/functions/{slug}`:
|
|
49
|
-
|
|
50
|
-
1. The backend API receives and validates the request
|
|
51
|
-
2. Request is proxied to the Deno runtime
|
|
52
|
-
3. Function code is executed in an isolated Web Worker
|
|
53
|
-
4. The function has access to the InsForge SDK and environment variables
|
|
54
|
-
5. Response is returned to the client
|
|
55
|
-
|
|
56
|
-
### Authentication Flow
|
|
57
|
-
|
|
58
|
-
```mermaid
|
|
59
|
-
sequenceDiagram
|
|
60
|
-
participant C as Client
|
|
61
|
-
participant B as Backend API
|
|
62
|
-
participant D as Deno Runtime
|
|
63
|
-
participant W as Worker
|
|
64
|
-
participant SDK as InsForge SDK
|
|
65
|
-
|
|
66
|
-
C->>B: POST /functions/my-api<br/>Authorization: Bearer TOKEN
|
|
67
|
-
B->>D: Proxy request with headers
|
|
68
|
-
D->>D: Fetch function code from DB
|
|
69
|
-
D->>D: Decrypt secrets
|
|
70
|
-
D->>W: Create worker with code + secrets
|
|
71
|
-
W->>SDK: createClient({token})
|
|
72
|
-
SDK->>B: Validate token
|
|
73
|
-
B-->>SDK: User data
|
|
74
|
-
W->>C: HTTP Response
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## Performance Characteristics
|
|
78
|
-
|
|
79
|
-
### Execution Limits
|
|
80
|
-
|
|
81
|
-
| Limit | Value | Description |
|
|
82
|
-
|-------|-------|-------------|
|
|
83
|
-
| **Timeout** | 30 seconds | Maximum execution time per invocation |
|
|
84
|
-
| **Memory** | Worker default | Depends on Deno worker allocation |
|
|
85
|
-
| **Payload Size** | 10MB | Maximum request/response size |
|
|
86
|
-
| **Concurrent Workers** | System dependent | Limited by server resources |
|
|
87
|
-
| **Cold Start** | ~50-200ms | Time to create new worker |
|
|
88
|
-
|
|
89
|
-
### Optimization Strategies
|
|
90
|
-
|
|
91
|
-
1. **Worker Pooling**: Workers are created on-demand
|
|
92
|
-
2. **Code Caching**: Function code cached in memory
|
|
93
|
-
3. **Secret Caching**: Decrypted secrets cached per execution
|
|
94
|
-
4. **SDK Reuse**: SDK client created once per worker
|
|
95
|
-
|
|
96
|
-
## Best Practices
|
|
97
|
-
|
|
98
|
-
1. **Keep Functions Small**: Single responsibility per function
|
|
99
|
-
2. **Handle Errors Gracefully**: Always return proper HTTP responses
|
|
100
|
-
3. **Validate Input**: Check request data before processing
|
|
101
|
-
4. **Use Caching**: Cache frequently accessed data
|
|
102
|
-
5. **Optimize Queries**: Use efficient database queries
|
|
103
|
-
6. **Monitor Performance**: Track execution times and errors
|
|
104
|
-
7. **Secure Secrets**: Never log sensitive data
|
|
105
|
-
8. **Test Locally**: Test functions before deployment
|
|
1
|
+
---
|
|
2
|
+
title: Functions Architecture
|
|
3
|
+
description: Serverless JavaScript functions running in isolated Deno runtime
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
InsForge Functions provide a secure, scalable serverless compute platform that runs JavaScript/TypeScript code in isolated Deno workers with full access to the InsForge SDK.
|
|
9
|
+
|
|
10
|
+
## Technology Stack
|
|
11
|
+
|
|
12
|
+
```mermaid
|
|
13
|
+
graph TB
|
|
14
|
+
Client[Client Application] --> Backend[Backend API :7130]
|
|
15
|
+
Backend --> Proxy[Proxy Layer]
|
|
16
|
+
Proxy --> Deno[Deno Runtime :7133]
|
|
17
|
+
Deno --> Worker[Web Worker]
|
|
18
|
+
Worker --> Sandbox[Isolated Sandbox]
|
|
19
|
+
|
|
20
|
+
Backend --> DB[(PostgreSQL)]
|
|
21
|
+
Deno --> DB
|
|
22
|
+
Worker --> SDK[InsForge SDK]
|
|
23
|
+
SDK --> Backend
|
|
24
|
+
|
|
25
|
+
style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
|
|
26
|
+
style Backend fill:#166534,stroke:#22c55e,color:#dcfce7
|
|
27
|
+
style Proxy fill:#1e40af,stroke:#3b82f6,color:#dbeafe
|
|
28
|
+
style Deno fill:#c2410c,stroke:#fb923c,color:#fed7aa
|
|
29
|
+
style Worker fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
|
|
30
|
+
style Sandbox fill:#7c2d12,stroke:#f97316,color:#fed7aa
|
|
31
|
+
style DB fill:#0e7490,stroke:#06b6d4,color:#cffafe
|
|
32
|
+
style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Core Components
|
|
36
|
+
|
|
37
|
+
| Component | Technology | Port | Purpose |
|
|
38
|
+
|-----------|------------|------|---------|
|
|
39
|
+
| **Backend API** | Node.js/Express | 7130 | Function management, authentication, proxy |
|
|
40
|
+
| **Runtime** | Deno v2.0.6 | 7133 | Secure JavaScript/TypeScript execution |
|
|
41
|
+
| **Sandbox** | Web Workers | - | Isolated execution environment |
|
|
42
|
+
| **Database** | PostgreSQL | 5432 | Function code and metadata storage |
|
|
43
|
+
| **SDK** | @insforge/sdk | - | Pre-injected client for backend access |
|
|
44
|
+
| **Secrets** | AES-256-GCM | - | Encrypted environment variables |
|
|
45
|
+
|
|
46
|
+
## How It Works
|
|
47
|
+
|
|
48
|
+
When a client makes a request to `/functions/{slug}`:
|
|
49
|
+
|
|
50
|
+
1. The backend API receives and validates the request
|
|
51
|
+
2. Request is proxied to the Deno runtime
|
|
52
|
+
3. Function code is executed in an isolated Web Worker
|
|
53
|
+
4. The function has access to the InsForge SDK and environment variables
|
|
54
|
+
5. Response is returned to the client
|
|
55
|
+
|
|
56
|
+
### Authentication Flow
|
|
57
|
+
|
|
58
|
+
```mermaid
|
|
59
|
+
sequenceDiagram
|
|
60
|
+
participant C as Client
|
|
61
|
+
participant B as Backend API
|
|
62
|
+
participant D as Deno Runtime
|
|
63
|
+
participant W as Worker
|
|
64
|
+
participant SDK as InsForge SDK
|
|
65
|
+
|
|
66
|
+
C->>B: POST /functions/my-api<br/>Authorization: Bearer TOKEN
|
|
67
|
+
B->>D: Proxy request with headers
|
|
68
|
+
D->>D: Fetch function code from DB
|
|
69
|
+
D->>D: Decrypt secrets
|
|
70
|
+
D->>W: Create worker with code + secrets
|
|
71
|
+
W->>SDK: createClient({token})
|
|
72
|
+
SDK->>B: Validate token
|
|
73
|
+
B-->>SDK: User data
|
|
74
|
+
W->>C: HTTP Response
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Performance Characteristics
|
|
78
|
+
|
|
79
|
+
### Execution Limits
|
|
80
|
+
|
|
81
|
+
| Limit | Value | Description |
|
|
82
|
+
|-------|-------|-------------|
|
|
83
|
+
| **Timeout** | 30 seconds | Maximum execution time per invocation |
|
|
84
|
+
| **Memory** | Worker default | Depends on Deno worker allocation |
|
|
85
|
+
| **Payload Size** | 10MB | Maximum request/response size |
|
|
86
|
+
| **Concurrent Workers** | System dependent | Limited by server resources |
|
|
87
|
+
| **Cold Start** | ~50-200ms | Time to create new worker |
|
|
88
|
+
|
|
89
|
+
### Optimization Strategies
|
|
90
|
+
|
|
91
|
+
1. **Worker Pooling**: Workers are created on-demand
|
|
92
|
+
2. **Code Caching**: Function code cached in memory
|
|
93
|
+
3. **Secret Caching**: Decrypted secrets cached per execution
|
|
94
|
+
4. **SDK Reuse**: SDK client created once per worker
|
|
95
|
+
|
|
96
|
+
## Best Practices
|
|
97
|
+
|
|
98
|
+
1. **Keep Functions Small**: Single responsibility per function
|
|
99
|
+
2. **Handle Errors Gracefully**: Always return proper HTTP responses
|
|
100
|
+
3. **Validate Input**: Check request data before processing
|
|
101
|
+
4. **Use Caching**: Cache frequently accessed data
|
|
102
|
+
5. **Optimize Queries**: Use efficient database queries
|
|
103
|
+
6. **Monitor Performance**: Track execution times and errors
|
|
104
|
+
7. **Secure Secrets**: Never log sensitive data
|
|
105
|
+
8. **Test Locally**: Test functions before deployment
|