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,57 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
export const appRouteChangeEventSchema = z.object({
|
|
4
|
+
type: z.literal('APP_ROUTE_CHANGE'),
|
|
5
|
+
path: z.string(),
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
export const authSuccessEventSchema = z.object({
|
|
9
|
+
type: z.literal('AUTH_SUCCESS'),
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
export const authErrorEventSchema = z.object({
|
|
13
|
+
type: z.literal('AUTH_ERROR'),
|
|
14
|
+
message: z.string(),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export const mcpConnectionStatusEventSchema = z.object({
|
|
18
|
+
type: z.literal('MCP_CONNECTION_STATUS'),
|
|
19
|
+
connected: z.boolean(),
|
|
20
|
+
toolName: z.string(),
|
|
21
|
+
timestamp: z.union([z.number(), z.string()]),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const showOnboardingOverlayEventSchema = z.object({
|
|
25
|
+
type: z.literal('SHOW_ONBOARDING_OVERLAY'),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export const showSettingsOverlayEventSchema = z.object({
|
|
29
|
+
type: z.literal('SHOW_SETTINGS_OVERLAY'),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export const onboardingSuccessSchema = z.object({
|
|
33
|
+
type: z.literal('ONBOARDING_SUCCESS'),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
export const navigateToUsageSchema = z.object({
|
|
37
|
+
type: z.literal('NAVIGATE_TO_USAGE'),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
export const cloudEventSchema = z.discriminatedUnion('type', [
|
|
41
|
+
appRouteChangeEventSchema,
|
|
42
|
+
authSuccessEventSchema,
|
|
43
|
+
authErrorEventSchema,
|
|
44
|
+
mcpConnectionStatusEventSchema,
|
|
45
|
+
showOnboardingOverlayEventSchema,
|
|
46
|
+
showSettingsOverlayEventSchema,
|
|
47
|
+
onboardingSuccessSchema,
|
|
48
|
+
navigateToUsageSchema,
|
|
49
|
+
]);
|
|
50
|
+
|
|
51
|
+
export type AppRouteChangeEvent = z.infer<typeof appRouteChangeEventSchema>;
|
|
52
|
+
export type AuthSuccessEvent = z.infer<typeof authSuccessEventSchema>;
|
|
53
|
+
export type AuthErrorEvent = z.infer<typeof authErrorEventSchema>;
|
|
54
|
+
export type McpConnectionStatusEvent = z.infer<typeof mcpConnectionStatusEventSchema>;
|
|
55
|
+
export type CloudEvent = z.infer<typeof cloudEventSchema>;
|
|
56
|
+
export type ShowOnboardingOverlayEvent = z.infer<typeof showOnboardingOverlayEventSchema>;
|
|
57
|
+
export type ShowSettingsOverlayEvent = z.infer<typeof showSettingsOverlayEventSchema>;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
columnSchema,
|
|
4
|
+
foreignKeySchema,
|
|
5
|
+
tableSchema,
|
|
6
|
+
databaseFunctionSchema,
|
|
7
|
+
databaseIndexSchema,
|
|
8
|
+
databasePolicySchema,
|
|
9
|
+
databaseTriggerSchema,
|
|
10
|
+
} from './database.schema';
|
|
3
11
|
|
|
4
12
|
export const createTableRequestSchema = tableSchema
|
|
5
13
|
.pick({
|
|
@@ -79,11 +87,11 @@ export const deleteTableResponse = z.object({
|
|
|
79
87
|
// Raw SQL Schemas
|
|
80
88
|
export const rawSQLRequestSchema = z.object({
|
|
81
89
|
query: z.string().min(1, 'Query is required'),
|
|
82
|
-
params: z.array(z.
|
|
90
|
+
params: z.array(z.unknown()).optional(),
|
|
83
91
|
});
|
|
84
92
|
|
|
85
93
|
export const rawSQLResponseSchema = z.object({
|
|
86
|
-
rows: z.array(z.
|
|
94
|
+
rows: z.array(z.record(z.string(), z.unknown())),
|
|
87
95
|
rowCount: z.number().nullable(),
|
|
88
96
|
fields: z
|
|
89
97
|
.array(
|
|
@@ -160,7 +168,7 @@ export const exportJsonDataSchema = z.object({
|
|
|
160
168
|
oldTable: z.string().nullable(),
|
|
161
169
|
})
|
|
162
170
|
),
|
|
163
|
-
rows: z.array(z.
|
|
171
|
+
rows: z.array(z.record(z.string(), z.unknown())).optional(),
|
|
164
172
|
recordCount: z.number().optional(),
|
|
165
173
|
})
|
|
166
174
|
),
|
|
@@ -257,3 +265,26 @@ export type ImportDatabaseResponse = z.infer<typeof importResponseSchema>;
|
|
|
257
265
|
// Bulk Upsert Types
|
|
258
266
|
export type BulkUpsertRequest = z.infer<typeof bulkUpsertRequestSchema>;
|
|
259
267
|
export type BulkUpsertResponse = z.infer<typeof bulkUpsertResponseSchema>;
|
|
268
|
+
|
|
269
|
+
// Database Metadata Response Schemas
|
|
270
|
+
export const databaseFunctionsResponseSchema = z.object({
|
|
271
|
+
functions: z.array(databaseFunctionSchema),
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
export const databaseIndexesResponseSchema = z.object({
|
|
275
|
+
indexes: z.array(databaseIndexSchema),
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
export const databasePoliciesResponseSchema = z.object({
|
|
279
|
+
policies: z.array(databasePolicySchema),
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
export const databaseTriggersResponseSchema = z.object({
|
|
283
|
+
triggers: z.array(databaseTriggerSchema),
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
// Database Metadata Response Types
|
|
287
|
+
export type DatabaseFunctionsResponse = z.infer<typeof databaseFunctionsResponseSchema>;
|
|
288
|
+
export type DatabaseIndexesResponse = z.infer<typeof databaseIndexesResponseSchema>;
|
|
289
|
+
export type DatabasePoliciesResponse = z.infer<typeof databasePoliciesResponseSchema>;
|
|
290
|
+
export type DatabaseTriggersResponse = z.infer<typeof databaseTriggersResponseSchema>;
|
|
@@ -57,7 +57,7 @@ export const tableSchema = z.object({
|
|
|
57
57
|
.min(1, 'Table name cannot be empty')
|
|
58
58
|
.max(64, 'Table name must be less than 64 characters'),
|
|
59
59
|
columns: z.array(columnSchema).min(1, 'At least one column is required'),
|
|
60
|
-
recordCount: z.number().
|
|
60
|
+
recordCount: z.number().optional(),
|
|
61
61
|
createdAt: z.string().optional(),
|
|
62
62
|
updatedAt: z.string().optional(),
|
|
63
63
|
});
|
|
@@ -67,3 +67,42 @@ export type ColumnSchema = z.infer<typeof columnSchema>;
|
|
|
67
67
|
export type ForeignKeySchema = z.infer<typeof foreignKeySchema>;
|
|
68
68
|
export type OnUpdateActionSchema = z.infer<typeof onUpdateActionSchema>;
|
|
69
69
|
export type OnDeleteActionSchema = z.infer<typeof onDeleteActionSchema>;
|
|
70
|
+
|
|
71
|
+
// Database Metadata Object Schemas
|
|
72
|
+
export const databaseFunctionSchema = z.object({
|
|
73
|
+
functionName: z.string(),
|
|
74
|
+
functionDef: z.string(),
|
|
75
|
+
kind: z.string(),
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export const databaseIndexSchema = z.object({
|
|
79
|
+
tableName: z.string(),
|
|
80
|
+
indexName: z.string(),
|
|
81
|
+
indexDef: z.string(),
|
|
82
|
+
isUnique: z.boolean().nullable(),
|
|
83
|
+
isPrimary: z.boolean().nullable(),
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
export const databasePolicySchema = z.object({
|
|
87
|
+
tableName: z.string(),
|
|
88
|
+
policyName: z.string(),
|
|
89
|
+
cmd: z.string(),
|
|
90
|
+
roles: z.array(z.string()),
|
|
91
|
+
qual: z.string().nullable(),
|
|
92
|
+
withCheck: z.string().nullable(),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
export const databaseTriggerSchema = z.object({
|
|
96
|
+
tableName: z.string(),
|
|
97
|
+
triggerName: z.string(),
|
|
98
|
+
actionTiming: z.string(),
|
|
99
|
+
eventManipulation: z.string(),
|
|
100
|
+
actionOrientation: z.string(),
|
|
101
|
+
actionCondition: z.string().nullable(),
|
|
102
|
+
actionStatement: z.string(),
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
export type DatabaseFunction = z.infer<typeof databaseFunctionSchema>;
|
|
106
|
+
export type DatabaseIndex = z.infer<typeof databaseIndexSchema>;
|
|
107
|
+
export type DatabasePolicy = z.infer<typeof databasePolicySchema>;
|
|
108
|
+
export type DatabaseTrigger = z.infer<typeof databaseTriggerSchema>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
export const docTypeSchema = z
|
|
4
|
+
.enum([
|
|
5
|
+
'instructions',
|
|
6
|
+
'db-sdk',
|
|
7
|
+
'storage-sdk',
|
|
8
|
+
'functions-sdk',
|
|
9
|
+
'ai-integration-sdk',
|
|
10
|
+
'auth-components-react',
|
|
11
|
+
'real-time',
|
|
12
|
+
])
|
|
13
|
+
.describe(
|
|
14
|
+
`
|
|
15
|
+
Documentation type:
|
|
16
|
+
"instructions" (essential backend setup - use FIRST),
|
|
17
|
+
"db-sdk" (database operations),
|
|
18
|
+
"storage-sdk" (file storage),
|
|
19
|
+
"functions-sdk" (edge functions),
|
|
20
|
+
"auth-components-react" (authentication components for React+Vite applications),
|
|
21
|
+
"ai-integration-sdk" (AI features),
|
|
22
|
+
"real-time" (real-time pub/sub through WebSockets)
|
|
23
|
+
`
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
export type DocTypeSchema = z.infer<typeof docTypeSchema>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { emailSchema } from './auth.schema';
|
|
3
|
+
|
|
4
|
+
const emailOrEmails = z.union([
|
|
5
|
+
emailSchema,
|
|
6
|
+
z
|
|
7
|
+
.array(emailSchema)
|
|
8
|
+
.min(1, 'At least one email is required')
|
|
9
|
+
.max(50, 'Maximum 50 recipients allowed'),
|
|
10
|
+
]);
|
|
11
|
+
|
|
12
|
+
export const sendRawEmailRequestSchema = z.object({
|
|
13
|
+
to: emailOrEmails,
|
|
14
|
+
subject: z.string().trim().min(1, 'Subject is required').max(500, 'Subject too long'),
|
|
15
|
+
html: z.string().trim().min(1, 'HTML content is required'),
|
|
16
|
+
cc: emailOrEmails.optional(),
|
|
17
|
+
bcc: emailOrEmails.optional(),
|
|
18
|
+
from: z.string().trim().max(100, 'From name too long').optional(),
|
|
19
|
+
replyTo: z.string().email('Reply-To must be a valid email').optional(),
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
export type SendRawEmailRequest = z.infer<typeof sendRawEmailRequestSchema>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Response for POST /api/email/send-raw
|
|
26
|
+
* Empty on success - extend with optional fields later if needed
|
|
27
|
+
*/
|
|
28
|
+
export const sendEmailResponseSchema = z.object({});
|
|
29
|
+
|
|
30
|
+
export type SendEmailResponse = z.infer<typeof sendEmailResponseSchema>;
|
|
@@ -11,3 +11,8 @@ export * from './logs.schema';
|
|
|
11
11
|
export * from './logs-api.schema';
|
|
12
12
|
export * from './functions.schema';
|
|
13
13
|
export * from './functions-api.schema';
|
|
14
|
+
export * from './cloud-events.schema';
|
|
15
|
+
export * from './realtime.schema';
|
|
16
|
+
export * from './realtime-api.schema';
|
|
17
|
+
export * from './docs.schema';
|
|
18
|
+
export * from './email-api.schema';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { auditLogSchema } from './logs.schema';
|
|
2
|
+
import { auditLogSchema, logSchema } from './logs.schema';
|
|
3
3
|
|
|
4
4
|
export const getAuditLogsRequestSchema = z.object({
|
|
5
5
|
limit: z.number().default(100),
|
|
@@ -41,9 +41,15 @@ export const clearAuditLogsResponseSchema = z.object({
|
|
|
41
41
|
deleted: z.number(),
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
+
export const getLogsResponseSchema = z.object({
|
|
45
|
+
logs: z.array(logSchema),
|
|
46
|
+
total: z.number(),
|
|
47
|
+
});
|
|
48
|
+
|
|
44
49
|
export type GetAuditLogsRequest = z.infer<typeof getAuditLogsRequestSchema>;
|
|
45
50
|
export type GetAuditLogsResponse = z.infer<typeof getAuditLogsResponseSchema>;
|
|
46
51
|
export type GetAuditLogStatsRequest = z.infer<typeof getAuditLogStatsRequestSchema>;
|
|
47
52
|
export type GetAuditLogStatsResponse = z.infer<typeof getAuditLogStatsResponseSchema>;
|
|
48
53
|
export type ClearAuditLogsRequest = z.infer<typeof clearAuditLogsRequestSchema>;
|
|
49
54
|
export type ClearAuditLogsResponse = z.infer<typeof clearAuditLogsResponseSchema>;
|
|
55
|
+
export type GetLogsResponse = z.infer<typeof getLogsResponseSchema>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
+
// Audit log schemas
|
|
3
4
|
export const auditLogSchema = z.object({
|
|
4
5
|
id: z.string(),
|
|
5
6
|
actor: z.string(),
|
|
@@ -12,3 +13,28 @@ export const auditLogSchema = z.object({
|
|
|
12
13
|
});
|
|
13
14
|
|
|
14
15
|
export type AuditLogSchema = z.infer<typeof auditLogSchema>;
|
|
16
|
+
|
|
17
|
+
// System log schemas
|
|
18
|
+
export const logSourceSchema = z.object({
|
|
19
|
+
id: z.string(),
|
|
20
|
+
name: z.string(),
|
|
21
|
+
token: z.string(),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const logSchema = z.object({
|
|
25
|
+
id: z.string(),
|
|
26
|
+
eventMessage: z.string(),
|
|
27
|
+
timestamp: z.string(),
|
|
28
|
+
body: z.record(z.string(), z.unknown()),
|
|
29
|
+
source: z.string().optional(),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export const logStatsSchema = z.object({
|
|
33
|
+
source: z.string(),
|
|
34
|
+
count: z.number(),
|
|
35
|
+
lastActivity: z.string(),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export type LogSourceSchema = z.infer<typeof logSourceSchema>;
|
|
39
|
+
export type LogSchema = z.infer<typeof logSchema>;
|
|
40
|
+
export type LogStatsSchema = z.infer<typeof logStatsSchema>;
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { storageBucketSchema } from './storage.schema';
|
|
3
3
|
import { oAuthConfigSchema } from './auth.schema';
|
|
4
|
-
import {
|
|
4
|
+
import { realtimeChannelSchema } from './realtime.schema';
|
|
5
|
+
import { realtimePermissionsResponseSchema } from './realtime-api.schema';
|
|
5
6
|
|
|
6
7
|
export const authMetadataSchema = z.object({
|
|
7
8
|
oauths: z.array(oAuthConfigSchema),
|
|
8
9
|
});
|
|
9
10
|
|
|
10
11
|
export const databaseMetadataSchema = z.object({
|
|
11
|
-
tables:
|
|
12
|
-
|
|
12
|
+
tables: z.array(
|
|
13
|
+
z.object({
|
|
14
|
+
tableName: z.string(),
|
|
15
|
+
recordCount: z.number(),
|
|
16
|
+
})
|
|
17
|
+
),
|
|
18
|
+
totalSizeInGB: z.number(),
|
|
19
|
+
hint: z.string().optional(),
|
|
13
20
|
});
|
|
14
21
|
|
|
15
22
|
export const bucketMetadataSchema = storageBucketSchema.extend({
|
|
@@ -18,7 +25,7 @@ export const bucketMetadataSchema = storageBucketSchema.extend({
|
|
|
18
25
|
|
|
19
26
|
export const storageMetadataSchema = z.object({
|
|
20
27
|
buckets: z.array(bucketMetadataSchema),
|
|
21
|
-
|
|
28
|
+
totalSizeInGB: z.number(),
|
|
22
29
|
});
|
|
23
30
|
|
|
24
31
|
export const edgeFunctionMetadataSchema = z.object({
|
|
@@ -38,12 +45,18 @@ export const aiMetadataSchema = z.object({
|
|
|
38
45
|
),
|
|
39
46
|
});
|
|
40
47
|
|
|
48
|
+
export const realtimeMetadataSchema = z.object({
|
|
49
|
+
channels: z.array(realtimeChannelSchema),
|
|
50
|
+
permissions: realtimePermissionsResponseSchema,
|
|
51
|
+
});
|
|
52
|
+
|
|
41
53
|
export const appMetaDataSchema = z.object({
|
|
42
54
|
auth: authMetadataSchema,
|
|
43
55
|
database: databaseMetadataSchema,
|
|
44
56
|
storage: storageMetadataSchema,
|
|
45
57
|
aiIntegration: aiMetadataSchema.optional(),
|
|
46
58
|
functions: z.array(edgeFunctionMetadataSchema),
|
|
59
|
+
realtime: realtimeMetadataSchema.optional(),
|
|
47
60
|
version: z.string().optional(),
|
|
48
61
|
});
|
|
49
62
|
|
|
@@ -53,4 +66,5 @@ export type BucketMetadataSchema = z.infer<typeof bucketMetadataSchema>;
|
|
|
53
66
|
export type StorageMetadataSchema = z.infer<typeof storageMetadataSchema>;
|
|
54
67
|
export type EdgeFunctionMetadataSchema = z.infer<typeof edgeFunctionMetadataSchema>;
|
|
55
68
|
export type AIMetadataSchema = z.infer<typeof aiMetadataSchema>;
|
|
69
|
+
export type RealtimeMetadataSchema = z.infer<typeof realtimeMetadataSchema>;
|
|
56
70
|
export type AppMetadataSchema = z.infer<typeof appMetaDataSchema>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { realtimeChannelSchema, realtimeMessageSchema } from './realtime.schema';
|
|
3
|
+
|
|
4
|
+
// ============================================================================
|
|
5
|
+
// Channel CRUD Schemas
|
|
6
|
+
// ============================================================================
|
|
7
|
+
|
|
8
|
+
// Create Channel
|
|
9
|
+
export const createChannelRequestSchema = z.object({
|
|
10
|
+
pattern: z.string().min(1, 'Channel pattern is required'),
|
|
11
|
+
description: z.string().optional(),
|
|
12
|
+
webhookUrls: z.array(z.string().url()).optional(),
|
|
13
|
+
enabled: z.boolean().optional().default(true),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export const createChannelResponseSchema = realtimeChannelSchema;
|
|
17
|
+
|
|
18
|
+
export type CreateChannelRequest = z.infer<typeof createChannelRequestSchema>;
|
|
19
|
+
export type CreateChannelResponse = z.infer<typeof createChannelResponseSchema>;
|
|
20
|
+
|
|
21
|
+
// Update Channel
|
|
22
|
+
export const updateChannelRequestSchema = z.object({
|
|
23
|
+
pattern: z.string().min(1).optional(),
|
|
24
|
+
description: z.string().optional(),
|
|
25
|
+
webhookUrls: z.array(z.string().url()).optional(),
|
|
26
|
+
enabled: z.boolean().optional(),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export const updateChannelResponseSchema = realtimeChannelSchema;
|
|
30
|
+
|
|
31
|
+
export type UpdateChannelRequest = z.infer<typeof updateChannelRequestSchema>;
|
|
32
|
+
export type UpdateChannelResponse = z.infer<typeof updateChannelResponseSchema>;
|
|
33
|
+
|
|
34
|
+
// Get Channel
|
|
35
|
+
export const getChannelResponseSchema = realtimeChannelSchema;
|
|
36
|
+
|
|
37
|
+
export type GetChannelResponse = z.infer<typeof getChannelResponseSchema>;
|
|
38
|
+
|
|
39
|
+
// List Channels
|
|
40
|
+
export const listChannelsResponseSchema = z.array(realtimeChannelSchema);
|
|
41
|
+
|
|
42
|
+
export type ListChannelsResponse = z.infer<typeof listChannelsResponseSchema>;
|
|
43
|
+
|
|
44
|
+
// Delete Channel
|
|
45
|
+
export const deleteChannelResponseSchema = z.object({
|
|
46
|
+
message: z.string(),
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export type DeleteChannelResponse = z.infer<typeof deleteChannelResponseSchema>;
|
|
50
|
+
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// Message Schemas
|
|
53
|
+
// ============================================================================
|
|
54
|
+
|
|
55
|
+
// List Messages
|
|
56
|
+
export const listMessagesRequestSchema = z.object({
|
|
57
|
+
channelId: z.string().uuid().optional(),
|
|
58
|
+
eventName: z.string().optional(),
|
|
59
|
+
limit: z.coerce.number().int().min(1).max(1000).optional().default(100),
|
|
60
|
+
offset: z.coerce.number().int().min(0).optional().default(0),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
export const listMessagesResponseSchema = z.array(realtimeMessageSchema);
|
|
64
|
+
|
|
65
|
+
export type ListMessagesRequest = z.infer<typeof listMessagesRequestSchema>;
|
|
66
|
+
export type ListMessagesResponse = z.infer<typeof listMessagesResponseSchema>;
|
|
67
|
+
|
|
68
|
+
// Message Stats
|
|
69
|
+
export const messageStatsRequestSchema = z.object({
|
|
70
|
+
channelId: z.string().uuid().optional(),
|
|
71
|
+
since: z.coerce.date().optional(),
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export const messageStatsResponseSchema = z.object({
|
|
75
|
+
totalMessages: z.number().int().min(0),
|
|
76
|
+
whDeliveryRate: z.number().min(0).max(1),
|
|
77
|
+
topEvents: z.array(
|
|
78
|
+
z.object({
|
|
79
|
+
eventName: z.string(),
|
|
80
|
+
count: z.number().int().min(0),
|
|
81
|
+
})
|
|
82
|
+
),
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export type MessageStatsRequest = z.infer<typeof messageStatsRequestSchema>;
|
|
86
|
+
export type MessageStatsResponse = z.infer<typeof messageStatsResponseSchema>;
|
|
87
|
+
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// Permissions Schemas
|
|
90
|
+
// ============================================================================
|
|
91
|
+
|
|
92
|
+
export const rlsPolicySchema = z.object({
|
|
93
|
+
policyName: z.string(),
|
|
94
|
+
tableName: z.string(),
|
|
95
|
+
command: z.string(),
|
|
96
|
+
roles: z.array(z.string()),
|
|
97
|
+
using: z.string().nullable(),
|
|
98
|
+
withCheck: z.string().nullable(),
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
export const realtimePermissionsResponseSchema = z.object({
|
|
102
|
+
subscribe: z.object({
|
|
103
|
+
policies: z.array(rlsPolicySchema),
|
|
104
|
+
}),
|
|
105
|
+
publish: z.object({
|
|
106
|
+
policies: z.array(rlsPolicySchema),
|
|
107
|
+
}),
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
export type RlsPolicy = z.infer<typeof rlsPolicySchema>;
|
|
111
|
+
export type RealtimePermissionsResponse = z.infer<typeof realtimePermissionsResponseSchema>;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Sender Type
|
|
5
|
+
// ============================================================================
|
|
6
|
+
|
|
7
|
+
export const senderTypeSchema = z.enum(['system', 'user']);
|
|
8
|
+
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Channel Schema
|
|
11
|
+
// ============================================================================
|
|
12
|
+
|
|
13
|
+
export const realtimeChannelSchema = z.object({
|
|
14
|
+
id: z.string().uuid(),
|
|
15
|
+
pattern: z.string().min(1),
|
|
16
|
+
description: z.string().nullable(),
|
|
17
|
+
webhookUrls: z.array(z.string().url()).nullable(),
|
|
18
|
+
enabled: z.boolean(),
|
|
19
|
+
createdAt: z.string().datetime(),
|
|
20
|
+
updatedAt: z.string().datetime(),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export type RealtimeChannel = z.infer<typeof realtimeChannelSchema>;
|
|
24
|
+
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Message Schema
|
|
27
|
+
// ============================================================================
|
|
28
|
+
|
|
29
|
+
export const realtimeMessageSchema = z.object({
|
|
30
|
+
id: z.string().uuid(),
|
|
31
|
+
eventName: z.string().min(1),
|
|
32
|
+
channelId: z.string().uuid().nullable(),
|
|
33
|
+
channelName: z.string().min(1),
|
|
34
|
+
payload: z.record(z.string(), z.unknown()),
|
|
35
|
+
senderType: senderTypeSchema,
|
|
36
|
+
senderId: z.string().uuid().nullable(),
|
|
37
|
+
wsAudienceCount: z.number().int().min(0),
|
|
38
|
+
whAudienceCount: z.number().int().min(0),
|
|
39
|
+
whDeliveredCount: z.number().int().min(0),
|
|
40
|
+
createdAt: z.string().datetime(),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
export type RealtimeMessage = z.infer<typeof realtimeMessageSchema>;
|
|
44
|
+
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// WebSocket Event Payloads (for SDK/frontend)
|
|
47
|
+
// ============================================================================
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Payload for realtime:subscribe client event
|
|
51
|
+
*/
|
|
52
|
+
export const subscribeChannelPayloadSchema = z.object({
|
|
53
|
+
channel: z.string().min(1), // The resolved channel instance, e.g., "order:123"
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
export type SubscribeChannelPayload = z.infer<typeof subscribeChannelPayloadSchema>;
|
|
57
|
+
|
|
58
|
+
export const unsubscribeChannelPayloadSchema = z.object({
|
|
59
|
+
channel: z.string().min(1), // The resolved channel instance, e.g., "order:123"
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
export type UnsubscribeChannelPayload = z.infer<typeof unsubscribeChannelPayloadSchema>;
|
|
63
|
+
/**
|
|
64
|
+
* Payload for realtime:publish client event
|
|
65
|
+
*/
|
|
66
|
+
export const publishEventPayloadSchema = z.object({
|
|
67
|
+
channel: z.string().min(1),
|
|
68
|
+
event: z.string().min(1),
|
|
69
|
+
payload: z.record(z.string(), z.unknown()),
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
export type PublishEventPayload = z.infer<typeof publishEventPayloadSchema>;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Response for subscribe operations (used in Socket.IO ack callbacks)
|
|
76
|
+
*/
|
|
77
|
+
export const subscribeResponseSchema = z.discriminatedUnion('ok', [
|
|
78
|
+
z.object({
|
|
79
|
+
ok: z.literal(true),
|
|
80
|
+
channel: z.string().min(1),
|
|
81
|
+
}),
|
|
82
|
+
z.object({
|
|
83
|
+
ok: z.literal(false),
|
|
84
|
+
channel: z.string().min(1),
|
|
85
|
+
error: z.object({
|
|
86
|
+
code: z.string().min(1),
|
|
87
|
+
message: z.string().min(1),
|
|
88
|
+
}),
|
|
89
|
+
}),
|
|
90
|
+
]);
|
|
91
|
+
|
|
92
|
+
export type SubscribeResponse = z.infer<typeof subscribeResponseSchema>;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Payload for realtime:error server event (for unsolicited errors like publish failures)
|
|
96
|
+
*/
|
|
97
|
+
export const realtimeErrorPayloadSchema = z.object({
|
|
98
|
+
channel: z.string().optional(),
|
|
99
|
+
code: z.string().min(1),
|
|
100
|
+
message: z.string().min(1),
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
export type RealtimeErrorPayload = z.infer<typeof realtimeErrorPayloadSchema>;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Payload sent to webhook endpoints
|
|
107
|
+
*/
|
|
108
|
+
export const webhookMessageSchema = z.object({
|
|
109
|
+
messageId: z.string().uuid(),
|
|
110
|
+
channel: z.string().min(1),
|
|
111
|
+
eventName: z.string().min(1),
|
|
112
|
+
payload: z.record(z.string(), z.unknown()),
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
export type WebhookMessage = z.infer<typeof webhookMessageSchema>;
|
|
116
|
+
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Socket Message Schema
|
|
119
|
+
// ============================================================================
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Meta object included in all socket messages
|
|
123
|
+
*/
|
|
124
|
+
export const socketMessageMetaSchema = z.object({
|
|
125
|
+
channel: z.string().optional(), // Present for room broadcasts
|
|
126
|
+
messageId: z.string().uuid(),
|
|
127
|
+
senderType: senderTypeSchema,
|
|
128
|
+
senderId: z.string().uuid().optional(),
|
|
129
|
+
timestamp: z.string().datetime(),
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
export type SocketMessageMeta = z.infer<typeof socketMessageMetaSchema>;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Base socket message schema (meta + passthrough for payload)
|
|
136
|
+
*/
|
|
137
|
+
export const socketMessageSchema = z
|
|
138
|
+
.object({
|
|
139
|
+
meta: socketMessageMetaSchema,
|
|
140
|
+
})
|
|
141
|
+
.passthrough();
|
|
142
|
+
|
|
143
|
+
export type SocketMessage = z.infer<typeof socketMessageSchema>;
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"lib": ["ES2020"],
|
|
6
|
-
"moduleResolution": "bundler",
|
|
7
|
-
"resolveJsonModule": true,
|
|
8
|
-
"declaration": true,
|
|
9
|
-
"declarationMap": true,
|
|
10
|
-
"sourceMap": true,
|
|
11
|
-
"outDir": "./dist",
|
|
12
|
-
"rootDir": "./src",
|
|
13
|
-
"strict": true,
|
|
14
|
-
"esModuleInterop": true,
|
|
15
|
-
"skipLibCheck": true,
|
|
16
|
-
"forceConsistentCasingInFileNames": true,
|
|
17
|
-
"types": []
|
|
18
|
-
},
|
|
19
|
-
"include": ["src/**/*"],
|
|
20
|
-
"exclude": ["node_modules", "dist"]
|
|
21
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"lib": ["ES2020"],
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"resolveJsonModule": true,
|
|
8
|
+
"declaration": true,
|
|
9
|
+
"declarationMap": true,
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"outDir": "./dist",
|
|
12
|
+
"rootDir": "./src",
|
|
13
|
+
"strict": true,
|
|
14
|
+
"esModuleInterop": true,
|
|
15
|
+
"skipLibCheck": true,
|
|
16
|
+
"forceConsistentCasingInFileNames": true,
|
|
17
|
+
"types": []
|
|
18
|
+
},
|
|
19
|
+
"include": ["src/**/*"],
|
|
20
|
+
"exclude": ["node_modules", "dist"]
|
|
21
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
{
|
|
2
|
-
"files": [],
|
|
3
|
-
"references": [
|
|
4
|
-
{ "path": "./frontend" },
|
|
5
|
-
{ "path": "./backend" },
|
|
6
|
-
{ "path": "./shared-schemas" }
|
|
7
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"files": [],
|
|
3
|
+
"references": [
|
|
4
|
+
{ "path": "./frontend" },
|
|
5
|
+
{ "path": "./backend" },
|
|
6
|
+
{ "path": "./shared-schemas" }
|
|
7
|
+
]
|
|
8
8
|
}
|