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
@@ -1,30 +1,30 @@
1
- -- Migration: 002 - Rename authentication tables to better auth naming convention
2
-
3
- DO $$
4
- BEGIN
5
- -- Handle _account to _oauth_connections
6
- IF EXISTS (SELECT FROM information_schema.tables
7
- WHERE table_name = '_account' AND table_schema = 'public') THEN
8
- IF EXISTS (SELECT FROM information_schema.tables
9
- WHERE table_name = '_oauth_connections' AND table_schema = 'public') THEN
10
- -- Both exist, drop the old one
11
- DROP TABLE _account CASCADE;
12
- ELSE
13
- -- Only old exists, rename it
14
- ALTER TABLE _account RENAME TO _oauth_connections;
15
- END IF;
16
- END IF;
17
-
18
- -- Handle _user to _accounts
19
- IF EXISTS (SELECT FROM information_schema.tables
20
- WHERE table_name = '_user' AND table_schema = 'public') THEN
21
- IF EXISTS (SELECT FROM information_schema.tables
22
- WHERE table_name = '_accounts' AND table_schema = 'public') THEN
23
- -- Both exist, drop the old one
24
- DROP TABLE _user CASCADE;
25
- ELSE
26
- -- Only old exists, rename it
27
- ALTER TABLE _user RENAME TO _accounts;
28
- END IF;
29
- END IF;
1
+ -- Migration: 002 - Rename authentication tables to better auth naming convention
2
+
3
+ DO $$
4
+ BEGIN
5
+ -- Handle _account to _oauth_connections
6
+ IF EXISTS (SELECT FROM information_schema.tables
7
+ WHERE table_name = '_account' AND table_schema = 'public') THEN
8
+ IF EXISTS (SELECT FROM information_schema.tables
9
+ WHERE table_name = '_oauth_connections' AND table_schema = 'public') THEN
10
+ -- Both exist, drop the old one
11
+ DROP TABLE _account CASCADE;
12
+ ELSE
13
+ -- Only old exists, rename it
14
+ ALTER TABLE _account RENAME TO _oauth_connections;
15
+ END IF;
16
+ END IF;
17
+
18
+ -- Handle _user to _accounts
19
+ IF EXISTS (SELECT FROM information_schema.tables
20
+ WHERE table_name = '_user' AND table_schema = 'public') THEN
21
+ IF EXISTS (SELECT FROM information_schema.tables
22
+ WHERE table_name = '_accounts' AND table_schema = 'public') THEN
23
+ -- Both exist, drop the old one
24
+ DROP TABLE _user CASCADE;
25
+ ELSE
26
+ -- Only old exists, rename it
27
+ ALTER TABLE _user RENAME TO _accounts;
28
+ END IF;
29
+ END IF;
30
30
  END $$;
@@ -1,56 +1,56 @@
1
- -- Migration: 003 - Create users table for user profiles
2
-
3
- DO $$
4
- BEGIN
5
- CREATE TABLE IF NOT EXISTS users (
6
- id UUID PRIMARY KEY REFERENCES _accounts(id) ON DELETE CASCADE,
7
- nickname TEXT,
8
- avatar_url TEXT,
9
- bio TEXT,
10
- birthday DATE,
11
- created_at TIMESTAMPTZ DEFAULT NOW(),
12
- updated_at TIMESTAMPTZ DEFAULT NOW()
13
- );
14
-
15
- -- Check and create policies only if they don't exist
16
- -- Allow everyone to read users table
17
- IF NOT EXISTS (
18
- SELECT 1 FROM pg_policies
19
- WHERE tablename = 'users'
20
- AND policyname = 'Enable read access for all users'
21
- ) THEN
22
- CREATE POLICY "Enable read access for all users" ON users
23
- FOR SELECT
24
- USING (true); -- Allow all reads
25
- END IF;
26
-
27
- IF NOT EXISTS (
28
- SELECT 1 FROM pg_policies
29
- WHERE tablename = 'users'
30
- AND policyname = 'Disable delete for users'
31
- ) THEN
32
- CREATE POLICY "Disable delete for users" ON users
33
- FOR DELETE
34
- TO authenticated
35
- USING (false);
36
- END IF;
37
-
38
- IF NOT EXISTS (
39
- SELECT 1 FROM pg_policies
40
- WHERE tablename = 'users'
41
- AND policyname = 'Enable update for users based on user_id'
42
- ) THEN
43
- CREATE POLICY "Enable update for users based on user_id" ON users
44
- FOR UPDATE
45
- TO authenticated
46
- USING (uid() = id)
47
- WITH CHECK (uid() = id); -- make sure only the owner can update
48
- END IF;
49
-
50
- -- Enable Row Level Security on the users table
51
- ALTER TABLE users ENABLE ROW LEVEL SECURITY;
52
-
53
- -- Grant permissions to anon and authenticated roles
54
- GRANT SELECT ON users TO anon;
55
- GRANT SELECT, UPDATE ON users TO authenticated;
1
+ -- Migration: 003 - Create users table for user profiles
2
+
3
+ DO $$
4
+ BEGIN
5
+ CREATE TABLE IF NOT EXISTS users (
6
+ id UUID PRIMARY KEY REFERENCES _accounts(id) ON DELETE CASCADE,
7
+ nickname TEXT,
8
+ avatar_url TEXT,
9
+ bio TEXT,
10
+ birthday DATE,
11
+ created_at TIMESTAMPTZ DEFAULT NOW(),
12
+ updated_at TIMESTAMPTZ DEFAULT NOW()
13
+ );
14
+
15
+ -- Check and create policies only if they don't exist
16
+ -- Allow everyone to read users table
17
+ IF NOT EXISTS (
18
+ SELECT 1 FROM pg_policies
19
+ WHERE tablename = 'users'
20
+ AND policyname = 'Enable read access for all users'
21
+ ) THEN
22
+ CREATE POLICY "Enable read access for all users" ON users
23
+ FOR SELECT
24
+ USING (true); -- Allow all reads
25
+ END IF;
26
+
27
+ IF NOT EXISTS (
28
+ SELECT 1 FROM pg_policies
29
+ WHERE tablename = 'users'
30
+ AND policyname = 'Disable delete for users'
31
+ ) THEN
32
+ CREATE POLICY "Disable delete for users" ON users
33
+ FOR DELETE
34
+ TO authenticated
35
+ USING (false);
36
+ END IF;
37
+
38
+ IF NOT EXISTS (
39
+ SELECT 1 FROM pg_policies
40
+ WHERE tablename = 'users'
41
+ AND policyname = 'Enable update for users based on user_id'
42
+ ) THEN
43
+ CREATE POLICY "Enable update for users based on user_id" ON users
44
+ FOR UPDATE
45
+ TO authenticated
46
+ USING (uid() = id)
47
+ WITH CHECK (uid() = id); -- make sure only the owner can update
48
+ END IF;
49
+
50
+ -- Enable Row Level Security on the users table
51
+ ALTER TABLE users ENABLE ROW LEVEL SECURITY;
52
+
53
+ -- Grant permissions to anon and authenticated roles
54
+ GRANT SELECT ON users TO anon;
55
+ GRANT SELECT, UPDATE ON users TO authenticated;
56
56
  END $$;
@@ -1,24 +1,24 @@
1
- -- Migration: 004 - add reload_postgrest_schema function.
2
-
3
- DO $$
4
- BEGIN
5
- -- Create a function to reload PostgREST schema
6
- CREATE OR REPLACE FUNCTION reload_postgrest_schema()
7
- RETURNS void
8
- LANGUAGE plpgsql
9
- AS $reload_function$
10
- BEGIN
11
- -- Method 1: Use NOTIFY to signal PostgREST to reload schema
12
- -- PostgREST listens to 'pgrst' channel for schema changes
13
- NOTIFY pgrst, 'reload schema';
14
-
15
- RAISE NOTICE 'PostgREST schema reload notification sent';
16
- END
17
- $reload_function$;
18
-
19
- -- Grant execute permission to project_admin and authenticated users
20
- GRANT EXECUTE ON FUNCTION reload_postgrest_schema() TO project_admin;
21
- GRANT EXECUTE ON FUNCTION reload_postgrest_schema() TO authenticated;
22
-
23
- RAISE NOTICE 'PostgREST schema reload function created successfully';
1
+ -- Migration: 004 - add reload_postgrest_schema function.
2
+
3
+ DO $$
4
+ BEGIN
5
+ -- Create a function to reload PostgREST schema
6
+ CREATE OR REPLACE FUNCTION reload_postgrest_schema()
7
+ RETURNS void
8
+ LANGUAGE plpgsql
9
+ AS $reload_function$
10
+ BEGIN
11
+ -- Method 1: Use NOTIFY to signal PostgREST to reload schema
12
+ -- PostgREST listens to 'pgrst' channel for schema changes
13
+ NOTIFY pgrst, 'reload schema';
14
+
15
+ RAISE NOTICE 'PostgREST schema reload notification sent';
16
+ END
17
+ $reload_function$;
18
+
19
+ -- Grant execute permission to project_admin and authenticated users
20
+ GRANT EXECUTE ON FUNCTION reload_postgrest_schema() TO project_admin;
21
+ GRANT EXECUTE ON FUNCTION reload_postgrest_schema() TO authenticated;
22
+
23
+ RAISE NOTICE 'PostgREST schema reload function created successfully';
24
24
  END $$;
@@ -1,30 +1,30 @@
1
- -- Migration: 005 - Enable project admin modify any users.
2
-
3
- DO $$
4
- BEGIN
5
- -- Create policy to allow project_admin to update any user
6
- IF NOT EXISTS (
7
- SELECT 1 FROM pg_policies
8
- WHERE tablename = 'users'
9
- AND policyname = 'Allow project_admin to update any user'
10
- ) THEN
11
- CREATE POLICY "Allow project_admin to update any user" ON users
12
- FOR UPDATE
13
- TO project_admin
14
- USING (true)
15
- WITH CHECK (true); -- Ensure project_admin always can update
16
- END IF;
17
-
18
- -- Grant necessary permissions
19
- GRANT SELECT, UPDATE ON users TO project_admin;
20
-
21
- -- Notify PostgREST to reload schema after policy changes
22
- IF EXISTS (SELECT 1 FROM pg_proc WHERE proname = 'reload_postgrest_schema') THEN
23
- PERFORM reload_postgrest_schema();
24
- RAISE NOTICE 'PostgREST schema reload requested after migration';
25
- ELSE
26
- RAISE WARNING 'PostgREST reload function not found - please restart PostgREST manually';
27
- END IF;
28
-
29
- RAISE NOTICE 'Migration project-admin-update-users completed successfully';
1
+ -- Migration: 005 - Enable project admin modify any users.
2
+
3
+ DO $$
4
+ BEGIN
5
+ -- Create policy to allow project_admin to update any user
6
+ IF NOT EXISTS (
7
+ SELECT 1 FROM pg_policies
8
+ WHERE tablename = 'users'
9
+ AND policyname = 'Allow project_admin to update any user'
10
+ ) THEN
11
+ CREATE POLICY "Allow project_admin to update any user" ON users
12
+ FOR UPDATE
13
+ TO project_admin
14
+ USING (true)
15
+ WITH CHECK (true); -- Ensure project_admin always can update
16
+ END IF;
17
+
18
+ -- Grant necessary permissions
19
+ GRANT SELECT, UPDATE ON users TO project_admin;
20
+
21
+ -- Notify PostgREST to reload schema after policy changes
22
+ IF EXISTS (SELECT 1 FROM pg_proc WHERE proname = 'reload_postgrest_schema') THEN
23
+ PERFORM reload_postgrest_schema();
24
+ RAISE NOTICE 'PostgREST schema reload requested after migration';
25
+ ELSE
26
+ RAISE WARNING 'PostgREST reload function not found - please restart PostgREST manually';
27
+ END IF;
28
+
29
+ RAISE NOTICE 'Migration project-admin-update-users completed successfully';
30
30
  END $$;
@@ -1,25 +1,25 @@
1
- -- Migration: 006 - Modify AI usage table
2
- -- This migration modifies the _ai_usage table to:
3
- -- 1. Change foreign key constraint on config_id to SET NULL
4
- -- 2. Make config_id nullable
5
- -- 3. Add model_id column
6
-
7
- -- Drop existing foreign key constraint
8
- ALTER TABLE _ai_usage
9
- DROP CONSTRAINT IF EXISTS _ai_usage_config_id_fkey;
10
-
11
- -- Make config_id nullable
12
- ALTER TABLE _ai_usage
13
- ALTER COLUMN config_id DROP NOT NULL;
14
-
15
- -- Add new foreign key constraint with SET NULL on delete
16
- ALTER TABLE _ai_usage
17
- ADD CONSTRAINT _ai_usage_config_id_fkey
18
- FOREIGN KEY (config_id) REFERENCES _ai_configs(id) ON DELETE SET NULL;
19
-
20
- -- Add new columns for model identification
21
- ALTER TABLE _ai_usage
22
- ADD COLUMN IF NOT EXISTS model_id VARCHAR(255);
23
-
24
- -- Create indexes for the new columns
1
+ -- Migration: 006 - Modify AI usage table
2
+ -- This migration modifies the _ai_usage table to:
3
+ -- 1. Change foreign key constraint on config_id to SET NULL
4
+ -- 2. Make config_id nullable
5
+ -- 3. Add model_id column
6
+
7
+ -- Drop existing foreign key constraint
8
+ ALTER TABLE _ai_usage
9
+ DROP CONSTRAINT IF EXISTS _ai_usage_config_id_fkey;
10
+
11
+ -- Make config_id nullable
12
+ ALTER TABLE _ai_usage
13
+ ALTER COLUMN config_id DROP NOT NULL;
14
+
15
+ -- Add new foreign key constraint with SET NULL on delete
16
+ ALTER TABLE _ai_usage
17
+ ADD CONSTRAINT _ai_usage_config_id_fkey
18
+ FOREIGN KEY (config_id) REFERENCES _ai_configs(id) ON DELETE SET NULL;
19
+
20
+ -- Add new columns for model identification
21
+ ALTER TABLE _ai_usage
22
+ ADD COLUMN IF NOT EXISTS model_id VARCHAR(255);
23
+
24
+ -- Create indexes for the new columns
25
25
  CREATE INDEX IF NOT EXISTS idx_ai_usage_model_id ON _ai_usage(model_id);
@@ -1,2 +1,2 @@
1
- -- Drop the _metadata table if it exists
1
+ -- Drop the _metadata table if it exists
2
2
  DROP TABLE IF EXISTS _metadata CASCADE;
@@ -1,77 +1,77 @@
1
- -- Migration: 008 - Create new system tables and rename OAuth connections table
2
-
3
- -- 1. Create _secrets table for storing application secrets
4
- CREATE TABLE IF NOT EXISTS _secrets (
5
- id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
6
- name TEXT UNIQUE NOT NULL,
7
- value_ciphertext TEXT NOT NULL,
8
- is_active BOOLEAN DEFAULT TRUE,
9
- last_used_at TIMESTAMPTZ,
10
- expires_at TIMESTAMPTZ,
11
- created_at TIMESTAMPTZ DEFAULT NOW(),
12
- updated_at TIMESTAMPTZ DEFAULT NOW()
13
- );
14
-
15
- -- 2. Create _oauth_configs table for OAuth provider configurations
16
- CREATE TABLE IF NOT EXISTS _oauth_configs (
17
- id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
18
- provider TEXT UNIQUE NOT NULL,
19
- client_id TEXT,
20
- secret_id UUID REFERENCES _secrets(id) ON DELETE RESTRICT,
21
- scopes TEXT[],
22
- redirect_uri TEXT,
23
- use_shared_key BOOLEAN DEFAULT FALSE,
24
- created_at TIMESTAMPTZ DEFAULT NOW(),
25
- updated_at TIMESTAMPTZ DEFAULT NOW()
26
- );
27
-
28
- -- 3. Create _audit_logs table for storing admin operation logs
29
- CREATE TABLE IF NOT EXISTS _audit_logs (
30
- id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
31
- actor TEXT NOT NULL,
32
- action TEXT NOT NULL,
33
- module TEXT NOT NULL,
34
- details JSONB,
35
- ip_address INET,
36
- created_at TIMESTAMPTZ DEFAULT NOW(),
37
- updated_at TIMESTAMPTZ DEFAULT NOW()
38
- );
39
-
40
- -- 4. Rename _oauth_connections to _account_providers
41
- DO $$
42
- BEGIN
43
- IF EXISTS (SELECT FROM information_schema.tables
44
- WHERE table_name = '_oauth_connections' AND table_schema = 'public') THEN
45
- IF EXISTS (SELECT FROM information_schema.tables
46
- WHERE table_name = '_account_providers' AND table_schema = 'public') THEN
47
- -- _account_providers already exists, just drop _oauth_connections
48
- DROP TABLE _oauth_connections CASCADE;
49
- ELSE
50
- -- _account_providers doesn't exist, rename _oauth_connections to _account_providers
51
- ALTER TABLE _oauth_connections RENAME TO _account_providers;
52
- END IF;
53
- END IF;
54
- END $$;
55
-
56
- -- 5. Drop the old _config system table
57
- DROP TABLE IF EXISTS _config CASCADE;
58
-
59
- -- Create indexes for better query performance
60
- CREATE INDEX IF NOT EXISTS idx_secrets_name ON _secrets(name);
61
- CREATE INDEX IF NOT EXISTS idx_oauth_configs_provider ON _oauth_configs(provider);
62
- CREATE INDEX IF NOT EXISTS idx_audit_logs_actor ON _audit_logs(actor);
63
- CREATE INDEX IF NOT EXISTS idx_audit_logs_module ON _audit_logs(module);
64
- CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON _audit_logs(created_at DESC);
65
-
66
- -- Add triggers for updated_at
67
- DROP TRIGGER IF EXISTS update__secrets_updated_at ON _secrets;
68
- CREATE TRIGGER update__secrets_updated_at BEFORE UPDATE ON _secrets
69
- FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
70
-
71
- DROP TRIGGER IF EXISTS update__oauth_configs_updated_at ON _oauth_configs;
72
- CREATE TRIGGER update__oauth_configs_updated_at BEFORE UPDATE ON _oauth_configs
73
- FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
74
-
75
- DROP TRIGGER IF EXISTS update__audit_logs_updated_at ON _audit_logs;
76
- CREATE TRIGGER update__audit_logs_updated_at BEFORE UPDATE ON _audit_logs
1
+ -- Migration: 008 - Create new system tables and rename OAuth connections table
2
+
3
+ -- 1. Create _secrets table for storing application secrets
4
+ CREATE TABLE IF NOT EXISTS _secrets (
5
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
6
+ name TEXT UNIQUE NOT NULL,
7
+ value_ciphertext TEXT NOT NULL,
8
+ is_active BOOLEAN DEFAULT TRUE,
9
+ last_used_at TIMESTAMPTZ,
10
+ expires_at TIMESTAMPTZ,
11
+ created_at TIMESTAMPTZ DEFAULT NOW(),
12
+ updated_at TIMESTAMPTZ DEFAULT NOW()
13
+ );
14
+
15
+ -- 2. Create _oauth_configs table for OAuth provider configurations
16
+ CREATE TABLE IF NOT EXISTS _oauth_configs (
17
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
18
+ provider TEXT UNIQUE NOT NULL,
19
+ client_id TEXT,
20
+ secret_id UUID REFERENCES _secrets(id) ON DELETE RESTRICT,
21
+ scopes TEXT[],
22
+ redirect_uri TEXT,
23
+ use_shared_key BOOLEAN DEFAULT FALSE,
24
+ created_at TIMESTAMPTZ DEFAULT NOW(),
25
+ updated_at TIMESTAMPTZ DEFAULT NOW()
26
+ );
27
+
28
+ -- 3. Create _audit_logs table for storing admin operation logs
29
+ CREATE TABLE IF NOT EXISTS _audit_logs (
30
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
31
+ actor TEXT NOT NULL,
32
+ action TEXT NOT NULL,
33
+ module TEXT NOT NULL,
34
+ details JSONB,
35
+ ip_address INET,
36
+ created_at TIMESTAMPTZ DEFAULT NOW(),
37
+ updated_at TIMESTAMPTZ DEFAULT NOW()
38
+ );
39
+
40
+ -- 4. Rename _oauth_connections to _account_providers
41
+ DO $$
42
+ BEGIN
43
+ IF EXISTS (SELECT FROM information_schema.tables
44
+ WHERE table_name = '_oauth_connections' AND table_schema = 'public') THEN
45
+ IF EXISTS (SELECT FROM information_schema.tables
46
+ WHERE table_name = '_account_providers' AND table_schema = 'public') THEN
47
+ -- _account_providers already exists, just drop _oauth_connections
48
+ DROP TABLE _oauth_connections CASCADE;
49
+ ELSE
50
+ -- _account_providers doesn't exist, rename _oauth_connections to _account_providers
51
+ ALTER TABLE _oauth_connections RENAME TO _account_providers;
52
+ END IF;
53
+ END IF;
54
+ END $$;
55
+
56
+ -- 5. Drop the old _config system table
57
+ DROP TABLE IF EXISTS _config CASCADE;
58
+
59
+ -- Create indexes for better query performance
60
+ CREATE INDEX IF NOT EXISTS idx_secrets_name ON _secrets(name);
61
+ CREATE INDEX IF NOT EXISTS idx_oauth_configs_provider ON _oauth_configs(provider);
62
+ CREATE INDEX IF NOT EXISTS idx_audit_logs_actor ON _audit_logs(actor);
63
+ CREATE INDEX IF NOT EXISTS idx_audit_logs_module ON _audit_logs(module);
64
+ CREATE INDEX IF NOT EXISTS idx_audit_logs_created_at ON _audit_logs(created_at DESC);
65
+
66
+ -- Add triggers for updated_at
67
+ DROP TRIGGER IF EXISTS update__secrets_updated_at ON _secrets;
68
+ CREATE TRIGGER update__secrets_updated_at BEFORE UPDATE ON _secrets
69
+ FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
70
+
71
+ DROP TRIGGER IF EXISTS update__oauth_configs_updated_at ON _oauth_configs;
72
+ CREATE TRIGGER update__oauth_configs_updated_at BEFORE UPDATE ON _oauth_configs
73
+ FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
74
+
75
+ DROP TRIGGER IF EXISTS update__audit_logs_updated_at ON _audit_logs;
76
+ CREATE TRIGGER update__audit_logs_updated_at BEFORE UPDATE ON _audit_logs
77
77
  FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
@@ -1,24 +1,24 @@
1
- -- Migration: 009 - Create function secrets table for edge functions environment variables
2
- -- This table stores encrypted secrets that are injected into edge functions as Deno.env variables
3
-
4
- CREATE TABLE IF NOT EXISTS _function_secrets (
5
- id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
6
- key VARCHAR(255) UNIQUE NOT NULL,
7
- value_ciphertext TEXT NOT NULL, -- Encrypted value using AES-256-GCM
8
- is_reserved BOOLEAN DEFAULT FALSE, -- System-reserved keys that can't be modified/deleted
9
- created_at TIMESTAMPTZ DEFAULT NOW(),
10
- updated_at TIMESTAMPTZ DEFAULT NOW()
11
- );
12
-
13
- -- Create index for faster key lookups
14
- CREATE INDEX IF NOT EXISTS idx_function_secrets_key ON _function_secrets(key);
15
-
16
- -- Add trigger for updated_at
17
- DROP TRIGGER IF EXISTS update__function_secrets_updated_at ON _function_secrets;
18
- CREATE TRIGGER update__function_secrets_updated_at BEFORE UPDATE ON _function_secrets
19
- FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
20
-
21
- -- Note: Reserved system secrets will be initialized by the application on startup
22
-
23
- -- Rename _edge_functions table to functions
1
+ -- Migration: 009 - Create function secrets table for edge functions environment variables
2
+ -- This table stores encrypted secrets that are injected into edge functions as Deno.env variables
3
+
4
+ CREATE TABLE IF NOT EXISTS _function_secrets (
5
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
6
+ key VARCHAR(255) UNIQUE NOT NULL,
7
+ value_ciphertext TEXT NOT NULL, -- Encrypted value using AES-256-GCM
8
+ is_reserved BOOLEAN DEFAULT FALSE, -- System-reserved keys that can't be modified/deleted
9
+ created_at TIMESTAMPTZ DEFAULT NOW(),
10
+ updated_at TIMESTAMPTZ DEFAULT NOW()
11
+ );
12
+
13
+ -- Create index for faster key lookups
14
+ CREATE INDEX IF NOT EXISTS idx_function_secrets_key ON _function_secrets(key);
15
+
16
+ -- Add trigger for updated_at
17
+ DROP TRIGGER IF EXISTS update__function_secrets_updated_at ON _function_secrets;
18
+ CREATE TRIGGER update__function_secrets_updated_at BEFORE UPDATE ON _function_secrets
19
+ FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
20
+
21
+ -- Note: Reserved system secrets will be initialized by the application on startup
22
+
23
+ -- Rename _edge_functions table to functions
24
24
  ALTER TABLE IF EXISTS _edge_functions RENAME TO _functions;