insforge 1.2.10 → 1.4.8

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.
Files changed (506) hide show
  1. package/.claude-plugin/marketplace.json +20 -20
  2. package/.dockerignore +60 -60
  3. package/.env.example +83 -77
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +65 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -63
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +46 -44
  15. package/CLAUDE_PLUGIN.md +104 -104
  16. package/CODE_OF_CONDUCT.md +128 -128
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -30
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -182
  23. package/assets/Dark.svg +23 -23
  24. package/auth/package.json +30 -28
  25. package/auth/src/lib/broadcastService.ts +4 -4
  26. package/auth/src/lib/insforge.ts +8 -0
  27. package/auth/src/main.tsx +2 -4
  28. package/auth/src/pages/SignInPage.tsx +5 -2
  29. package/auth/src/pages/SignUpPage.tsx +5 -2
  30. package/auth/src/pages/VerifyEmailPage.tsx +18 -0
  31. package/auth/tsconfig.json +33 -32
  32. package/auth/tsconfig.node.json +11 -11
  33. package/backend/package.json +82 -75
  34. package/backend/src/api/middlewares/rate-limiters.ts +127 -127
  35. package/backend/src/api/routes/ai/index.routes.ts +475 -468
  36. package/backend/src/api/routes/auth/index.routes.ts +720 -570
  37. package/backend/src/api/routes/auth/oauth.routes.ts +478 -448
  38. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  39. package/backend/src/api/routes/database/index.routes.ts +80 -1
  40. package/backend/src/api/routes/database/records.routes.ts +48 -184
  41. package/backend/src/api/routes/database/rpc.routes.ts +69 -0
  42. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  43. package/backend/src/api/routes/deployments/index.routes.ts +192 -0
  44. package/backend/src/api/routes/docs/index.routes.ts +76 -76
  45. package/backend/src/api/routes/email/index.routes.ts +35 -0
  46. package/backend/src/api/routes/functions/index.routes.ts +21 -15
  47. package/backend/src/api/routes/metadata/index.routes.ts +38 -0
  48. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  49. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  50. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  51. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  52. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  53. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  54. package/backend/src/api/routes/webhooks/index.routes.ts +109 -0
  55. package/backend/src/infra/database/database.manager.ts +14 -11
  56. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  57. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  58. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  59. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  60. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  61. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  62. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  63. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  64. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  65. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  66. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  67. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  68. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  69. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  70. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  71. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  72. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  73. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  74. package/backend/src/infra/database/migrations/018_schema-rework.sql +441 -0
  75. package/backend/src/infra/database/migrations/019_create-deployments-table.sql +36 -0
  76. package/backend/src/infra/database/migrations/020_add-audio-modality.sql +11 -0
  77. package/backend/src/infra/database/migrations/bootstrap/bootstrap-migrations.js +103 -0
  78. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  79. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  80. package/backend/src/infra/security/token.manager.ts +216 -125
  81. package/backend/src/infra/socket/socket.manager.ts +198 -64
  82. package/backend/src/providers/ai/openrouter.provider.ts +24 -12
  83. package/backend/src/providers/database/base.provider.ts +39 -0
  84. package/backend/src/providers/database/cloud.provider.ts +159 -0
  85. package/backend/src/providers/deployments/vercel.provider.ts +516 -0
  86. package/backend/src/providers/email/base.provider.ts +4 -7
  87. package/backend/src/providers/email/cloud.provider.ts +84 -0
  88. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  89. package/backend/src/providers/oauth/index.ts +1 -0
  90. package/backend/src/server.ts +329 -284
  91. package/backend/src/services/ai/ai-config.service.ts +6 -6
  92. package/backend/src/services/ai/ai-model.service.ts +60 -60
  93. package/backend/src/services/ai/ai-usage.service.ts +7 -7
  94. package/backend/src/services/ai/chat-completion.service.ts +415 -220
  95. package/backend/src/services/ai/helpers.ts +64 -64
  96. package/backend/src/services/ai/image-generation.service.ts +3 -3
  97. package/backend/src/services/ai/index.ts +13 -13
  98. package/backend/src/services/auth/auth-config.service.ts +4 -4
  99. package/backend/src/services/auth/auth-otp.service.ts +6 -6
  100. package/backend/src/services/auth/auth.service.ts +148 -74
  101. package/backend/src/services/auth/index.ts +4 -4
  102. package/backend/src/services/auth/oauth-config.service.ts +12 -12
  103. package/backend/src/services/database/database-advance.service.ts +19 -55
  104. package/backend/src/services/database/database-table.service.ts +38 -94
  105. package/backend/src/services/database/database.service.ts +127 -0
  106. package/backend/src/services/database/postgrest-proxy.service.ts +165 -0
  107. package/backend/src/services/deployments/deployment.service.ts +693 -0
  108. package/backend/src/services/email/email.service.ts +5 -7
  109. package/backend/src/services/functions/function.service.ts +61 -41
  110. package/backend/src/services/logs/audit.service.ts +10 -10
  111. package/backend/src/services/realtime/index.ts +3 -0
  112. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  113. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  114. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  115. package/backend/src/services/secrets/secret.service.ts +101 -27
  116. package/backend/src/services/storage/storage.service.ts +30 -30
  117. package/backend/src/services/usage/usage.service.ts +6 -6
  118. package/backend/src/types/ai.ts +8 -0
  119. package/backend/src/types/auth.ts +16 -1
  120. package/backend/src/types/database.ts +2 -0
  121. package/backend/src/types/deployments.ts +33 -0
  122. package/backend/src/types/realtime.ts +18 -0
  123. package/backend/src/types/socket.ts +7 -31
  124. package/backend/src/types/storage.ts +1 -1
  125. package/backend/src/types/webhooks.ts +45 -0
  126. package/backend/src/utils/cookies.ts +34 -0
  127. package/backend/src/utils/environment.ts +0 -14
  128. package/backend/src/utils/s3-config-loader.ts +64 -0
  129. package/backend/src/utils/seed.ts +79 -43
  130. package/backend/src/utils/sql-parser.ts +216 -0
  131. package/backend/src/utils/utils.ts +114 -114
  132. package/backend/src/utils/validations.ts +10 -10
  133. package/backend/tests/README.md +133 -133
  134. package/backend/tests/cleanup-all-test-data.sh +230 -230
  135. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  136. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  137. package/backend/tests/local/test-ai-config.sh +129 -129
  138. package/backend/tests/local/test-ai-usage.sh +80 -80
  139. package/backend/tests/local/test-auth-router.sh +143 -143
  140. package/backend/tests/local/test-database-router.sh +222 -222
  141. package/backend/tests/local/test-e2e.sh +240 -240
  142. package/backend/tests/local/test-fk-errors.sh +96 -96
  143. package/backend/tests/local/test-functions.sh +123 -123
  144. package/backend/tests/local/test-id-field.sh +200 -200
  145. package/backend/tests/local/test-logs.sh +132 -132
  146. package/backend/tests/local/test-public-bucket.sh +264 -264
  147. package/backend/tests/local/test-rpc.sh +141 -0
  148. package/backend/tests/local/test-secrets.sh +249 -249
  149. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  150. package/backend/tests/local/test-traditional-rest.sh +208 -208
  151. package/backend/tests/manual/README.md +50 -50
  152. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  153. package/backend/tests/manual/seed-large-table.sql +100 -100
  154. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  155. package/backend/tests/manual/test-ai-model-plugins.sh +258 -0
  156. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  157. package/backend/tests/manual/test-database-advance.sh +296 -296
  158. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  159. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  160. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  161. package/backend/tests/manual/test-universal-storage.sh +263 -263
  162. package/backend/tests/manual/test-users.sql +17 -17
  163. package/backend/tests/run-all-tests.sh +139 -139
  164. package/backend/tests/setup.ts +0 -0
  165. package/backend/tests/test-config.sh +338 -338
  166. package/backend/tests/unit/analyze-query.test.ts +697 -0
  167. package/backend/tests/unit/database-advance.test.ts +326 -0
  168. package/backend/tests/unit/helpers.test.ts +2 -2
  169. package/backend/tsconfig.json +22 -22
  170. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  171. package/claude-plugin/README.md +133 -133
  172. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +273 -270
  173. package/docker-compose.prod.yml +204 -200
  174. package/docker-compose.yml +232 -228
  175. package/docker-init/db/db-init.sql +97 -97
  176. package/docker-init/db/jwt.sql +5 -5
  177. package/docker-init/db/postgresql.conf +16 -16
  178. package/docker-init/logs/vector.yml +236 -236
  179. package/docs/README.md +44 -44
  180. package/docs/agent-docs/deployment.md +79 -0
  181. package/docs/agent-docs/real-time.md +269 -0
  182. package/docs/changelog.mdx +212 -67
  183. package/docs/core-concepts/ai/architecture.mdx +350 -372
  184. package/docs/core-concepts/ai/sdk.mdx +238 -213
  185. package/docs/core-concepts/authentication/architecture.mdx +276 -278
  186. package/docs/core-concepts/authentication/sdk.mdx +710 -414
  187. package/docs/core-concepts/authentication/ui-components/customization.mdx +733 -529
  188. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +247 -221
  189. package/docs/core-concepts/authentication/ui-components/react-router.mdx +183 -184
  190. package/docs/core-concepts/authentication/ui-components/react.mdx +136 -129
  191. package/docs/core-concepts/database/architecture.mdx +292 -255
  192. package/docs/core-concepts/database/pgvector.mdx +138 -0
  193. package/docs/core-concepts/database/sdk.mdx +382 -382
  194. package/docs/core-concepts/deployments/architecture.mdx +152 -0
  195. package/docs/core-concepts/email/architecture.mdx +103 -0
  196. package/docs/core-concepts/email/sdk.mdx +53 -0
  197. package/docs/core-concepts/functions/architecture.mdx +105 -105
  198. package/docs/core-concepts/functions/sdk.mdx +183 -184
  199. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  200. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  201. package/docs/core-concepts/storage/architecture.mdx +243 -243
  202. package/docs/core-concepts/storage/sdk.mdx +253 -253
  203. package/docs/deployment/README.md +94 -94
  204. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  205. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  206. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  207. package/docs/deployment/deploy-to-render.md +441 -441
  208. package/docs/deprecated/insforge-auth-api.md +214 -214
  209. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  210. package/docs/deprecated/insforge-db-api.md +358 -358
  211. package/docs/deprecated/insforge-db-sdk.md +139 -139
  212. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  213. package/docs/deprecated/insforge-debug.md +64 -64
  214. package/docs/deprecated/insforge-instructions.md +123 -123
  215. package/docs/deprecated/insforge-project.md +117 -117
  216. package/docs/deprecated/insforge-storage-api.md +278 -278
  217. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  218. package/docs/docs.json +240 -210
  219. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  220. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  221. package/docs/examples/framework-guides/react.mdx +165 -165
  222. package/docs/examples/framework-guides/svelte.mdx +153 -153
  223. package/docs/examples/framework-guides/vue.mdx +159 -159
  224. package/docs/examples/overview.mdx +67 -67
  225. package/docs/favicon.png +0 -0
  226. package/docs/favicon.svg +4 -19
  227. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  228. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  229. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  230. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  231. package/docs/images/changelog/dec-2025/apple-oauth.mp4 +0 -0
  232. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  233. package/docs/images/changelog/dec-2025/moreModels.png +0 -0
  234. package/docs/images/changelog/dec-2025/multi-region.webp +0 -0
  235. package/docs/images/changelog/dec-2025/postgres-connection.webp +0 -0
  236. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  237. package/docs/images/changelog/dec-2025/realtime2.png +0 -0
  238. package/docs/images/icons/ai.svg +4 -4
  239. package/docs/images/logos/nextjs.svg +4 -4
  240. package/docs/images/logos/nuxt.svg +4 -4
  241. package/docs/images/logos/react.svg +5 -5
  242. package/docs/images/logos/svelte.svg +4 -4
  243. package/docs/images/logos/vue.svg +5 -5
  244. package/docs/images/mcp-setup/CC-MCP-1.mp4 +0 -0
  245. package/docs/images/mcp-setup/CC-MCP-2.mp4 +0 -0
  246. package/docs/images/mcp-setup/Cursor-MCP-1.mp4 +0 -0
  247. package/docs/images/mcp-setup/Cursor-MCP-2.mp4 +0 -0
  248. package/docs/images/mcp-setup/Cursor-MCP-3.mp4 +0 -0
  249. package/docs/images/mcp-setup/claude-code-connect.png +0 -0
  250. package/docs/images/mcp-setup/cline-1.png +0 -0
  251. package/docs/images/mcp-setup/cline-2.png +0 -0
  252. package/docs/images/mcp-setup/cline-3.png +0 -0
  253. package/docs/images/mcp-setup/connect-project.png +0 -0
  254. package/docs/images/mcp-setup/copilot-1.png +0 -0
  255. package/docs/images/mcp-setup/copilot-2.png +0 -0
  256. package/docs/images/mcp-setup/copilot-3.png +0 -0
  257. package/docs/images/mcp-setup/mcp-json-1.png +0 -0
  258. package/docs/images/mcp-setup/mcp-json-2.png +0 -0
  259. package/docs/images/mcp-setup/qoder-1.png +0 -0
  260. package/docs/images/mcp-setup/qoder-2.png +0 -0
  261. package/docs/images/mcp-setup/roocode-1.png +0 -0
  262. package/docs/images/mcp-setup/roocode-2.png +0 -0
  263. package/docs/images/mcp-setup/trae-1.png +0 -0
  264. package/docs/images/mcp-setup/trae-2.png +0 -0
  265. package/docs/images/mcp-setup/trae-3.png +0 -0
  266. package/docs/images/mcp-setup/trae-4.png +0 -0
  267. package/docs/images/mcp-setup/trae-5.png +0 -0
  268. package/docs/images/mcp-setup/windsurf-1.png +0 -0
  269. package/docs/images/mcp-setup/windsurf-2.png +0 -0
  270. package/docs/insforge-instructions-sdk.md +93 -88
  271. package/docs/introduction.mdx +46 -45
  272. package/docs/logo/dark.svg +22 -22
  273. package/docs/logo/light.svg +20 -20
  274. package/docs/mcp-setup.mdx +332 -0
  275. package/docs/oauth-server.mdx +563 -0
  276. package/docs/partnership.mdx +720 -646
  277. package/docs/quickstart.mdx +82 -82
  278. package/docs/showcase.mdx +52 -52
  279. package/docs/snippets/sdk-installation.mdx +21 -21
  280. package/docs/snippets/service-icons.mdx +27 -27
  281. package/docs/vscode-extension.mdx +74 -0
  282. package/eslint.config.js +1 -0
  283. package/examples/oauth/frontend-oauth-example.html +250 -250
  284. package/examples/response-examples.md +443 -443
  285. package/frontend/components.json +17 -17
  286. package/frontend/package.json +69 -69
  287. package/frontend/src/App.tsx +8 -3
  288. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  289. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  290. package/frontend/src/assets/icons/checked.svg +3 -3
  291. package/frontend/src/assets/icons/connected.svg +3 -3
  292. package/frontend/src/assets/icons/error.svg +3 -3
  293. package/frontend/src/assets/icons/loader.svg +9 -9
  294. package/frontend/src/assets/icons/pencil.svg +4 -4
  295. package/frontend/src/assets/icons/refresh.svg +4 -4
  296. package/frontend/src/assets/icons/step_active.svg +3 -3
  297. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  298. package/frontend/src/assets/icons/warning.svg +3 -3
  299. package/frontend/src/assets/logos/antigravity.svg +1 -0
  300. package/frontend/src/assets/logos/apple.svg +3 -3
  301. package/frontend/src/assets/logos/claude_code.svg +3 -3
  302. package/frontend/src/assets/logos/cline.svg +6 -6
  303. package/frontend/src/assets/logos/copilot.svg +10 -0
  304. package/frontend/src/assets/logos/cursor.svg +20 -20
  305. package/frontend/src/assets/logos/deepseek.svg +139 -0
  306. package/frontend/src/assets/logos/discord.svg +8 -8
  307. package/frontend/src/assets/logos/facebook.svg +3 -3
  308. package/frontend/src/assets/logos/gemini.svg +19 -19
  309. package/frontend/src/assets/logos/github.svg +5 -5
  310. package/frontend/src/assets/logos/google.svg +13 -13
  311. package/frontend/src/assets/logos/grok.svg +10 -10
  312. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  313. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  314. package/frontend/src/assets/logos/instagram.svg +1 -1
  315. package/frontend/src/assets/logos/kiro.svg +9 -0
  316. package/frontend/src/assets/logos/linkedin.svg +3 -3
  317. package/frontend/src/assets/logos/openai.svg +10 -10
  318. package/frontend/src/assets/logos/qoder.svg +4 -0
  319. package/frontend/src/assets/logos/qwen.svg +15 -0
  320. package/frontend/src/assets/logos/roo_code.svg +9 -9
  321. package/frontend/src/assets/logos/spotify.svg +16 -16
  322. package/frontend/src/assets/logos/tiktok.svg +5 -5
  323. package/frontend/src/assets/logos/trae.svg +3 -3
  324. package/frontend/src/assets/logos/windsurf.svg +10 -10
  325. package/frontend/src/assets/logos/x.svg +3 -3
  326. package/frontend/src/components/CodeBlock.tsx +2 -2
  327. package/frontend/src/components/ConnectCTA.tsx +3 -2
  328. package/frontend/src/components/datagrid/DataGrid.tsx +90 -62
  329. package/frontend/src/components/datagrid/datagridTypes.tsx +2 -1
  330. package/frontend/src/components/datagrid/index.ts +1 -1
  331. package/frontend/src/components/index.ts +0 -1
  332. package/frontend/src/components/layout/AppHeader.tsx +13 -37
  333. package/frontend/src/components/layout/AppSidebar.tsx +85 -100
  334. package/frontend/src/components/layout/Layout.tsx +34 -32
  335. package/frontend/src/components/layout/PrimaryMenu.tsx +12 -4
  336. package/frontend/src/components/radix/Select.tsx +151 -151
  337. package/frontend/src/features/ai/components/AIConfigCard.tsx +200 -200
  338. package/frontend/src/features/ai/components/AIEmptyState.tsx +23 -23
  339. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +102 -101
  340. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -135
  341. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -51
  342. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -118
  343. package/frontend/src/features/ai/components/index.ts +6 -6
  344. package/frontend/src/features/ai/helpers.ts +147 -141
  345. package/frontend/src/features/ai/{page → pages}/AIPage.tsx +166 -166
  346. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -96
  347. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  348. package/frontend/src/features/auth/components/UsersDataGrid.tsx +61 -31
  349. package/frontend/src/features/auth/components/index.ts +5 -5
  350. package/frontend/src/features/auth/helpers.tsx +8 -0
  351. package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +275 -275
  352. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  353. package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +1 -1
  354. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +0 -2
  355. package/frontend/src/features/database/components/ForeignKeyCell.tsx +38 -11
  356. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +18 -8
  357. package/frontend/src/features/database/components/LinkRecordModal.tsx +61 -13
  358. package/frontend/src/features/database/components/RecordFormField.tsx +1 -1
  359. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  360. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  361. package/frontend/src/features/database/components/TableSidebar.tsx +0 -3
  362. package/frontend/src/features/database/components/TablesEmptyState.tsx +1 -1
  363. package/frontend/src/features/database/components/TemplatePreview.tsx +1 -2
  364. package/frontend/src/features/database/constants.ts +16 -28
  365. package/frontend/src/features/database/hooks/useCSVImport.ts +3 -2
  366. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  367. package/frontend/src/features/database/hooks/useRawSQL.ts +3 -2
  368. package/frontend/src/features/database/hooks/useTables.ts +30 -28
  369. package/frontend/src/features/database/index.ts +1 -0
  370. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -42
  371. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +34 -51
  372. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +42 -58
  373. package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +2 -2
  374. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  375. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +34 -51
  376. package/frontend/src/features/database/services/advance.service.ts +1 -41
  377. package/frontend/src/features/database/services/database.service.ts +55 -0
  378. package/frontend/src/features/database/services/record.service.ts +4 -20
  379. package/frontend/src/features/database/services/table.service.ts +1 -10
  380. package/frontend/src/features/database/templates/ai-chatbot.ts +6 -6
  381. package/frontend/src/features/database/templates/ecommerce-platform.ts +2 -2
  382. package/frontend/src/features/database/templates/instagram-clone.ts +10 -10
  383. package/frontend/src/features/database/templates/notion-clone.ts +8 -8
  384. package/frontend/src/features/database/templates/reddit-clone.ts +10 -10
  385. package/frontend/src/features/deployments/components/DeploymentRow.tsx +93 -0
  386. package/frontend/src/features/deployments/components/DeploymentsEmptyState.tsx +15 -0
  387. package/frontend/src/features/deployments/hooks/useDeployments.ts +157 -0
  388. package/frontend/src/features/deployments/pages/DeploymentsPage.tsx +318 -0
  389. package/frontend/src/features/deployments/services/deployments.service.ts +63 -0
  390. package/frontend/src/features/functions/components/FunctionRow.tsx +72 -72
  391. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +56 -56
  392. package/frontend/src/features/functions/components/SecretRow.tsx +3 -3
  393. package/frontend/src/features/functions/components/index.ts +5 -5
  394. package/frontend/src/features/functions/hooks/useFunctions.ts +5 -4
  395. package/frontend/src/features/functions/hooks/useSecrets.ts +6 -9
  396. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  397. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +118 -116
  398. package/frontend/src/features/functions/services/function.service.ts +8 -25
  399. package/frontend/src/features/functions/services/secret.service.ts +23 -41
  400. package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +125 -118
  401. package/frontend/src/features/logs/components/LogDetailPanel.tsx +41 -0
  402. package/frontend/src/features/logs/components/LogsDataGrid.tsx +32 -1
  403. package/frontend/src/features/logs/components/index.ts +1 -0
  404. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  405. package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +36 -6
  406. package/frontend/src/features/onboard/components/ApiCredentialsSection.tsx +59 -0
  407. package/frontend/src/features/onboard/components/ConnectionStringSection.tsx +180 -0
  408. package/frontend/src/features/onboard/components/McpConnectionSection.tsx +159 -0
  409. package/frontend/src/features/onboard/components/OnboardingController.tsx +68 -0
  410. package/frontend/src/features/onboard/components/OnboardingModal.tsx +121 -267
  411. package/frontend/src/features/onboard/components/ShowPasswordButton.tsx +21 -0
  412. package/frontend/src/features/onboard/components/index.ts +9 -4
  413. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +1 -1
  414. package/frontend/src/features/onboard/components/mcp/QoderDeeplinkGenerator.tsx +36 -0
  415. package/frontend/src/features/onboard/components/mcp/helpers.tsx +123 -98
  416. package/frontend/src/features/onboard/components/mcp/index.ts +4 -3
  417. package/frontend/src/features/onboard/index.ts +17 -13
  418. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  419. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  420. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  421. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  422. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  423. package/frontend/src/features/realtime/index.ts +11 -0
  424. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  425. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  426. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  427. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  428. package/frontend/src/features/settings/pages/SettingsPage.tsx +349 -0
  429. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  430. package/frontend/src/features/visualizer/components/AuthNode.tsx +4 -4
  431. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +24 -11
  432. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +11 -36
  433. package/frontend/src/index.css +249 -249
  434. package/frontend/src/lib/contexts/ModalContext.tsx +35 -0
  435. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  436. package/frontend/src/lib/hooks/useMetadata.ts +45 -1
  437. package/frontend/src/lib/hooks/useModal.tsx +2 -0
  438. package/frontend/src/lib/routing/AppRoutes.tsx +103 -84
  439. package/frontend/src/lib/services/metadata.service.ts +20 -3
  440. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  441. package/frontend/src/lib/utils/menuItems.ts +223 -183
  442. package/frontend/src/lib/utils/utils.ts +196 -183
  443. package/frontend/tsconfig.json +25 -25
  444. package/frontend/tsconfig.node.json +9 -9
  445. package/functions/deno.json +24 -24
  446. package/functions/server.ts +6 -6
  447. package/functions/worker-template.js +1 -1
  448. package/i18n/README.ar.md +130 -130
  449. package/i18n/README.de.md +130 -130
  450. package/i18n/README.es.md +154 -154
  451. package/i18n/README.fr.md +134 -134
  452. package/i18n/README.hi.md +129 -129
  453. package/i18n/README.ja.md +174 -174
  454. package/i18n/README.ko.md +136 -136
  455. package/i18n/README.pt-BR.md +131 -131
  456. package/i18n/README.ru.md +129 -129
  457. package/i18n/README.zh-CN.md +133 -133
  458. package/openapi/ai.yaml +825 -715
  459. package/openapi/auth.yaml +1324 -1244
  460. package/openapi/email.yaml +158 -0
  461. package/openapi/functions.yaml +475 -475
  462. package/openapi/health.yaml +29 -29
  463. package/openapi/logs.yaml +221 -223
  464. package/openapi/metadata.yaml +175 -177
  465. package/openapi/realtime.yaml +699 -0
  466. package/openapi/records.yaml +381 -381
  467. package/openapi/secrets.yaml +370 -370
  468. package/openapi/storage.yaml +875 -875
  469. package/openapi/tables.yaml +462 -463
  470. package/package.json +97 -97
  471. package/shared-schemas/package.json +31 -31
  472. package/shared-schemas/src/ai-api.schema.ts +251 -143
  473. package/shared-schemas/src/ai.schema.ts +8 -4
  474. package/shared-schemas/src/auth-api.schema.ts +380 -339
  475. package/shared-schemas/src/auth.schema.ts +18 -11
  476. package/shared-schemas/src/cloud-events.schema.ts +26 -0
  477. package/shared-schemas/src/database-api.schema.ts +32 -1
  478. package/shared-schemas/src/database.schema.ts +39 -0
  479. package/shared-schemas/src/deployments-api.schema.ts +55 -0
  480. package/shared-schemas/src/deployments.schema.ts +30 -0
  481. package/shared-schemas/src/docs.schema.ts +32 -0
  482. package/shared-schemas/src/email-api.schema.ts +30 -0
  483. package/shared-schemas/src/functions-api.schema.ts +13 -4
  484. package/shared-schemas/src/functions.schema.ts +1 -1
  485. package/shared-schemas/src/index.ts +22 -14
  486. package/shared-schemas/src/metadata.schema.ts +39 -4
  487. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  488. package/shared-schemas/src/realtime.schema.ts +143 -0
  489. package/shared-schemas/src/secrets-api.schema.ts +44 -0
  490. package/shared-schemas/src/secrets.schema.ts +15 -0
  491. package/shared-schemas/tsconfig.json +21 -21
  492. package/tsconfig.json +7 -7
  493. package/zeabur/README.md +26 -13
  494. package/zeabur/template.yml +1001 -1032
  495. package/.cursor/rules/cursor-rules.mdc +0 -94
  496. package/backend/src/types/profile.ts +0 -55
  497. package/frontend/src/components/ProjectInfoModal.tsx +0 -128
  498. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  499. package/test-gemini.sh +0 -35
  500. package/test-usage-admin.sh +0 -57
  501. package/test-usage.sh +0 -50
  502. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  503. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  504. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  505. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  506. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
@@ -21,32 +21,38 @@ export const nameSchema = z
21
21
  .max(100, 'Name must be less than 100 characters')
22
22
  .trim();
23
23
 
24
- export const roleSchema = z.enum(['authenticated', 'project_admin']);
24
+ export const roleSchema = z.enum(['anon', 'authenticated', 'project_admin']);
25
25
 
26
26
  export const verificationMethodSchema = z.enum(['code', 'link']);
27
27
 
28
+ /**
29
+ * User profile schema with default fields and passthrough for custom fields
30
+ * Note: Using snake_case for fields as they are stored directly in PostgreSQL JSONB
31
+ */
32
+ export const profileSchema = z
33
+ .object({
34
+ name: z.string().optional(),
35
+ // eslint-disable-next-line @typescript-eslint/naming-convention
36
+ avatar_url: z.string().url().optional(),
37
+ })
38
+ .passthrough();
39
+
28
40
  // ============================================================================
29
41
  // Core entity schemas
30
42
  // ============================================================================
31
43
 
32
44
  /**
33
- * User entity schema - represents the _user table in PostgreSQL
45
+ * User entity schema - represents the auth.users table in PostgreSQL
34
46
  */
35
47
  export const userSchema = z.object({
36
48
  id: userIdSchema,
37
49
  email: emailSchema,
38
- name: nameSchema,
39
50
  emailVerified: z.boolean(),
40
- identities: z
41
- .array(
42
- z.object({
43
- provider: z.string(),
44
- })
45
- )
46
- .optional(),
47
- providerType: z.string().optional(),
51
+ providers: z.array(z.string()).optional(),
48
52
  createdAt: z.string(), // PostgreSQL timestamp
49
53
  updatedAt: z.string(), // PostgreSQL timestamp
54
+ profile: profileSchema.nullable(), // User profile data (name, avatar_url, bio, etc.)
55
+ metadata: z.record(z.unknown()).nullable(), // System metadata (device ID, login IP, etc.)
50
56
  });
51
57
 
52
58
  /**
@@ -123,6 +129,7 @@ export type EmailSchema = z.infer<typeof emailSchema>;
123
129
  export type PasswordSchema = z.infer<typeof passwordSchema>;
124
130
  export type RoleSchema = z.infer<typeof roleSchema>;
125
131
  export type VerificationMethodSchema = z.infer<typeof verificationMethodSchema>;
132
+ export type ProfileSchema = z.infer<typeof profileSchema>;
126
133
  export type UserSchema = z.infer<typeof userSchema>;
127
134
  export type TokenPayloadSchema = z.infer<typeof tokenPayloadSchema>;
128
135
  export type OAuthConfigSchema = z.infer<typeof oAuthConfigSchema>;
@@ -37,6 +37,24 @@ export const navigateToUsageSchema = z.object({
37
37
  type: z.literal('NAVIGATE_TO_USAGE'),
38
38
  });
39
39
 
40
+ export const showContactModalEventSchema = z.object({
41
+ type: z.literal('SHOW_CONTACT_MODAL'),
42
+ });
43
+
44
+ export const showConnectOverlayEventSchema = z.object({
45
+ type: z.literal('SHOW_CONNECT_OVERLAY'),
46
+ });
47
+
48
+ export const authorizationCodeEventSchema = z.object({
49
+ type: z.literal('AUTHORIZATION_CODE'),
50
+ code: z.string(),
51
+ });
52
+
53
+ export const routeChangeEventSchema = z.object({
54
+ type: z.literal('ROUTE_CHANGE'),
55
+ path: z.string(),
56
+ });
57
+
40
58
  export const cloudEventSchema = z.discriminatedUnion('type', [
41
59
  appRouteChangeEventSchema,
42
60
  authSuccessEventSchema,
@@ -46,6 +64,10 @@ export const cloudEventSchema = z.discriminatedUnion('type', [
46
64
  showSettingsOverlayEventSchema,
47
65
  onboardingSuccessSchema,
48
66
  navigateToUsageSchema,
67
+ showContactModalEventSchema,
68
+ showConnectOverlayEventSchema,
69
+ authorizationCodeEventSchema,
70
+ routeChangeEventSchema,
49
71
  ]);
50
72
 
51
73
  export type AppRouteChangeEvent = z.infer<typeof appRouteChangeEventSchema>;
@@ -55,3 +77,7 @@ export type McpConnectionStatusEvent = z.infer<typeof mcpConnectionStatusEventSc
55
77
  export type CloudEvent = z.infer<typeof cloudEventSchema>;
56
78
  export type ShowOnboardingOverlayEvent = z.infer<typeof showOnboardingOverlayEventSchema>;
57
79
  export type ShowSettingsOverlayEvent = z.infer<typeof showSettingsOverlayEventSchema>;
80
+ export type ShowContactModalEvent = z.infer<typeof showContactModalEventSchema>;
81
+ export type ShowConnectOverlayEvent = z.infer<typeof showConnectOverlayEventSchema>;
82
+ export type AuthorizationCodeEvent = z.infer<typeof authorizationCodeEventSchema>;
83
+ export type RouteChangeEvent = z.infer<typeof routeChangeEventSchema>;
@@ -1,5 +1,13 @@
1
1
  import { z } from 'zod';
2
- import { columnSchema, foreignKeySchema, tableSchema } from './database.schema';
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({
@@ -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>;
@@ -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,55 @@
1
+ import { z } from 'zod';
2
+ import { deploymentSchema } from './deployments.schema';
3
+
4
+ export const projectSettingsSchema = z.object({
5
+ buildCommand: z.string().nullable().optional(),
6
+ outputDirectory: z.string().nullable().optional(),
7
+ installCommand: z.string().nullable().optional(),
8
+ devCommand: z.string().nullable().optional(),
9
+ rootDirectory: z.string().nullable().optional(),
10
+ });
11
+
12
+ export const envVarSchema = z.object({
13
+ key: z.string(),
14
+ value: z.string(),
15
+ });
16
+
17
+ /**
18
+ * Response from creating a deployment - includes presigned upload info
19
+ */
20
+ export const createDeploymentResponseSchema = z.object({
21
+ id: z.string().uuid(),
22
+ uploadUrl: z.string().url(),
23
+ uploadFields: z.record(z.string()), // Required for S3 presigned POST (policy, signature, key, etc.)
24
+ });
25
+
26
+ /**
27
+ * Request to start a deployment (step 2)
28
+ * Triggers upload to Vercel and creates the actual deployment
29
+ */
30
+ export const startDeploymentRequestSchema = z.object({
31
+ projectSettings: projectSettingsSchema.optional(),
32
+ envVars: z.array(envVarSchema).optional(),
33
+ meta: z.record(z.string()).optional(),
34
+ });
35
+
36
+ /**
37
+ * Response from starting a deployment
38
+ */
39
+ export const startDeploymentResponseSchema = deploymentSchema;
40
+
41
+ export const listDeploymentsResponseSchema = z.object({
42
+ data: z.array(deploymentSchema),
43
+ pagination: z.object({
44
+ limit: z.number(),
45
+ offset: z.number(),
46
+ total: z.number(),
47
+ }),
48
+ });
49
+
50
+ export type ProjectSettings = z.infer<typeof projectSettingsSchema>;
51
+ export type EnvVar = z.infer<typeof envVarSchema>;
52
+ export type CreateDeploymentResponse = z.infer<typeof createDeploymentResponseSchema>;
53
+ export type StartDeploymentRequest = z.infer<typeof startDeploymentRequestSchema>;
54
+ export type StartDeploymentResponse = z.infer<typeof startDeploymentResponseSchema>;
55
+ export type ListDeploymentsResponse = z.infer<typeof listDeploymentsResponseSchema>;
@@ -0,0 +1,30 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Deployment status enum schema
5
+ * WAITING -> UPLOADING -> (Vercel statuses: QUEUED/BUILDING/READY/ERROR/CANCELED)
6
+ */
7
+ export const deploymentStatusSchema = z.enum([
8
+ 'WAITING', // Record created, waiting for client to upload zip to S3
9
+ 'UPLOADING', // Server is downloading from S3 and uploading to Vercel
10
+ 'QUEUED', // Vercel: deployment queued
11
+ 'BUILDING', // Vercel: deployment building
12
+ 'READY', // Vercel: deployment ready
13
+ 'ERROR', // Vercel: deployment failed
14
+ 'CANCELED', // Vercel: deployment canceled
15
+ ]);
16
+
17
+ export type DeploymentStatusType = z.infer<typeof deploymentStatusSchema>;
18
+
19
+ export const deploymentSchema = z.object({
20
+ id: z.string().uuid(),
21
+ providerDeploymentId: z.string().nullable(), // Provider's deployment ID, null until deployment starts
22
+ provider: z.string(),
23
+ status: deploymentStatusSchema,
24
+ url: z.string().nullable(),
25
+ metadata: z.record(z.unknown()).nullable(),
26
+ createdAt: z.string().datetime(),
27
+ updatedAt: z.string().datetime(),
28
+ });
29
+
30
+ export type DeploymentSchema = z.infer<typeof deploymentSchema>;
@@ -0,0 +1,32 @@
1
+ import { z } from 'zod';
2
+
3
+ export const docTypeSchema = z
4
+ .enum([
5
+ 'instructions',
6
+ 'auth-sdk',
7
+ 'db-sdk',
8
+ 'storage-sdk',
9
+ 'functions-sdk',
10
+ 'ai-integration-sdk',
11
+ 'auth-components-react',
12
+ 'auth-components-nextjs',
13
+ 'real-time',
14
+ 'deployment',
15
+ ])
16
+ .describe(
17
+ `
18
+ Documentation type:
19
+ "instructions" (essential backend setup - use FIRST),
20
+ "db-sdk" (database operations),
21
+ "storage-sdk" (file storage),
22
+ "functions-sdk" (edge functions),
23
+ "auth-sdk" (direct SDK methods for custom auth flows),
24
+ "auth-components-react" (authentication components for React+Vite applications),
25
+ "auth-components-nextjs" (authentication components for Next.js applications),
26
+ "ai-integration-sdk" (AI features),
27
+ "real-time" (real-time pub/sub through WebSockets),
28
+ "deployment" (deploy frontend applications via MCP tool)
29
+ `
30
+ );
31
+
32
+ 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>;
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
+ import { functionSchema } from './functions.schema';
2
3
 
3
- export const functionUploadRequestSchema = z.object({
4
+ export const uploadFunctionRequestSchema = z.object({
4
5
  name: z.string().min(1, 'Name is required'),
5
6
  slug: z
6
7
  .string()
@@ -14,12 +15,20 @@ export const functionUploadRequestSchema = z.object({
14
15
  status: z.enum(['draft', 'active']).optional().default('active'),
15
16
  });
16
17
 
17
- export const functionUpdateRequestSchema = z.object({
18
+ export const updateFunctionRequestSchema = z.object({
18
19
  name: z.string().optional(),
19
20
  code: z.string().optional(),
20
21
  description: z.string().optional(),
21
22
  status: z.enum(['draft', 'active']).optional(),
22
23
  });
23
24
 
24
- export type FunctionUploadRequest = z.infer<typeof functionUploadRequestSchema>;
25
- export type FunctionUpdateRequest = z.infer<typeof functionUpdateRequestSchema>;
25
+ export const listFunctionsResponseSchema = z.object({
26
+ functions: z.array(functionSchema),
27
+ runtime: z.object({
28
+ status: z.enum(['running', 'unavailable']),
29
+ }),
30
+ });
31
+
32
+ export type UploadFunctionRequest = z.infer<typeof uploadFunctionRequestSchema>;
33
+ export type UpdateFunctionRequest = z.infer<typeof updateFunctionRequestSchema>;
34
+ export type ListFunctionsResponse = z.infer<typeof listFunctionsResponseSchema>;
@@ -7,7 +7,7 @@ export const functionSchema = z.object({
7
7
  name: z.string(),
8
8
  description: z.string().nullable(),
9
9
  code: z.string(),
10
- status: z.enum(['draft', 'active']),
10
+ status: z.enum(['draft', 'active', 'error']),
11
11
  createdAt: z.string(),
12
12
  updatedAt: z.string(),
13
13
  deployedAt: z.string().nullable(),
@@ -1,14 +1,22 @@
1
- export * from './database.schema';
2
- export * from './database-api.schema';
3
- export * from './storage.schema';
4
- export * from './storage-api.schema';
5
- export * from './auth.schema';
6
- export * from './auth-api.schema';
7
- export * from './metadata.schema';
8
- export * from './ai.schema';
9
- export * from './ai-api.schema';
10
- export * from './logs.schema';
11
- export * from './logs-api.schema';
12
- export * from './functions.schema';
13
- export * from './functions-api.schema';
14
- export * from './cloud-events.schema';
1
+ export * from './database.schema';
2
+ export * from './database-api.schema';
3
+ export * from './secrets.schema';
4
+ export * from './secrets-api.schema';
5
+ export * from './storage.schema';
6
+ export * from './storage-api.schema';
7
+ export * from './auth.schema';
8
+ export * from './auth-api.schema';
9
+ export * from './metadata.schema';
10
+ export * from './ai.schema';
11
+ export * from './ai-api.schema';
12
+ export * from './logs.schema';
13
+ export * from './logs-api.schema';
14
+ export * from './functions.schema';
15
+ export * from './functions-api.schema';
16
+ export * from './cloud-events.schema';
17
+ export * from './realtime.schema';
18
+ export * from './realtime-api.schema';
19
+ export * from './docs.schema';
20
+ export * from './email-api.schema';
21
+ export * from './deployments.schema';
22
+ export * from './deployments-api.schema';
@@ -1,10 +1,10 @@
1
1
  import { z } from 'zod';
2
2
  import { storageBucketSchema } from './storage.schema';
3
- import { oAuthConfigSchema } from './auth.schema';
3
+ import { realtimeChannelSchema } from './realtime.schema';
4
+ import { realtimePermissionsResponseSchema } from './realtime-api.schema';
5
+ import { getPublicAuthConfigResponseSchema } from './auth-api.schema';
4
6
 
5
- export const authMetadataSchema = z.object({
6
- oauths: z.array(oAuthConfigSchema),
7
- });
7
+ export const authMetadataSchema = getPublicAuthConfigResponseSchema;
8
8
 
9
9
  export const databaseMetadataSchema = z.object({
10
10
  tables: z.array(
@@ -43,12 +43,18 @@ export const aiMetadataSchema = z.object({
43
43
  ),
44
44
  });
45
45
 
46
+ export const realtimeMetadataSchema = z.object({
47
+ channels: z.array(realtimeChannelSchema),
48
+ permissions: realtimePermissionsResponseSchema,
49
+ });
50
+
46
51
  export const appMetaDataSchema = z.object({
47
52
  auth: authMetadataSchema,
48
53
  database: databaseMetadataSchema,
49
54
  storage: storageMetadataSchema,
50
55
  aiIntegration: aiMetadataSchema.optional(),
51
56
  functions: z.array(edgeFunctionMetadataSchema),
57
+ realtime: realtimeMetadataSchema.optional(),
52
58
  version: z.string().optional(),
53
59
  });
54
60
 
@@ -58,4 +64,33 @@ export type BucketMetadataSchema = z.infer<typeof bucketMetadataSchema>;
58
64
  export type StorageMetadataSchema = z.infer<typeof storageMetadataSchema>;
59
65
  export type EdgeFunctionMetadataSchema = z.infer<typeof edgeFunctionMetadataSchema>;
60
66
  export type AIMetadataSchema = z.infer<typeof aiMetadataSchema>;
67
+ export type RealtimeMetadataSchema = z.infer<typeof realtimeMetadataSchema>;
61
68
  export type AppMetadataSchema = z.infer<typeof appMetaDataSchema>;
69
+
70
+ // Database connection schemas
71
+ export const databaseConnectionParametersSchema = z.object({
72
+ host: z.string(),
73
+ port: z.number(),
74
+ database: z.string(),
75
+ user: z.string(),
76
+ password: z.string(),
77
+ sslmode: z.string(),
78
+ });
79
+
80
+ export const databaseConnectionInfoSchema = z.object({
81
+ connectionURL: z.string(),
82
+ parameters: databaseConnectionParametersSchema,
83
+ });
84
+
85
+ export const databasePasswordInfoSchema = z.object({
86
+ databasePassword: z.string(),
87
+ });
88
+
89
+ export const apiKeyResponseSchema = z.object({
90
+ apiKey: z.string(),
91
+ });
92
+
93
+ export type DatabaseConnectionParameters = z.infer<typeof databaseConnectionParametersSchema>;
94
+ export type DatabaseConnectionInfo = z.infer<typeof databaseConnectionInfoSchema>;
95
+ export type DatabasePasswordInfo = z.infer<typeof databasePasswordInfoSchema>;
96
+ export type ApiKeyResponse = z.infer<typeof apiKeyResponseSchema>;
@@ -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>;