insforge 0.3.3 → 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 -780
- 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/openapi/auth.yaml
CHANGED
|
@@ -5,6 +5,228 @@ info:
|
|
|
5
5
|
description: Authentication endpoints with separated auth and profile tables
|
|
6
6
|
|
|
7
7
|
paths:
|
|
8
|
+
/api/auth/public-config:
|
|
9
|
+
get:
|
|
10
|
+
summary: Get public authentication configuration
|
|
11
|
+
description: Get all public authentication configuration including OAuth providers and email auth settings (public endpoint)
|
|
12
|
+
tags:
|
|
13
|
+
- Client
|
|
14
|
+
responses:
|
|
15
|
+
'200':
|
|
16
|
+
description: Public authentication configuration
|
|
17
|
+
content:
|
|
18
|
+
application/json:
|
|
19
|
+
schema:
|
|
20
|
+
type: object
|
|
21
|
+
properties:
|
|
22
|
+
oAuthProviders:
|
|
23
|
+
type: array
|
|
24
|
+
items:
|
|
25
|
+
type: object
|
|
26
|
+
properties:
|
|
27
|
+
provider:
|
|
28
|
+
type: string
|
|
29
|
+
enum: [google, github, discord, linkedin, facebook, microsoft]
|
|
30
|
+
useSharedKey:
|
|
31
|
+
type: boolean
|
|
32
|
+
requireEmailVerification:
|
|
33
|
+
type: boolean
|
|
34
|
+
passwordMinLength:
|
|
35
|
+
type: integer
|
|
36
|
+
minimum: 4
|
|
37
|
+
maximum: 128
|
|
38
|
+
requireNumber:
|
|
39
|
+
type: boolean
|
|
40
|
+
requireLowercase:
|
|
41
|
+
type: boolean
|
|
42
|
+
requireUppercase:
|
|
43
|
+
type: boolean
|
|
44
|
+
requireSpecialChar:
|
|
45
|
+
type: boolean
|
|
46
|
+
verifyEmailRedirectTo:
|
|
47
|
+
type: string
|
|
48
|
+
nullable: true
|
|
49
|
+
description: URL to redirect users after successful email verification (if not set, shows default success page)
|
|
50
|
+
resetPasswordRedirectTo:
|
|
51
|
+
type: string
|
|
52
|
+
nullable: true
|
|
53
|
+
description: URL to redirect users after successful password reset (if not set, shows default success page)
|
|
54
|
+
verifyEmailMethod:
|
|
55
|
+
type: string
|
|
56
|
+
enum: [code, link]
|
|
57
|
+
description: Method for email verification (code = 6-digit OTP, link = magic link)
|
|
58
|
+
resetPasswordMethod:
|
|
59
|
+
type: string
|
|
60
|
+
enum: [code, link]
|
|
61
|
+
description: Method for password reset (code = 6-digit OTP + exchange flow, link = magic link)
|
|
62
|
+
|
|
63
|
+
/api/auth/config:
|
|
64
|
+
get:
|
|
65
|
+
summary: Get authentication configuration
|
|
66
|
+
description: Get current authentication settings including all configuration options (admin only)
|
|
67
|
+
tags:
|
|
68
|
+
- Admin
|
|
69
|
+
security:
|
|
70
|
+
- bearerAuth: []
|
|
71
|
+
responses:
|
|
72
|
+
'200':
|
|
73
|
+
description: Authentication configuration
|
|
74
|
+
content:
|
|
75
|
+
application/json:
|
|
76
|
+
schema:
|
|
77
|
+
type: object
|
|
78
|
+
properties:
|
|
79
|
+
id:
|
|
80
|
+
type: string
|
|
81
|
+
format: uuid
|
|
82
|
+
requireEmailVerification:
|
|
83
|
+
type: boolean
|
|
84
|
+
passwordMinLength:
|
|
85
|
+
type: integer
|
|
86
|
+
minimum: 4
|
|
87
|
+
maximum: 128
|
|
88
|
+
requireNumber:
|
|
89
|
+
type: boolean
|
|
90
|
+
requireLowercase:
|
|
91
|
+
type: boolean
|
|
92
|
+
requireUppercase:
|
|
93
|
+
type: boolean
|
|
94
|
+
requireSpecialChar:
|
|
95
|
+
type: boolean
|
|
96
|
+
verifyEmailRedirectTo:
|
|
97
|
+
type: string
|
|
98
|
+
nullable: true
|
|
99
|
+
description: URL to redirect users after successful email verification (if not set, shows default success page)
|
|
100
|
+
resetPasswordRedirectTo:
|
|
101
|
+
type: string
|
|
102
|
+
nullable: true
|
|
103
|
+
description: URL to redirect users after successful password reset (if not set, shows default success page)
|
|
104
|
+
verifyEmailMethod:
|
|
105
|
+
type: string
|
|
106
|
+
enum: [code, link]
|
|
107
|
+
description: Method for email verification (code = 6-digit OTP, link = magic link)
|
|
108
|
+
resetPasswordMethod:
|
|
109
|
+
type: string
|
|
110
|
+
enum: [code, link]
|
|
111
|
+
description: Method for password reset (code = 6-digit OTP + exchange flow, link = magic link)
|
|
112
|
+
signInRedirectTo:
|
|
113
|
+
type: string
|
|
114
|
+
nullable: true
|
|
115
|
+
description: URL to redirect users after successful sign in
|
|
116
|
+
createdAt:
|
|
117
|
+
type: string
|
|
118
|
+
format: date-time
|
|
119
|
+
updatedAt:
|
|
120
|
+
type: string
|
|
121
|
+
format: date-time
|
|
122
|
+
'401':
|
|
123
|
+
description: Unauthorized
|
|
124
|
+
'403':
|
|
125
|
+
description: Forbidden - Admin only
|
|
126
|
+
|
|
127
|
+
put:
|
|
128
|
+
summary: Update authentication configuration
|
|
129
|
+
description: Update authentication settings (admin only)
|
|
130
|
+
tags:
|
|
131
|
+
- Admin
|
|
132
|
+
security:
|
|
133
|
+
- bearerAuth: []
|
|
134
|
+
requestBody:
|
|
135
|
+
required: true
|
|
136
|
+
content:
|
|
137
|
+
application/json:
|
|
138
|
+
schema:
|
|
139
|
+
type: object
|
|
140
|
+
properties:
|
|
141
|
+
requireEmailVerification:
|
|
142
|
+
type: boolean
|
|
143
|
+
passwordMinLength:
|
|
144
|
+
type: integer
|
|
145
|
+
minimum: 4
|
|
146
|
+
maximum: 128
|
|
147
|
+
requireNumber:
|
|
148
|
+
type: boolean
|
|
149
|
+
requireLowercase:
|
|
150
|
+
type: boolean
|
|
151
|
+
requireUppercase:
|
|
152
|
+
type: boolean
|
|
153
|
+
requireSpecialChar:
|
|
154
|
+
type: boolean
|
|
155
|
+
verifyEmailRedirectTo:
|
|
156
|
+
type: string
|
|
157
|
+
nullable: true
|
|
158
|
+
description: URL to redirect users after successful email verification (if not set, shows default success page)
|
|
159
|
+
resetPasswordRedirectTo:
|
|
160
|
+
type: string
|
|
161
|
+
nullable: true
|
|
162
|
+
description: URL to redirect users after successful password reset (if not set, shows default success page)
|
|
163
|
+
verifyEmailMethod:
|
|
164
|
+
type: string
|
|
165
|
+
enum: [code, link]
|
|
166
|
+
description: Method for email verification (code = 6-digit OTP, link = magic link)
|
|
167
|
+
resetPasswordMethod:
|
|
168
|
+
type: string
|
|
169
|
+
enum: [code, link]
|
|
170
|
+
description: Method for password reset (code = 6-digit OTP + exchange flow, link = magic link)
|
|
171
|
+
signInRedirectTo:
|
|
172
|
+
type: string
|
|
173
|
+
nullable: true
|
|
174
|
+
description: URL to redirect users after successful sign in
|
|
175
|
+
responses:
|
|
176
|
+
'200':
|
|
177
|
+
description: Configuration updated successfully
|
|
178
|
+
content:
|
|
179
|
+
application/json:
|
|
180
|
+
schema:
|
|
181
|
+
type: object
|
|
182
|
+
properties:
|
|
183
|
+
id:
|
|
184
|
+
type: string
|
|
185
|
+
format: uuid
|
|
186
|
+
requireEmailVerification:
|
|
187
|
+
type: boolean
|
|
188
|
+
passwordMinLength:
|
|
189
|
+
type: integer
|
|
190
|
+
minimum: 4
|
|
191
|
+
maximum: 128
|
|
192
|
+
requireNumber:
|
|
193
|
+
type: boolean
|
|
194
|
+
requireLowercase:
|
|
195
|
+
type: boolean
|
|
196
|
+
requireUppercase:
|
|
197
|
+
type: boolean
|
|
198
|
+
requireSpecialChar:
|
|
199
|
+
type: boolean
|
|
200
|
+
verifyEmailRedirectTo:
|
|
201
|
+
type: string
|
|
202
|
+
nullable: true
|
|
203
|
+
description: URL to redirect users after successful email verification (if not set, shows default success page)
|
|
204
|
+
resetPasswordRedirectTo:
|
|
205
|
+
type: string
|
|
206
|
+
nullable: true
|
|
207
|
+
description: URL to redirect users after successful password reset (if not set, shows default success page)
|
|
208
|
+
verifyEmailMethod:
|
|
209
|
+
type: string
|
|
210
|
+
enum: [code, link]
|
|
211
|
+
resetPasswordMethod:
|
|
212
|
+
type: string
|
|
213
|
+
enum: [code, link]
|
|
214
|
+
signInRedirectTo:
|
|
215
|
+
type: string
|
|
216
|
+
nullable: true
|
|
217
|
+
createdAt:
|
|
218
|
+
type: string
|
|
219
|
+
format: date-time
|
|
220
|
+
updatedAt:
|
|
221
|
+
type: string
|
|
222
|
+
format: date-time
|
|
223
|
+
'400':
|
|
224
|
+
description: Invalid request
|
|
225
|
+
'401':
|
|
226
|
+
description: Unauthorized
|
|
227
|
+
'403':
|
|
228
|
+
description: Forbidden - Admin only
|
|
229
|
+
|
|
8
230
|
/api/auth/users:
|
|
9
231
|
post:
|
|
10
232
|
summary: Register new user
|
|
@@ -27,13 +249,13 @@ paths:
|
|
|
27
249
|
example: user@example.com
|
|
28
250
|
password:
|
|
29
251
|
type: string
|
|
30
|
-
|
|
252
|
+
description: Password meeting configured requirements (check /api/auth/email/config for current requirements)
|
|
31
253
|
example: securepassword123
|
|
32
254
|
name:
|
|
33
255
|
type: string
|
|
34
256
|
example: John Doe
|
|
35
257
|
responses:
|
|
36
|
-
'
|
|
258
|
+
'200':
|
|
37
259
|
description: User created successfully
|
|
38
260
|
content:
|
|
39
261
|
application/json:
|
|
@@ -41,26 +263,18 @@ paths:
|
|
|
41
263
|
type: object
|
|
42
264
|
properties:
|
|
43
265
|
user:
|
|
44
|
-
|
|
45
|
-
properties:
|
|
46
|
-
id:
|
|
47
|
-
type: string
|
|
48
|
-
format: uuid
|
|
49
|
-
email:
|
|
50
|
-
type: string
|
|
51
|
-
name:
|
|
52
|
-
type: string
|
|
53
|
-
emailVerified:
|
|
54
|
-
type: boolean
|
|
55
|
-
createdAt:
|
|
56
|
-
type: string
|
|
57
|
-
format: date-time
|
|
58
|
-
updatedAt:
|
|
59
|
-
type: string
|
|
60
|
-
format: date-time
|
|
266
|
+
$ref: '#/components/schemas/UserResponse'
|
|
61
267
|
accessToken:
|
|
62
268
|
type: string
|
|
63
|
-
|
|
269
|
+
nullable: true
|
|
270
|
+
description: JWT authentication token (null if email verification required)
|
|
271
|
+
requireEmailVerification:
|
|
272
|
+
type: boolean
|
|
273
|
+
description: Whether email verification is required before login
|
|
274
|
+
redirectTo:
|
|
275
|
+
type: string
|
|
276
|
+
format: uri
|
|
277
|
+
description: Optional URL to redirect user after registration (only present if email verification not required)
|
|
64
278
|
'400':
|
|
65
279
|
description: Invalid request
|
|
66
280
|
'409':
|
|
@@ -74,25 +288,23 @@ paths:
|
|
|
74
288
|
security:
|
|
75
289
|
- bearerAuth: []
|
|
76
290
|
parameters:
|
|
77
|
-
- name:
|
|
291
|
+
- name: offset
|
|
78
292
|
in: query
|
|
79
293
|
schema:
|
|
80
|
-
type:
|
|
81
|
-
default:
|
|
294
|
+
type: string
|
|
295
|
+
default: '0'
|
|
296
|
+
description: Number of records to skip
|
|
82
297
|
- name: limit
|
|
83
|
-
in: query
|
|
84
|
-
schema:
|
|
85
|
-
type: integer
|
|
86
|
-
default: 10
|
|
87
|
-
- name: search
|
|
88
298
|
in: query
|
|
89
299
|
schema:
|
|
90
300
|
type: string
|
|
91
|
-
|
|
301
|
+
default: '10'
|
|
302
|
+
description: Maximum number of records to return
|
|
303
|
+
- name: search
|
|
92
304
|
in: query
|
|
93
305
|
schema:
|
|
94
306
|
type: string
|
|
95
|
-
|
|
307
|
+
description: Search by email or name
|
|
96
308
|
responses:
|
|
97
309
|
'200':
|
|
98
310
|
description: List of users
|
|
@@ -104,19 +316,7 @@ paths:
|
|
|
104
316
|
data:
|
|
105
317
|
type: array
|
|
106
318
|
items:
|
|
107
|
-
|
|
108
|
-
properties:
|
|
109
|
-
id:
|
|
110
|
-
type: string
|
|
111
|
-
email:
|
|
112
|
-
type: string
|
|
113
|
-
name:
|
|
114
|
-
type: string
|
|
115
|
-
role:
|
|
116
|
-
type: string
|
|
117
|
-
created_at:
|
|
118
|
-
type: string
|
|
119
|
-
format: date-time
|
|
319
|
+
$ref: '#/components/schemas/UserResponse'
|
|
120
320
|
pagination:
|
|
121
321
|
type: object
|
|
122
322
|
properties:
|
|
@@ -168,6 +368,38 @@ paths:
|
|
|
168
368
|
'403':
|
|
169
369
|
description: Forbidden - Admin only
|
|
170
370
|
|
|
371
|
+
/api/auth/users/{userId}:
|
|
372
|
+
get:
|
|
373
|
+
summary: Get specific user
|
|
374
|
+
description: Get user details by ID (admin only)
|
|
375
|
+
tags:
|
|
376
|
+
- Admin
|
|
377
|
+
security:
|
|
378
|
+
- bearerAuth: []
|
|
379
|
+
parameters:
|
|
380
|
+
- name: userId
|
|
381
|
+
in: path
|
|
382
|
+
required: true
|
|
383
|
+
schema:
|
|
384
|
+
type: string
|
|
385
|
+
format: uuid
|
|
386
|
+
description: User ID
|
|
387
|
+
responses:
|
|
388
|
+
'200':
|
|
389
|
+
description: User details
|
|
390
|
+
content:
|
|
391
|
+
application/json:
|
|
392
|
+
schema:
|
|
393
|
+
$ref: '#/components/schemas/UserResponse'
|
|
394
|
+
'400':
|
|
395
|
+
description: Invalid user ID format
|
|
396
|
+
'401':
|
|
397
|
+
description: Unauthorized
|
|
398
|
+
'403':
|
|
399
|
+
description: Forbidden - Admin only
|
|
400
|
+
'404':
|
|
401
|
+
description: User not found
|
|
402
|
+
|
|
171
403
|
/api/auth/sessions:
|
|
172
404
|
post:
|
|
173
405
|
summary: User login
|
|
@@ -198,32 +430,22 @@ paths:
|
|
|
198
430
|
type: object
|
|
199
431
|
properties:
|
|
200
432
|
user:
|
|
201
|
-
|
|
202
|
-
properties:
|
|
203
|
-
id:
|
|
204
|
-
type: string
|
|
205
|
-
format: uuid
|
|
206
|
-
email:
|
|
207
|
-
type: string
|
|
208
|
-
name:
|
|
209
|
-
type: string
|
|
210
|
-
emailVerified:
|
|
211
|
-
type: boolean
|
|
212
|
-
createdAt:
|
|
213
|
-
type: string
|
|
214
|
-
format: date-time
|
|
215
|
-
updatedAt:
|
|
216
|
-
type: string
|
|
217
|
-
format: date-time
|
|
433
|
+
$ref: '#/components/schemas/UserResponse'
|
|
218
434
|
accessToken:
|
|
219
435
|
type: string
|
|
436
|
+
redirectTo:
|
|
437
|
+
type: string
|
|
438
|
+
format: uri
|
|
439
|
+
description: Optional URL to redirect user after login (if configured)
|
|
220
440
|
'401':
|
|
221
441
|
description: Invalid credentials
|
|
442
|
+
'403':
|
|
443
|
+
description: Email verification required
|
|
222
444
|
|
|
223
445
|
/api/auth/sessions/current:
|
|
224
446
|
get:
|
|
225
447
|
summary: Get current user
|
|
226
|
-
description: Returns the currently authenticated user
|
|
448
|
+
description: Returns the currently authenticated user's basic info from JWT token
|
|
227
449
|
tags:
|
|
228
450
|
- Client
|
|
229
451
|
security:
|
|
@@ -241,12 +463,13 @@ paths:
|
|
|
241
463
|
properties:
|
|
242
464
|
id:
|
|
243
465
|
type: string
|
|
466
|
+
format: uuid
|
|
244
467
|
email:
|
|
245
468
|
type: string
|
|
246
|
-
|
|
247
|
-
type: string
|
|
469
|
+
format: email
|
|
248
470
|
role:
|
|
249
471
|
type: string
|
|
472
|
+
enum: [authenticated, project_admin]
|
|
250
473
|
'401':
|
|
251
474
|
description: Unauthorized
|
|
252
475
|
|
|
@@ -279,20 +502,10 @@ paths:
|
|
|
279
502
|
schema:
|
|
280
503
|
type: object
|
|
281
504
|
properties:
|
|
505
|
+
user:
|
|
506
|
+
$ref: '#/components/schemas/UserResponse'
|
|
282
507
|
accessToken:
|
|
283
508
|
type: string
|
|
284
|
-
user:
|
|
285
|
-
type: object
|
|
286
|
-
properties:
|
|
287
|
-
id:
|
|
288
|
-
type: string
|
|
289
|
-
email:
|
|
290
|
-
type: string
|
|
291
|
-
name:
|
|
292
|
-
type: string
|
|
293
|
-
role:
|
|
294
|
-
type: string
|
|
295
|
-
enum: [admin]
|
|
296
509
|
'401':
|
|
297
510
|
description: Invalid credentials
|
|
298
511
|
'403':
|
|
@@ -325,28 +538,11 @@ paths:
|
|
|
325
538
|
schema:
|
|
326
539
|
type: object
|
|
327
540
|
properties:
|
|
541
|
+
user:
|
|
542
|
+
$ref: '#/components/schemas/UserResponse'
|
|
328
543
|
accessToken:
|
|
329
544
|
type: string
|
|
330
545
|
description: Internal JWT for admin authentication
|
|
331
|
-
user:
|
|
332
|
-
type: object
|
|
333
|
-
properties:
|
|
334
|
-
id:
|
|
335
|
-
type: string
|
|
336
|
-
format: uuid
|
|
337
|
-
email:
|
|
338
|
-
type: string
|
|
339
|
-
name:
|
|
340
|
-
type: string
|
|
341
|
-
example: Administrator
|
|
342
|
-
emailVerified:
|
|
343
|
-
type: boolean
|
|
344
|
-
createdAt:
|
|
345
|
-
type: string
|
|
346
|
-
format: date-time
|
|
347
|
-
updatedAt:
|
|
348
|
-
type: string
|
|
349
|
-
format: date-time
|
|
350
546
|
'400':
|
|
351
547
|
description: Invalid authorization code or JWT verification failed
|
|
352
548
|
content:
|
|
@@ -359,7 +555,7 @@ paths:
|
|
|
359
555
|
summary: Generate anonymous token
|
|
360
556
|
description: Generate a non-expiring anonymous JWT token for public API access (admin only)
|
|
361
557
|
tags:
|
|
362
|
-
-
|
|
558
|
+
- Admin
|
|
363
559
|
security:
|
|
364
560
|
- bearerAuth: []
|
|
365
561
|
responses:
|
|
@@ -383,67 +579,484 @@ paths:
|
|
|
383
579
|
'403':
|
|
384
580
|
description: Forbidden - admin access required
|
|
385
581
|
|
|
386
|
-
/api/auth/
|
|
387
|
-
|
|
388
|
-
summary:
|
|
582
|
+
/api/auth/email/send-verification:
|
|
583
|
+
post:
|
|
584
|
+
summary: Send email verification (code or link based on config)
|
|
585
|
+
description: Send email verification using the method configured in auth settings (verifyEmailMethod). When method is 'code', sends a 6-digit numeric code. When method is 'link', sends a magic link. Prevents user enumeration by returning success even if email doesn't exist.
|
|
389
586
|
tags:
|
|
390
587
|
- Client
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
588
|
+
requestBody:
|
|
589
|
+
required: true
|
|
590
|
+
content:
|
|
591
|
+
application/json:
|
|
592
|
+
schema:
|
|
593
|
+
type: object
|
|
594
|
+
required:
|
|
595
|
+
- email
|
|
596
|
+
properties:
|
|
597
|
+
email:
|
|
598
|
+
type: string
|
|
599
|
+
format: email
|
|
600
|
+
example: user@example.com
|
|
398
601
|
responses:
|
|
399
|
-
'
|
|
400
|
-
description:
|
|
401
|
-
|
|
402
|
-
|
|
602
|
+
'202':
|
|
603
|
+
description: Verification email sent (if email exists). Message varies based on configured method.
|
|
604
|
+
content:
|
|
605
|
+
application/json:
|
|
606
|
+
schema:
|
|
607
|
+
type: object
|
|
608
|
+
properties:
|
|
609
|
+
success:
|
|
610
|
+
type: boolean
|
|
611
|
+
message:
|
|
612
|
+
type: string
|
|
613
|
+
example: "If your email is registered, we have sent you a verification code/link. Please check your inbox."
|
|
614
|
+
'400':
|
|
615
|
+
description: Invalid request
|
|
403
616
|
|
|
404
|
-
/api/auth/
|
|
405
|
-
|
|
406
|
-
summary:
|
|
617
|
+
/api/auth/email/verify:
|
|
618
|
+
post:
|
|
619
|
+
summary: Verify email with code or link
|
|
620
|
+
description: |
|
|
621
|
+
Verify email address using the method configured in auth settings (verifyEmailMethod):
|
|
622
|
+
- Code verification: Provide both `email` and `otp` (6-digit numeric code)
|
|
623
|
+
- Link verification: Provide only `otp` (64-character hex token from magic link)
|
|
624
|
+
|
|
625
|
+
Successfully verified users will receive a session token.
|
|
626
|
+
|
|
627
|
+
The email verification link sent to users always points to the backend API endpoint.
|
|
628
|
+
If `verifyEmailRedirectTo` is configured, the backend will redirect to that URL after successful verification.
|
|
629
|
+
Otherwise, a default success page is displayed.
|
|
407
630
|
tags:
|
|
408
631
|
- Client
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
632
|
+
requestBody:
|
|
633
|
+
required: true
|
|
634
|
+
content:
|
|
635
|
+
application/json:
|
|
636
|
+
schema:
|
|
637
|
+
type: object
|
|
638
|
+
required:
|
|
639
|
+
- otp
|
|
640
|
+
properties:
|
|
641
|
+
email:
|
|
642
|
+
type: string
|
|
643
|
+
format: email
|
|
644
|
+
description: Required for numeric code verification, omit for magic link verification
|
|
645
|
+
example: user@example.com
|
|
646
|
+
otp:
|
|
647
|
+
type: string
|
|
648
|
+
description: Either a 6-digit numeric code or a 64-character hex token from magic link
|
|
649
|
+
example: "123456"
|
|
416
650
|
responses:
|
|
417
|
-
'
|
|
418
|
-
description:
|
|
419
|
-
|
|
420
|
-
|
|
651
|
+
'200':
|
|
652
|
+
description: Email verified successfully, session created
|
|
653
|
+
content:
|
|
654
|
+
application/json:
|
|
655
|
+
schema:
|
|
656
|
+
type: object
|
|
657
|
+
properties:
|
|
658
|
+
user:
|
|
659
|
+
$ref: '#/components/schemas/UserResponse'
|
|
660
|
+
accessToken:
|
|
661
|
+
type: string
|
|
662
|
+
description: JWT authentication token
|
|
663
|
+
redirectTo:
|
|
664
|
+
type: string
|
|
665
|
+
format: uri
|
|
666
|
+
description: Optional URL to redirect user after verification (only present if configured)
|
|
667
|
+
'400':
|
|
668
|
+
description: Invalid verification code or token
|
|
669
|
+
'401':
|
|
670
|
+
description: Verification code/token expired or invalid
|
|
421
671
|
|
|
422
|
-
/api/auth/
|
|
423
|
-
|
|
424
|
-
summary:
|
|
425
|
-
description:
|
|
672
|
+
/api/auth/email/send-reset-password:
|
|
673
|
+
post:
|
|
674
|
+
summary: Send password reset (code or link based on config)
|
|
675
|
+
description: Send password reset email using the method configured in auth settings (resetPasswordMethod). When method is 'code', sends a 6-digit numeric code for two-step flow. When method is 'link', sends a magic link. Prevents user enumeration by returning success even if email doesn't exist.
|
|
426
676
|
tags:
|
|
427
677
|
- Client
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
678
|
+
requestBody:
|
|
679
|
+
required: true
|
|
680
|
+
content:
|
|
681
|
+
application/json:
|
|
682
|
+
schema:
|
|
683
|
+
type: object
|
|
684
|
+
required:
|
|
685
|
+
- email
|
|
686
|
+
properties:
|
|
687
|
+
email:
|
|
688
|
+
type: string
|
|
689
|
+
format: email
|
|
690
|
+
example: user@example.com
|
|
691
|
+
responses:
|
|
692
|
+
'202':
|
|
693
|
+
description: Password reset email sent (if email exists). Message varies based on configured method.
|
|
694
|
+
content:
|
|
695
|
+
application/json:
|
|
696
|
+
schema:
|
|
697
|
+
type: object
|
|
698
|
+
properties:
|
|
699
|
+
success:
|
|
700
|
+
type: boolean
|
|
701
|
+
message:
|
|
702
|
+
type: string
|
|
703
|
+
example: "If your email is registered, we have sent you a password reset code/link. Please check your inbox."
|
|
704
|
+
'400':
|
|
705
|
+
description: Invalid request
|
|
706
|
+
|
|
707
|
+
/api/auth/email/exchange-reset-password-token:
|
|
708
|
+
post:
|
|
709
|
+
summary: Exchange reset password code for reset token
|
|
710
|
+
description: |
|
|
711
|
+
Step 1 of two-step password reset flow (only used when resetPasswordMethod is 'code'):
|
|
712
|
+
1. Verify the 6-digit code sent to user's email
|
|
713
|
+
2. Return a reset token that can be used to actually reset the password
|
|
714
|
+
|
|
715
|
+
This endpoint is not used when resetPasswordMethod is 'link' (magic link flow is direct).
|
|
716
|
+
tags:
|
|
717
|
+
- Client
|
|
718
|
+
requestBody:
|
|
719
|
+
required: true
|
|
720
|
+
content:
|
|
721
|
+
application/json:
|
|
722
|
+
schema:
|
|
723
|
+
type: object
|
|
724
|
+
required:
|
|
725
|
+
- email
|
|
726
|
+
- code
|
|
727
|
+
properties:
|
|
728
|
+
email:
|
|
729
|
+
type: string
|
|
730
|
+
format: email
|
|
731
|
+
example: user@example.com
|
|
732
|
+
code:
|
|
733
|
+
type: string
|
|
734
|
+
description: 6-digit numeric code from email
|
|
735
|
+
example: "123456"
|
|
736
|
+
responses:
|
|
737
|
+
'200':
|
|
738
|
+
description: Code verified successfully, reset token returned
|
|
739
|
+
content:
|
|
740
|
+
application/json:
|
|
741
|
+
schema:
|
|
742
|
+
type: object
|
|
743
|
+
properties:
|
|
744
|
+
token:
|
|
745
|
+
type: string
|
|
746
|
+
description: Reset token to be used in reset-password endpoint
|
|
747
|
+
expiresAt:
|
|
748
|
+
type: string
|
|
749
|
+
format: date-time
|
|
750
|
+
description: Token expiration timestamp
|
|
751
|
+
'400':
|
|
752
|
+
description: Invalid request
|
|
753
|
+
'401':
|
|
754
|
+
description: Invalid or expired code
|
|
755
|
+
|
|
756
|
+
/api/auth/email/reset-password:
|
|
757
|
+
post:
|
|
758
|
+
summary: Reset password with token
|
|
759
|
+
description: |
|
|
760
|
+
Reset user password with a token. The token can be:
|
|
761
|
+
- Magic link token (64-character hex token from send-reset-password when method is 'link')
|
|
762
|
+
- Reset token (from exchange-reset-password-token after code verification when method is 'code')
|
|
763
|
+
|
|
764
|
+
Both token types use RESET_PASSWORD purpose and are verified the same way.
|
|
765
|
+
|
|
766
|
+
Flow summary:
|
|
767
|
+
- Code method: send-reset-password → exchange-reset-password-token → reset-password (with resetToken)
|
|
768
|
+
- Link method: send-reset-password → reset-password (with link token directly)
|
|
769
|
+
tags:
|
|
770
|
+
- Client
|
|
771
|
+
requestBody:
|
|
772
|
+
required: true
|
|
773
|
+
content:
|
|
774
|
+
application/json:
|
|
775
|
+
schema:
|
|
776
|
+
type: object
|
|
777
|
+
required:
|
|
778
|
+
- newPassword
|
|
779
|
+
- otp
|
|
780
|
+
properties:
|
|
781
|
+
newPassword:
|
|
782
|
+
type: string
|
|
783
|
+
description: New password meeting configured requirements
|
|
784
|
+
example: newSecurePassword123
|
|
785
|
+
otp:
|
|
786
|
+
type: string
|
|
787
|
+
description: Reset token (either from magic link or from exchange-reset-password-token endpoint)
|
|
788
|
+
example: "a1b2c3d4..."
|
|
789
|
+
responses:
|
|
790
|
+
'200':
|
|
791
|
+
description: Password reset successfully
|
|
792
|
+
content:
|
|
793
|
+
application/json:
|
|
794
|
+
schema:
|
|
795
|
+
type: object
|
|
796
|
+
properties:
|
|
797
|
+
message:
|
|
798
|
+
type: string
|
|
799
|
+
example: "Password reset successfully"
|
|
800
|
+
'400':
|
|
801
|
+
description: Invalid request or password requirements not met
|
|
802
|
+
'401':
|
|
803
|
+
description: Verification code/token expired or invalid
|
|
804
|
+
|
|
805
|
+
/api/auth/oauth/configs:
|
|
806
|
+
get:
|
|
807
|
+
summary: List all OAuth configurations
|
|
808
|
+
description: Get all configured OAuth providers (admin only)
|
|
809
|
+
tags:
|
|
810
|
+
- Admin
|
|
811
|
+
security:
|
|
812
|
+
- bearerAuth: []
|
|
813
|
+
responses:
|
|
814
|
+
'200':
|
|
815
|
+
description: List of OAuth configurations
|
|
816
|
+
content:
|
|
817
|
+
application/json:
|
|
818
|
+
schema:
|
|
819
|
+
type: object
|
|
820
|
+
properties:
|
|
821
|
+
data:
|
|
822
|
+
type: array
|
|
823
|
+
items:
|
|
824
|
+
$ref: '#/components/schemas/OAuthConfig'
|
|
825
|
+
count:
|
|
826
|
+
type: integer
|
|
827
|
+
'401':
|
|
828
|
+
description: Unauthorized
|
|
829
|
+
'403':
|
|
830
|
+
description: Forbidden - Admin only
|
|
831
|
+
|
|
832
|
+
post:
|
|
833
|
+
summary: Create OAuth configuration
|
|
834
|
+
description: Create a new OAuth provider configuration (admin only)
|
|
835
|
+
tags:
|
|
836
|
+
- Admin
|
|
837
|
+
security:
|
|
838
|
+
- bearerAuth: []
|
|
839
|
+
requestBody:
|
|
840
|
+
required: true
|
|
841
|
+
content:
|
|
842
|
+
application/json:
|
|
843
|
+
schema:
|
|
844
|
+
type: object
|
|
845
|
+
required:
|
|
846
|
+
- provider
|
|
847
|
+
properties:
|
|
848
|
+
provider:
|
|
849
|
+
type: string
|
|
850
|
+
enum: [google, github, discord, linkedin, facebook, microsoft]
|
|
851
|
+
clientId:
|
|
852
|
+
type: string
|
|
853
|
+
clientSecret:
|
|
854
|
+
type: string
|
|
855
|
+
redirectUri:
|
|
856
|
+
type: string
|
|
857
|
+
scopes:
|
|
858
|
+
type: array
|
|
859
|
+
items:
|
|
860
|
+
type: string
|
|
861
|
+
useSharedKey:
|
|
862
|
+
type: boolean
|
|
863
|
+
responses:
|
|
864
|
+
'200':
|
|
865
|
+
description: OAuth configuration created
|
|
866
|
+
content:
|
|
867
|
+
application/json:
|
|
868
|
+
schema:
|
|
869
|
+
$ref: '#/components/schemas/OAuthConfig'
|
|
870
|
+
'400':
|
|
871
|
+
description: Invalid request
|
|
872
|
+
'401':
|
|
873
|
+
description: Unauthorized
|
|
874
|
+
'403':
|
|
875
|
+
description: Forbidden - Admin only
|
|
876
|
+
|
|
877
|
+
/api/auth/oauth/{provider}/config:
|
|
878
|
+
get:
|
|
879
|
+
summary: Get OAuth configuration for specific provider
|
|
880
|
+
description: Get OAuth configuration including client secret (admin only)
|
|
881
|
+
tags:
|
|
882
|
+
- Admin
|
|
883
|
+
security:
|
|
884
|
+
- bearerAuth: []
|
|
885
|
+
parameters:
|
|
886
|
+
- name: provider
|
|
887
|
+
in: path
|
|
888
|
+
required: true
|
|
436
889
|
schema:
|
|
437
890
|
type: string
|
|
438
|
-
|
|
439
|
-
|
|
891
|
+
enum: [google, github, discord, linkedin, facebook, microsoft]
|
|
892
|
+
responses:
|
|
893
|
+
'200':
|
|
894
|
+
description: OAuth configuration
|
|
895
|
+
content:
|
|
896
|
+
application/json:
|
|
897
|
+
schema:
|
|
898
|
+
allOf:
|
|
899
|
+
- $ref: '#/components/schemas/OAuthConfig'
|
|
900
|
+
- type: object
|
|
901
|
+
properties:
|
|
902
|
+
clientSecret:
|
|
903
|
+
type: string
|
|
904
|
+
'401':
|
|
905
|
+
description: Unauthorized
|
|
906
|
+
'403':
|
|
907
|
+
description: Forbidden - Admin only
|
|
908
|
+
'404':
|
|
909
|
+
description: Configuration not found
|
|
910
|
+
|
|
911
|
+
put:
|
|
912
|
+
summary: Update OAuth configuration
|
|
913
|
+
description: Update OAuth provider configuration (admin only)
|
|
914
|
+
tags:
|
|
915
|
+
- Admin
|
|
916
|
+
security:
|
|
917
|
+
- bearerAuth: []
|
|
918
|
+
parameters:
|
|
919
|
+
- name: provider
|
|
920
|
+
in: path
|
|
921
|
+
required: true
|
|
922
|
+
schema:
|
|
923
|
+
type: string
|
|
924
|
+
enum: [google, github, discord, linkedin, facebook, microsoft]
|
|
925
|
+
requestBody:
|
|
926
|
+
required: true
|
|
927
|
+
content:
|
|
928
|
+
application/json:
|
|
929
|
+
schema:
|
|
930
|
+
type: object
|
|
931
|
+
properties:
|
|
932
|
+
clientId:
|
|
933
|
+
type: string
|
|
934
|
+
clientSecret:
|
|
935
|
+
type: string
|
|
936
|
+
redirectUri:
|
|
937
|
+
type: string
|
|
938
|
+
scopes:
|
|
939
|
+
type: array
|
|
940
|
+
items:
|
|
941
|
+
type: string
|
|
942
|
+
useSharedKey:
|
|
943
|
+
type: boolean
|
|
944
|
+
responses:
|
|
945
|
+
'200':
|
|
946
|
+
description: Configuration updated
|
|
947
|
+
content:
|
|
948
|
+
application/json:
|
|
949
|
+
schema:
|
|
950
|
+
$ref: '#/components/schemas/OAuthConfig'
|
|
951
|
+
'400':
|
|
952
|
+
description: Invalid request
|
|
953
|
+
'401':
|
|
954
|
+
description: Unauthorized
|
|
955
|
+
'403':
|
|
956
|
+
description: Forbidden - Admin only
|
|
957
|
+
'404':
|
|
958
|
+
description: Configuration not found
|
|
959
|
+
|
|
960
|
+
delete:
|
|
961
|
+
summary: Delete OAuth configuration
|
|
962
|
+
description: Delete OAuth provider configuration (admin only)
|
|
963
|
+
tags:
|
|
964
|
+
- Admin
|
|
965
|
+
security:
|
|
966
|
+
- bearerAuth: []
|
|
967
|
+
parameters:
|
|
968
|
+
- name: provider
|
|
969
|
+
in: path
|
|
970
|
+
required: true
|
|
971
|
+
schema:
|
|
972
|
+
type: string
|
|
973
|
+
enum: [google, github, discord, linkedin, facebook, microsoft]
|
|
974
|
+
responses:
|
|
975
|
+
'200':
|
|
976
|
+
description: Configuration deleted
|
|
977
|
+
content:
|
|
978
|
+
application/json:
|
|
979
|
+
schema:
|
|
980
|
+
type: object
|
|
981
|
+
properties:
|
|
982
|
+
success:
|
|
983
|
+
type: boolean
|
|
984
|
+
message:
|
|
985
|
+
type: string
|
|
986
|
+
'401':
|
|
987
|
+
description: Unauthorized
|
|
988
|
+
'403':
|
|
989
|
+
description: Forbidden - Admin only
|
|
990
|
+
'404':
|
|
991
|
+
description: Configuration not found
|
|
992
|
+
|
|
993
|
+
/api/auth/oauth/{provider}:
|
|
994
|
+
get:
|
|
995
|
+
summary: Initiate OAuth flow
|
|
996
|
+
description: Generate OAuth authorization URL for any supported provider
|
|
997
|
+
tags:
|
|
998
|
+
- Client
|
|
999
|
+
parameters:
|
|
1000
|
+
- name: provider
|
|
1001
|
+
in: path
|
|
1002
|
+
required: true
|
|
1003
|
+
schema:
|
|
1004
|
+
type: string
|
|
1005
|
+
enum: [google, github, discord, linkedin, facebook, microsoft]
|
|
1006
|
+
- name: redirect_uri
|
|
440
1007
|
in: query
|
|
1008
|
+
required: true
|
|
441
1009
|
schema:
|
|
442
1010
|
type: string
|
|
443
|
-
|
|
1011
|
+
format: uri
|
|
1012
|
+
description: URL to redirect after authentication
|
|
1013
|
+
responses:
|
|
1014
|
+
'200':
|
|
1015
|
+
description: OAuth authorization URL
|
|
1016
|
+
content:
|
|
1017
|
+
application/json:
|
|
1018
|
+
schema:
|
|
1019
|
+
type: object
|
|
1020
|
+
properties:
|
|
1021
|
+
authUrl:
|
|
1022
|
+
type: string
|
|
1023
|
+
format: uri
|
|
1024
|
+
'400':
|
|
1025
|
+
description: Invalid request or provider not supported
|
|
1026
|
+
'500':
|
|
1027
|
+
description: OAuth not configured
|
|
1028
|
+
|
|
1029
|
+
/api/auth/oauth/shared/callback/{state}:
|
|
1030
|
+
get:
|
|
1031
|
+
summary: Shared OAuth callback handler
|
|
1032
|
+
description: Handles OAuth callbacks from InsForge Cloud shared OAuth
|
|
1033
|
+
tags:
|
|
1034
|
+
- Client
|
|
1035
|
+
parameters:
|
|
1036
|
+
- name: state
|
|
1037
|
+
in: path
|
|
1038
|
+
required: true
|
|
1039
|
+
schema:
|
|
1040
|
+
type: string
|
|
1041
|
+
description: JWT state parameter
|
|
1042
|
+
- name: success
|
|
1043
|
+
in: query
|
|
1044
|
+
schema:
|
|
1045
|
+
type: string
|
|
1046
|
+
description: Success flag
|
|
1047
|
+
- name: error
|
|
1048
|
+
in: query
|
|
1049
|
+
schema:
|
|
1050
|
+
type: string
|
|
1051
|
+
description: Error message
|
|
1052
|
+
- name: payload
|
|
1053
|
+
in: query
|
|
1054
|
+
schema:
|
|
1055
|
+
type: string
|
|
1056
|
+
description: Base64 encoded user payload
|
|
444
1057
|
responses:
|
|
445
1058
|
'302':
|
|
446
|
-
description: Redirect with access token
|
|
1059
|
+
description: Redirect to application with access token or error
|
|
447
1060
|
headers:
|
|
448
1061
|
Location:
|
|
449
1062
|
schema:
|
|
@@ -453,7 +1066,7 @@ paths:
|
|
|
453
1066
|
/api/auth/oauth/{provider}/callback:
|
|
454
1067
|
get:
|
|
455
1068
|
summary: Provider-specific OAuth callback
|
|
456
|
-
description:
|
|
1069
|
+
description: OAuth callback endpoint for provider-specific flows
|
|
457
1070
|
tags:
|
|
458
1071
|
- Client
|
|
459
1072
|
parameters:
|
|
@@ -462,22 +1075,32 @@ paths:
|
|
|
462
1075
|
required: true
|
|
463
1076
|
schema:
|
|
464
1077
|
type: string
|
|
465
|
-
enum: [google, github]
|
|
1078
|
+
enum: [google, github, discord, linkedin, facebook, microsoft]
|
|
466
1079
|
- name: code
|
|
467
1080
|
in: query
|
|
468
1081
|
schema:
|
|
469
1082
|
type: string
|
|
1083
|
+
description: Authorization code from OAuth provider
|
|
470
1084
|
- name: state
|
|
471
1085
|
in: query
|
|
1086
|
+
required: true
|
|
472
1087
|
schema:
|
|
473
1088
|
type: string
|
|
1089
|
+
description: JWT state with redirect URI
|
|
474
1090
|
- name: token
|
|
475
1091
|
in: query
|
|
476
1092
|
schema:
|
|
477
1093
|
type: string
|
|
1094
|
+
description: Direct ID token (for some providers)
|
|
478
1095
|
responses:
|
|
479
1096
|
'302':
|
|
480
|
-
description: Redirect with access token
|
|
1097
|
+
description: Redirect to application with access token
|
|
1098
|
+
headers:
|
|
1099
|
+
Location:
|
|
1100
|
+
schema:
|
|
1101
|
+
type: string
|
|
1102
|
+
format: uri
|
|
1103
|
+
description: Redirect URL with access_token, user_id, email, and name query params
|
|
481
1104
|
|
|
482
1105
|
components:
|
|
483
1106
|
securitySchemes:
|
|
@@ -489,8 +1112,66 @@ components:
|
|
|
489
1112
|
type: apiKey
|
|
490
1113
|
in: header
|
|
491
1114
|
name: x-api-key
|
|
492
|
-
|
|
1115
|
+
|
|
493
1116
|
schemas:
|
|
1117
|
+
UserResponse:
|
|
1118
|
+
type: object
|
|
1119
|
+
properties:
|
|
1120
|
+
id:
|
|
1121
|
+
type: string
|
|
1122
|
+
format: uuid
|
|
1123
|
+
email:
|
|
1124
|
+
type: string
|
|
1125
|
+
format: email
|
|
1126
|
+
name:
|
|
1127
|
+
type: string
|
|
1128
|
+
emailVerified:
|
|
1129
|
+
type: boolean
|
|
1130
|
+
identities:
|
|
1131
|
+
type: array
|
|
1132
|
+
items:
|
|
1133
|
+
type: object
|
|
1134
|
+
properties:
|
|
1135
|
+
provider:
|
|
1136
|
+
type: string
|
|
1137
|
+
providerType:
|
|
1138
|
+
type: string
|
|
1139
|
+
createdAt:
|
|
1140
|
+
type: string
|
|
1141
|
+
format: date-time
|
|
1142
|
+
updatedAt:
|
|
1143
|
+
type: string
|
|
1144
|
+
format: date-time
|
|
1145
|
+
|
|
1146
|
+
OAuthConfig:
|
|
1147
|
+
type: object
|
|
1148
|
+
properties:
|
|
1149
|
+
id:
|
|
1150
|
+
type: string
|
|
1151
|
+
format: uuid
|
|
1152
|
+
provider:
|
|
1153
|
+
type: string
|
|
1154
|
+
enum: [google, github, discord, linkedin, facebook, microsoft]
|
|
1155
|
+
clientId:
|
|
1156
|
+
type: string
|
|
1157
|
+
nullable: true
|
|
1158
|
+
redirectUri:
|
|
1159
|
+
type: string
|
|
1160
|
+
nullable: true
|
|
1161
|
+
scopes:
|
|
1162
|
+
type: array
|
|
1163
|
+
items:
|
|
1164
|
+
type: string
|
|
1165
|
+
nullable: true
|
|
1166
|
+
useSharedKey:
|
|
1167
|
+
type: boolean
|
|
1168
|
+
createdAt:
|
|
1169
|
+
type: string
|
|
1170
|
+
format: date-time
|
|
1171
|
+
updatedAt:
|
|
1172
|
+
type: string
|
|
1173
|
+
format: date-time
|
|
1174
|
+
|
|
494
1175
|
AuthRecord:
|
|
495
1176
|
type: object
|
|
496
1177
|
properties:
|
|
@@ -509,7 +1190,7 @@ components:
|
|
|
509
1190
|
updatedAt:
|
|
510
1191
|
type: string
|
|
511
1192
|
format: date-time
|
|
512
|
-
|
|
1193
|
+
|
|
513
1194
|
ProfileRecord:
|
|
514
1195
|
type: object
|
|
515
1196
|
properties:
|
|
@@ -537,7 +1218,7 @@ components:
|
|
|
537
1218
|
updatedAt:
|
|
538
1219
|
type: string
|
|
539
1220
|
format: date-time
|
|
540
|
-
|
|
1221
|
+
|
|
541
1222
|
ErrorResponse:
|
|
542
1223
|
type: object
|
|
543
1224
|
required:
|
|
@@ -560,4 +1241,4 @@ components:
|
|
|
560
1241
|
nextActions:
|
|
561
1242
|
type: string
|
|
562
1243
|
description: Suggested action to resolve the error
|
|
563
|
-
example: "Please use a different email address"
|
|
1244
|
+
example: "Please use a different email address"
|