insforge 0.3.3 → 1.3.0
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/.dockerignore +60 -57
- package/.env.example +84 -49
- package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -83
- package/.github/ISSUE_TEMPLATE/config.yml +11 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -79
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
- package/.github/copilot-instructions.md +146 -146
- package/.github/workflows/build-image.yml +66 -65
- package/.github/workflows/ci-premerge-check.yml +23 -23
- package/.github/workflows/e2e.yml +63 -0
- package/.github/workflows/lint-and-format.yml +32 -32
- package/.prettierignore +64 -64
- package/CHANGELOG.md +44 -3
- package/CLAUDE_PLUGIN.md +104 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +125 -125
- package/Dockerfile +30 -27
- package/GITHUB_OAUTH_SETUP.md +49 -49
- package/GOOGLE_OAUTH_SETUP.md +148 -148
- package/LICENSE +201 -201
- package/README.md +182 -134
- package/assets/Dark.svg +23 -23
- 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 +117 -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 +60 -0
- package/auth/src/pages/SignUpPage.tsx +60 -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 +78 -75
- 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} +22 -26
- package/backend/src/api/routes/auth/index.routes.ts +667 -0
- package/backend/src/api/routes/auth/oauth.routes.ts +473 -0
- package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +128 -65
- package/backend/src/api/routes/database/index.routes.ts +90 -0
- package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +26 -12
- package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +6 -23
- package/backend/src/api/routes/docs/index.routes.ts +75 -0
- package/backend/src/api/routes/email/index.routes.ts +35 -0
- package/backend/src/api/routes/functions/index.routes.ts +194 -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} +33 -31
- package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
- package/backend/src/api/routes/realtime/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
- package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
- package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
- package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +48 -61
- package/backend/src/api/routes/usage/index.routes.ts +91 -0
- package/backend/src/infra/config/app.config.ts +51 -0
- package/backend/src/infra/database/database.manager.ts +182 -0
- package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +141 -141
- package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +40 -40
- package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +29 -29
- package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +55 -55
- package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +23 -23
- package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +29 -29
- package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +24 -24
- package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +1 -1
- package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +76 -76
- package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +23 -23
- package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +93 -93
- package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +15 -15
- package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +7 -7
- 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/infra/database/migrations/017_create-realtime-schema.sql +233 -0
- package/backend/src/infra/realtime/realtime.manager.ts +246 -0
- package/backend/src/infra/realtime/webhook-sender.ts +82 -0
- package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
- package/backend/src/infra/security/token.manager.ts +219 -0
- package/backend/src/infra/socket/socket.manager.ts +522 -0
- package/backend/src/providers/ai/openrouter.provider.ts +380 -0
- package/backend/src/providers/email/base.provider.ts +38 -0
- package/backend/src/providers/email/cloud.provider.ts +271 -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/apple.provider.ts +266 -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 +8 -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 +317 -288
- 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 +1150 -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 +802 -0
- package/backend/src/services/database/database.service.ts +127 -0
- package/backend/src/services/email/email.service.ts +73 -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/services/realtime/index.ts +3 -0
- package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
- package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
- package/backend/src/services/realtime/realtime-message.service.ts +260 -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 +77 -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/types/realtime.ts +18 -0
- package/backend/src/{core/socket/types.ts → types/socket.ts} +11 -36
- package/backend/src/utils/cookies.ts +35 -0
- package/backend/src/utils/environment.ts +9 -3
- package/backend/src/utils/logger.ts +20 -2
- package/backend/src/utils/s3-config-loader.ts +64 -0
- package/backend/src/utils/seed.ts +301 -205
- package/backend/src/utils/sql-parser.ts +91 -1
- package/backend/src/utils/utils.ts +114 -0
- package/backend/src/utils/validations.ts +40 -4
- package/backend/tests/README.md +133 -133
- package/backend/tests/cleanup-all-test-data.sh +230 -230
- package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
- package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
- 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 +143 -143
- package/backend/tests/local/test-database-router.sh +222 -222
- package/backend/tests/local/test-e2e.sh +240 -240
- package/backend/tests/local/test-fk-errors.sh +96 -96
- package/backend/tests/local/test-functions.sh +123 -0
- package/backend/tests/local/test-id-field.sh +200 -200
- package/backend/tests/local/test-logs.sh +132 -0
- package/backend/tests/local/test-public-bucket.sh +264 -264
- package/backend/tests/local/test-secrets.sh +249 -247
- package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
- package/backend/tests/local/test-traditional-rest.sh +208 -208
- package/backend/tests/manual/README.md +50 -50
- package/backend/tests/manual/create-large-table-simple.sql +10 -10
- package/backend/tests/manual/seed-large-table.sql +100 -100
- package/backend/tests/manual/setup-large-table-extras.sql +33 -33
- package/backend/tests/manual/test-bulk-upsert.sh +409 -409
- package/backend/tests/manual/test-database-advance.sh +296 -296
- package/backend/tests/manual/test-postgrest-stability.sh +191 -191
- package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
- package/backend/tests/manual/test-rawsql-modes.sh +244 -0
- package/backend/tests/manual/test-universal-storage.sh +263 -263
- package/backend/tests/manual/test-users.sql +17 -17
- package/backend/tests/run-all-tests.sh +139 -139
- package/backend/tests/setup.ts +0 -0
- package/backend/tests/test-config.sh +338 -302
- package/backend/tests/unit/analyze-query.test.ts +697 -0
- 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 +22 -22
- 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 +204 -144
- package/docker-compose.yml +232 -167
- package/docker-init/db/db-init.sql +97 -125
- package/docker-init/db/jwt.sql +5 -5
- package/docker-init/db/postgresql.conf +16 -16
- package/docker-init/logs/vector.yml +236 -0
- package/docs/README.md +44 -0
- package/docs/agent-docs/real-time.md +269 -0
- package/docs/changelog.mdx +119 -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/email/architecture.mdx +101 -0
- package/docs/core-concepts/email/sdk.mdx +53 -0
- package/docs/core-concepts/functions/architecture.mdx +105 -0
- package/docs/core-concepts/functions/sdk.mdx +184 -0
- package/docs/core-concepts/realtime/architecture.mdx +446 -0
- package/docs/core-concepts/realtime/sdk.mdx +409 -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/deprecated/insforge-auth-api.md +214 -214
- package/docs/deprecated/insforge-auth-sdk.md +99 -99
- package/docs/deprecated/insforge-db-api.md +358 -358
- package/docs/deprecated/insforge-db-sdk.md +139 -139
- package/docs/deprecated/insforge-debug-sdk.md +156 -156
- package/docs/deprecated/insforge-debug.md +64 -64
- package/docs/deprecated/insforge-instructions.md +123 -123
- package/docs/deprecated/insforge-project.md +117 -117
- package/docs/deprecated/insforge-storage-api.md +278 -278
- package/docs/deprecated/insforge-storage-sdk.md +158 -158
- package/docs/docs.json +232 -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/dec-2025/ai-integration.png +0 -0
- package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
- package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
- package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
- package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
- package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -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 +89 -407
- package/docs/introduction.mdx +45 -0
- package/docs/logo/dark.svg +22 -0
- package/docs/logo/light.svg +20 -0
- package/docs/partnership.mdx +652 -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/examples/oauth/frontend-oauth-example.html +250 -250
- package/examples/response-examples.md +443 -443
- package/frontend/components.json +17 -17
- package/frontend/package.json +69 -63
- package/frontend/src/App.tsx +13 -82
- package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
- package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
- package/frontend/src/assets/icons/checked.svg +3 -3
- package/frontend/src/assets/icons/connected.svg +3 -0
- package/frontend/src/assets/icons/error.svg +3 -3
- package/frontend/src/assets/icons/loader.svg +9 -0
- package/frontend/src/assets/icons/pencil.svg +4 -4
- package/frontend/src/assets/icons/refresh.svg +4 -4
- package/frontend/src/assets/icons/step_active.svg +3 -3
- package/frontend/src/assets/icons/step_inactive.svg +11 -11
- package/frontend/src/assets/icons/warning.svg +3 -3
- package/frontend/src/assets/logos/apple.svg +4 -0
- package/frontend/src/assets/logos/claude_code.svg +3 -3
- package/frontend/src/assets/logos/cline.svg +6 -6
- package/frontend/src/assets/logos/cursor.svg +20 -20
- package/frontend/src/assets/logos/discord.svg +8 -8
- package/frontend/src/assets/logos/facebook.svg +3 -0
- package/frontend/src/assets/logos/gemini.svg +19 -19
- package/frontend/src/assets/logos/github.svg +5 -5
- package/frontend/src/assets/logos/google.svg +13 -13
- package/frontend/src/assets/logos/grok.svg +10 -10
- package/frontend/src/assets/logos/insforge_dark.svg +15 -15
- package/frontend/src/assets/logos/insforge_light.svg +15 -15
- 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/openai.svg +10 -10
- package/frontend/src/assets/logos/roo_code.svg +9 -9
- package/frontend/src/assets/logos/spotify.svg +17 -0
- package/frontend/src/assets/logos/tiktok.svg +6 -0
- package/frontend/src/assets/logos/trae.svg +3 -3
- package/frontend/src/assets/logos/windsurf.svg +10 -10
- 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 +131 -91
- 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/pages/AIPage.tsx +166 -0
- 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 +54 -30
- package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +50 -14
- package/frontend/src/features/auth/components/index.ts +5 -0
- package/frontend/src/features/auth/helpers.tsx +208 -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/pages/AuthMethodsPage.tsx +275 -0
- package/frontend/src/features/auth/pages/ConfigurationPage.tsx +395 -0
- package/frontend/src/features/auth/pages/UsersPage.tsx +257 -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/pages/DashboardPage.tsx +212 -0
- 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/SQLModal.tsx +75 -0
- package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
- package/frontend/src/features/database/components/TableForm.tsx +28 -19
- 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/useDatabase.ts +66 -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 +135 -0
- package/frontend/src/features/database/index.ts +7 -1
- package/frontend/src/features/database/pages/FunctionsPage.tsx +203 -0
- package/frontend/src/features/database/pages/IndexesPage.tsx +228 -0
- package/frontend/src/features/database/pages/PoliciesPage.tsx +237 -0
- package/frontend/src/features/database/pages/SQLEditorPage.tsx +382 -0
- package/frontend/src/features/database/{page/DatabasePage.tsx → pages/TablesPage.tsx} +168 -209
- package/frontend/src/features/database/pages/TemplatesPage.tsx +39 -0
- package/frontend/src/features/database/pages/TriggersPage.tsx +230 -0
- package/frontend/src/features/database/services/advance.service.ts +40 -0
- package/frontend/src/features/database/services/database.service.ts +33 -194
- package/frontend/src/features/database/services/record.service.ts +219 -0
- package/frontend/src/features/database/services/table.service.ts +58 -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/pages/FunctionsPage.tsx +148 -0
- package/frontend/src/features/functions/{components/SecretsContent.tsx → pages/SecretsPage.tsx} +19 -21
- 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/pages/CloudLoginPage.tsx +118 -0
- package/frontend/src/features/login/{page → pages}/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 +128 -0
- package/frontend/src/features/logs/index.ts +8 -2
- package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +91 -38
- package/frontend/src/features/logs/pages/LogsPage.tsx +152 -0
- package/frontend/src/features/logs/pages/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/realtime/components/ChannelRow.tsx +83 -0
- package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
- package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
- package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
- package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
- package/frontend/src/features/realtime/index.ts +11 -0
- package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
- package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
- package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
- package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
- 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 → pages}/StoragePage.tsx +41 -143
- 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/pages/VisualizerPage.tsx +97 -0
- 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 +123 -80
- 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 +99 -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 +207 -0
- package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
- package/frontend/src/lib/utils/utils.ts +32 -1
- package/frontend/src/vite-env.d.ts +1 -0
- package/frontend/tsconfig.json +25 -25
- package/frontend/tsconfig.node.json +9 -9
- package/frontend/vite.config.ts +5 -3
- package/functions/deno.json +24 -24
- package/functions/server.ts +315 -290
- 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 +715 -688
- package/openapi/auth.yaml +1244 -563
- package/openapi/email.yaml +158 -0
- package/openapi/functions.yaml +475 -475
- package/openapi/health.yaml +29 -29
- package/openapi/logs.yaml +223 -223
- package/openapi/metadata.yaml +177 -177
- package/openapi/realtime.yaml +699 -0
- package/openapi/records.yaml +381 -381
- package/openapi/secrets.yaml +370 -370
- package/openapi/storage.yaml +875 -875
- package/openapi/tables.yaml +463 -463
- package/package.json +97 -88
- package/shared-schemas/package.json +31 -31
- package/shared-schemas/src/ai-api.schema.ts +34 -58
- package/shared-schemas/src/ai.schema.ts +63 -54
- package/shared-schemas/src/auth-api.schema.ts +352 -193
- package/shared-schemas/src/auth.schema.ts +43 -7
- package/shared-schemas/src/cloud-events.schema.ts +57 -0
- package/shared-schemas/src/database-api.schema.ts +35 -4
- package/shared-schemas/src/database.schema.ts +40 -1
- package/shared-schemas/src/docs.schema.ts +26 -0
- package/shared-schemas/src/email-api.schema.ts +30 -0
- package/shared-schemas/src/index.ts +5 -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 +18 -4
- package/shared-schemas/src/realtime-api.schema.ts +111 -0
- package/shared-schemas/src/realtime.schema.ts +143 -0
- package/shared-schemas/tsconfig.json +21 -21
- package/tsconfig.json +7 -7
- 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/manager.ts +0 -178
- 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/socket/socket.ts +0 -388
- 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/ai/page/AIPage.tsx +0 -178
- 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/dashboard/page/DashboardPage.tsx +0 -194
- 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/functions/page/FunctionsPage.tsx +0 -28
- package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
- package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
- package/frontend/src/features/login/page/CloudLoginPage.tsx +0 -93
- 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/features/visualizer/page/VisualizerPage.tsx +0 -127
- 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/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import { ColumnType, type AuthConfigSchema } from '@insforge/shared-schemas';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Generates a user-friendly error message listing all password requirements
|
|
6
|
+
* @param config - Authentication configuration with password requirements
|
|
7
|
+
* @returns A formatted message listing all enabled password requirements
|
|
8
|
+
*/
|
|
9
|
+
export function getPasswordRequirementsMessage(config: AuthConfigSchema): string {
|
|
10
|
+
const requirements: string[] = [];
|
|
11
|
+
|
|
12
|
+
requirements.push(`at least ${config.passwordMinLength} characters long`);
|
|
13
|
+
|
|
14
|
+
if (config.requireNumber) {
|
|
15
|
+
requirements.push('at least one number');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (config.requireLowercase) {
|
|
19
|
+
requirements.push('at least one lowercase letter');
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (config.requireUppercase) {
|
|
23
|
+
requirements.push('at least one uppercase letter');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (config.requireSpecialChar) {
|
|
27
|
+
requirements.push('at least one special character');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return `Password must contain ${requirements.join(', ')}`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const convertSqlTypeToColumnType = (sqlType: string): ColumnType | string => {
|
|
34
|
+
switch (sqlType.toLowerCase()) {
|
|
35
|
+
case 'uuid':
|
|
36
|
+
return ColumnType.UUID;
|
|
37
|
+
case 'timestamptz':
|
|
38
|
+
case 'timestamp with time zone':
|
|
39
|
+
return ColumnType.DATETIME;
|
|
40
|
+
case 'date':
|
|
41
|
+
return ColumnType.DATE;
|
|
42
|
+
case 'integer':
|
|
43
|
+
case 'bigint':
|
|
44
|
+
case 'smallint':
|
|
45
|
+
case 'int':
|
|
46
|
+
case 'int2':
|
|
47
|
+
case 'int4':
|
|
48
|
+
case 'serial':
|
|
49
|
+
case 'serial2':
|
|
50
|
+
case 'serial4':
|
|
51
|
+
case 'serial8':
|
|
52
|
+
case 'smallserial':
|
|
53
|
+
case 'bigserial':
|
|
54
|
+
return ColumnType.INTEGER;
|
|
55
|
+
case 'double precision':
|
|
56
|
+
case 'real':
|
|
57
|
+
case 'numeric':
|
|
58
|
+
case 'float':
|
|
59
|
+
case 'float4':
|
|
60
|
+
case 'float8':
|
|
61
|
+
case 'decimal':
|
|
62
|
+
return ColumnType.FLOAT;
|
|
63
|
+
case 'boolean':
|
|
64
|
+
case 'bool':
|
|
65
|
+
return ColumnType.BOOLEAN;
|
|
66
|
+
case 'json':
|
|
67
|
+
case 'jsonb':
|
|
68
|
+
case 'array':
|
|
69
|
+
return ColumnType.JSON;
|
|
70
|
+
case 'text':
|
|
71
|
+
case 'varchar':
|
|
72
|
+
case 'char':
|
|
73
|
+
case 'character varying':
|
|
74
|
+
case 'character':
|
|
75
|
+
return ColumnType.STRING;
|
|
76
|
+
default:
|
|
77
|
+
return sqlType.slice(0, 5);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Generate a UUID v4
|
|
83
|
+
* @returns A UUID v4 string
|
|
84
|
+
*/
|
|
85
|
+
export function generateUUID(): string {
|
|
86
|
+
return crypto.randomUUID();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Generate a random numeric string of specified length
|
|
91
|
+
* @param length - The length of the numeric string to generate
|
|
92
|
+
* @returns A random string containing only digits (0-9)
|
|
93
|
+
*/
|
|
94
|
+
export function generateNumericCode(length: number): string {
|
|
95
|
+
// Generate each digit independently
|
|
96
|
+
let result = '';
|
|
97
|
+
for (let i = 0; i < length; i++) {
|
|
98
|
+
result += crypto.randomInt(0, 10).toString();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Generate a cryptographically secure random token
|
|
106
|
+
* @param bytes - Number of random bytes to generate (default: 32)
|
|
107
|
+
* @returns Hex-encoded string (length = bytes * 2 characters)
|
|
108
|
+
* @example
|
|
109
|
+
* generateSecureToken(32) // Returns 64-character hex string (256 bits entropy)
|
|
110
|
+
* generateSecureToken(16) // Returns 32-character hex string (128 bits entropy)
|
|
111
|
+
*/
|
|
112
|
+
export function generateSecureToken(bytes: number = 32): string {
|
|
113
|
+
return crypto.randomBytes(bytes).toString('hex');
|
|
114
|
+
}
|
|
@@ -1,10 +1,46 @@
|
|
|
1
|
-
import { AppError } from '@/api/
|
|
1
|
+
import { AppError } from '@/api/middlewares/error.js';
|
|
2
2
|
import { ERROR_CODES } from '@/types/error-constants.js';
|
|
3
|
+
import type { AuthConfigSchema } from '@insforge/shared-schemas';
|
|
3
4
|
|
|
4
5
|
export function validateEmail(email: string) {
|
|
5
6
|
return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(email);
|
|
6
7
|
}
|
|
7
8
|
|
|
9
|
+
/**
|
|
10
|
+
* Validates password against authentication configuration requirements
|
|
11
|
+
* @param password - The password to validate
|
|
12
|
+
* @param config - Authentication configuration with password requirements
|
|
13
|
+
* @returns true if password meets all requirements, false otherwise
|
|
14
|
+
*/
|
|
15
|
+
export function validatePassword(password: string, config: AuthConfigSchema): boolean {
|
|
16
|
+
// Check minimum length
|
|
17
|
+
if (password.length < config.passwordMinLength) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Check for number requirement
|
|
22
|
+
if (config.requireNumber && !/\d/.test(password)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Check for lowercase requirement
|
|
27
|
+
if (config.requireLowercase && !/[a-z]/.test(password)) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Check for uppercase requirement
|
|
32
|
+
if (config.requireUppercase && !/[A-Z]/.test(password)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Check for special character requirement
|
|
37
|
+
if (config.requireSpecialChar && !/[!@#$%^&*()_+\-=[\]{};\\|,.<>/?]/.test(password)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
|
|
8
44
|
/**
|
|
9
45
|
* Validates PostgreSQL identifier names (tables, columns, etc.)
|
|
10
46
|
* Prevents SQL injection and ensures valid PostgreSQL identifiers
|
|
@@ -25,7 +61,7 @@ const IDENTIFIER_REGEX = /^[^"\x00-\x1F\x7F]+$/;
|
|
|
25
61
|
* @throws AppError if invalid
|
|
26
62
|
*/
|
|
27
63
|
export function validateIdentifier(identifier: string, type: string = 'identifier'): boolean {
|
|
28
|
-
if (!identifier || identifier.trim()
|
|
64
|
+
if (!identifier || !identifier.trim()) {
|
|
29
65
|
throw new AppError(
|
|
30
66
|
`Invalid ${type} name: cannot be empty`,
|
|
31
67
|
400,
|
|
@@ -52,7 +88,7 @@ export function validateIdentifier(identifier: string, type: string = 'identifie
|
|
|
52
88
|
* @returns true if valid, false if invalid
|
|
53
89
|
*/
|
|
54
90
|
export function isValidIdentifier(identifier: string): boolean {
|
|
55
|
-
return Boolean(identifier && identifier.trim()
|
|
91
|
+
return Boolean(identifier && identifier.trim() && IDENTIFIER_REGEX.test(identifier));
|
|
56
92
|
}
|
|
57
93
|
|
|
58
94
|
/**
|
|
@@ -85,7 +121,7 @@ export function validateTableName(tableName: string): boolean {
|
|
|
85
121
|
* @returns Safe error message
|
|
86
122
|
*/
|
|
87
123
|
export function getIdentifierErrorMessage(identifier: string, type: string = 'identifier'): string {
|
|
88
|
-
if (!identifier || identifier.trim()
|
|
124
|
+
if (!identifier || !identifier.trim()) {
|
|
89
125
|
return `Invalid ${type} name: cannot be empty`;
|
|
90
126
|
}
|
|
91
127
|
if (!IDENTIFIER_REGEX.test(identifier)) {
|
package/backend/tests/README.md
CHANGED
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
# Insforge Backend Tests
|
|
2
|
-
|
|
3
|
-
This directory contains all test scripts for the Insforge backend.
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- Backend server running on `http://localhost:7130`
|
|
8
|
-
- Admin credentials: `admin@example.com` / `change-this-password`
|
|
9
|
-
- API key for storage operations
|
|
10
|
-
|
|
11
|
-
## Environment Variables
|
|
12
|
-
|
|
13
|
-
Set these before running tests:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Required for API authentication
|
|
17
|
-
export ACCESS_API_KEY="your_api_key_here"
|
|
18
|
-
|
|
19
|
-
# Optional - defaults shown
|
|
20
|
-
export ADMIN_EMAIL="admin@example.com"
|
|
21
|
-
export ADMIN_PASSWORD="change-this-password"
|
|
22
|
-
export TEST_API_BASE="http://localhost:7130/api"
|
|
23
|
-
|
|
24
|
-
# Required for cloud/S3 tests
|
|
25
|
-
export AWS_S3_BUCKET="your-s3-bucket"
|
|
26
|
-
export AWS_REGION="us-east-1"
|
|
27
|
-
export AWS_ACCESS_KEY_ID="your-access-key"
|
|
28
|
-
export AWS_SECRET_ACCESS_KEY="your-secret-key"
|
|
29
|
-
export APP_KEY="app12345" # 7-9 character tenant identifier
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Test Organization
|
|
33
|
-
|
|
34
|
-
Tests are organized into two categories:
|
|
35
|
-
|
|
36
|
-
### Local Tests (`./local/`)
|
|
37
|
-
Tests for local Docker deployment with local file storage:
|
|
38
|
-
- `test-auth-router.sh` - Authentication and JWT tests
|
|
39
|
-
- `test-database-router.sh` - Database CRUD operations
|
|
40
|
-
- `test-e2e.sh` - End-to-end workflows
|
|
41
|
-
- `test-public-bucket.sh` - Local storage bucket tests
|
|
42
|
-
- `test-config.sh` - Configuration management
|
|
43
|
-
- `test-oauth-config.sh` - OAuth configuration
|
|
44
|
-
- `comprehensive-curl-tests.sh` - Comprehensive API tests
|
|
45
|
-
|
|
46
|
-
### Cloud Tests (`./cloud/`)
|
|
47
|
-
Tests for cloud deployment with S3 multi-tenant storage:
|
|
48
|
-
- `test-s3-multitenant.sh` - S3 storage with APP_KEY folder structure
|
|
49
|
-
|
|
50
|
-
## Running Tests
|
|
51
|
-
|
|
52
|
-
### Run all tests
|
|
53
|
-
```bash
|
|
54
|
-
./run-all-tests.sh
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Run local tests only
|
|
58
|
-
```bash
|
|
59
|
-
cd local && for test in test-*.sh; do ./$test; done
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Run cloud tests only
|
|
63
|
-
```bash
|
|
64
|
-
cd cloud && for test in test-*.sh; do ./$test; done
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Run individual test
|
|
68
|
-
```bash
|
|
69
|
-
./local/test-auth-router.sh
|
|
70
|
-
./cloud/test-s3-multitenant.sh
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Test Data Cleanup
|
|
74
|
-
|
|
75
|
-
All tests automatically clean up after themselves by:
|
|
76
|
-
- Deleting test users (email prefix: `testuser_`)
|
|
77
|
-
- Removing test tables
|
|
78
|
-
- Deleting test storage buckets
|
|
79
|
-
|
|
80
|
-
### Manual cleanup
|
|
81
|
-
|
|
82
|
-
To remove ALL test data from the system:
|
|
83
|
-
|
|
84
|
-
```bash
|
|
85
|
-
./cleanup-all-test-data.sh
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
This will prompt for confirmation and then delete:
|
|
89
|
-
- All users with email prefix `testuser_`
|
|
90
|
-
- All tables containing `test_`, `temp_`, `_test`, `_temp`
|
|
91
|
-
- All buckets containing `test`, `temp`, `public-images-`, `private-docs-`
|
|
92
|
-
- All API keys with "test" in their name
|
|
93
|
-
|
|
94
|
-
## Test Configuration
|
|
95
|
-
|
|
96
|
-
All tests source `test-config.sh` which provides:
|
|
97
|
-
- Shared configuration and environment variables
|
|
98
|
-
- Color output utilities
|
|
99
|
-
- Automatic cleanup functions
|
|
100
|
-
- Error tracking
|
|
101
|
-
|
|
102
|
-
## Writing New Tests
|
|
103
|
-
|
|
104
|
-
1. Create a new shell script in the appropriate subdirectory (`local/` or `cloud/`)
|
|
105
|
-
2. Source the test configuration:
|
|
106
|
-
```bash
|
|
107
|
-
source "$SCRIPT_DIR/test-config.sh"
|
|
108
|
-
```
|
|
109
|
-
3. Register resources for cleanup:
|
|
110
|
-
```bash
|
|
111
|
-
register_test_user "$email"
|
|
112
|
-
register_test_table "$table_name"
|
|
113
|
-
register_test_bucket "$bucket_name"
|
|
114
|
-
```
|
|
115
|
-
4. Use utility functions:
|
|
116
|
-
```bash
|
|
117
|
-
print_success "Test passed"
|
|
118
|
-
print_fail "Test failed"
|
|
119
|
-
print_info "Running test..."
|
|
120
|
-
```
|
|
121
|
-
5. Tests will automatically clean up on exit
|
|
122
|
-
|
|
123
|
-
## Authentication
|
|
124
|
-
|
|
125
|
-
- **Auth endpoints** (users, profiles): Use JWT tokens via `Authorization: Bearer $token`
|
|
126
|
-
- **Database endpoints**: Use JWT tokens via `Authorization: Bearer $token`
|
|
127
|
-
- **Storage endpoints**: Use API keys via `x-api-key: $api_key`
|
|
128
|
-
|
|
129
|
-
## Exit Codes
|
|
130
|
-
|
|
131
|
-
- `0`: All tests passed
|
|
132
|
-
- `1`: One or more tests failed
|
|
133
|
-
|
|
1
|
+
# Insforge Backend Tests
|
|
2
|
+
|
|
3
|
+
This directory contains all test scripts for the Insforge backend.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Backend server running on `http://localhost:7130`
|
|
8
|
+
- Admin credentials: `admin@example.com` / `change-this-password`
|
|
9
|
+
- API key for storage operations
|
|
10
|
+
|
|
11
|
+
## Environment Variables
|
|
12
|
+
|
|
13
|
+
Set these before running tests:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Required for API authentication
|
|
17
|
+
export ACCESS_API_KEY="your_api_key_here"
|
|
18
|
+
|
|
19
|
+
# Optional - defaults shown
|
|
20
|
+
export ADMIN_EMAIL="admin@example.com"
|
|
21
|
+
export ADMIN_PASSWORD="change-this-password"
|
|
22
|
+
export TEST_API_BASE="http://localhost:7130/api"
|
|
23
|
+
|
|
24
|
+
# Required for cloud/S3 tests
|
|
25
|
+
export AWS_S3_BUCKET="your-s3-bucket"
|
|
26
|
+
export AWS_REGION="us-east-1"
|
|
27
|
+
export AWS_ACCESS_KEY_ID="your-access-key"
|
|
28
|
+
export AWS_SECRET_ACCESS_KEY="your-secret-key"
|
|
29
|
+
export APP_KEY="app12345" # 7-9 character tenant identifier
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Test Organization
|
|
33
|
+
|
|
34
|
+
Tests are organized into two categories:
|
|
35
|
+
|
|
36
|
+
### Local Tests (`./local/`)
|
|
37
|
+
Tests for local Docker deployment with local file storage:
|
|
38
|
+
- `test-auth-router.sh` - Authentication and JWT tests
|
|
39
|
+
- `test-database-router.sh` - Database CRUD operations
|
|
40
|
+
- `test-e2e.sh` - End-to-end workflows
|
|
41
|
+
- `test-public-bucket.sh` - Local storage bucket tests
|
|
42
|
+
- `test-config.sh` - Configuration management
|
|
43
|
+
- `test-oauth-config.sh` - OAuth configuration
|
|
44
|
+
- `comprehensive-curl-tests.sh` - Comprehensive API tests
|
|
45
|
+
|
|
46
|
+
### Cloud Tests (`./cloud/`)
|
|
47
|
+
Tests for cloud deployment with S3 multi-tenant storage:
|
|
48
|
+
- `test-s3-multitenant.sh` - S3 storage with APP_KEY folder structure
|
|
49
|
+
|
|
50
|
+
## Running Tests
|
|
51
|
+
|
|
52
|
+
### Run all tests
|
|
53
|
+
```bash
|
|
54
|
+
./run-all-tests.sh
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Run local tests only
|
|
58
|
+
```bash
|
|
59
|
+
cd local && for test in test-*.sh; do ./$test; done
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Run cloud tests only
|
|
63
|
+
```bash
|
|
64
|
+
cd cloud && for test in test-*.sh; do ./$test; done
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Run individual test
|
|
68
|
+
```bash
|
|
69
|
+
./local/test-auth-router.sh
|
|
70
|
+
./cloud/test-s3-multitenant.sh
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Test Data Cleanup
|
|
74
|
+
|
|
75
|
+
All tests automatically clean up after themselves by:
|
|
76
|
+
- Deleting test users (email prefix: `testuser_`)
|
|
77
|
+
- Removing test tables
|
|
78
|
+
- Deleting test storage buckets
|
|
79
|
+
|
|
80
|
+
### Manual cleanup
|
|
81
|
+
|
|
82
|
+
To remove ALL test data from the system:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
./cleanup-all-test-data.sh
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
This will prompt for confirmation and then delete:
|
|
89
|
+
- All users with email prefix `testuser_`
|
|
90
|
+
- All tables containing `test_`, `temp_`, `_test`, `_temp`
|
|
91
|
+
- All buckets containing `test`, `temp`, `public-images-`, `private-docs-`
|
|
92
|
+
- All API keys with "test" in their name
|
|
93
|
+
|
|
94
|
+
## Test Configuration
|
|
95
|
+
|
|
96
|
+
All tests source `test-config.sh` which provides:
|
|
97
|
+
- Shared configuration and environment variables
|
|
98
|
+
- Color output utilities
|
|
99
|
+
- Automatic cleanup functions
|
|
100
|
+
- Error tracking
|
|
101
|
+
|
|
102
|
+
## Writing New Tests
|
|
103
|
+
|
|
104
|
+
1. Create a new shell script in the appropriate subdirectory (`local/` or `cloud/`)
|
|
105
|
+
2. Source the test configuration:
|
|
106
|
+
```bash
|
|
107
|
+
source "$SCRIPT_DIR/test-config.sh"
|
|
108
|
+
```
|
|
109
|
+
3. Register resources for cleanup:
|
|
110
|
+
```bash
|
|
111
|
+
register_test_user "$email"
|
|
112
|
+
register_test_table "$table_name"
|
|
113
|
+
register_test_bucket "$bucket_name"
|
|
114
|
+
```
|
|
115
|
+
4. Use utility functions:
|
|
116
|
+
```bash
|
|
117
|
+
print_success "Test passed"
|
|
118
|
+
print_fail "Test failed"
|
|
119
|
+
print_info "Running test..."
|
|
120
|
+
```
|
|
121
|
+
5. Tests will automatically clean up on exit
|
|
122
|
+
|
|
123
|
+
## Authentication
|
|
124
|
+
|
|
125
|
+
- **Auth endpoints** (users, profiles): Use JWT tokens via `Authorization: Bearer $token`
|
|
126
|
+
- **Database endpoints**: Use JWT tokens via `Authorization: Bearer $token`
|
|
127
|
+
- **Storage endpoints**: Use API keys via `x-api-key: $api_key`
|
|
128
|
+
|
|
129
|
+
## Exit Codes
|
|
130
|
+
|
|
131
|
+
- `0`: All tests passed
|
|
132
|
+
- `1`: One or more tests failed
|
|
133
|
+
|
|
134
134
|
Tests track failures and return appropriate exit codes for CI/CD integration.
|