insforge 0.3.2 → 1.2.10
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 -0
- package/.cursor/rules/cursor-rules.mdc +94 -0
- package/.dockerignore +3 -0
- package/.env.example +33 -4
- package/.github/ISSUE_TEMPLATE/bug_report.yml +13 -60
- package/.github/ISSUE_TEMPLATE/config.yml +2 -2
- package/.github/ISSUE_TEMPLATE/feature_request.yml +10 -63
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
- package/.github/workflows/build-image.yml +2 -1
- package/.github/workflows/e2e.yml +63 -0
- package/CHANGELOG.md +41 -0
- package/CLAUDE_PLUGIN.md +104 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +1 -1
- package/Dockerfile +4 -1
- package/README.md +66 -18
- package/assets/mcpInstallv2.png +0 -0
- package/assets/sampleResponse.png +0 -0
- package/auth/index.html +13 -0
- package/auth/package.json +28 -0
- package/auth/public/favicon.ico +0 -0
- package/auth/src/App.tsx +33 -0
- package/auth/src/components/ErrorCard.tsx +37 -0
- package/auth/src/components/Layout.tsx +13 -0
- package/auth/src/index.css +19 -0
- package/auth/src/lib/broadcastService.ts +115 -0
- package/auth/src/lib/utils.ts +11 -0
- package/auth/src/main.tsx +22 -0
- package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
- package/auth/src/pages/ResetPasswordPage.tsx +11 -0
- package/auth/src/pages/SignInPage.tsx +57 -0
- package/auth/src/pages/SignUpPage.tsx +57 -0
- package/auth/src/pages/VerifyEmailPage.tsx +20 -0
- package/auth/src/vite-env.d.ts +10 -0
- package/auth/tsconfig.json +32 -0
- package/auth/tsconfig.node.json +11 -0
- package/auth/vite.config.ts +25 -0
- package/backend/package.json +9 -9
- package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
- package/backend/src/api/middlewares/rate-limiters.ts +127 -0
- package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +20 -24
- package/backend/src/api/routes/auth/index.routes.ts +570 -0
- package/backend/src/api/routes/auth/oauth.routes.ts +448 -0
- package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +107 -65
- package/backend/src/api/routes/database/index.routes.ts +13 -0
- package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +22 -8
- package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +20 -23
- package/backend/src/api/routes/docs/index.routes.ts +76 -0
- package/backend/src/api/routes/functions/index.routes.ts +188 -0
- package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
- package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +21 -31
- package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
- package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +34 -53
- package/backend/src/api/routes/usage/index.routes.ts +89 -0
- package/backend/src/infra/config/app.config.ts +51 -0
- package/backend/src/{core/database/manager.ts → infra/database/database.manager.ts} +76 -85
- package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -0
- package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
- package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
- package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
- package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
- package/backend/src/infra/security/token.manager.ts +125 -0
- package/backend/src/{core/socket/socket.ts → infra/socket/socket.manager.ts} +15 -15
- package/backend/src/providers/ai/openrouter.provider.ts +377 -0
- package/backend/src/providers/email/base.provider.ts +41 -0
- package/backend/src/providers/email/cloud.provider.ts +187 -0
- package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
- package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
- package/backend/src/providers/logs/local.provider.ts +185 -0
- package/backend/src/providers/oauth/base.provider.ts +29 -0
- package/backend/src/providers/oauth/discord.provider.ts +195 -0
- package/backend/src/providers/oauth/facebook.provider.ts +194 -0
- package/backend/src/providers/oauth/github.provider.ts +208 -0
- package/backend/src/providers/oauth/google.provider.ts +249 -0
- package/backend/src/providers/oauth/index.ts +7 -0
- package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
- package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
- package/backend/src/providers/oauth/x.provider.ts +202 -0
- package/backend/src/providers/storage/base.provider.ts +29 -0
- package/backend/src/providers/storage/local.provider.ts +103 -0
- package/backend/src/providers/storage/s3.provider.ts +313 -0
- package/backend/src/server.ts +70 -74
- package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
- package/backend/src/services/ai/ai-model.service.ts +60 -0
- package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
- package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
- package/backend/src/services/ai/helpers.ts +64 -0
- package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
- package/backend/src/services/ai/index.ts +13 -0
- package/backend/src/services/auth/auth-config.service.ts +250 -0
- package/backend/src/services/auth/auth-otp.service.ts +424 -0
- package/backend/src/services/auth/auth.service.ts +1136 -0
- package/backend/src/services/auth/index.ts +4 -0
- package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
- package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
- package/backend/src/services/database/database-table.service.ts +811 -0
- package/backend/src/services/email/email.service.ts +75 -0
- package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
- package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
- package/backend/src/services/logs/log.service.ts +73 -0
- package/backend/src/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
- package/backend/src/services/storage/storage.service.ts +617 -0
- package/backend/src/services/usage/usage.service.ts +149 -0
- package/backend/src/types/auth.ts +66 -2
- package/backend/src/types/email.ts +8 -0
- package/backend/src/types/error-constants.ts +4 -0
- package/backend/src/types/logs.ts +0 -29
- package/backend/src/{core/socket/types.ts → types/socket.ts} +5 -6
- package/backend/src/utils/environment.ts +9 -3
- package/backend/src/utils/logger.ts +20 -2
- package/backend/src/utils/seed.ts +150 -57
- package/backend/src/utils/sql-parser.ts +1 -1
- package/backend/src/utils/utils.ts +114 -0
- package/backend/src/utils/validations.ts +40 -4
- package/backend/tests/local/test-ai-config.sh +129 -0
- package/backend/tests/local/test-ai-usage.sh +80 -0
- package/backend/tests/local/test-auth-router.sh +1 -1
- package/backend/tests/local/test-e2e.sh +1 -1
- package/backend/tests/local/test-functions.sh +123 -0
- package/backend/tests/local/test-logs.sh +132 -0
- package/backend/tests/local/test-public-bucket.sh +3 -3
- package/backend/tests/local/test-secrets.sh +14 -12
- package/backend/tests/local/test-traditional-rest.sh +2 -2
- package/backend/tests/manual/test-rawsql-modes.sh +244 -0
- package/backend/tests/test-config.sh +37 -1
- package/backend/tests/unit/cloud-token.test.ts +48 -0
- package/backend/tests/unit/constant.test.ts +8 -0
- package/backend/tests/unit/email.test.ts +372 -0
- package/backend/tests/unit/environment.test.ts +59 -0
- package/backend/tests/unit/helpers.test.ts +63 -0
- package/backend/tests/unit/logger.test.ts +22 -0
- package/backend/tests/unit/rate-limit.test.ts +154 -0
- package/backend/tests/unit/response.test.ts +58 -0
- package/backend/tests/unit/sql-parser.test.ts +74 -0
- package/backend/tests/unit/uuid.test.ts +21 -0
- package/backend/tests/unit/validations.test.ts +80 -0
- package/backend/tsconfig.json +1 -1
- package/backend/vitest.config.ts +11 -0
- package/claude-plugin/.claude-plugin/plugin.json +24 -0
- package/claude-plugin/README.md +133 -0
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
- package/docker-compose.prod.yml +60 -4
- package/docker-compose.yml +65 -4
- package/docker-init/db/db-init.sql +6 -34
- package/docker-init/logs/vector.yml +236 -0
- package/docs/README.md +44 -0
- package/docs/changelog.mdx +67 -0
- package/docs/core-concepts/ai/architecture.mdx +373 -0
- package/docs/core-concepts/ai/sdk.mdx +213 -0
- package/docs/core-concepts/authentication/architecture.mdx +278 -0
- package/docs/core-concepts/authentication/sdk.mdx +414 -0
- package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
- package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
- package/docs/core-concepts/database/architecture.mdx +256 -0
- package/docs/core-concepts/database/sdk.mdx +382 -0
- package/docs/core-concepts/functions/architecture.mdx +105 -0
- package/docs/core-concepts/functions/sdk.mdx +184 -0
- package/docs/core-concepts/storage/architecture.mdx +243 -0
- package/docs/core-concepts/storage/sdk.mdx +253 -0
- package/docs/deployment/README.md +94 -0
- package/docs/deployment/deploy-to-aws-ec2.md +565 -0
- package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
- package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
- package/docs/deployment/deploy-to-render.md +441 -0
- package/docs/docs.json +210 -0
- package/docs/examples/framework-guides/nextjs.mdx +131 -0
- package/docs/examples/framework-guides/nuxt.mdx +165 -0
- package/docs/examples/framework-guides/react.mdx +165 -0
- package/docs/examples/framework-guides/svelte.mdx +153 -0
- package/docs/examples/framework-guides/vue.mdx +159 -0
- package/docs/examples/overview.mdx +67 -0
- package/docs/favicon.svg +19 -0
- package/docs/images/changelog/nov-2025/auth-components.webp +0 -0
- package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
- package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
- package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
- package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
- package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
- package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
- package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
- package/docs/images/checks-passed.png +0 -0
- package/docs/images/dashboard-connect-expanded.png +0 -0
- package/docs/images/dashboard-connect.png +0 -0
- package/docs/images/hero-dark.png +0 -0
- package/docs/images/hero-light.png +0 -0
- package/docs/images/icons/ai.svg +4 -0
- package/docs/images/icons/auth.svg +1 -0
- package/docs/images/icons/database.svg +1 -0
- package/docs/images/icons/function.svg +1 -0
- package/docs/images/icons/storage.svg +1 -0
- package/docs/images/logos/nextjs.svg +4 -0
- package/docs/images/logos/nuxt.svg +4 -0
- package/docs/images/logos/react.svg +5 -0
- package/docs/images/logos/svelte.svg +4 -0
- package/docs/images/logos/vue.svg +5 -0
- package/docs/images/mcp-install.png +0 -0
- package/docs/images/onboarding-mcp.png +0 -0
- package/docs/insforge-instructions-sdk.md +55 -374
- package/docs/introduction.mdx +45 -0
- package/docs/logo/dark.svg +22 -0
- package/docs/logo/light.svg +20 -0
- package/docs/partnership.mdx +647 -0
- package/docs/quickstart.mdx +83 -0
- package/docs/showcase/2048-arena.png +0 -0
- package/docs/showcase/framegen-cloud.png +0 -0
- package/docs/showcase/line-connect-race.png +0 -0
- package/docs/showcase/moment-vibe.png +0 -0
- package/docs/showcase/national-flags.png +0 -0
- package/docs/showcase/pokemon-vibe.png +0 -0
- package/docs/showcase/pure-browse-buy.png +0 -0
- package/docs/showcase.mdx +52 -0
- package/docs/snippets/sdk-installation.mdx +22 -0
- package/docs/snippets/service-icons.mdx +27 -0
- package/eslint.config.js +10 -3
- package/frontend/package.json +10 -4
- package/frontend/src/App.tsx +13 -82
- package/frontend/src/assets/icons/connected.svg +3 -0
- package/frontend/src/assets/icons/loader.svg +9 -0
- package/frontend/src/assets/logos/apple.svg +4 -0
- package/frontend/src/assets/logos/discord.svg +1 -1
- package/frontend/src/assets/logos/facebook.svg +3 -0
- package/frontend/src/assets/logos/instagram.svg +2 -0
- package/frontend/src/assets/logos/linkedin.svg +3 -0
- package/frontend/src/assets/logos/microsoft.svg +1 -0
- package/frontend/src/assets/logos/spotify.svg +17 -0
- package/frontend/src/assets/logos/tiktok.svg +6 -0
- package/frontend/src/assets/logos/x.svg +3 -0
- package/frontend/src/components/Checkbox.tsx +27 -29
- package/frontend/src/components/CodeBlock.tsx +55 -2
- package/frontend/src/components/CodeEditor.tsx +92 -0
- package/frontend/src/components/ConfirmDialog.tsx +1 -1
- package/frontend/src/components/ConnectCTA.tsx +38 -0
- package/frontend/src/components/CopyButton.tsx +52 -15
- package/frontend/src/components/ErrorState.tsx +1 -2
- package/frontend/src/components/FeatureSidebar.tsx +6 -6
- package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
- package/frontend/src/components/JsonHighlight.tsx +21 -9
- package/frontend/src/components/ProjectInfoModal.tsx +128 -0
- package/frontend/src/components/PromptDialog.tsx +1 -4
- package/frontend/src/components/SearchInput.tsx +1 -2
- package/frontend/src/components/Stepper.tsx +53 -0
- package/frontend/src/components/ThemeToggle.tsx +3 -3
- package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
- package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
- package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
- package/frontend/src/components/datagrid/index.ts +23 -0
- package/frontend/src/components/index.ts +23 -30
- package/frontend/src/components/layout/AppHeader.tsx +133 -92
- package/frontend/src/components/layout/AppSidebar.tsx +80 -170
- package/frontend/src/components/layout/Layout.tsx +12 -23
- package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
- package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
- package/frontend/src/components/layout/index.ts +5 -0
- package/frontend/src/components/radix/Tooltip.tsx +24 -13
- package/frontend/src/components/radix/index.ts +22 -0
- package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
- package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
- package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
- package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
- package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
- package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
- package/frontend/src/features/ai/components/index.ts +6 -0
- package/frontend/src/features/ai/helpers.ts +57 -71
- package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
- package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
- package/frontend/src/features/ai/page/AIPage.tsx +67 -79
- package/frontend/src/features/ai/services/ai.service.ts +5 -5
- package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
- package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +53 -30
- package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +44 -14
- package/frontend/src/features/auth/components/index.ts +5 -0
- package/frontend/src/features/auth/helpers.tsx +200 -0
- package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
- package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
- package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
- package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
- package/frontend/src/features/auth/index.ts +3 -2
- package/frontend/src/features/auth/page/AuthMethodsPage.tsx +275 -0
- package/frontend/src/features/auth/page/ConfigurationPage.tsx +395 -0
- package/frontend/src/features/auth/page/UsersPage.tsx +285 -0
- package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
- package/frontend/src/features/auth/services/config.service.ts +19 -0
- package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
- package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
- package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
- package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
- package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
- package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
- package/frontend/src/features/dashboard/components/index.ts +4 -0
- package/frontend/src/features/dashboard/page/DashboardPage.tsx +187 -169
- package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
- package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
- package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
- package/frontend/src/features/dashboard/prompts/index.ts +31 -0
- package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
- package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
- package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
- package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
- package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
- package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
- package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
- package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
- package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
- package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
- package/frontend/src/features/database/components/TableForm.tsx +28 -15
- package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
- package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
- package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
- package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
- package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
- package/frontend/src/features/database/components/index.ts +19 -0
- package/frontend/src/features/database/constants.ts +28 -2
- package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
- package/frontend/src/features/database/helpers.ts +2 -2
- package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
- package/frontend/src/features/database/hooks/useFullMetadata.ts +18 -0
- package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
- package/frontend/src/features/database/hooks/useRecords.ts +139 -0
- package/frontend/src/features/database/hooks/useTables.ts +131 -0
- package/frontend/src/features/database/index.ts +6 -1
- package/frontend/src/features/database/page/FunctionsPage.tsx +211 -0
- package/frontend/src/features/database/page/IndexesPage.tsx +240 -0
- package/frontend/src/features/database/page/PoliciesPage.tsx +248 -0
- package/frontend/src/features/database/page/SQLEditorPage.tsx +382 -0
- package/frontend/src/features/database/page/{DatabasePage.tsx → TablesPage.tsx} +186 -185
- package/frontend/src/features/database/page/TemplatesPage.tsx +39 -0
- package/frontend/src/features/database/page/TriggersPage.tsx +242 -0
- package/frontend/src/features/database/services/advance.service.ts +66 -0
- package/frontend/src/features/database/services/{database.service.ts → record.service.ts} +67 -64
- package/frontend/src/features/database/services/table.service.ts +64 -0
- package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
- package/frontend/src/features/database/templates/crm-system.ts +528 -0
- package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
- package/frontend/src/features/database/templates/index.ts +34 -0
- package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
- package/frontend/src/features/database/templates/notion-clone.ts +483 -0
- package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
- package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
- package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
- package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
- package/frontend/src/features/functions/components/index.ts +5 -0
- package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
- package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
- package/frontend/src/features/functions/page/FunctionsPage.tsx +160 -17
- package/frontend/src/features/functions/{components/SecretsContent.tsx → page/SecretsPage.tsx} +8 -12
- package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
- package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
- package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
- package/frontend/src/features/login/page/CloudLoginPage.tsx +79 -54
- package/frontend/src/features/login/page/LoginPage.tsx +16 -23
- package/frontend/src/features/login/services/partnership.service.ts +65 -0
- package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
- package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
- package/frontend/src/features/logs/components/index.ts +2 -0
- package/frontend/src/features/logs/helpers.ts +24 -0
- package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
- package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
- package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
- package/frontend/src/features/logs/hooks/useMcpUsage.ts +181 -0
- package/frontend/src/features/logs/index.ts +8 -2
- package/frontend/src/features/logs/page/AuditsPage.tsx +91 -38
- package/frontend/src/features/logs/page/LogsPage.tsx +152 -0
- package/frontend/src/features/logs/page/MCPLogsPage.tsx +84 -0
- package/frontend/src/features/logs/services/audit.service.ts +63 -0
- package/frontend/src/features/logs/services/log.service.ts +15 -110
- package/frontend/src/features/logs/services/usage.service.ts +31 -0
- package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
- package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
- package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
- package/frontend/src/features/onboard/components/index.ts +4 -0
- package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
- package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
- package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
- package/frontend/src/features/onboard/index.ts +13 -3
- package/frontend/src/features/storage/components/BucketEmptyState.tsx +9 -6
- package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
- package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
- package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
- package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
- package/frontend/src/features/storage/components/index.ts +12 -0
- package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
- package/frontend/src/features/storage/page/StoragePage.tsx +41 -115
- package/frontend/src/features/storage/services/storage.service.ts +22 -1
- package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
- package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
- package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
- package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
- package/frontend/src/features/visualizer/page/VisualizerPage.tsx +33 -29
- package/frontend/src/index.css +1 -0
- package/frontend/src/lib/analytics/posthog.tsx +27 -0
- package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
- package/frontend/src/lib/contexts/SocketContext.tsx +5 -6
- package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
- package/frontend/src/lib/hooks/useToast.tsx +6 -2
- package/frontend/src/lib/routing/AppRoutes.tsx +84 -0
- package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
- package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
- package/frontend/src/lib/utils/menuItems.ts +183 -0
- package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
- package/frontend/src/lib/utils/utils.ts +19 -1
- package/frontend/src/vite-env.d.ts +1 -0
- package/frontend/vite.config.ts +5 -3
- package/functions/server.ts +28 -3
- package/functions/worker-template.js +15 -4
- package/i18n/README.ar.md +130 -0
- package/i18n/README.de.md +130 -0
- package/i18n/README.es.md +154 -0
- package/i18n/README.fr.md +134 -0
- package/i18n/README.hi.md +129 -0
- package/i18n/README.ja.md +174 -0
- package/i18n/README.ko.md +137 -0
- package/i18n/README.pt-BR.md +131 -0
- package/i18n/README.ru.md +129 -0
- package/i18n/README.zh-CN.md +133 -0
- package/openapi/ai.yaml +31 -4
- package/openapi/auth.yaml +827 -146
- package/package.json +16 -7
- package/shared-schemas/package.json +1 -1
- package/shared-schemas/src/ai-api.schema.ts +34 -58
- package/shared-schemas/src/ai.schema.ts +5 -0
- package/shared-schemas/src/auth-api.schema.ts +154 -8
- package/shared-schemas/src/auth.schema.ts +42 -6
- package/shared-schemas/src/cloud-events.schema.ts +57 -0
- package/shared-schemas/src/database-api.schema.ts +3 -3
- package/shared-schemas/src/database.schema.ts +1 -1
- package/shared-schemas/src/index.ts +1 -0
- package/shared-schemas/src/logs-api.schema.ts +7 -1
- package/shared-schemas/src/logs.schema.ts +26 -0
- package/shared-schemas/src/metadata.schema.ts +9 -4
- package/test-gemini.sh +35 -0
- package/test-usage-admin.sh +57 -0
- package/test-usage.sh +50 -0
- package/zeabur/README.md +13 -0
- package/zeabur/template.yml +1032 -0
- package/.github/workflows/deploy-aws.yml +0 -130
- package/backend/src/api/routes/agent.ts +0 -29
- package/backend/src/api/routes/auth.oauth.ts +0 -482
- package/backend/src/api/routes/auth.ts +0 -386
- package/backend/src/api/routes/docs.ts +0 -66
- package/backend/src/api/routes/functions.ts +0 -183
- package/backend/src/api/routes/openapi.ts +0 -82
- package/backend/src/api/routes/usage.ts +0 -96
- package/backend/src/core/ai/client.ts +0 -242
- package/backend/src/core/ai/model.ts +0 -117
- package/backend/src/core/auth/auth.ts +0 -781
- package/backend/src/core/database/table.ts +0 -772
- package/backend/src/core/documentation/agent.ts +0 -689
- package/backend/src/core/documentation/openapi.ts +0 -856
- package/backend/src/core/logs/analytics.ts +0 -76
- package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
- package/backend/src/core/storage/storage.ts +0 -923
- package/backend/src/utils/cloud-token.ts +0 -39
- package/backend/src/utils/helpers.ts +0 -49
- package/backend/src/utils/uuid.ts +0 -9
- package/backend/tests/manual/test-better-auth.sh +0 -303
- package/docker-init/db/logs.sql +0 -9
- package/frontend/README.md +0 -112
- package/frontend/src/components/datagrid/index.tsx +0 -20
- package/frontend/src/components/layout/CloudLayout.tsx +0 -95
- package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
- package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
- package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
- package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
- package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
- package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
- package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
- package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
- package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
- package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
- package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
- package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
- package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
- package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
- package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
- package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
- package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
- package/frontend/src/features/metadata/index.ts +0 -0
- package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
- package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
- package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
- package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
- package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
- package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
- package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
- package/frontend/src/features/onboard/types.ts +0 -8
- package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
- package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
- /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
- /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +0 -0
- /package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +0 -0
- /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
|
@@ -0,0 +1,647 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Partner Integration
|
|
3
|
+
description: Learn how to integrate InsForge as a partner platform through co-branded or white-label partnerships
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Overview
|
|
7
|
+
|
|
8
|
+
InsForge provides two partnership models that enable seamless integration of our Backend-as-a-Service platform into your applications. Whether you're looking for a co-branded solution or a fully white-labeled experience, we have the right partnership model for you.
|
|
9
|
+
|
|
10
|
+
## Partnership Models
|
|
11
|
+
|
|
12
|
+
<CardGroup cols={2}>
|
|
13
|
+
<Card title="Co-Branded Partnership" icon="handshake">
|
|
14
|
+
Perfect for platforms that want to offer InsForge alongside their services.
|
|
15
|
+
The integration process is remarkably simple - developers can connect to the InsForge platform with just one click, without complicated OAuth flows.
|
|
16
|
+
</Card>
|
|
17
|
+
<Card title="White-Label Partnership" icon="tag">
|
|
18
|
+
Ideal for platforms seeking complete control over the user experience.
|
|
19
|
+
Offers full project lifecycle management, including project dashboard integration. Developers can complete all operations without ever leaving your partner platform.
|
|
20
|
+
</Card>
|
|
21
|
+
</CardGroup>
|
|
22
|
+
|
|
23
|
+
## Partnership Benefits
|
|
24
|
+
|
|
25
|
+
<CardGroup cols={2}>
|
|
26
|
+
<Card title="Scalable Infrastructure" icon="server">
|
|
27
|
+
Leverage our robust backend infrastructure without the overhead of maintenance and scaling
|
|
28
|
+
</Card>
|
|
29
|
+
<Card title="Flexible Integration" icon="plug">
|
|
30
|
+
Choose from multiple integration options that best suit your application needs
|
|
31
|
+
</Card>
|
|
32
|
+
<Card title="Revenue Sharing" icon="handshake">
|
|
33
|
+
Benefit from our competitive revenue sharing model for partner applications
|
|
34
|
+
</Card>
|
|
35
|
+
<Card title="Technical Support" icon="headset">
|
|
36
|
+
Get dedicated technical support and resources to ensure smooth integration
|
|
37
|
+
</Card>
|
|
38
|
+
</CardGroup>
|
|
39
|
+
|
|
40
|
+
## Getting Started
|
|
41
|
+
|
|
42
|
+
<Steps>
|
|
43
|
+
<Step title="Apply for Partnership">
|
|
44
|
+
Submit your partnership application through our [partner email](mailto:partnerships@insforge.dev).
|
|
45
|
+
Specify whether you're interested in co-branded or white-label partnership.
|
|
46
|
+
</Step>
|
|
47
|
+
|
|
48
|
+
<Step title="Receive Partner Credentials">
|
|
49
|
+
Once approved, you'll receive:
|
|
50
|
+
- **Partner ID**: Your unique partner identifier
|
|
51
|
+
- **Secret Key**: Your authentication key for API access
|
|
52
|
+
- Integration documentation and support
|
|
53
|
+
</Step>
|
|
54
|
+
|
|
55
|
+
<Step title="Configure Authentication">
|
|
56
|
+
All API requests must include your secret key for authentication:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
curl -X POST https://api.insforge.dev/partnership/v1/YOUR_PARTNER_ID/endpoint \
|
|
60
|
+
-H "Content-Type: application/json" \
|
|
61
|
+
-H "X-Partnership-Secret: YOUR_SECRET_KEY"
|
|
62
|
+
```
|
|
63
|
+
</Step>
|
|
64
|
+
|
|
65
|
+
<Step title="Start Integration">
|
|
66
|
+
Begin integrating based on your partnership model using our API endpoints.
|
|
67
|
+
</Step>
|
|
68
|
+
</Steps>
|
|
69
|
+
|
|
70
|
+
## Features by Partnership Type
|
|
71
|
+
|
|
72
|
+
### Co-Branded Features
|
|
73
|
+
In co-branded mode, developers explicitly know they are InsForge platform users (linked through the same email address). After logging into the InsForge platform, developers have full management rights for projects created through partners and need to pay according to InsForge's billing plans.
|
|
74
|
+
|
|
75
|
+
Partner platforms can:
|
|
76
|
+
- ✅ Sync user accounts (name, email) with InsForge
|
|
77
|
+
- ✅ Sync projects to InsForge
|
|
78
|
+
- ✅ Query project connection information to leverage the completed backend capabilities.
|
|
79
|
+
|
|
80
|
+
### White-Label Features
|
|
81
|
+
In white-label mode, developers are not aware of InsForge's existence and cannot see partner-created projects on the InsForge platform.
|
|
82
|
+
|
|
83
|
+
Partner platforms can:
|
|
84
|
+
- ✅ Create embedded projects
|
|
85
|
+
- ✅ Query project metadata to leverage the completed backend capabilities.
|
|
86
|
+
- ✅ Pause projects
|
|
87
|
+
- ✅ Restore projects
|
|
88
|
+
- ✅ Delete projects
|
|
89
|
+
- ✅ Get project's authorization token for access
|
|
90
|
+
- ✅ Get project's usage
|
|
91
|
+
|
|
92
|
+
## API Reference
|
|
93
|
+
|
|
94
|
+
<Tabs>
|
|
95
|
+
<Tab title="Co-Branded APIs">
|
|
96
|
+
|
|
97
|
+
### Connect User Account
|
|
98
|
+
Synchronize user account information with InsForge.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
POST /partnership/v1/:partnerId/connect-user
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Request Body:**
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"name": "John Doe", // required
|
|
108
|
+
"email": "john@example.com" // required
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Response:**
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"account": {
|
|
116
|
+
"id": "uuid-string"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Sync Project
|
|
122
|
+
Create or synchronize a project for a specific user.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
POST /partnership/v1/:partnerId/:userId/sync-project
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Request Body:**
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"project_name": "my-project", // required
|
|
132
|
+
"region": "us-east", // optional
|
|
133
|
+
"instance_type": "nano" // optional
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Response:**
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"success": true,
|
|
141
|
+
"project": {
|
|
142
|
+
"id": "uuid-string",
|
|
143
|
+
"access_host": "https://project.us-east.insforge.app",
|
|
144
|
+
"api_key": "project-api-key",
|
|
145
|
+
"status": "active"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### Handling Project Limits
|
|
151
|
+
Note: Due to project limits on the InsForge free plan, project synchronization from partner platforms may fail. In such cases, the response will be:
|
|
152
|
+
|
|
153
|
+
```json
|
|
154
|
+
{
|
|
155
|
+
"success": false,
|
|
156
|
+
"message": "Free plan allows up to 2 active projects. Please upgrade your plan to create more projects.",
|
|
157
|
+
"candidate_projects": [
|
|
158
|
+
{
|
|
159
|
+
"id": "uuid-string",
|
|
160
|
+
"access_host": "https://project2.us-east.insforge.app",
|
|
161
|
+
"api_key": "project-api-key",
|
|
162
|
+
"status": "active"
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Partners can guide users to select existing projects for connection rather than always creating new ones.
|
|
169
|
+
|
|
170
|
+
### Get Project Metadata
|
|
171
|
+
Retrieve connection information for a specific project.
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
GET /partnership/v1/:partnerId/:userId/:projectId/metadata
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Response:**
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"project": {
|
|
181
|
+
"id": "uuid-string",
|
|
182
|
+
"access_host": "https://project.us-east.insforge.app",
|
|
183
|
+
"api_key": "project-api-key",
|
|
184
|
+
"status": "active"
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
</Tab>
|
|
190
|
+
<Tab title="White-Label APIs">
|
|
191
|
+
|
|
192
|
+
### Sync Embedded Project
|
|
193
|
+
Create an embedded project for white-label partners.
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
POST /partnership/v1/:partnerId/sync-embedded-project
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Request Body:**
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"project_name": "embedded-project", // required
|
|
203
|
+
"region": "us-east", // optional
|
|
204
|
+
"instance_type": "nano" // optional
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Response:**
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"success": true,
|
|
212
|
+
"project": {
|
|
213
|
+
"id": "uuid-string",
|
|
214
|
+
"access_host": "https://project.us-east.insforge.app",
|
|
215
|
+
"api_key": "project-api-key",
|
|
216
|
+
"status": "active"
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Get Project Metadata
|
|
222
|
+
Retrieve metadata for a specific project.
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
GET /partnership/v1/:partnerId/:projectId/metadata
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Response:**
|
|
229
|
+
```json
|
|
230
|
+
{
|
|
231
|
+
"project": {
|
|
232
|
+
"id": "uuid-string",
|
|
233
|
+
"access_host": "https://project.us-east.insforge.app",
|
|
234
|
+
"api_key": "project-api-key",
|
|
235
|
+
"status": "active"
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Pause Project
|
|
241
|
+
Pause an active project to save resources.
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
POST /partnership/v1/:partnerId/:projectId/pause
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Request Body:**
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"wait_for_completion": true // optional
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Response:**
|
|
255
|
+
```json
|
|
256
|
+
{
|
|
257
|
+
"project": {
|
|
258
|
+
"id": "uuid-string",
|
|
259
|
+
"status": "paused"
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Restore Project
|
|
265
|
+
Restore a paused project back to active state.
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
POST /partnership/v1/:partnerId/:projectId/restore
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
**Request Body:**
|
|
272
|
+
```json
|
|
273
|
+
{
|
|
274
|
+
"wait_for_completion": true // optional
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
**Response:**
|
|
279
|
+
```json
|
|
280
|
+
{
|
|
281
|
+
"project": {
|
|
282
|
+
"id": "uuid-string",
|
|
283
|
+
"status": "active"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Delete Project
|
|
289
|
+
Permanently delete a project. This operation cannot be undone.
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
DELETE /partnership/v1/:partnerId/:projectId
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
**Response (200 OK):**
|
|
296
|
+
```json
|
|
297
|
+
{
|
|
298
|
+
"message": "Project deleted successfully",
|
|
299
|
+
"requestId": "xhiahif-fehfe-feae"
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Generate Project Authorization
|
|
304
|
+
Generate a short-lived asymmetric JWT token for project access. The token is signed with RSA private key and can be verified using the public JWKS endpoint. Token expires in 10 minutes.
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
POST /partnership/v1/:partnerId/:projectId/authorization
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
**Response:**
|
|
311
|
+
```json
|
|
312
|
+
{
|
|
313
|
+
"code": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Imluc2ZvcmdlLWtleS0yMDI1LTA4LTEzIn0...",
|
|
314
|
+
"expires_in": 600,
|
|
315
|
+
"type": "Bearer"
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Get Project Usage
|
|
320
|
+
Retrieve usage metrics for a specific project over a date range. Returns both summary statistics and daily breakdown of usage metrics. If dates are not specified, returns data for the last 7 days.
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
GET /partnership/v1/:partnerId/:projectId/usage?start_date=2025-11-10&end_date=2025-11-18
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
**Query Parameters:**
|
|
327
|
+
- `start_date` (optional): Start date in YYYY-MM-DD format (defaults to 7 days ago)
|
|
328
|
+
- `end_date` (optional): End date in YYYY-MM-DD format (defaults to today)
|
|
329
|
+
|
|
330
|
+
**Response:**
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"project": {
|
|
334
|
+
"id": "uuid-string",
|
|
335
|
+
"name": "project-name",
|
|
336
|
+
"status": "active"
|
|
337
|
+
},
|
|
338
|
+
"period": {
|
|
339
|
+
"start": "2025-11-10T00:00:00Z",
|
|
340
|
+
"end": "2025-11-18T23:59:59Z"
|
|
341
|
+
},
|
|
342
|
+
"summary": {
|
|
343
|
+
"max_database_size_bytes": 1048576,
|
|
344
|
+
"max_file_storage_bytes": 5242880,
|
|
345
|
+
"total_ai_tokens": 15000,
|
|
346
|
+
"total_mcp_calls": 120,
|
|
347
|
+
"total_egress_bytes": 2097152,
|
|
348
|
+
"total_ai_credits": 1.5,
|
|
349
|
+
"total_email_requests": 50,
|
|
350
|
+
"total_function_calls": 300,
|
|
351
|
+
"total_ec2_compute": 3600
|
|
352
|
+
},
|
|
353
|
+
"daily_usage": [
|
|
354
|
+
{
|
|
355
|
+
"usage_date": "2025-11-10",
|
|
356
|
+
"database_size_bytes": 1048576,
|
|
357
|
+
"file_storage_bytes": 5242880,
|
|
358
|
+
"ai_tokens": 1500,
|
|
359
|
+
"mcp_calls": 12,
|
|
360
|
+
"egress_bytes": 204800,
|
|
361
|
+
"ai_credits": 0.15,
|
|
362
|
+
"email_requests": 5,
|
|
363
|
+
"function_calls": 30,
|
|
364
|
+
"ec2_compute": 3600
|
|
365
|
+
}
|
|
366
|
+
]
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
</Tab>
|
|
371
|
+
</Tabs>
|
|
372
|
+
|
|
373
|
+
## Integration Examples
|
|
374
|
+
|
|
375
|
+
### Co-Branded Integration Flow
|
|
376
|
+
|
|
377
|
+
The following sequence diagram illustrates the integration flow for co-branded partnerships:
|
|
378
|
+
|
|
379
|
+
```mermaid
|
|
380
|
+
sequenceDiagram
|
|
381
|
+
participant User as End User
|
|
382
|
+
participant Partner as Partner Platform
|
|
383
|
+
participant InsForge as InsForge API
|
|
384
|
+
participant Dashboard as InsForge Dashboard
|
|
385
|
+
|
|
386
|
+
User->>Partner: Sign up/Login
|
|
387
|
+
Partner->>InsForge: POST /connect-user<br/>(name, email)
|
|
388
|
+
InsForge-->>Partner: Return user account ID
|
|
389
|
+
|
|
390
|
+
User->>Partner: Create new project
|
|
391
|
+
Partner->>InsForge: POST /sync-project<br/>(userId, project_name)
|
|
392
|
+
|
|
393
|
+
alt Success
|
|
394
|
+
InsForge-->>Partner: Return project details<br/>(id, access_host, api_key)
|
|
395
|
+
Partner->>Partner: Store project credentials
|
|
396
|
+
Partner->>User: Show project ready
|
|
397
|
+
else Project Limit Reached
|
|
398
|
+
InsForge-->>Partner: Return error + candidate projects
|
|
399
|
+
Partner->>User: Show existing projects to choose
|
|
400
|
+
User->>Partner: Select existing project
|
|
401
|
+
Partner->>InsForge: GET /metadata<br/>(projectId)
|
|
402
|
+
InsForge-->>Partner: Return project details
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
User->>Partner: Use application features
|
|
406
|
+
Partner->>InsForge: API calls using project credentials
|
|
407
|
+
InsForge-->>Partner: Return data
|
|
408
|
+
Partner-->>User: Display results
|
|
409
|
+
|
|
410
|
+
Note over User,Dashboard: User can also access InsForge Dashboard directly
|
|
411
|
+
User->>Dashboard: Login with same email
|
|
412
|
+
Dashboard->>User: Full project management access
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
```typescript
|
|
416
|
+
// 1. Connect user account
|
|
417
|
+
const connectUser = async (name: string, email: string) => {
|
|
418
|
+
const response = await fetch(
|
|
419
|
+
`https://api.insforge.dev/partnership/v1/${PARTNER_ID}/connect-user`,
|
|
420
|
+
{
|
|
421
|
+
method: 'POST',
|
|
422
|
+
headers: {
|
|
423
|
+
'X-Partnership-Secret': `${SECRET_KEY}`,
|
|
424
|
+
'Content-Type': 'application/json'
|
|
425
|
+
},
|
|
426
|
+
body: JSON.stringify({ name, email })
|
|
427
|
+
}
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
const { account } = await response.json();
|
|
431
|
+
return account.id;
|
|
432
|
+
};
|
|
433
|
+
|
|
434
|
+
// 2. Create project for user
|
|
435
|
+
const createProject = async (userId: string, projectName: string) => {
|
|
436
|
+
const response = await fetch(
|
|
437
|
+
`https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${userId}/sync-project`,
|
|
438
|
+
{
|
|
439
|
+
method: 'POST',
|
|
440
|
+
headers: {
|
|
441
|
+
'X-Partnership-Secret': `${SECRET_KEY}`,
|
|
442
|
+
'Content-Type': 'application/json'
|
|
443
|
+
},
|
|
444
|
+
body: JSON.stringify({
|
|
445
|
+
project_name: projectName,
|
|
446
|
+
region: 'us-east',
|
|
447
|
+
instance_type: 'nano'
|
|
448
|
+
})
|
|
449
|
+
}
|
|
450
|
+
);
|
|
451
|
+
|
|
452
|
+
const data = await response.json();
|
|
453
|
+
if (data.success) {
|
|
454
|
+
return data.project;
|
|
455
|
+
}
|
|
456
|
+
throw new Error(data.message);
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
// 3. Use project credentials
|
|
460
|
+
const useProject = async (project: any) => {
|
|
461
|
+
// Connect to InsForge project using returned credentials
|
|
462
|
+
const insForgeClient = new InsForgeClient({
|
|
463
|
+
baseUrl: project.access_host,
|
|
464
|
+
apiKey: project.api_key
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
// Now you can use all InsForge features
|
|
468
|
+
await insForgeClient.database.query('SELECT * FROM users');
|
|
469
|
+
};
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### White-Label Integration Flow
|
|
473
|
+
|
|
474
|
+
The following sequence diagram illustrates the integration flow for white-label partnerships:
|
|
475
|
+
|
|
476
|
+
```mermaid
|
|
477
|
+
sequenceDiagram
|
|
478
|
+
participant User as End User
|
|
479
|
+
participant Partner as Partner Platform
|
|
480
|
+
participant InsForge as InsForge API
|
|
481
|
+
|
|
482
|
+
Note over User,InsForge: User never interacts with InsForge directly
|
|
483
|
+
|
|
484
|
+
User->>Partner: Sign up/Login to partner platform
|
|
485
|
+
|
|
486
|
+
User->>Partner: Create new project
|
|
487
|
+
Partner->>InsForge: POST /sync-embedded-project<br/>(project_name, region, instance_type)
|
|
488
|
+
InsForge-->>Partner: Return project details<br/>(id, access_host, api_key, status)
|
|
489
|
+
Partner->>Partner: Store project credentials
|
|
490
|
+
Partner->>User: Show project ready
|
|
491
|
+
|
|
492
|
+
User->>Partner: Use application features
|
|
493
|
+
Partner->>InsForge: API calls using project credentials
|
|
494
|
+
InsForge-->>Partner: Return data
|
|
495
|
+
Partner-->>User: Display results
|
|
496
|
+
|
|
497
|
+
User->>Partner: Request to pause project
|
|
498
|
+
Partner->>InsForge: POST /pause<br/>(projectId)
|
|
499
|
+
InsForge-->>Partner: Return status: paused
|
|
500
|
+
Partner->>User: Confirm project paused
|
|
501
|
+
|
|
502
|
+
User->>Partner: Request to restore project
|
|
503
|
+
Partner->>InsForge: POST /restore<br/>(projectId)
|
|
504
|
+
InsForge-->>Partner: Return status: active
|
|
505
|
+
Partner->>User: Confirm project active
|
|
506
|
+
|
|
507
|
+
Partner->>InsForge: GET /metadata<br/>(projectId)
|
|
508
|
+
InsForge-->>Partner: Return current project status
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
```typescript
|
|
512
|
+
// 1. Create embedded project
|
|
513
|
+
const createEmbeddedProject = async (projectName: string) => {
|
|
514
|
+
const response = await fetch(
|
|
515
|
+
`https://api.insforge.dev/partnership/v1/${PARTNER_ID}/sync-embedded-project`,
|
|
516
|
+
{
|
|
517
|
+
method: 'POST',
|
|
518
|
+
headers: {
|
|
519
|
+
'X-Partnership-Secret': `${SECRET_KEY}`,
|
|
520
|
+
'Content-Type': 'application/json'
|
|
521
|
+
},
|
|
522
|
+
body: JSON.stringify({
|
|
523
|
+
project_name: projectName,
|
|
524
|
+
region: 'eu-west',
|
|
525
|
+
instance_type: 'small'
|
|
526
|
+
})
|
|
527
|
+
}
|
|
528
|
+
);
|
|
529
|
+
|
|
530
|
+
const data = await response.json();
|
|
531
|
+
if (data.success) {
|
|
532
|
+
return data.project;
|
|
533
|
+
}
|
|
534
|
+
throw new Error(data.message);
|
|
535
|
+
};
|
|
536
|
+
|
|
537
|
+
// 2. Manage project lifecycle
|
|
538
|
+
const pauseProject = async (projectId: string) => {
|
|
539
|
+
const response = await fetch(
|
|
540
|
+
`https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/pause`,
|
|
541
|
+
{
|
|
542
|
+
method: 'POST',
|
|
543
|
+
headers: {
|
|
544
|
+
'X-Partnership-Secret': `${SECRET_KEY}`,
|
|
545
|
+
'Content-Type': 'application/json'
|
|
546
|
+
},
|
|
547
|
+
body: JSON.stringify({
|
|
548
|
+
wait_for_completion: true
|
|
549
|
+
})
|
|
550
|
+
}
|
|
551
|
+
);
|
|
552
|
+
|
|
553
|
+
const { project } = await response.json();
|
|
554
|
+
console.log(`Project ${project.id} status: ${project.status}`);
|
|
555
|
+
};
|
|
556
|
+
|
|
557
|
+
const restoreProject = async (projectId: string) => {
|
|
558
|
+
const response = await fetch(
|
|
559
|
+
`https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/restore`,
|
|
560
|
+
{
|
|
561
|
+
method: 'POST',
|
|
562
|
+
headers: {
|
|
563
|
+
'X-Partnership-Secret': `${SECRET_KEY}`,
|
|
564
|
+
'Content-Type': 'application/json'
|
|
565
|
+
},
|
|
566
|
+
body: JSON.stringify({
|
|
567
|
+
wait_for_completion: true
|
|
568
|
+
})
|
|
569
|
+
}
|
|
570
|
+
);
|
|
571
|
+
|
|
572
|
+
const { project } = await response.json();
|
|
573
|
+
console.log(`Project ${project.id} status: ${project.status}`);
|
|
574
|
+
};
|
|
575
|
+
|
|
576
|
+
// 3. Delete project
|
|
577
|
+
const deleteProject = async (projectId: string) => {
|
|
578
|
+
const response = await fetch(
|
|
579
|
+
`https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}`,
|
|
580
|
+
{
|
|
581
|
+
method: 'DELETE',
|
|
582
|
+
headers: {
|
|
583
|
+
'X-Partnership-Secret': `${SECRET_KEY}`
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
);
|
|
587
|
+
|
|
588
|
+
if (response.ok) {
|
|
589
|
+
const data = await response.json();
|
|
590
|
+
console.log(data.message); // "Project deleted successfully"
|
|
591
|
+
console.log(`Request ID: ${data.requestId}`);
|
|
592
|
+
} else {
|
|
593
|
+
throw new Error(`Failed to delete project: ${response.status}`);
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
## Parameter and Response Reference
|
|
599
|
+
|
|
600
|
+
### Project Region Values
|
|
601
|
+
InsForge provides global deployment capabilities. Each project can be deployed to different regions:
|
|
602
|
+
- `us-east` - United States East Coast
|
|
603
|
+
- `us-west` - United States West Coast
|
|
604
|
+
- `ca-central` - Canada Central
|
|
605
|
+
- `eu-central` - Europe Central
|
|
606
|
+
|
|
607
|
+
Additional regions will be added based on demand.
|
|
608
|
+
|
|
609
|
+
### Project Instance Type Values
|
|
610
|
+
Based on your project's business requirements, InsForge offers the following resource types:
|
|
611
|
+
- `nano` - Minimal resources for development
|
|
612
|
+
- `small` - Light workloads
|
|
613
|
+
- `medium` - Standard applications
|
|
614
|
+
- `large` - Production workloads
|
|
615
|
+
- `xl` - High-performance applications
|
|
616
|
+
- `2xl` - Enterprise applications
|
|
617
|
+
- `4xl` - Large-scale operations
|
|
618
|
+
- `8xl` - Mission-critical systems
|
|
619
|
+
- `16xl` - Maximum performance
|
|
620
|
+
|
|
621
|
+
### Project Status Values
|
|
622
|
+
|
|
623
|
+
Projects can have the following status values:
|
|
624
|
+
|
|
625
|
+
- **active**: Project is running and accessible
|
|
626
|
+
- **paused**: Project is paused (white-label only)
|
|
627
|
+
|
|
628
|
+
## Error Handling
|
|
629
|
+
|
|
630
|
+
All API endpoints return consistent error responses:
|
|
631
|
+
|
|
632
|
+
```json
|
|
633
|
+
{
|
|
634
|
+
"success": false,
|
|
635
|
+
"message": "Detailed error message describing what went wrong"
|
|
636
|
+
}
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
Common error scenarios:
|
|
640
|
+
- Invalid authentication credentials
|
|
641
|
+
- Project not found
|
|
642
|
+
- Insufficient permissions for requested operation
|
|
643
|
+
- Invalid request parameters
|
|
644
|
+
|
|
645
|
+
## Next Steps
|
|
646
|
+
|
|
647
|
+
- Schedule a [technical review](https://calendly.com/tony-chang-insforge/45min) with our team
|