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,529 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: InsForge Auth Components
|
|
3
|
+
description: Framework-agnostic authentication components guidance for customization
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Custom Authentication system
|
|
7
|
+
|
|
8
|
+
Use this approach when you need custom authentication pages in your application instead of redirecting to hosted pages.
|
|
9
|
+
|
|
10
|
+
### Step-by-Step: Custom Auth Pages Setup
|
|
11
|
+
|
|
12
|
+
#### Step 1: Setup Provider (Same as Quick Start)
|
|
13
|
+
|
|
14
|
+
The provider setup is identical:
|
|
15
|
+
|
|
16
|
+
```tsx src/main.tsx
|
|
17
|
+
import { StrictMode } from 'react';
|
|
18
|
+
import { createRoot } from 'react-dom/client';
|
|
19
|
+
import { InsforgeProvider } from '@insforge/react-router';
|
|
20
|
+
import App from './App';
|
|
21
|
+
|
|
22
|
+
createRoot(document.getElementById('root')!).render(
|
|
23
|
+
<StrictMode>
|
|
24
|
+
<InsforgeProvider
|
|
25
|
+
baseUrl={
|
|
26
|
+
import.meta.env.VITE_INSFORGE_BASE_URL || 'https://your-app.region.insforge.app' // Replace with your InsForge backend URL
|
|
27
|
+
}
|
|
28
|
+
afterSignInUrl="/dashboard"
|
|
29
|
+
>
|
|
30
|
+
<App />
|
|
31
|
+
</InsforgeProvider>
|
|
32
|
+
</StrictMode>
|
|
33
|
+
);
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
#### Step 2: Configure Router with Custom Pages
|
|
37
|
+
|
|
38
|
+
Set `builtInAuth: false` and provide your page components:
|
|
39
|
+
|
|
40
|
+
```tsx src/App.tsx
|
|
41
|
+
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
|
|
42
|
+
import { getInsforgeRoutes } from '@insforge/react-router/router';
|
|
43
|
+
import Layout from './components/Layout';
|
|
44
|
+
import Home from './pages/Home';
|
|
45
|
+
import Dashboard from './pages/Dashboard';
|
|
46
|
+
// Import your custom auth pages
|
|
47
|
+
import SignInPage from './pages/auth/SignInPage';
|
|
48
|
+
import SignUpPage from './pages/auth/SignUpPage';
|
|
49
|
+
import ForgotPasswordPage from './pages/auth/ForgotPasswordPage';
|
|
50
|
+
|
|
51
|
+
const router = createBrowserRouter([
|
|
52
|
+
{
|
|
53
|
+
path: '/',
|
|
54
|
+
element: <Layout />,
|
|
55
|
+
children: [
|
|
56
|
+
{ index: true, element: <Home /> },
|
|
57
|
+
{ path: 'dashboard', element: <Dashboard /> },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
// Custom auth routes
|
|
62
|
+
...getInsforgeRoutes({
|
|
63
|
+
baseUrl: import.meta.env.VITE_INSFORGE_BASE_URL || 'https://your-app.region.insforge.app', // Replace with your InsForge backend URL
|
|
64
|
+
afterSignInUrl: '/dashboard',
|
|
65
|
+
builtInAuth: false, // Render custom components instead of redirecting
|
|
66
|
+
pages: {
|
|
67
|
+
signIn: <SignInPage />,
|
|
68
|
+
signUp: <SignUpPage />,
|
|
69
|
+
forgotPassword: <ForgotPasswordPage />,
|
|
70
|
+
},
|
|
71
|
+
}),
|
|
72
|
+
]);
|
|
73
|
+
|
|
74
|
+
export default function App() {
|
|
75
|
+
return <RouterProvider router={router} />;
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
#### Step 3: Create Auth Page Components
|
|
80
|
+
|
|
81
|
+
Use our complete authentication components directly. These components are **full-featured page-level components** with all business logic included:
|
|
82
|
+
|
|
83
|
+
```tsx src/pages/auth/SignInPage.tsx
|
|
84
|
+
import { SignIn } from '@insforge/react-router';
|
|
85
|
+
|
|
86
|
+
export default function SignInPage() {
|
|
87
|
+
return (
|
|
88
|
+
<div className="h-screen flex items-center justify-center">
|
|
89
|
+
<SignIn
|
|
90
|
+
title="Welcome Back"
|
|
91
|
+
subtitle="Sign in to your account"
|
|
92
|
+
onError={(error) => {
|
|
93
|
+
console.error('Sign in error:', error);
|
|
94
|
+
}}
|
|
95
|
+
/>
|
|
96
|
+
</div>
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```tsx src/pages/auth/SignUpPage.tsx
|
|
102
|
+
import { SignUp } from '@insforge/react-router';
|
|
103
|
+
|
|
104
|
+
export default function SignUpPage() {
|
|
105
|
+
return (
|
|
106
|
+
<div className="h-screen flex items-center justify-center">
|
|
107
|
+
<SignUp
|
|
108
|
+
title="Create Account"
|
|
109
|
+
subtitle="Get started for free"
|
|
110
|
+
onError={(error) => {
|
|
111
|
+
console.error('Sign up error:', error);
|
|
112
|
+
}}
|
|
113
|
+
/>
|
|
114
|
+
</div>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
```tsx src/pages/auth/ForgotPasswordPage.tsx
|
|
120
|
+
import { ForgotPassword } from '@insforge/react-router';
|
|
121
|
+
|
|
122
|
+
export default function ForgotPasswordPage() {
|
|
123
|
+
return (
|
|
124
|
+
<div className="h-screen flex items-center justify-center">
|
|
125
|
+
<ForgotPassword
|
|
126
|
+
onError={(error) => {
|
|
127
|
+
console.error('Password reset error:', error);
|
|
128
|
+
}}
|
|
129
|
+
/>
|
|
130
|
+
</div>
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**That's it!** The `<SignIn>`, `<SignUp>`, and `<ForgotPassword>` components are complete page-level components that include:
|
|
136
|
+
|
|
137
|
+
- Form UI with validation
|
|
138
|
+
- OAuth provider buttons (auto-detected)
|
|
139
|
+
- Error handling
|
|
140
|
+
- Loading states
|
|
141
|
+
- Password strength indicators (SignUp)
|
|
142
|
+
- All authentication logic
|
|
143
|
+
|
|
144
|
+
You only need to wrap them in your page components for layout/styling purposes.
|
|
145
|
+
|
|
146
|
+
### Key Difference from Built-in Auth
|
|
147
|
+
|
|
148
|
+
**Built-in Auth:**
|
|
149
|
+
|
|
150
|
+
- `/sign-in` → Redirects to `https://your-app.region.insforge.app/auth/sign-in`
|
|
151
|
+
- Authentication happens on hosted page
|
|
152
|
+
- Returns to your app with token
|
|
153
|
+
|
|
154
|
+
**Custom Components:**
|
|
155
|
+
|
|
156
|
+
- `/sign-in` → Renders your `<SignInPage>` component
|
|
157
|
+
- Authentication happens in your app
|
|
158
|
+
- SDK handles token management automatically
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Features
|
|
163
|
+
|
|
164
|
+
- **Built-in Auth**: React Router integration with deployed auth pages
|
|
165
|
+
- **Complete Components**: Pre-built `<SignIn>`, `<SignUp>`, `<UserButton>` with business logic
|
|
166
|
+
- **OAuth Support**: Google, GitHub, Discord, Facebook, LinkedIn, Microsoft, Apple, X, Instagram, TikTok, Spotify
|
|
167
|
+
- **React Hooks**: `useAuth()`, `useUser()`, `usePublicAuthConfig()`
|
|
168
|
+
- **Control Components**: `<SignedIn>`, `<SignedOut>`, `<Protect>`
|
|
169
|
+
- **Form Components**: Pure UI forms for custom logic
|
|
170
|
+
- **TypeScript**: Full type safety
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## How It Works
|
|
175
|
+
|
|
176
|
+
### Built-in Auth Flow
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
1. User clicks "Sign In" → Visits /sign-in route
|
|
180
|
+
↓
|
|
181
|
+
2. getInsforgeRoutes() redirects → https://your-app.region.insforge.app/auth/sign-in?redirect=yourapp.com/you-defined-destination-after-sign-in
|
|
182
|
+
↓
|
|
183
|
+
3. User signs in on deployed page → Backend processes authentication
|
|
184
|
+
↓
|
|
185
|
+
4. Backend redirects → yourapp.com/you-defined-destination-after-sign-in?access_token=xxx&user_id=xxx
|
|
186
|
+
↓
|
|
187
|
+
5. InsForge SDK will:
|
|
188
|
+
- Extracts token from URL
|
|
189
|
+
- Saves to localStorage
|
|
190
|
+
- Verifies with getCurrentUser()
|
|
191
|
+
- Updates Provider state
|
|
192
|
+
↓
|
|
193
|
+
6. User sees the destination page (e.g /dashboard)
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Custom UI Flow
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
1. User visits /sign-in route → Renders <SignIn> component
|
|
200
|
+
↓
|
|
201
|
+
2. User enters credentials → Component calls SDK methods
|
|
202
|
+
↓
|
|
203
|
+
3. SDK communicates with backend → Returns auth token and user data
|
|
204
|
+
↓
|
|
205
|
+
4. Component adds token to URL and redirects → SDK auto-detects token from URL
|
|
206
|
+
↓
|
|
207
|
+
5. Provider automatically updates auth state → Components re-render
|
|
208
|
+
↓
|
|
209
|
+
6. User sees authenticated UI at destination
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**Architecture:**
|
|
213
|
+
|
|
214
|
+
- **InsforgeProvider**: Manages authentication state globally using React Context
|
|
215
|
+
- **getInsforgeRoutes()**: Creates redirect routes for built-in auth
|
|
216
|
+
- **SDK Integration**: All auth operations go through `@insforge/sdk`, which auto-detects tokens from URL
|
|
217
|
+
- **React Context**: Provides auth state to all child components
|
|
218
|
+
- **Hooks**: Easy access to auth methods and user data
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Complete Components (with Business Logic)
|
|
223
|
+
|
|
224
|
+
These components include full authentication logic and work out of the box.
|
|
225
|
+
|
|
226
|
+
### `<SignIn />`
|
|
227
|
+
|
|
228
|
+
Complete sign-in component with email/password and OAuth:
|
|
229
|
+
|
|
230
|
+
```tsx
|
|
231
|
+
import { SignIn } from '@insforge/react-router';
|
|
232
|
+
|
|
233
|
+
function SignInPage() {
|
|
234
|
+
return (
|
|
235
|
+
<SignIn
|
|
236
|
+
title="Welcome Back"
|
|
237
|
+
subtitle="Sign in to continue"
|
|
238
|
+
onError={(error) => {
|
|
239
|
+
console.error('Error:', error);
|
|
240
|
+
}}
|
|
241
|
+
/>
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Key Features:**
|
|
247
|
+
|
|
248
|
+
- Email/password authentication
|
|
249
|
+
- OAuth provider buttons (auto-detected from backend)
|
|
250
|
+
- Password visibility toggle
|
|
251
|
+
- Error handling
|
|
252
|
+
- Loading states
|
|
253
|
+
- Customizable text
|
|
254
|
+
|
|
255
|
+
**Props:**
|
|
256
|
+
|
|
257
|
+
- `onError` - Callback on error
|
|
258
|
+
- `title` / `subtitle` - Custom heading text
|
|
259
|
+
|
|
260
|
+
### `<SignUp />`
|
|
261
|
+
|
|
262
|
+
Complete sign-up component with password strength validation:
|
|
263
|
+
|
|
264
|
+
```tsx
|
|
265
|
+
import { SignUp } from '@insforge/react-router';
|
|
266
|
+
|
|
267
|
+
function SignUpPage() {
|
|
268
|
+
return (
|
|
269
|
+
<SignUp
|
|
270
|
+
title="Create Account"
|
|
271
|
+
subtitle="Get started with your free account"
|
|
272
|
+
onError={(error) => {
|
|
273
|
+
console.error('Error:', error);
|
|
274
|
+
}}
|
|
275
|
+
/>
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**Key Features:**
|
|
281
|
+
|
|
282
|
+
- Email/password registration
|
|
283
|
+
- Real-time password strength indicator
|
|
284
|
+
- OAuth provider buttons
|
|
285
|
+
- Form validation
|
|
286
|
+
- Customizable text
|
|
287
|
+
|
|
288
|
+
**Props:** Same as `<SignIn>`.
|
|
289
|
+
|
|
290
|
+
### `<UserButton />`
|
|
291
|
+
|
|
292
|
+
User profile dropdown with sign-out:
|
|
293
|
+
|
|
294
|
+
```tsx
|
|
295
|
+
import { UserButton } from '@insforge/react-router';
|
|
296
|
+
|
|
297
|
+
function Header() {
|
|
298
|
+
return (
|
|
299
|
+
<header>
|
|
300
|
+
<nav>{/* Your navigation */}</nav>
|
|
301
|
+
<UserButton afterSignOutUrl="/" mode="detailed" />
|
|
302
|
+
</header>
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**Modes:**
|
|
308
|
+
|
|
309
|
+
- `detailed` (default): Shows avatar + name + email
|
|
310
|
+
- `simple`: Shows avatar only
|
|
311
|
+
|
|
312
|
+
**Props:**
|
|
313
|
+
|
|
314
|
+
- `mode` - Display mode: `"detailed"` or `"simple"`
|
|
315
|
+
- `afterSignOutUrl` - Redirect URL after sign out
|
|
316
|
+
|
|
317
|
+
### `<ForgotPassword />`
|
|
318
|
+
|
|
319
|
+
Complete password reset flow with automatic method detection:
|
|
320
|
+
|
|
321
|
+
```tsx
|
|
322
|
+
import { ForgotPassword } from '@insforge/react-router';
|
|
323
|
+
|
|
324
|
+
function ForgotPasswordPage() {
|
|
325
|
+
return (
|
|
326
|
+
<ForgotPassword
|
|
327
|
+
onError={(error) => {
|
|
328
|
+
console.error('Error:', error);
|
|
329
|
+
}}
|
|
330
|
+
/>
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
**Key Features:**
|
|
336
|
+
|
|
337
|
+
- Auto-detects reset method (code or link) from backend config
|
|
338
|
+
- **Link method**: Sends email with reset link
|
|
339
|
+
- **Code method**: Three-step flow (email → verify code → reset password)
|
|
340
|
+
- 60-second countdown timer for resend
|
|
341
|
+
- Built-in form validation
|
|
342
|
+
- Customizable text
|
|
343
|
+
|
|
344
|
+
**Props:**
|
|
345
|
+
|
|
346
|
+
- `onError` - Callback on error
|
|
347
|
+
|
|
348
|
+
### `<Protect />`
|
|
349
|
+
|
|
350
|
+
Protected content with conditional rendering:
|
|
351
|
+
|
|
352
|
+
```tsx
|
|
353
|
+
import { Protect } from '@insforge/react-router';
|
|
354
|
+
|
|
355
|
+
function Dashboard() {
|
|
356
|
+
return (
|
|
357
|
+
<div>
|
|
358
|
+
<h1>Dashboard</h1>
|
|
359
|
+
{/* Simple protection */}
|
|
360
|
+
<Protect redirectTo="/sign-in">
|
|
361
|
+
<UserContent />
|
|
362
|
+
</Protect>
|
|
363
|
+
{/* Custom logic */}
|
|
364
|
+
<Protect condition={(user) => user.subscription === 'premium'} fallback={<UpgradePrompt />}>
|
|
365
|
+
<PremiumFeature />
|
|
366
|
+
</Protect>
|
|
367
|
+
</div>
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**Props:**
|
|
373
|
+
|
|
374
|
+
- `redirectTo` - URL to redirect if not authorized
|
|
375
|
+
- `condition` - Custom condition function `(user) => boolean`
|
|
376
|
+
- `fallback` - React node to show if not authorized
|
|
377
|
+
|
|
378
|
+
### `<SignedIn>` / `<SignedOut>`
|
|
379
|
+
|
|
380
|
+
Conditional rendering based on auth state:
|
|
381
|
+
|
|
382
|
+
```tsx
|
|
383
|
+
import { SignedIn, SignedOut } from '@insforge/react-router';
|
|
384
|
+
|
|
385
|
+
function NavBar() {
|
|
386
|
+
return (
|
|
387
|
+
<nav>
|
|
388
|
+
<SignedOut>
|
|
389
|
+
<a href="/sign-in">Sign In</a>
|
|
390
|
+
<a href="/sign-up">Sign Up</a>
|
|
391
|
+
</SignedOut>
|
|
392
|
+
|
|
393
|
+
<SignedIn>
|
|
394
|
+
<a href="/dashboard">Dashboard</a>
|
|
395
|
+
<UserButton />
|
|
396
|
+
</SignedIn>
|
|
397
|
+
</nav>
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
## Hooks
|
|
405
|
+
|
|
406
|
+
### `useAuth()`
|
|
407
|
+
|
|
408
|
+
Access authentication methods and state:
|
|
409
|
+
|
|
410
|
+
```tsx
|
|
411
|
+
import { useAuth } from '@insforge/react-router';
|
|
412
|
+
|
|
413
|
+
function LoginButton() {
|
|
414
|
+
const { signIn, signUp, signOut, isSignedIn, isLoaded } = useAuth();
|
|
415
|
+
|
|
416
|
+
const handleSignIn = async () => {
|
|
417
|
+
try {
|
|
418
|
+
await signIn('user@example.com', 'password');
|
|
419
|
+
} catch (error) {
|
|
420
|
+
console.error('Sign in failed:', error);
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
if (!isLoaded) return <div>Loading...</div>;
|
|
425
|
+
|
|
426
|
+
return (
|
|
427
|
+
<button onClick={isSignedIn ? signOut : handleSignIn}>
|
|
428
|
+
{isSignedIn ? 'Sign Out' : 'Sign In'}
|
|
429
|
+
</button>
|
|
430
|
+
);
|
|
431
|
+
}
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
**Returns:**
|
|
435
|
+
|
|
436
|
+
- `signIn(email, password)` - Sign in with email/password
|
|
437
|
+
- `signUp(email, password)` - Sign up new user
|
|
438
|
+
- `signOut()` - Sign out current user
|
|
439
|
+
- `isSignedIn` - Boolean auth state
|
|
440
|
+
- `isLoaded` - Boolean loading state
|
|
441
|
+
|
|
442
|
+
### `useUser()`
|
|
443
|
+
|
|
444
|
+
Access current user data:
|
|
445
|
+
|
|
446
|
+
```tsx
|
|
447
|
+
import { useUser } from '@insforge/react-router';
|
|
448
|
+
|
|
449
|
+
function UserProfile() {
|
|
450
|
+
const { user, isLoaded, updateUser } = useUser();
|
|
451
|
+
|
|
452
|
+
if (!isLoaded) return <div>Loading...</div>;
|
|
453
|
+
if (!user) return <div>Not signed in</div>;
|
|
454
|
+
|
|
455
|
+
const handleUpdate = async () => {
|
|
456
|
+
await updateUser({ name: 'New Name' });
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
return (
|
|
460
|
+
<div>
|
|
461
|
+
<p>Email: {user.email}</p>
|
|
462
|
+
<p>Name: {user.name}</p>
|
|
463
|
+
<img src={user.avatarUrl} alt="Avatar" />
|
|
464
|
+
<button onClick={handleUpdate}>Update Name</button>
|
|
465
|
+
</div>
|
|
466
|
+
);
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
**Returns:**
|
|
471
|
+
|
|
472
|
+
- `user` - User object with id, email, name, avatarUrl
|
|
473
|
+
- `isLoaded` - Boolean loading state
|
|
474
|
+
- `updateUser(data)` - Update user profile
|
|
475
|
+
|
|
476
|
+
### `usePublicAuthConfig()`
|
|
477
|
+
|
|
478
|
+
Get your authentication config in InsForge:
|
|
479
|
+
|
|
480
|
+
```tsx
|
|
481
|
+
import { usePublicAuthConfig } from '@insforge/react-router';
|
|
482
|
+
|
|
483
|
+
function SignInPage() {
|
|
484
|
+
const { authConfig, isLoaded } = usePublicAuthConfig();
|
|
485
|
+
|
|
486
|
+
if (!isLoaded) return <div>Loading...</div>;
|
|
487
|
+
|
|
488
|
+
return (
|
|
489
|
+
<div>
|
|
490
|
+
<p>Available OAuth: {authConfig.oAuthProviders.join(', ')}</p>
|
|
491
|
+
<p>Password min length: {authConfig?.passwordMinLength}</p>
|
|
492
|
+
</div>
|
|
493
|
+
);
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
**Returns:**
|
|
498
|
+
|
|
499
|
+
- `authConfig` - Authentication Configuration you set in InsForge dashboard.
|
|
500
|
+
- `isLoaded` - Boolean loading state
|
|
501
|
+
|
|
502
|
+
<Warning>
|
|
503
|
+
**Performance**: Only use this hook in SignIn/SignUp components to avoid unnecessary API calls.
|
|
504
|
+
</Warning>
|
|
505
|
+
|
|
506
|
+
---
|
|
507
|
+
|
|
508
|
+
## Advanced Features
|
|
509
|
+
|
|
510
|
+
### Auth Change Callback
|
|
511
|
+
|
|
512
|
+
Track authentication state changes:
|
|
513
|
+
|
|
514
|
+
```tsx
|
|
515
|
+
<InsforgeProvider
|
|
516
|
+
baseUrl={baseUrl}
|
|
517
|
+
onAuthChange={(user) => {
|
|
518
|
+
if (user) {
|
|
519
|
+
console.log('User signed in:', user.email);
|
|
520
|
+
analytics.identify(user.id);
|
|
521
|
+
} else {
|
|
522
|
+
console.log('User signed out');
|
|
523
|
+
analytics.reset();
|
|
524
|
+
}
|
|
525
|
+
}}
|
|
526
|
+
>
|
|
527
|
+
{children}
|
|
528
|
+
</InsforgeProvider>
|
|
529
|
+
```
|