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
package/docker-compose.prod.yml
CHANGED
|
@@ -11,7 +11,6 @@ services:
|
|
|
11
11
|
- postgres-data:/var/lib/postgresql/data
|
|
12
12
|
- ./docker-init/db/db-init.sql:/docker-entrypoint-initdb.d/01-init.sql
|
|
13
13
|
- ./docker-init/db/jwt.sql:/docker-entrypoint-initdb.d/02-jwt.sql
|
|
14
|
-
- ./docker-init/db/logs.sql:/docker-entrypoint-initdb.d/03-logs.sql
|
|
15
14
|
- ./docker-init/db/postgresql.conf:/etc/postgresql/postgresql.conf
|
|
16
15
|
ports:
|
|
17
16
|
- "5432:5432"
|
|
@@ -35,7 +34,7 @@ services:
|
|
|
35
34
|
PGRST_OPENAPI_SERVER_PROXY_URI: http://localhost:3000
|
|
36
35
|
PGRST_DB_SCHEMA: public
|
|
37
36
|
PGRST_DB_ANON_ROLE: anon
|
|
38
|
-
PGRST_JWT_SECRET: ${JWT_SECRET}
|
|
37
|
+
PGRST_JWT_SECRET: ${JWT_SECRET:-dev-secret-please-change-in-production}
|
|
39
38
|
ports:
|
|
40
39
|
- "5430:3000"
|
|
41
40
|
depends_on:
|
|
@@ -50,6 +49,7 @@ services:
|
|
|
50
49
|
dockerfile: Dockerfile
|
|
51
50
|
args:
|
|
52
51
|
VITE_API_BASE_URL: ${VITE_API_BASE_URL:-http://localhost:7130}
|
|
52
|
+
VITE_PUBLIC_POSTHOG_KEY: ${VITE_PUBLIC_POSTHOG_KEY:-}
|
|
53
53
|
container_name: insforge
|
|
54
54
|
depends_on:
|
|
55
55
|
postgres:
|
|
@@ -57,14 +57,17 @@ services:
|
|
|
57
57
|
ports:
|
|
58
58
|
- "7130:7130"
|
|
59
59
|
- "7131:7131"
|
|
60
|
+
- "7132:7132"
|
|
60
61
|
environment:
|
|
61
62
|
- PORT=7130
|
|
62
63
|
- PROJECT_ROOT=/app
|
|
63
64
|
- API_BASE_URL=${API_BASE_URL:-}
|
|
64
|
-
- JWT_SECRET=${JWT_SECRET:-dev-secret-change-in-production}
|
|
65
|
+
- JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
|
|
65
66
|
- ENCRYPTION_KEY=${ENCRYPTION_KEY:-}
|
|
66
67
|
- ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
|
|
67
68
|
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-change-this-password}
|
|
69
|
+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
|
|
70
|
+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
|
|
68
71
|
# PostgreSQL connection
|
|
69
72
|
- POSTGRES_HOST=postgres
|
|
70
73
|
- POSTGRES_PORT=5432
|
|
@@ -78,6 +81,9 @@ services:
|
|
|
78
81
|
# Storage Configuration
|
|
79
82
|
- AWS_S3_BUCKET=${AWS_S3_BUCKET:-}
|
|
80
83
|
- AWS_REGION=${AWS_REGION:-}
|
|
84
|
+
- AWS_CLOUDFRONT_URL=${AWS_CLOUDFRONT_URL:-}
|
|
85
|
+
- AWS_CLOUDFRONT_KEY_PAIR_ID=${AWS_CLOUDFRONT_KEY_PAIR_ID:-}
|
|
86
|
+
- AWS_CLOUDFRONT_PRIVATE_KEY=${AWS_CLOUDFRONT_PRIVATE_KEY:-}
|
|
81
87
|
# Multi-tenant Cloud Configuration
|
|
82
88
|
- DEPLOYMENT_ID=${DEPLOYMENT_ID:-}
|
|
83
89
|
- PROJECT_ID=${PROJECT_ID:-}
|
|
@@ -90,6 +96,19 @@ services:
|
|
|
90
96
|
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
|
|
91
97
|
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
|
|
92
98
|
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
|
|
99
|
+
- DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID:-}
|
|
100
|
+
- DISCORD_CLIENT_SECRET=${DISCORD_CLIENT_SECRET:-}
|
|
101
|
+
- MICROSOFT_CLIENT_ID=${MICROSOFT_CLIENT_ID:-}
|
|
102
|
+
- MICROSOFT_CLIENT_SECRET=${MICROSOFT_CLIENT_SECRET:-}
|
|
103
|
+
- LINKEDIN_CLIENT_ID=${LINKEDIN_CLIENT_ID:-}
|
|
104
|
+
- LINKEDIN_CLIENT_SECRET=${LINKEDIN_CLIENT_SECRET:-}
|
|
105
|
+
# Logs directory
|
|
106
|
+
- LOGS_DIR=/insforge-logs
|
|
107
|
+
# Storage directory (for local file storage when S3 is not configured)
|
|
108
|
+
- STORAGE_DIR=/insforge-storage
|
|
109
|
+
volumes:
|
|
110
|
+
- storage-data:/insforge-storage
|
|
111
|
+
- shared-logs:/insforge-logs
|
|
93
112
|
restart: unless-stopped
|
|
94
113
|
networks:
|
|
95
114
|
- insforge-network
|
|
@@ -119,7 +138,7 @@ services:
|
|
|
119
138
|
- WORKER_TIMEOUT_MS=${WORKER_TIMEOUT_MS:-30000}
|
|
120
139
|
# Encryption keys for decrypting function secrets
|
|
121
140
|
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
|
|
122
|
-
- JWT_SECRET=${JWT_SECRET}
|
|
141
|
+
- JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
|
|
123
142
|
volumes:
|
|
124
143
|
- ./functions:/app/functions
|
|
125
144
|
- deno_cache:/deno-dir
|
|
@@ -134,11 +153,48 @@ services:
|
|
|
134
153
|
networks:
|
|
135
154
|
- insforge-network
|
|
136
155
|
|
|
156
|
+
# Vector.dev for log collection and shipping
|
|
157
|
+
vector:
|
|
158
|
+
container_name: insforge-vector
|
|
159
|
+
image: timberio/vector:0.28.1-alpine
|
|
160
|
+
restart: unless-stopped
|
|
161
|
+
depends_on:
|
|
162
|
+
postgres:
|
|
163
|
+
condition: service_healthy
|
|
164
|
+
postgrest:
|
|
165
|
+
condition: service_started
|
|
166
|
+
insforge:
|
|
167
|
+
condition: service_started
|
|
168
|
+
deno:
|
|
169
|
+
condition: service_started
|
|
170
|
+
volumes:
|
|
171
|
+
- ./docker-init/logs/vector.yml:/etc/vector/vector.yml:ro
|
|
172
|
+
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
173
|
+
- shared-logs:/insforge-logs
|
|
174
|
+
healthcheck:
|
|
175
|
+
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7135/health"]
|
|
176
|
+
timeout: 5s
|
|
177
|
+
interval: 5s
|
|
178
|
+
retries: 3
|
|
179
|
+
environment:
|
|
180
|
+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
|
|
181
|
+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
|
|
182
|
+
- AWS_REGION=${AWS_REGION:-skip}
|
|
183
|
+
- PROJECT_ID=${PROJECT_ID:-}
|
|
184
|
+
- HOSTNAME_OVERRIDE=${HOSTNAME_OVERRIDE:-}
|
|
185
|
+
command: ["--config", "/etc/vector/vector.yml"]
|
|
186
|
+
networks:
|
|
187
|
+
- insforge-network
|
|
188
|
+
|
|
137
189
|
volumes:
|
|
138
190
|
postgres-data:
|
|
139
191
|
driver: local
|
|
140
192
|
deno_cache:
|
|
141
193
|
driver: local
|
|
194
|
+
storage-data:
|
|
195
|
+
driver: local
|
|
196
|
+
shared-logs:
|
|
197
|
+
driver: local
|
|
142
198
|
|
|
143
199
|
networks:
|
|
144
200
|
insforge-network:
|
package/docker-compose.yml
CHANGED
|
@@ -13,7 +13,6 @@ services:
|
|
|
13
13
|
- postgres-data:/var/lib/postgresql/data
|
|
14
14
|
- ./docker-init/db/db-init.sql:/docker-entrypoint-initdb.d/01-init.sql
|
|
15
15
|
- ./docker-init/db/jwt.sql:/docker-entrypoint-initdb.d/02-jwt.sql
|
|
16
|
-
- ./docker-init/db/logs.sql:/docker-entrypoint-initdb.d/03-logs.sql
|
|
17
16
|
- ./docker-init/db/postgresql.conf:/etc/postgresql/postgresql.conf
|
|
18
17
|
ports:
|
|
19
18
|
- "5432:5432"
|
|
@@ -37,7 +36,7 @@ services:
|
|
|
37
36
|
PGRST_OPENAPI_SERVER_PROXY_URI: http://localhost:3000
|
|
38
37
|
PGRST_DB_SCHEMA: public
|
|
39
38
|
PGRST_DB_ANON_ROLE: anon
|
|
40
|
-
PGRST_JWT_SECRET: ${JWT_SECRET}
|
|
39
|
+
PGRST_JWT_SECRET: ${JWT_SECRET:-dev-secret-please-change-in-production}
|
|
41
40
|
# Enable schema reloading via NOTIFY
|
|
42
41
|
PGRST_DB_CHANNEL_ENABLED: true
|
|
43
42
|
PGRST_DB_CHANNEL: pgrst
|
|
@@ -59,15 +58,18 @@ services:
|
|
|
59
58
|
ports:
|
|
60
59
|
- "7130:7130"
|
|
61
60
|
- "7131:7131"
|
|
61
|
+
- "7132:7132"
|
|
62
62
|
environment:
|
|
63
63
|
- PORT=7130
|
|
64
64
|
- PROJECT_ROOT=/app
|
|
65
65
|
- API_BASE_URL=${API_BASE_URL:-}
|
|
66
66
|
- VITE_API_BASE_URL=${VITE_API_BASE_URL:-}
|
|
67
|
-
- JWT_SECRET=${JWT_SECRET:-dev-secret-change-in-production}
|
|
67
|
+
- JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
|
|
68
68
|
- ENCRYPTION_KEY=${ENCRYPTION_KEY:-}
|
|
69
69
|
- ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
|
|
70
70
|
- ADMIN_PASSWORD=${ADMIN_PASSWORD:-change-this-password}
|
|
71
|
+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
|
|
72
|
+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
|
|
71
73
|
# PostgreSQL connection
|
|
72
74
|
- POSTGRES_HOST=postgres
|
|
73
75
|
- POSTGRES_PORT=5432
|
|
@@ -81,11 +83,15 @@ services:
|
|
|
81
83
|
# Storage Configuration
|
|
82
84
|
- AWS_S3_BUCKET=${AWS_S3_BUCKET:-}
|
|
83
85
|
- AWS_REGION=${AWS_REGION:-}
|
|
86
|
+
- AWS_CLOUDFRONT_URL=${AWS_CLOUDFRONT_URL:-}
|
|
87
|
+
- AWS_CLOUDFRONT_KEY_PAIR_ID=${AWS_CLOUDFRONT_KEY_PAIR_ID:-}
|
|
88
|
+
- AWS_CLOUDFRONT_PRIVATE_KEY=${AWS_CLOUDFRONT_PRIVATE_KEY:-}
|
|
84
89
|
# Multi-tenant Cloud Configuration
|
|
85
90
|
- DEPLOYMENT_ID=${DEPLOYMENT_ID:-}
|
|
86
91
|
- PROJECT_ID=${PROJECT_ID:-}
|
|
87
92
|
- APP_KEY=${APP_KEY:-}
|
|
88
93
|
- ACCESS_API_KEY=${ACCESS_API_KEY:-}
|
|
94
|
+
- CLOUD_API_HOST=${CLOUD_API_HOST:-}
|
|
89
95
|
# LLM Model API keys
|
|
90
96
|
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
|
|
91
97
|
# OAuth Configuration
|
|
@@ -93,16 +99,32 @@ services:
|
|
|
93
99
|
- GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
|
|
94
100
|
- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
|
|
95
101
|
- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
|
|
102
|
+
- DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID:-}
|
|
103
|
+
- DISCORD_CLIENT_SECRET=${DISCORD_CLIENT_SECRET:-}
|
|
104
|
+
- MICROSOFT_CLIENT_ID=${MICROSOFT_CLIENT_ID:-}
|
|
105
|
+
- MICROSOFT_CLIENT_SECRET=${MICROSOFT_CLIENT_SECRET:-}
|
|
106
|
+
- LINKEDIN_CLIENT_ID=${LINKEDIN_CLIENT_ID:-}
|
|
107
|
+
- LINKEDIN_CLIENT_SECRET=${LINKEDIN_CLIENT_SECRET:-}
|
|
108
|
+
# Logs directory
|
|
109
|
+
- LOGS_DIR=/insforge-logs
|
|
110
|
+
# Storage directory (for local file storage when S3 is not configured)
|
|
111
|
+
- STORAGE_DIR=/insforge-storage
|
|
112
|
+
# Auth app URL for development proxy
|
|
113
|
+
- AUTH_APP_URL=${AUTH_APP_URL:-http://localhost:7132}
|
|
96
114
|
volumes:
|
|
97
115
|
- ./package.json:/app/package.json
|
|
98
116
|
- ./backend:/app/backend
|
|
99
117
|
- ./frontend:/app/frontend
|
|
118
|
+
- ./auth:/app/auth
|
|
100
119
|
- ./shared-schemas:/app/shared-schemas
|
|
101
120
|
- ./docs:/app/docs
|
|
102
121
|
- node_modules:/app/node_modules
|
|
103
122
|
- backend_node_modules:/app/backend/node_modules
|
|
104
123
|
- frontend_node_modules:/app/frontend/node_modules
|
|
124
|
+
- auth_node_modules:/app/auth/node_modules
|
|
105
125
|
- shared_schemas_node_modules:/app/shared-schemas/node_modules
|
|
126
|
+
- shared-logs:/insforge-logs
|
|
127
|
+
- storage-data:/insforge-storage
|
|
106
128
|
command: sh -c "npm install && cd backend && npm run migrate:up && cd .. && npm run dev"
|
|
107
129
|
restart: unless-stopped
|
|
108
130
|
networks:
|
|
@@ -133,7 +155,7 @@ services:
|
|
|
133
155
|
- WORKER_TIMEOUT_MS=${WORKER_TIMEOUT_MS:-30000}
|
|
134
156
|
# Encryption keys for decrypting function secrets
|
|
135
157
|
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
|
|
136
|
-
- JWT_SECRET=${JWT_SECRET}
|
|
158
|
+
- JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
|
|
137
159
|
volumes:
|
|
138
160
|
- ./functions:/app/functions
|
|
139
161
|
- deno_cache:/deno-dir
|
|
@@ -148,6 +170,39 @@ services:
|
|
|
148
170
|
networks:
|
|
149
171
|
- insforge-network
|
|
150
172
|
|
|
173
|
+
# Vector.dev for log collection and shipping
|
|
174
|
+
vector:
|
|
175
|
+
container_name: insforge-vector
|
|
176
|
+
image: timberio/vector:0.28.1-alpine
|
|
177
|
+
restart: unless-stopped
|
|
178
|
+
depends_on:
|
|
179
|
+
postgres:
|
|
180
|
+
condition: service_healthy
|
|
181
|
+
postgrest:
|
|
182
|
+
condition: service_started
|
|
183
|
+
insforge:
|
|
184
|
+
condition: service_started
|
|
185
|
+
deno:
|
|
186
|
+
condition: service_started
|
|
187
|
+
volumes:
|
|
188
|
+
- ./docker-init/logs/vector.yml:/etc/vector/vector.yml:ro
|
|
189
|
+
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
190
|
+
- shared-logs:/insforge-logs
|
|
191
|
+
healthcheck:
|
|
192
|
+
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7135/health"]
|
|
193
|
+
timeout: 5s
|
|
194
|
+
interval: 5s
|
|
195
|
+
retries: 3
|
|
196
|
+
environment:
|
|
197
|
+
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
|
|
198
|
+
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
|
|
199
|
+
- AWS_REGION=${AWS_REGION:-skip}
|
|
200
|
+
- PROJECT_ID=${PROJECT_ID:-}
|
|
201
|
+
- HOSTNAME_OVERRIDE=${HOSTNAME_OVERRIDE:-}
|
|
202
|
+
command: ["--config", "/etc/vector/vector.yml"]
|
|
203
|
+
networks:
|
|
204
|
+
- insforge-network
|
|
205
|
+
|
|
151
206
|
volumes:
|
|
152
207
|
postgres-data:
|
|
153
208
|
driver: local
|
|
@@ -157,10 +212,16 @@ volumes:
|
|
|
157
212
|
driver: local
|
|
158
213
|
frontend_node_modules:
|
|
159
214
|
driver: local
|
|
215
|
+
auth_node_modules:
|
|
216
|
+
driver: local
|
|
160
217
|
shared_schemas_node_modules:
|
|
161
218
|
driver: local
|
|
162
219
|
deno_cache:
|
|
163
220
|
driver: local
|
|
221
|
+
shared-logs:
|
|
222
|
+
driver: local
|
|
223
|
+
storage-data:
|
|
224
|
+
driver: local
|
|
164
225
|
|
|
165
226
|
networks:
|
|
166
227
|
insforge-network:
|
|
@@ -16,31 +16,8 @@ GRANT USAGE ON SCHEMA public TO project_admin;
|
|
|
16
16
|
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO project_admin;
|
|
17
17
|
|
|
18
18
|
-- Grant permissions to roles
|
|
19
|
-
|
|
20
|
-
GRANT SELECT
|
|
21
|
-
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
22
|
-
GRANT SELECT ON TABLES TO anon;
|
|
23
|
-
|
|
24
|
-
GRANT SELECT ON ALL TABLES IN SCHEMA public TO authenticated;
|
|
25
|
-
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
26
|
-
GRANT SELECT ON TABLES TO authenticated;
|
|
27
|
-
|
|
28
|
-
GRANT INSERT ON ALL TABLES IN SCHEMA public TO authenticated;
|
|
29
|
-
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
30
|
-
GRANT INSERT ON TABLES TO authenticated;
|
|
31
|
-
|
|
32
|
-
GRANT UPDATE ON ALL TABLES IN SCHEMA public TO authenticated;
|
|
33
|
-
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
34
|
-
GRANT UPDATE ON TABLES TO authenticated;
|
|
35
|
-
|
|
36
|
-
GRANT DELETE ON ALL TABLES IN SCHEMA public TO authenticated;
|
|
37
|
-
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
38
|
-
GRANT DELETE ON TABLES TO authenticated;
|
|
39
|
-
|
|
40
|
-
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO project_admin;
|
|
41
|
-
ALTER DEFAULT PRIVILEGES IN SCHEMA public
|
|
42
|
-
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO project_admin;
|
|
43
|
-
|
|
19
|
+
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO anon, authenticated, project_admin;
|
|
20
|
+
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO anon, authenticated, project_admin;
|
|
44
21
|
-- Create function to automatically create RLS policies for new tables
|
|
45
22
|
CREATE OR REPLACE FUNCTION public.create_default_policies()
|
|
46
23
|
RETURNS event_trigger AS $$
|
|
@@ -65,12 +42,8 @@ BEGIN
|
|
|
65
42
|
AND tablename = table_name;
|
|
66
43
|
-- Only create policies if RLS is enabled
|
|
67
44
|
IF has_rls THEN
|
|
68
|
-
-- Create
|
|
69
|
-
-- anon
|
|
70
|
-
EXECUTE format('CREATE POLICY "anon_policy" ON %s FOR SELECT TO anon USING (true)', obj.object_identity);
|
|
71
|
-
-- authenticated: full access
|
|
72
|
-
EXECUTE format('CREATE POLICY "authenticated_policy" ON %s FOR ALL TO authenticated USING (true) WITH CHECK (true)', obj.object_identity);
|
|
73
|
-
-- project_admin: full access
|
|
45
|
+
-- Create policy for project_admin role only
|
|
46
|
+
-- Users must define their own policies for anon and authenticated roles
|
|
74
47
|
EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
|
|
75
48
|
END IF;
|
|
76
49
|
END LOOP;
|
|
@@ -109,9 +82,8 @@ BEGIN
|
|
|
109
82
|
WHERE schemaname = table_schema
|
|
110
83
|
AND tablename = table_name
|
|
111
84
|
) THEN
|
|
112
|
-
-- Create
|
|
113
|
-
|
|
114
|
-
EXECUTE format('CREATE POLICY "authenticated_policy" ON %s FOR ALL TO authenticated USING (true) WITH CHECK (true)', obj.object_identity);
|
|
85
|
+
-- Create policy for project_admin role only
|
|
86
|
+
-- Users must define their own policies for anon and authenticated roles
|
|
115
87
|
EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
|
|
116
88
|
END IF;
|
|
117
89
|
END LOOP;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
api:
|
|
2
|
+
enabled: true
|
|
3
|
+
address: 0.0.0.0:7135
|
|
4
|
+
|
|
5
|
+
sources:
|
|
6
|
+
docker_host:
|
|
7
|
+
type: docker_logs
|
|
8
|
+
exclude_containers:
|
|
9
|
+
- insforge-vector
|
|
10
|
+
include_containers:
|
|
11
|
+
- insforge
|
|
12
|
+
- insforge-deno
|
|
13
|
+
- insforge-postgrest
|
|
14
|
+
- insforge-postgres
|
|
15
|
+
|
|
16
|
+
transforms:
|
|
17
|
+
project_logs:
|
|
18
|
+
type: remap
|
|
19
|
+
inputs:
|
|
20
|
+
- docker_host
|
|
21
|
+
source: |-
|
|
22
|
+
.project = "default"
|
|
23
|
+
.event_message = del(.message)
|
|
24
|
+
# Remove leading slash from container name if present
|
|
25
|
+
container = to_string!(del(.container_name))
|
|
26
|
+
if starts_with(container, "/") {
|
|
27
|
+
.appname = slice!(container, 1)
|
|
28
|
+
} else {
|
|
29
|
+
.appname = container
|
|
30
|
+
}
|
|
31
|
+
del(.container_created_at)
|
|
32
|
+
del(.container_id)
|
|
33
|
+
del(.source_type)
|
|
34
|
+
del(.stream)
|
|
35
|
+
del(.label)
|
|
36
|
+
del(.image)
|
|
37
|
+
del(.host)
|
|
38
|
+
del(.stream)
|
|
39
|
+
|
|
40
|
+
router:
|
|
41
|
+
type: route
|
|
42
|
+
inputs:
|
|
43
|
+
- project_logs
|
|
44
|
+
route:
|
|
45
|
+
insforge: '.appname == "insforge"'
|
|
46
|
+
deno: '.appname == "insforge-deno"'
|
|
47
|
+
rest: '.appname == "insforge-postgrest"'
|
|
48
|
+
db: '.appname == "insforge-postgres"'
|
|
49
|
+
realtime: '.appname == "insforge-realtime"'
|
|
50
|
+
# PostgREST logs with proper parsing
|
|
51
|
+
rest_logs:
|
|
52
|
+
type: remap
|
|
53
|
+
inputs:
|
|
54
|
+
- router.rest
|
|
55
|
+
source: |-
|
|
56
|
+
# .metadata.host = .project
|
|
57
|
+
# Parse PostgREST log format: DD/Mon/YYYY:HH:MM:SS +ZZZZ: message
|
|
58
|
+
parsed, err = parse_regex(.event_message, r'^(?P<time>\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} [+-]\d{4}): (?P<msg>.*)$')
|
|
59
|
+
|
|
60
|
+
if err == null && parsed != null {
|
|
61
|
+
.event_message = parsed.msg
|
|
62
|
+
.metadata.level = "info"
|
|
63
|
+
} else {
|
|
64
|
+
# If parsing fails, keep original message
|
|
65
|
+
.metadata.level = "info"
|
|
66
|
+
}
|
|
67
|
+
# InsForge logs are structured JSON, parse and handle both request logs and application logs
|
|
68
|
+
insforge_logs:
|
|
69
|
+
type: remap
|
|
70
|
+
inputs:
|
|
71
|
+
- router.insforge
|
|
72
|
+
source: |-
|
|
73
|
+
# Remove the [backend] prefix if present
|
|
74
|
+
.event_message = replace!(.event_message, r'^\[backend\] ', "")
|
|
75
|
+
|
|
76
|
+
req, err = parse_json(.event_message)
|
|
77
|
+
if err == null {
|
|
78
|
+
# Set timestamp from log
|
|
79
|
+
if req.timestamp != null {
|
|
80
|
+
.timestamp = to_timestamp!(req.timestamp)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
# Set log level
|
|
84
|
+
.metadata.level = req.level
|
|
85
|
+
|
|
86
|
+
# Check if this is a request log (has duration field)
|
|
87
|
+
if req.duration != null {
|
|
88
|
+
# Flatten request log fields to top level
|
|
89
|
+
.user_agent = req.userAgent
|
|
90
|
+
.ip = req.ip
|
|
91
|
+
.method = req.method
|
|
92
|
+
.path = req.path
|
|
93
|
+
.protocol = "HTTP/1.1"
|
|
94
|
+
.status_code = req.status
|
|
95
|
+
.size = req.size
|
|
96
|
+
.duration = req.duration
|
|
97
|
+
# Format as nginx-style log line
|
|
98
|
+
.event_message = join!([req.method, req.path, to_string!(req.status), to_string!(req.size), req.duration, "-", req.ip, "-", req.userAgent], " ")
|
|
99
|
+
.log_type = "request"
|
|
100
|
+
} else {
|
|
101
|
+
# This is an application log
|
|
102
|
+
.event_message = join!([req.level, req.message], " - ")
|
|
103
|
+
.log_type = "application"
|
|
104
|
+
if req.error != null {
|
|
105
|
+
.error = req.error
|
|
106
|
+
}
|
|
107
|
+
if req.stack != null {
|
|
108
|
+
.stack = req.stack
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
realtime_logs:
|
|
113
|
+
type: remap
|
|
114
|
+
inputs:
|
|
115
|
+
- router.realtime
|
|
116
|
+
source: |-
|
|
117
|
+
parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
|
|
118
|
+
if err == null {
|
|
119
|
+
.event_message = parsed.msg
|
|
120
|
+
.metadata.level = parsed.level
|
|
121
|
+
}
|
|
122
|
+
deno_logs:
|
|
123
|
+
type: remap
|
|
124
|
+
inputs:
|
|
125
|
+
- router.deno
|
|
126
|
+
source: |-
|
|
127
|
+
parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
|
|
128
|
+
if err == null {
|
|
129
|
+
.event_message = parsed.msg
|
|
130
|
+
.timestamp = to_timestamp!(parsed.time)
|
|
131
|
+
.metadata.level = upcase!(parsed.level)
|
|
132
|
+
# .metadata.host = .project
|
|
133
|
+
}
|
|
134
|
+
# Postgres logs with proper parsing
|
|
135
|
+
db_logs:
|
|
136
|
+
type: remap
|
|
137
|
+
inputs:
|
|
138
|
+
- router.db
|
|
139
|
+
source: |-
|
|
140
|
+
# .metadata.host = "db-default"
|
|
141
|
+
# Parse PostgreSQL log format: YYYY-MM-DD HH:MM:SS.SSS TZ [PID] LEVEL: message
|
|
142
|
+
parsed, err = parse_regex(.event_message, r'^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) (?P<tz>\w+) \[(?P<pid>\d+)\] (?P<level>LOG|ERROR|WARNING|INFO|NOTICE|FATAL|PANIC|STATEMENT|DETAIL): (?P<msg>.*)$')
|
|
143
|
+
|
|
144
|
+
if err == null && parsed != null {
|
|
145
|
+
.metadata.parsed.pid = parsed.pid
|
|
146
|
+
.metadata.level = upcase!(parsed.level)
|
|
147
|
+
.event_message = parsed.msg
|
|
148
|
+
|
|
149
|
+
# Normalize STATEMENT and DETAIL to appropriate log levels
|
|
150
|
+
if .metadata.level == "STATEMENT" {
|
|
151
|
+
.metadata.level = "INFO"
|
|
152
|
+
}
|
|
153
|
+
if .metadata.level == "DETAIL" {
|
|
154
|
+
.metadata.level = "INFO"
|
|
155
|
+
}
|
|
156
|
+
} else {
|
|
157
|
+
# If parsing fails, keep original message and set default severity
|
|
158
|
+
.metadata.level = "LOG"
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
sinks:
|
|
162
|
+
# File sinks - JSONL format for FileProvider (always enabled)
|
|
163
|
+
file_insforge:
|
|
164
|
+
type: 'file'
|
|
165
|
+
inputs:
|
|
166
|
+
- insforge_logs
|
|
167
|
+
path: '/insforge-logs/insforge.logs.jsonl'
|
|
168
|
+
encoding:
|
|
169
|
+
codec: 'json'
|
|
170
|
+
file_deno:
|
|
171
|
+
type: 'file'
|
|
172
|
+
inputs:
|
|
173
|
+
- deno_logs
|
|
174
|
+
path: '/insforge-logs/function.logs.jsonl'
|
|
175
|
+
encoding:
|
|
176
|
+
codec: 'json'
|
|
177
|
+
file_rest:
|
|
178
|
+
type: 'file'
|
|
179
|
+
inputs:
|
|
180
|
+
- rest_logs
|
|
181
|
+
path: '/insforge-logs/postgrest.logs.jsonl'
|
|
182
|
+
encoding:
|
|
183
|
+
codec: 'json'
|
|
184
|
+
file_db:
|
|
185
|
+
type: 'file'
|
|
186
|
+
inputs:
|
|
187
|
+
- db_logs
|
|
188
|
+
path: '/insforge-logs/postgres.logs.jsonl'
|
|
189
|
+
encoding:
|
|
190
|
+
codec: 'json'
|
|
191
|
+
|
|
192
|
+
# CloudWatch sinks (ignored if AWS_REGION not set)
|
|
193
|
+
cw_insforge:
|
|
194
|
+
type: aws_cloudwatch_logs
|
|
195
|
+
inputs:
|
|
196
|
+
- insforge_logs
|
|
197
|
+
region: ${AWS_REGION:-skip}
|
|
198
|
+
group_name: /insforge/local
|
|
199
|
+
stream_name: ${HOSTNAME_OVERRIDE:-local}-insforge-vector
|
|
200
|
+
encoding:
|
|
201
|
+
codec: json
|
|
202
|
+
healthcheck:
|
|
203
|
+
enabled: false
|
|
204
|
+
cw_rest:
|
|
205
|
+
type: aws_cloudwatch_logs
|
|
206
|
+
inputs:
|
|
207
|
+
- rest_logs
|
|
208
|
+
region: ${AWS_REGION:-skip}
|
|
209
|
+
group_name: /insforge/local
|
|
210
|
+
stream_name: ${HOSTNAME_OVERRIDE:-local}-postgrest-vector
|
|
211
|
+
encoding:
|
|
212
|
+
codec: json
|
|
213
|
+
healthcheck:
|
|
214
|
+
enabled: false
|
|
215
|
+
cw_deno:
|
|
216
|
+
type: aws_cloudwatch_logs
|
|
217
|
+
inputs:
|
|
218
|
+
- deno_logs
|
|
219
|
+
region: ${AWS_REGION:-skip}
|
|
220
|
+
group_name: /insforge/local
|
|
221
|
+
stream_name: ${HOSTNAME_OVERRIDE:-local}-function-vector
|
|
222
|
+
encoding:
|
|
223
|
+
codec: json
|
|
224
|
+
healthcheck:
|
|
225
|
+
enabled: false
|
|
226
|
+
cw_db:
|
|
227
|
+
type: aws_cloudwatch_logs
|
|
228
|
+
inputs:
|
|
229
|
+
- db_logs
|
|
230
|
+
region: ${AWS_REGION:-skip}
|
|
231
|
+
group_name: /insforge/local
|
|
232
|
+
stream_name: ${HOSTNAME_OVERRIDE:-local}-postgres-vector
|
|
233
|
+
encoding:
|
|
234
|
+
codec: json
|
|
235
|
+
healthcheck:
|
|
236
|
+
enabled: false
|
package/docs/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Mintlify Starter Kit
|
|
2
|
+
|
|
3
|
+
Use the starter kit to get your docs deployed and ready to customize.
|
|
4
|
+
|
|
5
|
+
Click the green **Use this template** button at the top of this repo to copy the Mintlify starter kit. The starter kit contains examples with
|
|
6
|
+
|
|
7
|
+
- Guide pages
|
|
8
|
+
- Navigation
|
|
9
|
+
- Customizations
|
|
10
|
+
- API reference pages
|
|
11
|
+
- Use of popular components
|
|
12
|
+
|
|
13
|
+
**[Follow the full quickstart guide](https://starter.mintlify.com/quickstart)**
|
|
14
|
+
|
|
15
|
+
## Development
|
|
16
|
+
|
|
17
|
+
Install the [Mintlify CLI](https://www.npmjs.com/package/mint) to preview your documentation changes locally. To install, use the following command:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
npm i -g mint
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Run the following command at the root of your documentation, where your `docs.json` is located:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
mint dev
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
View your local preview at `http://localhost:3000`.
|
|
30
|
+
|
|
31
|
+
## Publishing changes
|
|
32
|
+
|
|
33
|
+
Install our GitHub app from your [dashboard](https://dashboard.mintlify.com/settings/organization/github-app) to propagate changes from your repo to your deployment. Changes are deployed to production automatically after pushing to the default branch.
|
|
34
|
+
|
|
35
|
+
## Need help?
|
|
36
|
+
|
|
37
|
+
### Troubleshooting
|
|
38
|
+
|
|
39
|
+
- If your dev environment isn't running: Run `mint update` to ensure you have the most recent version of the CLI.
|
|
40
|
+
- If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
|
|
41
|
+
|
|
42
|
+
### Resources
|
|
43
|
+
- [Mintlify documentation](https://mintlify.com/docs)
|
|
44
|
+
- [Mintlify community](https://mintlify.com/community)
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Changelog"
|
|
3
|
+
description: "Latest updates and improvements to InsForge"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## November 2025
|
|
7
|
+
|
|
8
|
+
<AccordionGroup>
|
|
9
|
+
<Accordion title="November 30, 2025" icon="rocket">
|
|
10
|
+
### QuickStart Prompts & Templates
|
|
11
|
+
Get started faster with our new quickstart prompts and templates for common apps. Builders can now start with one click and get a fullstack app running in **5 minutes**.
|
|
12
|
+
|
|
13
|
+
<img src="/images/changelog/nov-2025/quickstart-prompts.webp" alt="QuickStart Prompts and Templates" />
|
|
14
|
+
|
|
15
|
+
### Auth Components
|
|
16
|
+
Drop-in prebuilt React auth components for your app. Get a working auth flow right away with social sign-on support built in by default.
|
|
17
|
+
|
|
18
|
+
<img src="/images/changelog/nov-2025/auth-components.webp" alt="Auth Components with Social Sign-on" />
|
|
19
|
+
|
|
20
|
+
### Database Metadata Dashboard
|
|
21
|
+
View your RLS policies, triggers, functions, and indexes all in one place. This makes debugging and understanding your project security much easier.
|
|
22
|
+
|
|
23
|
+
<img src="/images/changelog/nov-2025/database-metadata.webp" alt="Database Metadata Dashboard" />
|
|
24
|
+
|
|
25
|
+
### SQL Editor
|
|
26
|
+
Run SQL queries directly in the InsForge dashboard. No external tools required.
|
|
27
|
+
|
|
28
|
+
<img src="/images/changelog/nov-2025/sql-editor.webp" alt="SQL Editor in Dashboard" />
|
|
29
|
+
|
|
30
|
+
### Usage Page
|
|
31
|
+
A new dashboard section that displays a clear breakdown of your resource usage and what your plan includes.
|
|
32
|
+
|
|
33
|
+
<img src="/images/changelog/nov-2025/usage-page.webp" alt="Usage Page Dashboard" />
|
|
34
|
+
</Accordion>
|
|
35
|
+
</AccordionGroup>
|
|
36
|
+
|
|
37
|
+
## October 2025
|
|
38
|
+
|
|
39
|
+
<AccordionGroup>
|
|
40
|
+
<Accordion title="October 30, 2025" icon="rocket">
|
|
41
|
+
### OAuth: 4 New Third-Party Providers
|
|
42
|
+
You can now enable third-party logins with **LinkedIn, Microsoft, Facebook, and Discord**. On InsForge Cloud, we provide shared credentials for developers who want to quickly test these login flows.
|
|
43
|
+
|
|
44
|
+
After enabling, you can implement these logins directly through your agent by sending a simple prompt:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
implement Discord login
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
<img src="/images/changelog/october-2025/oauth-providers.webp" alt="OAuth Providers - LinkedIn, Microsoft, Facebook, and Discord" />
|
|
51
|
+
|
|
52
|
+
### Import CSV to Your Table
|
|
53
|
+
You can now upload `.csv` files directly into any table from the dashboard. Perfect for bringing in sample data or migrating from other tools.
|
|
54
|
+
|
|
55
|
+
<img src="/images/changelog/october-2025/csv-upload.webp" alt="CSV Upload to Tables Feature" />
|
|
56
|
+
|
|
57
|
+
### InsForge.js SDK
|
|
58
|
+
We've released our **insforge-js SDK** to make it easier for developers to integrate InsForge into their workflows. Manage auth, query databases, and control your backend programmatically with a few lines of code.
|
|
59
|
+
|
|
60
|
+
**Repository:** [GitHub](https://github.com/InsForge/InsForge-sdk-js)
|
|
61
|
+
|
|
62
|
+
### Logs
|
|
63
|
+
The new logs page lets you monitor container logs in real time. You can watch your backend activity directly in the dashboard, or let AI coding agents query logs through the InsForge MCP to automatically debug and search for errors.
|
|
64
|
+
|
|
65
|
+
<img src="/images/changelog/october-2025/logs-feature.webp" alt="Real-time Logs Monitoring Feature" />
|
|
66
|
+
</Accordion>
|
|
67
|
+
</AccordionGroup>
|