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,256 +1,293 @@
1
- ---
2
- title: Architecture
3
- description: PostgreSQL database with automatic REST APIs via PostgREST
4
- ---
5
-
6
- ## Overview
7
-
8
- InsForge uses a powerful database stack that automatically generates REST APIs from your PostgreSQL schema, eliminating the need to write backend CRUD code.
9
-
10
- ## Technology Stack
11
-
12
- ```mermaid
13
- graph TB
14
- Client[Client Application] --> SDK[InsForge SDK]
15
- SDK --> API[InsForge API]
16
- API --> PostgREST[PostgREST v12.2]
17
- PostgREST --> PG[(PostgreSQL 15)]
18
- API --> PG
19
-
20
- PG --> RLS[Row Level Security]
21
- PG --> Triggers[Database Triggers]
22
- PG --> Functions[Stored Functions]
23
- PG --> Schemas[Multiple Schemas]
24
-
25
- style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
26
- style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
27
- style API fill:#166534,stroke:#22c55e,color:#dcfce7
28
- style PostgREST fill:#c2410c,stroke:#fb923c,color:#fed7aa
29
- style PG fill:#0e7490,stroke:#06b6d4,color:#cffafe
30
- style RLS fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
31
- style Triggers fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
32
- style Functions fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
33
- style Schemas fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
34
- ```
35
-
36
- ## Core Components
37
-
38
- | Component | Technology | Version | Purpose |
39
- |-----------|------------|---------|---------|
40
- | **Database** | PostgreSQL | 15.13 | ACID-compliant relational database |
41
- | **REST API** | PostgREST | 12.2.12 | Auto-generates RESTful APIs from public schema only |
42
- | **Query Engine** | PostgREST DSL | - | Powerful filtering with operators and functions |
43
- | **Security** | Row Level Security | - | Fine-grained access control at the row level |
44
- | **Roles** | PostgreSQL Roles | - | anon (read-only), authenticated (CRUD), project_admin (full) |
45
- | **SDK** | @insforge/sdk | Latest | Type-safe JavaScript/TypeScript client |
46
-
47
- ## How It Works
48
-
49
- ### 1. Schema Definition
50
- When you create a table through the InsForge API or migrations:
51
- - Table structure is stored in PostgreSQL
52
- - PostgREST discovers the schema via database introspection
53
- - REST endpoints are instantly available
54
-
55
- ### 2. API Generation
56
- PostgREST automatically creates endpoints:
57
- - `GET /api/database/records/{table}` - Query records
58
- - `POST /api/database/records/{table}` - Insert records
59
- - `PATCH /api/database/records/{table}` - Update records
60
- - `DELETE /api/database/records/{table}` - Delete records
61
-
62
- ### 3. Query Translation
63
- HTTP requests are converted to optimized SQL:
64
- ```
65
- GET /api/database/records/products?price=gte.100&category=eq.electronics
66
-
67
- SELECT * FROM products
68
- WHERE price >= 100
69
- AND category = 'electronics'
70
- ```
71
-
72
- ### 4. Security Layer
73
- - JWT tokens are validated on each request
74
- - User ID extracted from token
75
- - RLS policies applied based on user context
76
- - Only authorized rows are returned
77
-
78
- ### 5. Response Format
79
- - Results returned as JSON arrays
80
- - HTTP status codes indicate success/failure
81
- - Headers include pagination info
82
-
83
- ## PostgREST Features
84
-
85
- <CardGroup cols={2}>
86
- <Card title="Instant APIs" icon="bolt">
87
- Every table gets full CRUD endpoints automatically without writing any backend code
88
- </Card>
89
-
90
- <Card title="Advanced Filtering" icon="filter">
91
- Complex queries with operators like `eq`, `gt`, `like`, `in`, `is`, `or`
92
- </Card>
93
-
94
- <Card title="Relationship Embedding" icon="link">
95
- Join related tables in single requests using foreign key relationships
96
- </Card>
97
-
98
- <Card title="Bulk Operations" icon="layer-group">
99
- Insert, update, or delete multiple records in a single atomic transaction
100
- </Card>
101
-
102
- <Card title="Computed Fields" icon="calculator">
103
- Expose database functions and views as API endpoints
104
- </Card>
105
-
106
- <Card title="Real-time Updates" icon="sync">
107
- NOTIFY/LISTEN for schema changes without restart
108
- </Card>
109
- </CardGroup>
110
-
111
- ## Database Structure
112
-
113
- InsForge uses two PostgreSQL databases:
114
-
115
- ### Main Database (`insforge`)
116
- All application and system tables reside in the `public` schema:
117
-
118
- | Table Type | Purpose | Examples |
119
- |------------|---------|----------|
120
- | **User Tables** | Created by developers | Any table you create |
121
- | **System Tables** | Internal InsForge tables | Prefixed with `_` |
122
-
123
- ### Analytics Database (`_insforge`)
124
- Separate database for analytics with `_analytics` schema for Logflare integration.
125
-
126
- ### System Tables (in `public` schema)
127
-
128
- | Table | Purpose |
129
- |-------|---------|
130
- | `_accounts` | Core user authentication records |
131
- | `users` | User profile data (references _accounts) |
132
- | `_account_providers` | OAuth provider connections |
133
- | `_storage_buckets` | Storage bucket configuration |
134
- | `_storage` | File metadata and references |
135
- | `_ai_configs` | AI model configurations per project |
136
- | `_ai_usage` | AI token usage tracking |
137
- | `_config` | System configuration key-value store |
138
- | `_metadata` | Application metadata |
139
- | `_mcp_usage` | MCP tool usage tracking |
140
- | `_edge_functions` | Serverless function definitions |
141
- | `logs` | Activity and audit logs |
142
-
143
- ## Query Syntax
144
-
145
- PostgREST provides a powerful query syntax that maps to SQL:
146
-
147
- ### Operators
148
-
149
- | Operator | SQL Equivalent | Example |
150
- |----------|---------------|---------|
151
- | `eq` | `=` | `?id=eq.123` |
152
- | `neq` | `!=` | `?status=neq.deleted` |
153
- | `gt` | `>` | `?age=gt.18` |
154
- | `gte` | `>=` | `?price=gte.100` |
155
- | `lt` | `<` | `?created=lt.2024-01-01` |
156
- | `lte` | `<=` | `?quantity=lte.10` |
157
- | `like` | `LIKE` | `?name=like.*john*` |
158
- | `ilike` | `ILIKE` | `?email=ilike.*gmail*` |
159
- | `in` | `IN` | `?status=in.(active,pending)` |
160
- | `is` | `IS` | `?deleted_at=is.null` |
161
-
162
- ### Complex Queries
163
-
164
- ```javascript
165
- // Combine conditions with AND
166
- GET /api/database/records/products?price=gte.100&category=eq.electronics
167
-
168
- // OR conditions
169
- GET /api/database/records/products?or=(price.lt.50,on_sale.is.true)
170
-
171
- // Nested conditions
172
- GET /api/database/records/orders?and=(status.eq.pending,or=(priority.eq.high,created_at.lt.2024-01-01))
173
- ```
174
-
175
- ## Performance Optimizations
176
-
177
- ### Connection Pooling
178
- - PgBouncer manages database connections
179
- - Reduces connection overhead
180
- - Handles concurrent requests efficiently
181
-
182
- ### Query Optimization
183
- - PostgREST generates optimized SQL
184
- - Uses prepared statements
185
- - Leverages PostgreSQL query planner
186
-
187
- ### Indexing Strategy
188
- - Automatic indexes on primary keys
189
- - Foreign key indexes for joins
190
- - Custom indexes via migrations
191
-
192
- ### Caching
193
- - ETags for conditional requests
194
- - Client-side caching support
195
- - Response compression
196
-
197
- ## Data Types
198
-
199
- PostgreSQL types are automatically mapped to JSON:
200
-
201
- | InsForge Type | PostgreSQL Type | JSON Type | Notes |
202
- |---------------|----------------|-----------|-------|
203
- | `string` | `TEXT` | string | Text of any length |
204
- | `integer` | `INTEGER` | number | 32-bit integers |
205
- | `float` | `DOUBLE PRECISION` | number | Decimal numbers |
206
- | `boolean` | `BOOLEAN` | boolean | true/false |
207
- | `date` | `DATE` | string | ISO 8601 date format |
208
- | `datetime` | `TIMESTAMPTZ` | string | ISO 8601 with timezone |
209
- | `uuid` | `UUID` | string | Auto-generated unique identifier |
210
- | `json` | `JSONB` | object/array | Structured JSON data with indexing |
211
-
212
- ## Best Practices
213
-
214
- <CardGroup cols={2}>
215
- <Card title="Use Indexes" icon="gauge">
216
- Create indexes on frequently queried columns
217
- </Card>
218
-
219
- <Card title="Leverage RLS" icon="shield">
220
- Implement Row Level Security for data isolation
221
- </Card>
222
-
223
- <Card title="Batch Operations" icon="boxes">
224
- Use bulk inserts/updates for better performance
225
- </Card>
226
-
227
- <Card title="Select Columns" icon="table-columns">
228
- Query only needed columns to reduce payload
229
- </Card>
230
-
231
- <Card title="Use Views" icon="eye">
232
- Create views for complex queries
233
- </Card>
234
-
235
- <Card title="Monitor Performance" icon="chart-line">
236
- Use EXPLAIN ANALYZE for slow queries
237
- </Card>
238
- </CardGroup>
239
-
240
- ## Limitations
241
-
242
- - **No Custom Business Logic**: PostgREST handles CRUD only
243
- - **SQL Knowledge Helpful**: Complex queries benefit from SQL understanding
244
- - **Schema Changes**: Require PostgREST reload (automatic via NOTIFY)
245
- - **File Handling**: Use storage API for files, not database
246
-
247
- ## Comparison with Traditional APIs
248
-
249
- | Aspect | Traditional REST API | InsForge + PostgREST |
250
- |--------|---------------------|----------------------|
251
- | **Development Time** | Write CRUD for each table | Instant APIs from schema |
252
- | **Maintenance** | Update code for schema changes | Automatic updates |
253
- | **Performance** | Depends on implementation | Optimized SQL generation |
254
- | **Consistency** | Varies by developer | Uniform API patterns |
255
- | **Documentation** | Manual updates needed | Auto-generated OpenAPI |
1
+ ---
2
+ title: Database Architecture
3
+ description: PostgreSQL database with automatic REST APIs via PostgREST
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ InsForge uses a powerful database stack that automatically generates REST APIs from your PostgreSQL schema, eliminating the need to write backend CRUD code.
9
+
10
+ ## Technology Stack
11
+
12
+ ```mermaid
13
+ graph TB
14
+ Client[Client Application] --> SDK[InsForge SDK]
15
+ SDK --> API[InsForge API]
16
+ API --> PostgREST[PostgREST v12.2]
17
+ PostgREST --> PG[(PostgreSQL 15)]
18
+ API --> PG
19
+
20
+ PG --> RLS[Row Level Security]
21
+ PG --> Triggers[Database Triggers]
22
+ PG --> Functions[Stored Functions]
23
+ PG --> Schemas[Multiple Schemas]
24
+
25
+ style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
26
+ style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
27
+ style API fill:#166534,stroke:#22c55e,color:#dcfce7
28
+ style PostgREST fill:#c2410c,stroke:#fb923c,color:#fed7aa
29
+ style PG fill:#0e7490,stroke:#06b6d4,color:#cffafe
30
+ style RLS fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
31
+ style Triggers fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
32
+ style Functions fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
33
+ style Schemas fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
34
+ ```
35
+
36
+ ## Core Components
37
+
38
+ | Component | Technology | Version | Purpose |
39
+ |-----------|------------|---------|---------|
40
+ | **Database** | PostgreSQL | 15.13 | ACID-compliant relational database |
41
+ | **REST API** | PostgREST | 12.2.12 | Auto-generates RESTful APIs from public schema only |
42
+ | **Query Engine** | PostgREST DSL | - | Powerful filtering with operators and functions |
43
+ | **Security** | Row Level Security | - | Fine-grained access control at the row level |
44
+ | **Roles** | PostgreSQL Roles | - | anon (read-only), authenticated (CRUD), project_admin (full) |
45
+ | **SDK** | @insforge/sdk | Latest | Type-safe JavaScript/TypeScript client |
46
+
47
+ ## How It Works
48
+
49
+ ### 1. Schema Definition
50
+ When you create a table through the InsForge API or migrations:
51
+ - Table structure is stored in PostgreSQL
52
+ - PostgREST discovers the schema via database introspection
53
+ - REST endpoints are instantly available
54
+
55
+ ### 2. API Generation
56
+ PostgREST automatically creates endpoints:
57
+ - `GET /api/database/records/{table}` - Query records
58
+ - `POST /api/database/records/{table}` - Insert records
59
+ - `PATCH /api/database/records/{table}` - Update records
60
+ - `DELETE /api/database/records/{table}` - Delete records
61
+
62
+ ### 3. Query Translation
63
+ HTTP requests are converted to optimized SQL:
64
+ ```
65
+ GET /api/database/records/products?price=gte.100&category=eq.electronics
66
+
67
+ SELECT * FROM products
68
+ WHERE price >= 100
69
+ AND category = 'electronics'
70
+ ```
71
+
72
+ ### 4. Security Layer
73
+ - JWT tokens are validated on each request
74
+ - User ID extracted from token
75
+ - RLS policies applied based on user context
76
+ - Only authorized rows are returned
77
+
78
+ ### 5. Response Format
79
+ - Results returned as JSON arrays
80
+ - HTTP status codes indicate success/failure
81
+ - Headers include pagination info
82
+
83
+ ## PostgREST Features
84
+
85
+ <CardGroup cols={2}>
86
+ <Card title="Instant APIs" icon="bolt">
87
+ Every table gets full CRUD endpoints automatically without writing any backend code
88
+ </Card>
89
+
90
+ <Card title="Advanced Filtering" icon="filter">
91
+ Complex queries with operators like `eq`, `gt`, `like`, `in`, `is`, `or`
92
+ </Card>
93
+
94
+ <Card title="Relationship Embedding" icon="link">
95
+ Join related tables in single requests using foreign key relationships
96
+ </Card>
97
+
98
+ <Card title="Bulk Operations" icon="layer-group">
99
+ Insert, update, or delete multiple records in a single atomic transaction
100
+ </Card>
101
+
102
+ <Card title="Computed Fields" icon="calculator">
103
+ Expose database functions and views as API endpoints
104
+ </Card>
105
+
106
+ <Card title="Real-time Updates" icon="sync">
107
+ NOTIFY/LISTEN for schema changes without restart
108
+ </Card>
109
+ </CardGroup>
110
+
111
+ ## Database Structure
112
+
113
+ InsForge uses two PostgreSQL databases:
114
+
115
+ ### Main Database (`insforge`)
116
+ Tables are organized into dedicated schemas for better organization and security:
117
+
118
+ | Schema | Purpose | Access |
119
+ |--------|---------|--------|
120
+ | **public** | User-created tables | PostgREST (auto-generated APIs) |
121
+ | **auth** | Authentication & user data | Internal APIs only |
122
+ | **storage** | File storage metadata | Internal APIs only |
123
+ | **ai** | AI configuration & usage | Internal APIs only |
124
+ | **functions** | Edge function definitions | Internal APIs only |
125
+ | **realtime** | Real-time pub/sub channels | Internal APIs only |
126
+ | **system** | Core system data | Internal APIs only |
127
+
128
+ ### Schema Details
129
+
130
+ #### `auth` Schema (Authentication)
131
+
132
+ | Table | Purpose |
133
+ |-------|---------|
134
+ | `users` | Core user records with metadata |
135
+ | `user_providers` | OAuth provider connections |
136
+ | `configs` | Authentication settings |
137
+ | `oauth_configs` | OAuth provider configurations |
138
+ | `email_otps` | Email verification codes |
139
+
140
+ #### `storage` Schema (File Storage)
141
+
142
+ | Table | Purpose |
143
+ |-------|---------|
144
+ | `buckets` | Storage bucket configuration |
145
+ | `objects` | File metadata and references |
146
+
147
+ #### `ai` Schema (AI Integration)
148
+
149
+ | Table | Purpose |
150
+ |-------|---------|
151
+ | `configs` | AI model configurations per project |
152
+ | `usage` | AI token usage tracking |
153
+
154
+ #### `functions` Schema (Edge Functions)
155
+
156
+ | Table | Purpose |
157
+ |-------|---------|
158
+ | `definitions` | Serverless function definitions |
159
+
160
+ #### `realtime` Schema (Real-time Pub/Sub)
161
+
162
+ | Table | Purpose |
163
+ |-------|---------|
164
+ | `channels` | Channel metadata and subscription configuration for real-time Pub/Sub |
165
+ | `messages` | Real-time message queue |
166
+
167
+ #### `system` Schema (Core System)
168
+
169
+ | Table | Purpose |
170
+ |-------|---------|
171
+ | `secrets` | Encrypted system secrets |
172
+ | `audit_logs` | Activity and audit logs |
173
+ | `mcp_usage` | MCP tool usage tracking |
174
+ | `migrations` | Database migration history |
175
+
176
+ <Note>
177
+ Only tables in the `public` schema are exposed via PostgREST auto-generated APIs. System schemas are accessible only through internal InsForge APIs.
178
+ </Note>
179
+
180
+ ## Query Syntax
181
+
182
+ PostgREST provides a powerful query syntax that maps to SQL:
183
+
184
+ ### Operators
185
+
186
+ | Operator | SQL Equivalent | Example |
187
+ |----------|---------------|---------|
188
+ | `eq` | `=` | `?id=eq.123` |
189
+ | `neq` | `!=` | `?status=neq.deleted` |
190
+ | `gt` | `>` | `?age=gt.18` |
191
+ | `gte` | `>=` | `?price=gte.100` |
192
+ | `lt` | `<` | `?created=lt.2024-01-01` |
193
+ | `lte` | `<=` | `?quantity=lte.10` |
194
+ | `like` | `LIKE` | `?name=like.*john*` |
195
+ | `ilike` | `ILIKE` | `?email=ilike.*gmail*` |
196
+ | `in` | `IN` | `?status=in.(active,pending)` |
197
+ | `is` | `IS` | `?deleted_at=is.null` |
198
+
199
+ ### Complex Queries
200
+
201
+ ```javascript
202
+ // Combine conditions with AND
203
+ GET /api/database/records/products?price=gte.100&category=eq.electronics
204
+
205
+ // OR conditions
206
+ GET /api/database/records/products?or=(price.lt.50,on_sale.is.true)
207
+
208
+ // Nested conditions
209
+ GET /api/database/records/orders?and=(status.eq.pending,or=(priority.eq.high,created_at.lt.2024-01-01))
210
+ ```
211
+
212
+ ## Performance Optimizations
213
+
214
+ ### Connection Pooling
215
+ - PgBouncer manages database connections
216
+ - Reduces connection overhead
217
+ - Handles concurrent requests efficiently
218
+
219
+ ### Query Optimization
220
+ - PostgREST generates optimized SQL
221
+ - Uses prepared statements
222
+ - Leverages PostgreSQL query planner
223
+
224
+ ### Indexing Strategy
225
+ - Automatic indexes on primary keys
226
+ - Foreign key indexes for joins
227
+ - Custom indexes via migrations
228
+
229
+ ### Caching
230
+ - ETags for conditional requests
231
+ - Client-side caching support
232
+ - Response compression
233
+
234
+ ## Data Types
235
+
236
+ PostgreSQL types are automatically mapped to JSON:
237
+
238
+ | InsForge Type | PostgreSQL Type | JSON Type | Notes |
239
+ |---------------|----------------|-----------|-------|
240
+ | `string` | `TEXT` | string | Text of any length |
241
+ | `integer` | `INTEGER` | number | 32-bit integers |
242
+ | `float` | `DOUBLE PRECISION` | number | Decimal numbers |
243
+ | `boolean` | `BOOLEAN` | boolean | true/false |
244
+ | `date` | `DATE` | string | ISO 8601 date format |
245
+ | `datetime` | `TIMESTAMPTZ` | string | ISO 8601 with timezone |
246
+ | `uuid` | `UUID` | string | Auto-generated unique identifier |
247
+ | `json` | `JSONB` | object/array | Structured JSON data with indexing |
248
+
249
+ ## Best Practices
250
+
251
+ <CardGroup cols={2}>
252
+ <Card title="Use Indexes" icon="gauge">
253
+ Create indexes on frequently queried columns
254
+ </Card>
255
+
256
+ <Card title="Leverage RLS" icon="shield">
257
+ Implement Row Level Security for data isolation
258
+ </Card>
259
+
260
+ <Card title="Batch Operations" icon="boxes">
261
+ Use bulk inserts/updates for better performance
262
+ </Card>
263
+
264
+ <Card title="Select Columns" icon="table-columns">
265
+ Query only needed columns to reduce payload
266
+ </Card>
267
+
268
+ <Card title="Use Views" icon="eye">
269
+ Create views for complex queries
270
+ </Card>
271
+
272
+ <Card title="Monitor Performance" icon="chart-line">
273
+ Use EXPLAIN ANALYZE for slow queries
274
+ </Card>
275
+ </CardGroup>
276
+
277
+ ## Limitations
278
+
279
+ - **No Custom Business Logic**: PostgREST handles CRUD only
280
+ - **SQL Knowledge Helpful**: Complex queries benefit from SQL understanding
281
+ - **Schema Changes**: Require PostgREST reload (automatic via NOTIFY)
282
+ - **File Handling**: Use storage API for files, not database
283
+
284
+ ## Comparison with Traditional APIs
285
+
286
+ | Aspect | Traditional REST API | InsForge + PostgREST |
287
+ |--------|---------------------|----------------------|
288
+ | **Development Time** | Write CRUD for each table | Instant APIs from schema |
289
+ | **Maintenance** | Update code for schema changes | Automatic updates |
290
+ | **Performance** | Depends on implementation | Optimized SQL generation |
291
+ | **Consistency** | Varies by developer | Uniform API patterns |
292
+ | **Documentation** | Manual updates needed | Auto-generated OpenAPI |
256
293
  | **Security** | Custom implementation | Built-in RLS + JWT |