insforge 1.3.0 → 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/CHANGELOG.md +2 -0
- package/auth/package.json +5 -3
- package/auth/src/lib/broadcastService.ts +115 -117
- package/auth/src/lib/insforge.ts +8 -0
- package/auth/src/main.tsx +2 -4
- package/auth/src/pages/SignInPage.tsx +60 -60
- package/auth/src/pages/SignUpPage.tsx +60 -60
- package/auth/src/pages/VerifyEmailPage.tsx +18 -0
- package/auth/tsconfig.json +2 -1
- package/backend/package.json +10 -6
- 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 +85 -32
- package/backend/src/api/routes/auth/oauth.routes.ts +11 -6
- package/backend/src/api/routes/database/index.routes.ts +2 -0
- package/backend/src/api/routes/database/records.routes.ts +39 -175
- package/backend/src/api/routes/database/rpc.routes.ts +69 -0
- package/backend/src/api/routes/deployments/index.routes.ts +192 -0
- package/backend/src/api/routes/docs/index.routes.ts +3 -2
- package/backend/src/api/routes/email/index.routes.ts +35 -35
- package/backend/src/api/routes/functions/index.routes.ts +3 -3
- package/backend/src/api/routes/metadata/index.routes.ts +26 -0
- package/backend/src/api/routes/webhooks/index.routes.ts +109 -0
- package/backend/src/infra/database/database.manager.ts +0 -10
- 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/security/token.manager.ts +1 -4
- package/backend/src/providers/ai/openrouter.provider.ts +12 -3
- 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/server.ts +19 -7
- 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/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 +134 -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 -85
- 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/functions/function.service.ts +61 -41
- package/backend/src/services/logs/audit.service.ts +10 -10
- 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 +5 -1
- package/backend/src/types/database.ts +2 -0
- package/backend/src/types/deployments.ts +33 -0
- package/backend/src/types/storage.ts +1 -1
- package/backend/src/types/webhooks.ts +45 -0
- package/backend/src/utils/cookies.ts +34 -35
- package/backend/src/utils/environment.ts +0 -14
- package/backend/src/utils/s3-config-loader.ts +64 -64
- package/backend/src/utils/seed.ts +334 -301
- package/backend/src/utils/sql-parser.ts +126 -0
- package/backend/src/utils/utils.ts +114 -114
- package/backend/src/utils/validations.ts +10 -10
- package/backend/tests/local/test-rpc.sh +141 -0
- package/backend/tests/local/test-secrets.sh +1 -1
- package/backend/tests/manual/test-ai-model-plugins.sh +258 -0
- package/backend/tests/manual/test-rawsql-modes.sh +24 -24
- package/backend/tests/unit/database-advance.test.ts +326 -0
- package/backend/tests/unit/helpers.test.ts +2 -2
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +13 -10
- package/docker-compose.prod.yml +1 -1
- package/docker-compose.yml +1 -1
- package/docs/agent-docs/deployment.md +79 -0
- package/docs/changelog.mdx +165 -72
- package/docs/core-concepts/ai/architecture.mdx +1 -23
- package/docs/core-concepts/ai/sdk.mdx +26 -1
- package/docs/core-concepts/authentication/architecture.mdx +6 -8
- package/docs/core-concepts/authentication/sdk.mdx +387 -91
- package/docs/core-concepts/authentication/ui-components/customization.mdx +460 -256
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +50 -24
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +18 -19
- package/docs/core-concepts/authentication/ui-components/react.mdx +26 -19
- package/docs/core-concepts/database/architecture.mdx +58 -21
- package/docs/core-concepts/database/pgvector.mdx +138 -0
- package/docs/core-concepts/database/sdk.mdx +17 -17
- package/docs/core-concepts/deployments/architecture.mdx +152 -0
- package/docs/core-concepts/email/architecture.mdx +4 -2
- package/docs/core-concepts/functions/architecture.mdx +1 -1
- package/docs/core-concepts/functions/sdk.mdx +0 -1
- package/docs/core-concepts/realtime/architecture.mdx +1 -1
- package/docs/core-concepts/storage/architecture.mdx +1 -1
- package/docs/core-concepts/storage/sdk.mdx +25 -25
- package/docs/docs.json +14 -6
- package/docs/favicon.png +0 -0
- package/docs/favicon.svg +3 -18
- package/docs/images/changelog/dec-2025/apple-oauth.mp4 +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/realtime2.png +0 -0
- 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 +7 -3
- package/docs/introduction.mdx +9 -8
- package/docs/mcp-setup.mdx +332 -0
- package/docs/oauth-server.mdx +563 -0
- package/docs/partnership.mdx +79 -10
- package/docs/quickstart.mdx +1 -1
- package/docs/vscode-extension.mdx +74 -0
- package/eslint.config.js +1 -0
- package/examples/response-examples.md +1 -1
- package/frontend/package.json +1 -1
- package/frontend/src/App.tsx +8 -3
- package/frontend/src/assets/logos/antigravity.svg +1 -0
- package/frontend/src/assets/logos/copilot.svg +10 -0
- package/frontend/src/assets/logos/deepseek.svg +139 -0
- package/frontend/src/assets/logos/kiro.svg +9 -0
- package/frontend/src/assets/logos/qoder.svg +4 -0
- package/frontend/src/assets/logos/qwen.svg +15 -0
- 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 +4 -27
- 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/pages/AIPage.tsx +166 -166
- package/frontend/src/features/auth/components/AuthPreview.tsx +96 -96
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +55 -31
- package/frontend/src/features/auth/components/index.ts +5 -5
- package/frontend/src/features/auth/pages/AuthMethodsPage.tsx +275 -275
- package/frontend/src/features/dashboard/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/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/useRawSQL.ts +3 -2
- package/frontend/src/features/database/hooks/useTables.ts +5 -7
- package/frontend/src/features/database/pages/FunctionsPage.tsx +0 -5
- package/frontend/src/features/database/pages/IndexesPage.tsx +0 -5
- package/frontend/src/features/database/pages/PoliciesPage.tsx +0 -5
- package/frontend/src/features/database/pages/SQLEditorPage.tsx +2 -2
- package/frontend/src/features/database/pages/TriggersPage.tsx +0 -5
- package/frontend/src/features/database/services/advance.service.ts +1 -15
- package/frontend/src/features/database/services/record.service.ts +4 -20
- package/frontend/src/features/database/services/table.service.ts +1 -4
- 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/pages/SecretsPage.tsx +118 -118
- 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/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/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/settings/pages/SettingsPage.tsx +349 -0
- package/frontend/src/features/visualizer/components/AuthNode.tsx +4 -4
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +21 -8
- package/frontend/src/features/visualizer/pages/VisualizerPage.tsx +10 -1
- package/frontend/src/index.css +249 -249
- package/frontend/src/lib/contexts/ModalContext.tsx +35 -0
- 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 -99
- package/frontend/src/lib/services/metadata.service.ts +20 -3
- package/frontend/src/lib/utils/menuItems.ts +223 -207
- package/frontend/src/lib/utils/utils.ts +196 -196
- package/functions/server.ts +315 -315
- package/functions/worker-template.js +1 -1
- package/openapi/ai.yaml +115 -5
- package/openapi/auth.yaml +97 -17
- package/openapi/logs.yaml +0 -2
- package/openapi/metadata.yaml +0 -2
- package/openapi/records.yaml +21 -21
- package/openapi/tables.yaml +1 -2
- package/package.json +1 -1
- package/shared-schemas/package.json +1 -1
- package/shared-schemas/src/ai-api.schema.ts +251 -143
- package/shared-schemas/src/ai.schema.ts +63 -63
- package/shared-schemas/src/auth-api.schema.ts +34 -6
- package/shared-schemas/src/auth.schema.ts +17 -10
- package/shared-schemas/src/cloud-events.schema.ts +26 -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 +8 -2
- package/shared-schemas/src/email-api.schema.ts +30 -30
- 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 -18
- package/shared-schemas/src/metadata.schema.ts +30 -4
- package/shared-schemas/src/secrets-api.schema.ts +44 -0
- package/shared-schemas/src/secrets.schema.ts +15 -0
- package/zeabur/README.md +13 -0
- package/zeabur/template.yml +20 -51
- package/backend/src/types/profile.ts +0 -55
- package/frontend/src/components/ProjectInfoModal.tsx +0 -128
|
@@ -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>
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: Architecture
|
|
2
|
+
title: Email Architecture
|
|
3
3
|
description: Transactional email delivery powered by AWS SES
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<
|
|
6
|
+
<Warning>
|
|
7
|
+
Email is an experimental feature. APIs and behavior may change.
|
|
8
|
+
</Warning>
|
|
7
9
|
|
|
8
10
|
## Overview
|
|
9
11
|
|
|
@@ -24,7 +24,7 @@ StorageBucket // Instance with upload, uploadAuto, download, remove methods
|
|
|
24
24
|
### Example
|
|
25
25
|
|
|
26
26
|
```javascript
|
|
27
|
-
const bucket = insforge.storage.from('
|
|
27
|
+
const bucket = insforge.storage.from('images')
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
---
|
|
@@ -62,17 +62,17 @@ If a file with the same key exists, backend auto-renames it. Always use the retu
|
|
|
62
62
|
|
|
63
63
|
```javascript
|
|
64
64
|
const { data, error } = await insforge.storage
|
|
65
|
-
.from('
|
|
66
|
-
.upload('
|
|
65
|
+
.from('images')
|
|
66
|
+
.upload('posts/post-123/cover.jpg', fileObject)
|
|
67
67
|
|
|
68
68
|
// Save BOTH url and key to database
|
|
69
69
|
await insforge.database
|
|
70
|
-
.from('
|
|
70
|
+
.from('posts')
|
|
71
71
|
.update({
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
image_url: data.url,
|
|
73
|
+
image_key: data.key // Save key for download/delete operations
|
|
74
74
|
})
|
|
75
|
-
.eq('id', '
|
|
75
|
+
.eq('id', 'post-123')
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
### Output
|
|
@@ -80,12 +80,12 @@ await insforge.database
|
|
|
80
80
|
```json
|
|
81
81
|
{
|
|
82
82
|
"data": {
|
|
83
|
-
"bucket": "
|
|
84
|
-
"key": "
|
|
83
|
+
"bucket": "images",
|
|
84
|
+
"key": "posts/post-123/cover.jpg",
|
|
85
85
|
"size": 45678,
|
|
86
86
|
"mimeType": "image/jpeg",
|
|
87
87
|
"uploadedAt": "2024-01-15T10:30:00Z",
|
|
88
|
-
"url": "https://your-app.region.insforge.app/api/storage/buckets/
|
|
88
|
+
"url": "https://your-app.region.insforge.app/api/storage/buckets/images/objects/posts%2Fpost-123%2Fcover.jpg"
|
|
89
89
|
},
|
|
90
90
|
"error": null
|
|
91
91
|
}
|
|
@@ -173,16 +173,16 @@ Download a file as Blob.
|
|
|
173
173
|
|
|
174
174
|
```javascript
|
|
175
175
|
// 1. Get the file key from your database
|
|
176
|
-
const { data:
|
|
177
|
-
.from('
|
|
178
|
-
.select('
|
|
179
|
-
.eq('id', '
|
|
176
|
+
const { data: post, error: dbError } = await insforge.database
|
|
177
|
+
.from('posts')
|
|
178
|
+
.select('image_key')
|
|
179
|
+
.eq('id', 'post-123')
|
|
180
180
|
.single()
|
|
181
181
|
|
|
182
182
|
// 2. Download the file using the key
|
|
183
183
|
const { data: blob, error } = await insforge.storage
|
|
184
|
-
.from('
|
|
185
|
-
.download(
|
|
184
|
+
.from('images')
|
|
185
|
+
.download(post.image_key)
|
|
186
186
|
|
|
187
187
|
// 3. Create download link or display image
|
|
188
188
|
const url = URL.createObjectURL(blob)
|
|
@@ -222,22 +222,22 @@ Delete a file from storage.
|
|
|
222
222
|
|
|
223
223
|
```javascript
|
|
224
224
|
// 1. Get the file key from your database
|
|
225
|
-
const { data:
|
|
226
|
-
.from('
|
|
227
|
-
.select('
|
|
228
|
-
.eq('id', '
|
|
225
|
+
const { data: post, error: dbError } = await insforge.database
|
|
226
|
+
.from('posts')
|
|
227
|
+
.select('image_key')
|
|
228
|
+
.eq('id', 'post-123')
|
|
229
229
|
.single()
|
|
230
230
|
|
|
231
231
|
// 2. Delete the file from storage
|
|
232
232
|
const { data, error } = await insforge.storage
|
|
233
|
-
.from('
|
|
234
|
-
.remove(
|
|
233
|
+
.from('images')
|
|
234
|
+
.remove(post.image_key)
|
|
235
235
|
|
|
236
236
|
// 3. Clear the database reference
|
|
237
237
|
await insforge.database
|
|
238
|
-
.from('
|
|
239
|
-
.update({
|
|
240
|
-
.eq('id', '
|
|
238
|
+
.from('posts')
|
|
239
|
+
.update({ image_url: null, image_key: null })
|
|
240
|
+
.eq('id', 'post-123')
|
|
241
241
|
```
|
|
242
242
|
|
|
243
243
|
### Output
|
package/docs/docs.json
CHANGED
|
@@ -15,14 +15,15 @@
|
|
|
15
15
|
},
|
|
16
16
|
"seo": {
|
|
17
17
|
"metatags": {
|
|
18
|
-
"og:site_name": "InsForge Docs"
|
|
18
|
+
"og:site_name": "InsForge Docs",
|
|
19
|
+
"google-site-verification": "2dSsr0kxw61j9-qSOR0a1dq1PT6U1-2o3kiZMdsIf9g"
|
|
19
20
|
},
|
|
20
21
|
"indexing": "navigable"
|
|
21
22
|
},
|
|
22
23
|
"search": {
|
|
23
24
|
"prompt": "Search InsForge docs..."
|
|
24
25
|
},
|
|
25
|
-
"favicon": "/favicon.
|
|
26
|
+
"favicon": "/favicon.png",
|
|
26
27
|
"navigation": {
|
|
27
28
|
"tabs": [
|
|
28
29
|
{
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
"groups": [
|
|
31
32
|
{
|
|
32
33
|
"group": "Getting Started",
|
|
33
|
-
"pages": ["introduction", "quickstart", "partnership"]
|
|
34
|
+
"pages": ["introduction", "quickstart", "mcp-setup", "vscode-extension", "partnership", "oauth-server"]
|
|
34
35
|
},
|
|
35
36
|
{
|
|
36
37
|
"group": "Core Concepts",
|
|
@@ -39,7 +40,8 @@
|
|
|
39
40
|
"group": "Database",
|
|
40
41
|
"pages": [
|
|
41
42
|
"core-concepts/database/architecture",
|
|
42
|
-
"core-concepts/database/sdk"
|
|
43
|
+
"core-concepts/database/sdk",
|
|
44
|
+
"core-concepts/database/pgvector"
|
|
43
45
|
]
|
|
44
46
|
},
|
|
45
47
|
{
|
|
@@ -50,8 +52,8 @@
|
|
|
50
52
|
{
|
|
51
53
|
"group": "UI Components",
|
|
52
54
|
"pages": [
|
|
53
|
-
"core-concepts/authentication/ui-components/nextjs",
|
|
54
55
|
"core-concepts/authentication/ui-components/react",
|
|
56
|
+
"core-concepts/authentication/ui-components/nextjs",
|
|
55
57
|
"core-concepts/authentication/ui-components/react-router",
|
|
56
58
|
"core-concepts/authentication/ui-components/customization"
|
|
57
59
|
]
|
|
@@ -87,11 +89,17 @@
|
|
|
87
89
|
]
|
|
88
90
|
},
|
|
89
91
|
{
|
|
90
|
-
"group": "Email (
|
|
92
|
+
"group": "Email (Experimental)",
|
|
91
93
|
"pages": [
|
|
92
94
|
"core-concepts/email/architecture",
|
|
93
95
|
"core-concepts/email/sdk"
|
|
94
96
|
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"group": "Deployments (Experimental)",
|
|
100
|
+
"pages": [
|
|
101
|
+
"core-concepts/deployments/architecture"
|
|
102
|
+
]
|
|
95
103
|
}
|
|
96
104
|
]
|
|
97
105
|
},
|
package/docs/favicon.png
ADDED
|
Binary file
|
package/docs/favicon.svg
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
<svg width="
|
|
2
|
-
<path d="
|
|
3
|
-
<path d="
|
|
4
|
-
<path d="M8.91388 23.0788C8.73534 19.8817 10.1585 9.08525 23.5699 13.1107C23.1812 20.1229 18.984 26.4182 8.91388 23.0788Z" fill="url(#paint2_linear_17557_2021)"/>
|
|
5
|
-
<defs>
|
|
6
|
-
<linearGradient id="paint0_linear_17557_2021" x1="3.77557" y1="5.91571" x2="5.23185" y2="21.5589" gradientUnits="userSpaceOnUse">
|
|
7
|
-
<stop stop-color="#18E299"/>
|
|
8
|
-
<stop offset="1" stop-color="#15803D"/>
|
|
9
|
-
</linearGradient>
|
|
10
|
-
<linearGradient id="paint1_linear_17557_2021" x1="12.1711" y1="-0.718425" x2="10.1897" y2="22.9832" gradientUnits="userSpaceOnUse">
|
|
11
|
-
<stop stop-color="#16A34A"/>
|
|
12
|
-
<stop offset="1" stop-color="#4ADE80"/>
|
|
13
|
-
</linearGradient>
|
|
14
|
-
<linearGradient id="paint2_linear_17557_2021" x1="23.1327" y1="15.353" x2="9.33841" y2="18.5196" gradientUnits="userSpaceOnUse">
|
|
15
|
-
<stop stop-color="#4ADE80"/>
|
|
16
|
-
<stop offset="1" stop-color="#0D9373"/>
|
|
17
|
-
</linearGradient>
|
|
18
|
-
</defs>
|
|
1
|
+
<svg width="32" height="32" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M11.56 41.33C10.29 40.06 10.29 38.01 11.56 36.74L43.83 4.61H89.92L34.61 59.69C33.34 60.96 31.27 60.96 30 59.69L11.56 41.33Z" fill="#1a1a1a"/>
|
|
3
|
+
<path d="M69.76 30.43L89.92 50.51V96.42L46.71 53.38L69.76 30.43Z" fill="#4a4a4a"/>
|
|
19
4
|
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -53,12 +53,15 @@ Available documentation types:
|
|
|
53
53
|
- `"instructions"` - Essential backend setup (START HERE)
|
|
54
54
|
- `"db-sdk"` - Database operations with SDK
|
|
55
55
|
- **Authentication** - Choose based on implementation:
|
|
56
|
-
- `"auth-
|
|
57
|
-
- `"auth-components-react
|
|
56
|
+
- `"auth-sdk"` - Direct SDK methods for custom auth flows
|
|
57
|
+
- `"auth-components-react"` - Pre-built auth UI for React+Vite (singlepage App)
|
|
58
|
+
- `"auth-components-react-router"` - Pre-built auth UI for React(Vite+React Router) (Multipage App)
|
|
59
|
+
- `"auth-components-nextjs"` - Pre-built auth UI for Nextjs (SSR App)
|
|
58
60
|
- `"storage-sdk"` - File storage operations
|
|
59
61
|
- `"functions-sdk"` - Serverless functions invocation
|
|
60
62
|
- `"ai-integration-sdk"` - AI chat and image generation
|
|
61
63
|
- `"real-time"` - Real-time pub/sub (database + client events) via WebSockets
|
|
64
|
+
- `"deployment"` - Deploy frontend applications via MCP tool
|
|
62
65
|
|
|
63
66
|
## When to Use SDK vs MCP Tools
|
|
64
67
|
|
|
@@ -77,10 +80,11 @@ Available documentation types:
|
|
|
77
80
|
- Database schema management (`run-raw-sql`, `get-table-schema`)
|
|
78
81
|
- Storage bucket creation (`create-bucket`, `list-buckets`, `delete-bucket`)
|
|
79
82
|
- Serverless function deployment (`create-function`, `update-function`, `delete-function`)
|
|
83
|
+
- Frontend deployment (`create-deployment`) - Deploy frontend apps to InsForge hosting
|
|
80
84
|
|
|
81
85
|
## Important Notes
|
|
82
86
|
|
|
83
|
-
-
|
|
87
|
+
- For auth: use `auth-sdk` for custom UI, or framework-specific components for pre-built UI
|
|
84
88
|
- SDK returns `{data, error}` structure for all operations
|
|
85
89
|
- Database inserts require array format: `[{...}]`
|
|
86
90
|
- Serverless functions have single endpoint (no subpaths)
|
package/docs/introduction.mdx
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: Introduction
|
|
2
|
+
title: "Introduction"
|
|
3
|
+
description: "Backend built for AI-assisted development."
|
|
3
4
|
---
|
|
4
5
|
|
|
5
6
|
InsForge is an AI-optimized Backend-as-a-Service platform for modern applications. It provides a comprehensive backend out of the box with PostgreSQL, JWT-based authentication, and S3-compatible storage. Every endpoint, from initial configuration to database operations to file uploads, is designed to be agent-friendly with consistent patterns and predictable responses.
|
|
@@ -19,27 +20,27 @@ Ready to start building? Check out our [framework examples](/examples/overview)
|
|
|
19
20
|
Everything you need to build real applications, designed for AI agents:
|
|
20
21
|
|
|
21
22
|
<CardGroup cols={2}>
|
|
22
|
-
<Card title="PostgreSQL Database" icon="database">
|
|
23
|
+
<Card title="PostgreSQL Database" icon="database" href="/core-concepts/database/architecture">
|
|
23
24
|
Tables become APIs instantly. No code. Just schema.
|
|
24
25
|
</Card>
|
|
25
26
|
|
|
26
|
-
<Card title="Authentication" icon="shield">
|
|
27
|
+
<Card title="Authentication" icon="shield" href="/core-concepts/authentication/architecture">
|
|
27
28
|
User signup, login, sessions, OAuth. Zero configuration.
|
|
28
29
|
</Card>
|
|
29
30
|
|
|
30
|
-
<Card title="File Storage" icon="folder">
|
|
31
|
+
<Card title="File Storage" icon="folder" href="/core-concepts/storage/architecture">
|
|
31
32
|
Upload, download, serve files. Works like any other API.
|
|
32
33
|
</Card>
|
|
33
34
|
|
|
34
|
-
<Card title="Edge Functions" icon="bolt">
|
|
35
|
+
<Card title="Edge Functions" icon="bolt" href="/core-concepts/functions/architecture">
|
|
35
36
|
Deploy serverless functions that run on the edge. Zero infrastructure.
|
|
36
37
|
</Card>
|
|
37
38
|
|
|
38
|
-
<Card title="AI Integration" icon="sparkles">
|
|
39
|
+
<Card title="AI Integration" icon="sparkles" href="/core-concepts/ai/architecture">
|
|
39
40
|
Built-in AI capabilities with streaming support. Ready to use.
|
|
40
41
|
</Card>
|
|
41
42
|
|
|
42
|
-
<Card title="
|
|
43
|
-
|
|
43
|
+
<Card title="Realtime" icon="bolt" href="/core-concepts/realtime/architecture">
|
|
44
|
+
Pub/sub messaging with WebSockets. Build collaborative apps.
|
|
44
45
|
</Card>
|
|
45
46
|
</CardGroup>
|