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
@@ -0,0 +1,79 @@
1
+ # InsForge Deployment - Agent Documentation
2
+
3
+ ## Overview
4
+
5
+ Deploy frontend applications to InsForge using the `create-deployment` MCP tool. The tool handles uploading source files, building, and deploying automatically.
6
+
7
+ ## Deploy with MCP Tool
8
+
9
+ Use the `create-deployment` tool with these parameters:
10
+
11
+ | Parameter | Required | Description |
12
+ |-----------|----------|-------------|
13
+ | `sourceDirectory` | Yes | **Absolute path** to source directory (e.g., `/Users/me/project/frontend`). Relative paths do not work. |
14
+ | `projectSettings.buildCommand` | No | Build command (default: auto-detected) |
15
+ | `projectSettings.outputDirectory` | No | Build output directory (default: auto-detected) |
16
+ | `projectSettings.installCommand` | No | Install command (default: `npm install`) |
17
+ | `projectSettings.rootDirectory` | No | Root directory within source |
18
+ | `envVars` | No | Array of `{key, value}` objects |
19
+ | `meta` | No | Custom metadata key-value pairs |
20
+
21
+ ### Example
22
+
23
+ ```json
24
+ {
25
+ "sourceDirectory": "/Users/me/project/frontend",
26
+ "projectSettings": {
27
+ "buildCommand": "npm run build",
28
+ "outputDirectory": "dist"
29
+ },
30
+ "envVars": [
31
+ { "key": "VITE_INSFORGE_BASE_URL", "value": "https://your-project.insforge.app" },
32
+ { "key": "VITE_INSFORGE_ANON_KEY", "value": "your-anon-key" }
33
+ ]
34
+ }
35
+ ```
36
+
37
+ **Important**:
38
+ - `sourceDirectory` must be an **absolute path** (relative paths don't work on Windows)
39
+ - Pass the source directory, NOT pre-built static files
40
+ - Include all required environment variables (e.g., `VITE_*` for Vite apps)
41
+
42
+ ## Check Deployment Status
43
+
44
+ After creating a deployment, query the status using `run-raw-sql`:
45
+
46
+ ```sql
47
+ SELECT id, status, url, created_at
48
+ FROM system.deployments
49
+ ORDER BY created_at DESC
50
+ LIMIT 1;
51
+ ```
52
+
53
+ ### Status Values
54
+
55
+ | Status | Description |
56
+ |--------|-------------|
57
+ | `WAITING` | Waiting for source upload |
58
+ | `UPLOADING` | Uploading to build server |
59
+ | `QUEUED` | Queued for build |
60
+ | `BUILDING` | Building (typically ~1 min) |
61
+ | `READY` | Deployment complete, URL available |
62
+ | `ERROR` | Build or deployment failed |
63
+ | `CANCELED` | Deployment was cancelled |
64
+
65
+ ### Get Deployment URL
66
+
67
+ Once status is `READY`, the `url` column contains the live deployment URL.
68
+
69
+ ```sql
70
+ SELECT url FROM system.deployments WHERE id = '<deployment-id>';
71
+ ```
72
+
73
+ ## Quick Reference
74
+
75
+ | Task | Tool | Command |
76
+ |------|------|---------|
77
+ | Deploy app | `create-deployment` | Provide `sourceDirectory` and `envVars` |
78
+ | Check status | `run-raw-sql` | `SELECT status FROM system.deployments WHERE id = '...'` |
79
+ | List deployments | `run-raw-sql` | `SELECT * FROM system.deployments ORDER BY created_at DESC` |
@@ -0,0 +1,269 @@
1
+ # InsForge Realtime - Agent Documentation
2
+
3
+ ## Overview
4
+
5
+ InsForge Realtime enables real-time pub/sub messaging via WebSockets:
6
+ - **Database events**: Emit events when data changes using triggers
7
+ - **Client events**: Clients can publish custom events to each other
8
+
9
+ ## Backend Setup (Raw SQL)
10
+
11
+ ### Step 1: Create Channel Patterns
12
+
13
+ Define which channels are available:
14
+
15
+ ```sql
16
+ INSERT INTO realtime.channels (pattern, description, enabled)
17
+ VALUES
18
+ ('orders', 'Global order events', true),
19
+ ('order:%', 'Order-specific events (order:123, order:456)', true),
20
+ ('chat:%', 'Chat room events', true);
21
+ ```
22
+
23
+ **Pattern syntax**: Use `:` as separator, `%` as wildcard (SQL LIKE pattern).
24
+
25
+ ### Step 2: Create Triggers for Database Events
26
+
27
+ **IMPORTANT**: To emit events when database rows change, create a trigger that calls `realtime.publish()`:
28
+
29
+ ```sql
30
+ -- Step 2a: Create the trigger function
31
+ CREATE OR REPLACE FUNCTION notify_order_changes()
32
+ RETURNS TRIGGER AS $$
33
+ BEGIN
34
+ PERFORM realtime.publish(
35
+ 'order:' || NEW.id::text, -- channel name
36
+ TG_OP || '_order', -- event name: INSERT_order, UPDATE_order, DELETE_order
37
+ jsonb_build_object( -- payload (what clients receive)
38
+ 'id', NEW.id,
39
+ 'status', NEW.status,
40
+ 'total', NEW.total
41
+ )
42
+ );
43
+ RETURN NEW;
44
+ END;
45
+ $$ LANGUAGE plpgsql SECURITY DEFINER;
46
+
47
+ -- Step 2b: Attach trigger to table
48
+ CREATE TRIGGER order_realtime
49
+ AFTER INSERT OR UPDATE ON orders
50
+ FOR EACH ROW
51
+ EXECUTE FUNCTION notify_order_changes();
52
+ ```
53
+
54
+ ### Step 3: Add Access Control (Optional)
55
+
56
+ **RLS is disabled by default** for the best developer experience. All authenticated and anonymous users can subscribe to any channel and publish messages out of the box.
57
+
58
+ To restrict access, first enable RLS, then add policies:
59
+
60
+ #### Step 3a: Enable RLS
61
+
62
+ ```sql
63
+ ALTER TABLE realtime.channels ENABLE ROW LEVEL SECURITY;
64
+ ALTER TABLE realtime.messages ENABLE ROW LEVEL SECURITY;
65
+ ```
66
+
67
+ #### Step 3b: Restrict who can subscribe (SELECT on realtime.channels)
68
+
69
+ ```sql
70
+ -- Only order owner can subscribe to their order channel
71
+ CREATE POLICY "users_subscribe_own_orders"
72
+ ON realtime.channels FOR SELECT
73
+ TO authenticated
74
+ USING (
75
+ pattern = 'order:%'
76
+ AND EXISTS (
77
+ SELECT 1 FROM orders
78
+ WHERE id = NULLIF(split_part(realtime.channel_name(), ':', 2), '')::uuid
79
+ AND user_id = auth.uid()
80
+ )
81
+ );
82
+ ```
83
+
84
+ **Note**: Use `realtime.channel_name()` in subscribe policies to get the actual channel (e.g., `order:123`) since the table only stores patterns (e.g., `order:%`).
85
+
86
+ #### Step 3c: Restrict who can publish from client (INSERT on realtime.messages)
87
+
88
+ ```sql
89
+ -- Only chat room members can publish messages
90
+ CREATE POLICY "members_publish_chat"
91
+ ON realtime.messages FOR INSERT
92
+ TO authenticated
93
+ WITH CHECK (
94
+ channel_name LIKE 'chat:%'
95
+ AND EXISTS (
96
+ SELECT 1 FROM chat_members
97
+ WHERE room_id = NULLIF(split_part(channel_name, ':', 2), '')::uuid
98
+ AND user_id = auth.uid()
99
+ )
100
+ );
101
+ ```
102
+
103
+ ## Frontend SDK
104
+
105
+ ### Setup
106
+
107
+ ```typescript
108
+ import { createClient } from '@insforge/sdk'
109
+
110
+ const insforge = createClient({
111
+ baseUrl: 'https://your-project.insforge.app'
112
+ })
113
+ ```
114
+
115
+ ### Core Methods
116
+
117
+ #### connect() - Establish WebSocket connection
118
+
119
+ ```typescript
120
+ await insforge.realtime.connect()
121
+ ```
122
+
123
+ #### subscribe(channel) - Subscribe to a channel
124
+
125
+ ```typescript
126
+ const { ok, error } = await insforge.realtime.subscribe('order:123')
127
+ if (!ok) console.error('Failed:', error?.message)
128
+ ```
129
+
130
+ #### on(event, callback) - Listen for events
131
+
132
+ ```typescript
133
+ // Listen for database-triggered events
134
+ insforge.realtime.on('INSERT_order', (payload) => {
135
+ console.log('New order:', payload.id, payload.status)
136
+ })
137
+
138
+ insforge.realtime.on('UPDATE_order', (payload) => {
139
+ console.log('Order updated:', payload)
140
+ })
141
+ ```
142
+
143
+ #### once(event, callback) - Listen for event once
144
+
145
+ ```typescript
146
+ // Auto-removes after first invocation
147
+ insforge.realtime.once('order_completed', (payload) => {
148
+ console.log('Order completed:', payload)
149
+ })
150
+ ```
151
+
152
+ #### publish(channel, event, payload) - Send client events
153
+
154
+ ```typescript
155
+ // Must be subscribed to channel first
156
+ await insforge.realtime.publish('chat:room-1', 'new_message', {
157
+ text: 'Hello!',
158
+ sender: 'Alice'
159
+ })
160
+ ```
161
+
162
+ #### unsubscribe(channel)
163
+
164
+ ```typescript
165
+ insforge.realtime.unsubscribe('order:123')
166
+ ```
167
+
168
+ #### off(event, callback) - Remove listener
169
+
170
+ ```typescript
171
+ insforge.realtime.off('UPDATE_order', handler)
172
+ ```
173
+
174
+ #### disconnect() - Close connection
175
+
176
+ ```typescript
177
+ insforge.realtime.disconnect()
178
+ ```
179
+
180
+ ### Connection Events
181
+
182
+ ```typescript
183
+ insforge.realtime.on('connect', () => console.log('Connected'))
184
+ insforge.realtime.on('disconnect', (reason) => console.log('Disconnected:', reason))
185
+ insforge.realtime.on('connect_error', (err) => console.error('Connection failed:', err))
186
+ insforge.realtime.on('error', ({ code, message }) => console.error('Error:', code, message))
187
+ ```
188
+
189
+ **Error codes**: `UNAUTHORIZED`, `NOT_SUBSCRIBED`, `INTERNAL_ERROR`
190
+
191
+ ### Properties
192
+
193
+ ```typescript
194
+ insforge.realtime.isConnected // boolean
195
+ insforge.realtime.connectionState // 'disconnected' | 'connecting' | 'connected'
196
+ insforge.realtime.socketId // string (when connected)
197
+ insforge.realtime.getSubscribedChannels() // string[]
198
+ ```
199
+
200
+ ### Message Metadata
201
+
202
+ All received messages include a `meta` field:
203
+
204
+ ```typescript
205
+ insforge.realtime.on('UPDATE_order', (payload) => {
206
+ console.log(payload.meta.messageId) // UUID
207
+ console.log(payload.meta.channel) // 'order:123'
208
+ console.log(payload.meta.senderType) // 'system' (trigger) or 'user' (client)
209
+ console.log(payload.meta.timestamp) // Date
210
+
211
+ // Your payload fields
212
+ console.log(payload.status)
213
+ })
214
+ ```
215
+
216
+ ## Complete Example
217
+
218
+ **Backend SQL:**
219
+ ```sql
220
+ -- 1. Create channel
221
+ INSERT INTO realtime.channels (pattern, description, enabled)
222
+ VALUES ('order:%', 'Order updates', true);
223
+
224
+ -- 2. Create trigger for database events
225
+ CREATE OR REPLACE FUNCTION notify_order_status()
226
+ RETURNS TRIGGER AS $$
227
+ BEGIN
228
+ PERFORM realtime.publish(
229
+ 'order:' || NEW.id::text,
230
+ 'status_changed',
231
+ jsonb_build_object('id', NEW.id, 'status', NEW.status, 'updated_at', NEW.updated_at)
232
+ );
233
+ RETURN NEW;
234
+ END;
235
+ $$ LANGUAGE plpgsql SECURITY DEFINER;
236
+
237
+ CREATE TRIGGER order_status_trigger
238
+ AFTER UPDATE ON orders
239
+ FOR EACH ROW
240
+ WHEN (OLD.status IS DISTINCT FROM NEW.status)
241
+ EXECUTE FUNCTION notify_order_status();
242
+ ```
243
+
244
+ **Frontend:**
245
+ ```typescript
246
+ await insforge.realtime.connect()
247
+ await insforge.realtime.subscribe(`order:${orderId}`)
248
+
249
+ // Listen for database-triggered events
250
+ insforge.realtime.on('status_changed', (payload) => {
251
+ updateUI(payload.status)
252
+ })
253
+
254
+ // Client can also publish events to the same channel
255
+ await insforge.realtime.publish(`order:${orderId}`, 'customer_viewed', {
256
+ viewedAt: new Date().toISOString()
257
+ })
258
+ ```
259
+
260
+ ## Quick Reference
261
+
262
+ | Task | How |
263
+ |------|-----|
264
+ | Emit event on DB change | Create trigger calling `realtime.publish(channel, event, payload)` |
265
+ | Client sends event | `insforge.realtime.publish(channel, event, payload)` |
266
+ | Listen for events | `insforge.realtime.on(eventName, callback)` |
267
+ | Listen once | `insforge.realtime.once(eventName, callback)` |
268
+ | Restrict subscribe access | Enable RLS on `realtime.channels`, then add SELECT policy |
269
+ | Restrict client publish | Enable RLS on `realtime.messages`, then add INSERT policy |
@@ -1,67 +1,212 @@
1
- ---
2
- title: "Changelog"
3
- description: "Latest updates and improvements to InsForge"
4
- ---
5
-
6
- ## November 2025
7
-
8
- <AccordionGroup>
9
- <Accordion title="November 30, 2025" icon="rocket">
10
- ### QuickStart Prompts & Templates
11
- Get started faster with our new quickstart prompts and templates for common apps. Builders can now start with one click and get a fullstack app running in **5 minutes**.
12
-
13
- <img src="/images/changelog/nov-2025/quickstart-prompts.webp" alt="QuickStart Prompts and Templates" />
14
-
15
- ### Auth Components
16
- Drop-in prebuilt React auth components for your app. Get a working auth flow right away with social sign-on support built in by default.
17
-
18
- <img src="/images/changelog/nov-2025/auth-components.webp" alt="Auth Components with Social Sign-on" />
19
-
20
- ### Database Metadata Dashboard
21
- View your RLS policies, triggers, functions, and indexes all in one place. This makes debugging and understanding your project security much easier.
22
-
23
- <img src="/images/changelog/nov-2025/database-metadata.webp" alt="Database Metadata Dashboard" />
24
-
25
- ### SQL Editor
26
- Run SQL queries directly in the InsForge dashboard. No external tools required.
27
-
28
- <img src="/images/changelog/nov-2025/sql-editor.webp" alt="SQL Editor in Dashboard" />
29
-
30
- ### Usage Page
31
- A new dashboard section that displays a clear breakdown of your resource usage and what your plan includes.
32
-
33
- <img src="/images/changelog/nov-2025/usage-page.webp" alt="Usage Page Dashboard" />
34
- </Accordion>
35
- </AccordionGroup>
36
-
37
- ## October 2025
38
-
39
- <AccordionGroup>
40
- <Accordion title="October 30, 2025" icon="rocket">
41
- ### OAuth: 4 New Third-Party Providers
42
- You can now enable third-party logins with **LinkedIn, Microsoft, Facebook, and Discord**. On InsForge Cloud, we provide shared credentials for developers who want to quickly test these login flows.
43
-
44
- After enabling, you can implement these logins directly through your agent by sending a simple prompt:
45
-
46
- ```text
47
- implement Discord login
48
- ```
49
-
50
- <img src="/images/changelog/october-2025/oauth-providers.webp" alt="OAuth Providers - LinkedIn, Microsoft, Facebook, and Discord" />
51
-
52
- ### Import CSV to Your Table
53
- You can now upload `.csv` files directly into any table from the dashboard. Perfect for bringing in sample data or migrating from other tools.
54
-
55
- <img src="/images/changelog/october-2025/csv-upload.webp" alt="CSV Upload to Tables Feature" />
56
-
57
- ### InsForge.js SDK
58
- We've released our **insforge-js SDK** to make it easier for developers to integrate InsForge into their workflows. Manage auth, query databases, and control your backend programmatically with a few lines of code.
59
-
60
- **Repository:** [GitHub](https://github.com/InsForge/InsForge-sdk-js)
61
-
62
- ### Logs
63
- The new logs page lets you monitor container logs in real time. You can watch your backend activity directly in the dashboard, or let AI coding agents query logs through the InsForge MCP to automatically debug and search for errors.
64
-
65
- <img src="/images/changelog/october-2025/logs-feature.webp" alt="Real-time Logs Monitoring Feature" />
66
- </Accordion>
67
- </AccordionGroup>
1
+ ---
2
+ title: "Changelog"
3
+ description: "New features, improvements, and fixes shipped to InsForge."
4
+ ---
5
+
6
+ <Update label="Dec 21, 2025" tags={["Realtime", "Auth", "Payments", "AI"]}>
7
+ ## Realtime Module
8
+
9
+ We launched a new Realtime module built on WebSockets with a pub/sub architecture. It supports channels for live updates, message history for state syncing, and RLS-based permissions out of the box—making it well suited for real-time apps, games, chat, and collaborative experiences.
10
+
11
+ <Frame>
12
+ <img src="/images/changelog/dec-2025/realtime2.png" alt="Realtime module with collaborative cursors and messaging" />
13
+ </Frame>
14
+
15
+ ### Apple OAuth
16
+
17
+ Apple OAuth is now available in InsForge Auth, as requested by the community. You can enable Sign in with Apple in a few clicks and ship apps with Apple login without manual OAuth setup.
18
+
19
+ <Frame>
20
+ <video autoPlay muted loop playsInline src="/images/changelog/dec-2025/apple-oauth.mp4" />
21
+ </Frame>
22
+
23
+ ### Alipay Payments
24
+
25
+ Alipay is now supported for InsForge subscriptions, so you can subscribe without a credit card. This removes a major payment barrier for users in the APAC region.
26
+
27
+ ### More Models in the Model Gateway
28
+
29
+ We have added more popular and state-of-the-art models to the InsForge Model Gateway so you can choose the right model for each use case:
30
+
31
+ - **GPT 5.2** - Stronger reasoning and longer context
32
+ - **DeepSeek V3** - High performance at a lower cost
33
+ - **Gemini 3 Flash** - Low latency real-time inference
34
+
35
+ More models are coming soon.
36
+
37
+ <Frame>
38
+ <img src="/images/changelog/dec-2025/moreModels.png" alt="AI Integration dashboard with new models" />
39
+ </Frame>
40
+
41
+ [View AI SDK documentation →](/core-concepts/ai/sdk)
42
+ </Update>
43
+
44
+ <Update label="Dec 19, 2025" tags={["Multi Region", "Postgres Connection"]}>
45
+ ## Multi-Region Deployments
46
+ Deploy your project to the appropriate region for improved latency and compliance. We currently support `us-east`, `us-west`, `eu-central` and `ap-southeast` regions. More regions will be added based on demand.
47
+
48
+ <Frame>
49
+ <img src="/images/changelog/dec-2025/multi-region.webp" alt="Multi-Region Deployments" />
50
+ </Frame>
51
+
52
+ ## Postgres Connection
53
+ Connect to your project's Postgres database and query it directly from your database clients. This also allows you to integrate InsForge with external services and tools like n8n.
54
+
55
+ <Frame>
56
+ <img src="/images/changelog/dec-2025/postgres-connection.webp" alt="Postgres Connection" />
57
+ </Frame>
58
+ </Update>
59
+
60
+ <Update label="Dec 16, 2025" tags={["Email"]}>
61
+ ## Custom Emails (Private Preview)
62
+ Send custom transactional emails directly from your app using the SDK. Supports multiple recipients, CC/BCC, custom sender names, and full HTML content.
63
+
64
+ [View Email SDK documentation →](/core-concepts/email/sdk)
65
+ </Update>
66
+
67
+ <Update label="Dec 12, 2025" tags={["Payments", "AI"]}>
68
+ ## Alipay Payment Support
69
+ Added **Alipay** as an alternative payment method. Users can now pay for InsForge subscriptions without a credit card.
70
+
71
+ <Frame>
72
+ <img src="/images/changelog/dec-2025/alipay-payment.webp" alt="Alipay payment method option" />
73
+ </Frame>
74
+
75
+ ## New AI Models
76
+ Expanded AI model support:
77
+ - **GPT-5.2** - OpenAI's latest flagship model with enhanced reasoning, longer context windows, and improved instruction following
78
+ - **DeepSeek V3** - Open-weight model offering strong performance at lower cost, ideal for high-volume workloads
79
+
80
+ [View AI SDK documentation →](/core-concepts/ai/sdk)
81
+
82
+ <Frame>
83
+ <img src="/images/changelog/dec-2025/ai-models.webp" alt="AI Integration with new models" />
84
+ </Frame>
85
+ </Update>
86
+
87
+ <Update label="Dec 11, 2025" tags={["Auth", "Realtime"]}>
88
+ ## Apple Login
89
+ **Sign in with Apple** is now available as an OAuth provider. Enable it in your project settings and let users authenticate with their Apple ID. Like other social providers, InsForge Cloud offers shared credentials for quick testing.
90
+
91
+ [View Authentication docs →](/core-concepts/authentication/sdk)
92
+
93
+ <Frame>
94
+ <img src="/images/changelog/dec-2025/apple-login.jpg" alt="Sign in with Apple authentication" />
95
+ </Frame>
96
+
97
+ ## Realtime Module
98
+ Build apps with **realtime pub/sub messaging**. Whether you're creating a chat room, multiplayer game, or collaborative document editor, the new Realtime module handles WebSocket connections, channel subscriptions, and message delivery out of the box.
99
+
100
+ Key features include:
101
+ - **Channel patterns** with wildcard support (e.g., `chat:*`, `game:lobby`)
102
+ - **Webhook integrations** for server-side event processing
103
+ - **Message history** and delivery analytics
104
+ - **RLS-based permissions** for secure subscribe and publish operations
105
+
106
+ [View Realtime SDK documentation →](/core-concepts/realtime/sdk)
107
+
108
+ <Frame>
109
+ <img src="/images/changelog/dec-2025/realtime-module.jpg" alt="Realtime multiplayer chess game demo" />
110
+ </Frame>
111
+ </Update>
112
+
113
+ <Update label="Dec 7, 2025" tags={["AI", "Security"]}>
114
+ ## AI Integration
115
+ Expanded model support with smarter defaults for different use cases.
116
+
117
+ - **Gemini 3 Pro** is now the default image generation model.
118
+ - **Grok 4.1 Fast** added to model selection for quicker, lightweight inference.
119
+
120
+ [View AI SDK documentation →](/core-concepts/ai/sdk)
121
+
122
+ <Frame>
123
+ <img src="/images/changelog/dec-2025/ai-integration.png" alt="AI Integration with new models" />
124
+ </Frame>
125
+
126
+ ## MCP Installer
127
+ Updated installer experience with a new InsForge-branded startup screen and clearer next-step instructions.
128
+
129
+ <Frame>
130
+ <img src="/images/changelog/dec-2025/mcp-installer.png" alt="MCP Installer with InsForge branding" />
131
+ </Frame>
132
+
133
+ ## Security & Framework Updates
134
+ Updated Next.js and React versions in response to a [security incident](https://nextjs.org/blog/CVE-2025-66478).
135
+ </Update>
136
+
137
+ <Update label="Nov 30, 2025" tags={["Dashboard", "Auth"]}>
138
+ ## QuickStart Prompts & Templates
139
+ Get started faster with our new quickstart prompts and templates for common apps. Builders can now start with one click and get a fullstack app running in **5 minutes**.
140
+
141
+ [Try the quickstart →](/quickstart)
142
+
143
+ <Frame>
144
+ <img src="/images/changelog/nov-2025/quickstart-prompts.webp" alt="QuickStart Prompts and Templates" />
145
+ </Frame>
146
+
147
+ ## Auth Components
148
+ Drop-in prebuilt React auth components for your app. Get a working auth flow right away with social sign-on support built in by default.
149
+
150
+ [View Auth Components docs →](/core-concepts/authentication/ui-components/react)
151
+
152
+ <Frame>
153
+ <img src="/images/changelog/nov-2025/auth-components.webp" alt="Auth Components with Social Sign-on" />
154
+ </Frame>
155
+
156
+ ## Database Metadata Dashboard
157
+ View your RLS policies, triggers, functions, and indexes all in one place. This makes debugging and understanding your project security much easier.
158
+
159
+ <Frame>
160
+ <img src="/images/changelog/nov-2025/database-metadata.webp" alt="Database Metadata Dashboard" />
161
+ </Frame>
162
+
163
+ ## SQL Editor
164
+ Run SQL queries directly in the InsForge dashboard. No external tools required.
165
+
166
+ <Frame>
167
+ <img src="/images/changelog/nov-2025/sql-editor.webp" alt="SQL Editor in Dashboard" />
168
+ </Frame>
169
+
170
+ ## Usage Page
171
+ A new dashboard section that displays a clear breakdown of your resource usage and what your plan includes.
172
+
173
+ <Frame>
174
+ <img src="/images/changelog/nov-2025/usage-page.webp" alt="Usage Page Dashboard" />
175
+ </Frame>
176
+ </Update>
177
+
178
+ <Update label="Oct 30, 2025" tags={["Auth", "SDK"]}>
179
+ ## OAuth: 4 New Third-Party Providers
180
+ You can now enable third-party logins with **LinkedIn, Microsoft, Facebook, and Discord**. On InsForge Cloud, we provide shared credentials for developers who want to quickly test these login flows.
181
+
182
+ After enabling, you can implement these logins directly through your agent by sending a simple prompt:
183
+
184
+ ```text
185
+ implement Discord login
186
+ ```
187
+
188
+ [View Authentication docs →](/core-concepts/authentication/sdk)
189
+
190
+ <Frame>
191
+ <img src="/images/changelog/october-2025/oauth-providers.webp" alt="OAuth Providers - LinkedIn, Microsoft, Facebook, and Discord" />
192
+ </Frame>
193
+
194
+ ## Import CSV to Your Table
195
+ You can now upload `.csv` files directly into any table from the dashboard. Perfect for bringing in sample data or migrating from other tools.
196
+
197
+ <Frame>
198
+ <img src="/images/changelog/october-2025/csv-upload.webp" alt="CSV Upload to Tables Feature" />
199
+ </Frame>
200
+
201
+ ## InsForge.js SDK
202
+ We've released our **insforge-js SDK** to make it easier for developers to integrate InsForge into their workflows. Manage auth, query databases, and control your backend programmatically with a few lines of code.
203
+
204
+ [GitHub](https://github.com/InsForge/InsForge-sdk-js) · [Database SDK →](/core-concepts/database/sdk)
205
+
206
+ ## Logs
207
+ The new logs page lets you monitor container logs in real time. You can watch your backend activity directly in the dashboard, or let AI coding agents query logs through the InsForge MCP to automatically debug and search for errors.
208
+
209
+ <Frame>
210
+ <img src="/images/changelog/october-2025/logs-feature.webp" alt="Real-time Logs Monitoring Feature" />
211
+ </Frame>
212
+ </Update>