insforge 1.2.10 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) 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 +44 -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 +28 -28
  25. package/auth/src/lib/broadcastService.ts +117 -115
  26. package/auth/src/pages/SignInPage.tsx +60 -57
  27. package/auth/src/pages/SignUpPage.tsx +60 -57
  28. package/auth/tsconfig.json +32 -32
  29. package/auth/tsconfig.node.json +11 -11
  30. package/backend/package.json +78 -75
  31. package/backend/src/api/routes/ai/index.routes.ts +3 -3
  32. package/backend/src/api/routes/auth/index.routes.ts +667 -570
  33. package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
  34. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  35. package/backend/src/api/routes/database/index.routes.ts +78 -1
  36. package/backend/src/api/routes/database/records.routes.ts +10 -10
  37. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  38. package/backend/src/api/routes/docs/index.routes.ts +75 -76
  39. package/backend/src/api/routes/email/index.routes.ts +35 -0
  40. package/backend/src/api/routes/functions/index.routes.ts +18 -12
  41. package/backend/src/api/routes/metadata/index.routes.ts +12 -0
  42. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  43. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  44. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  45. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  46. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  47. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  48. package/backend/src/infra/database/database.manager.ts +14 -1
  49. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  50. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  51. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  52. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  53. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  54. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  55. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  56. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  57. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  58. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  59. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  60. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  61. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  62. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  63. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  64. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  65. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  66. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  67. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  68. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  69. package/backend/src/infra/security/token.manager.ts +219 -125
  70. package/backend/src/infra/socket/socket.manager.ts +198 -64
  71. package/backend/src/providers/ai/openrouter.provider.ts +12 -9
  72. package/backend/src/providers/email/base.provider.ts +4 -7
  73. package/backend/src/providers/email/cloud.provider.ts +84 -0
  74. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  75. package/backend/src/providers/oauth/index.ts +1 -0
  76. package/backend/src/server.ts +317 -284
  77. package/backend/src/services/ai/ai-model.service.ts +5 -5
  78. package/backend/src/services/ai/chat-completion.service.ts +4 -4
  79. package/backend/src/services/ai/image-generation.service.ts +3 -3
  80. package/backend/src/services/auth/auth.service.ts +14 -0
  81. package/backend/src/services/database/database-table.service.ts +0 -9
  82. package/backend/src/services/database/database.service.ts +127 -0
  83. package/backend/src/services/email/email.service.ts +5 -7
  84. package/backend/src/services/realtime/index.ts +3 -0
  85. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  86. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  87. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  88. package/backend/src/types/auth.ts +11 -0
  89. package/backend/src/types/realtime.ts +18 -0
  90. package/backend/src/types/socket.ts +7 -31
  91. package/backend/src/utils/cookies.ts +35 -0
  92. package/backend/src/utils/s3-config-loader.ts +64 -0
  93. package/backend/src/utils/seed.ts +301 -298
  94. package/backend/src/utils/sql-parser.ts +90 -0
  95. package/backend/tests/README.md +133 -133
  96. package/backend/tests/cleanup-all-test-data.sh +230 -230
  97. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  98. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  99. package/backend/tests/local/test-ai-config.sh +129 -129
  100. package/backend/tests/local/test-ai-usage.sh +80 -80
  101. package/backend/tests/local/test-auth-router.sh +143 -143
  102. package/backend/tests/local/test-database-router.sh +222 -222
  103. package/backend/tests/local/test-e2e.sh +240 -240
  104. package/backend/tests/local/test-fk-errors.sh +96 -96
  105. package/backend/tests/local/test-functions.sh +123 -123
  106. package/backend/tests/local/test-id-field.sh +200 -200
  107. package/backend/tests/local/test-logs.sh +132 -132
  108. package/backend/tests/local/test-public-bucket.sh +264 -264
  109. package/backend/tests/local/test-secrets.sh +249 -249
  110. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  111. package/backend/tests/local/test-traditional-rest.sh +208 -208
  112. package/backend/tests/manual/README.md +50 -50
  113. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  114. package/backend/tests/manual/seed-large-table.sql +100 -100
  115. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  116. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  117. package/backend/tests/manual/test-database-advance.sh +296 -296
  118. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  119. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  120. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  121. package/backend/tests/manual/test-universal-storage.sh +263 -263
  122. package/backend/tests/manual/test-users.sql +17 -17
  123. package/backend/tests/run-all-tests.sh +139 -139
  124. package/backend/tests/setup.ts +0 -0
  125. package/backend/tests/test-config.sh +338 -338
  126. package/backend/tests/unit/analyze-query.test.ts +697 -0
  127. package/backend/tsconfig.json +22 -22
  128. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  129. package/claude-plugin/README.md +133 -133
  130. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
  131. package/docker-compose.prod.yml +204 -200
  132. package/docker-compose.yml +232 -228
  133. package/docker-init/db/db-init.sql +97 -97
  134. package/docker-init/db/jwt.sql +5 -5
  135. package/docker-init/db/postgresql.conf +16 -16
  136. package/docker-init/logs/vector.yml +236 -236
  137. package/docs/README.md +44 -44
  138. package/docs/agent-docs/real-time.md +269 -0
  139. package/docs/changelog.mdx +119 -67
  140. package/docs/core-concepts/ai/architecture.mdx +372 -372
  141. package/docs/core-concepts/ai/sdk.mdx +213 -213
  142. package/docs/core-concepts/authentication/architecture.mdx +278 -278
  143. package/docs/core-concepts/authentication/sdk.mdx +414 -414
  144. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
  145. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
  146. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
  147. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
  148. package/docs/core-concepts/database/architecture.mdx +255 -255
  149. package/docs/core-concepts/database/sdk.mdx +382 -382
  150. package/docs/core-concepts/email/architecture.mdx +101 -0
  151. package/docs/core-concepts/email/sdk.mdx +53 -0
  152. package/docs/core-concepts/functions/architecture.mdx +105 -105
  153. package/docs/core-concepts/functions/sdk.mdx +184 -184
  154. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  155. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  156. package/docs/core-concepts/storage/architecture.mdx +243 -243
  157. package/docs/core-concepts/storage/sdk.mdx +253 -253
  158. package/docs/deployment/README.md +94 -94
  159. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  160. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  161. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  162. package/docs/deployment/deploy-to-render.md +441 -441
  163. package/docs/deprecated/insforge-auth-api.md +214 -214
  164. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  165. package/docs/deprecated/insforge-db-api.md +358 -358
  166. package/docs/deprecated/insforge-db-sdk.md +139 -139
  167. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  168. package/docs/deprecated/insforge-debug.md +64 -64
  169. package/docs/deprecated/insforge-instructions.md +123 -123
  170. package/docs/deprecated/insforge-project.md +117 -117
  171. package/docs/deprecated/insforge-storage-api.md +278 -278
  172. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  173. package/docs/docs.json +232 -210
  174. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  175. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  176. package/docs/examples/framework-guides/react.mdx +165 -165
  177. package/docs/examples/framework-guides/svelte.mdx +153 -153
  178. package/docs/examples/framework-guides/vue.mdx +159 -159
  179. package/docs/examples/overview.mdx +67 -67
  180. package/docs/favicon.svg +19 -19
  181. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  182. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  183. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  184. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  185. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  186. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  187. package/docs/images/icons/ai.svg +4 -4
  188. package/docs/images/logos/nextjs.svg +4 -4
  189. package/docs/images/logos/nuxt.svg +4 -4
  190. package/docs/images/logos/react.svg +5 -5
  191. package/docs/images/logos/svelte.svg +4 -4
  192. package/docs/images/logos/vue.svg +5 -5
  193. package/docs/insforge-instructions-sdk.md +89 -88
  194. package/docs/introduction.mdx +45 -45
  195. package/docs/logo/dark.svg +22 -22
  196. package/docs/logo/light.svg +20 -20
  197. package/docs/partnership.mdx +651 -646
  198. package/docs/quickstart.mdx +82 -82
  199. package/docs/showcase.mdx +52 -52
  200. package/docs/snippets/sdk-installation.mdx +21 -21
  201. package/docs/snippets/service-icons.mdx +27 -27
  202. package/examples/oauth/frontend-oauth-example.html +250 -250
  203. package/examples/response-examples.md +443 -443
  204. package/frontend/components.json +17 -17
  205. package/frontend/package.json +69 -69
  206. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  207. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  208. package/frontend/src/assets/icons/checked.svg +3 -3
  209. package/frontend/src/assets/icons/connected.svg +3 -3
  210. package/frontend/src/assets/icons/error.svg +3 -3
  211. package/frontend/src/assets/icons/loader.svg +9 -9
  212. package/frontend/src/assets/icons/pencil.svg +4 -4
  213. package/frontend/src/assets/icons/refresh.svg +4 -4
  214. package/frontend/src/assets/icons/step_active.svg +3 -3
  215. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  216. package/frontend/src/assets/icons/warning.svg +3 -3
  217. package/frontend/src/assets/logos/apple.svg +3 -3
  218. package/frontend/src/assets/logos/claude_code.svg +3 -3
  219. package/frontend/src/assets/logos/cline.svg +6 -6
  220. package/frontend/src/assets/logos/cursor.svg +20 -20
  221. package/frontend/src/assets/logos/discord.svg +8 -8
  222. package/frontend/src/assets/logos/facebook.svg +3 -3
  223. package/frontend/src/assets/logos/gemini.svg +19 -19
  224. package/frontend/src/assets/logos/github.svg +5 -5
  225. package/frontend/src/assets/logos/google.svg +13 -13
  226. package/frontend/src/assets/logos/grok.svg +10 -10
  227. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  228. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  229. package/frontend/src/assets/logos/instagram.svg +1 -1
  230. package/frontend/src/assets/logos/linkedin.svg +3 -3
  231. package/frontend/src/assets/logos/openai.svg +10 -10
  232. package/frontend/src/assets/logos/roo_code.svg +9 -9
  233. package/frontend/src/assets/logos/spotify.svg +16 -16
  234. package/frontend/src/assets/logos/tiktok.svg +5 -5
  235. package/frontend/src/assets/logos/trae.svg +3 -3
  236. package/frontend/src/assets/logos/windsurf.svg +10 -10
  237. package/frontend/src/assets/logos/x.svg +3 -3
  238. package/frontend/src/components/layout/AppHeader.tsx +9 -10
  239. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  240. package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
  241. package/frontend/src/features/auth/helpers.tsx +8 -0
  242. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  243. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  244. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  245. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  246. package/frontend/src/features/database/hooks/useTables.ts +32 -28
  247. package/frontend/src/features/database/index.ts +1 -0
  248. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -37
  249. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +35 -47
  250. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +43 -54
  251. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  252. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +35 -47
  253. package/frontend/src/features/database/services/advance.service.ts +0 -26
  254. package/frontend/src/features/database/services/database.service.ts +55 -0
  255. package/frontend/src/features/database/services/table.service.ts +0 -6
  256. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  257. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +11 -9
  258. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  259. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  260. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  261. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  262. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  263. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  264. package/frontend/src/features/realtime/index.ts +11 -0
  265. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  266. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  267. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  268. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  269. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  270. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
  271. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +1 -35
  272. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  273. package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
  274. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  275. package/frontend/src/lib/utils/menuItems.ts +24 -0
  276. package/frontend/src/lib/utils/utils.ts +14 -1
  277. package/frontend/tsconfig.json +25 -25
  278. package/frontend/tsconfig.node.json +9 -9
  279. package/functions/deno.json +24 -24
  280. package/functions/server.ts +315 -315
  281. package/i18n/README.ar.md +130 -130
  282. package/i18n/README.de.md +130 -130
  283. package/i18n/README.es.md +154 -154
  284. package/i18n/README.fr.md +134 -134
  285. package/i18n/README.hi.md +129 -129
  286. package/i18n/README.ja.md +174 -174
  287. package/i18n/README.ko.md +136 -136
  288. package/i18n/README.pt-BR.md +131 -131
  289. package/i18n/README.ru.md +129 -129
  290. package/i18n/README.zh-CN.md +133 -133
  291. package/openapi/ai.yaml +715 -715
  292. package/openapi/auth.yaml +1244 -1244
  293. package/openapi/email.yaml +158 -0
  294. package/openapi/functions.yaml +475 -475
  295. package/openapi/health.yaml +29 -29
  296. package/openapi/logs.yaml +223 -223
  297. package/openapi/metadata.yaml +177 -177
  298. package/openapi/realtime.yaml +699 -0
  299. package/openapi/records.yaml +381 -381
  300. package/openapi/secrets.yaml +370 -370
  301. package/openapi/storage.yaml +875 -875
  302. package/openapi/tables.yaml +463 -463
  303. package/package.json +97 -97
  304. package/shared-schemas/package.json +31 -31
  305. package/shared-schemas/src/ai.schema.ts +63 -59
  306. package/shared-schemas/src/auth-api.schema.ts +352 -339
  307. package/shared-schemas/src/auth.schema.ts +1 -1
  308. package/shared-schemas/src/database-api.schema.ts +32 -1
  309. package/shared-schemas/src/database.schema.ts +39 -0
  310. package/shared-schemas/src/docs.schema.ts +26 -0
  311. package/shared-schemas/src/email-api.schema.ts +30 -0
  312. package/shared-schemas/src/index.ts +4 -0
  313. package/shared-schemas/src/metadata.schema.ts +9 -0
  314. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  315. package/shared-schemas/src/realtime.schema.ts +143 -0
  316. package/shared-schemas/tsconfig.json +21 -21
  317. package/tsconfig.json +7 -7
  318. package/zeabur/README.md +13 -13
  319. package/zeabur/template.yml +1032 -1032
  320. package/.cursor/rules/cursor-rules.mdc +0 -94
  321. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  322. package/test-gemini.sh +0 -35
  323. package/test-usage-admin.sh +0 -57
  324. package/test-usage.sh +0 -50
  325. /package/frontend/src/features/ai/{page → pages}/AIPage.tsx +0 -0
  326. /package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +0 -0
  327. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  328. /package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +0 -0
  329. /package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +0 -0
  330. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  331. /package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +0 -0
  332. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  333. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  334. /package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +0 -0
  335. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
@@ -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,119 @@
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: "Latest updates and improvements to InsForge"
4
+ ---
5
+
6
+ ## December 2025
7
+
8
+ <AccordionGroup>
9
+ <Accordion title="Dec 12 - Alipay & New AI Models" icon="rocket">
10
+ ### Alipay Payment Support
11
+ Added **Alipay** as an alternative payment method. Users can now pay for InsForge subscriptions without a credit card.
12
+
13
+ <img src="/images/changelog/dec-2025/alipay-payment.webp" alt="Alipay payment method option" style={{maxWidth: '90%'}} />
14
+
15
+ ### New AI Models
16
+ Expanded AI model support:
17
+ - **GPT 5.2** - OpenAI's latest flagship model with enhanced reasoning, longer context windows, and improved instruction following
18
+ - **DeepSeek V3** - Open-weight model offering strong performance at lower cost, ideal for high-volume workloads
19
+
20
+ <img src="/images/changelog/dec-2025/ai-models.webp" alt="AI Integration with new models" style={{maxWidth: '90%'}} />
21
+ </Accordion>
22
+ <Accordion title="Dec 11 - Apple Login & Realtime Module" icon="rocket">
23
+ ### Apple Login
24
+ **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.
25
+
26
+ <img src="/images/changelog/dec-2025/apple-login.jpg" alt="Sign in with Apple authentication" style={{maxWidth: '90%'}} />
27
+
28
+ ### Realtime Module
29
+ 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.
30
+
31
+ Key features include:
32
+ - **Channel patterns** with wildcard support (e.g., `chat:*`, `game:lobby`)
33
+ - **Webhook integrations** for server-side event processing
34
+ - **Message history** and delivery analytics
35
+ - **RLS-based permissions** for secure subscribe and publish operations
36
+
37
+ <img src="/images/changelog/dec-2025/realtime-module.jpg" alt="Realtime multiplayer chess game demo" style={{maxWidth: '90%'}} />
38
+ </Accordion>
39
+ <Accordion title="Dec 7 - AI Models, MCP Installer & Security Updates" icon="rocket">
40
+ ### AI Integration
41
+ Expanded model support with smarter defaults for different use cases.
42
+
43
+ - **Gemini 3 Pro** is now the default image generation model.
44
+ - **Grok 4.1 Fast** added to model selection for quicker, lightweight inference.
45
+
46
+ <img src="/images/changelog/dec-2025/ai-integration.png" alt="AI Integration with new models" style={{maxWidth: '90%'}} />
47
+
48
+ ### MCP Installer
49
+ Updated installer experience with a new InsForge-branded startup screen and clearer next-step instructions.
50
+
51
+ <img src="/images/changelog/dec-2025/mcp-installer.png" alt="MCP Installer with InsForge branding" style={{maxWidth: '90%'}} />
52
+
53
+ ### Security & Framework Updates
54
+ Updated Next.js version in response to a [security incident](https://nextjs.org/blog/CVE-2025-66478).
55
+ </Accordion>
56
+ </AccordionGroup>
57
+
58
+ ## November 2025
59
+
60
+ <AccordionGroup>
61
+ <Accordion title="Nov 30 - QuickStart, Auth Components & Dashboard Tools" icon="rocket">
62
+ ### QuickStart Prompts & Templates
63
+ 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**.
64
+
65
+ <img src="/images/changelog/nov-2025/quickstart-prompts.webp" alt="QuickStart Prompts and Templates" />
66
+
67
+ ### Auth Components
68
+ 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.
69
+
70
+ <img src="/images/changelog/nov-2025/auth-components.webp" alt="Auth Components with Social Sign-on" />
71
+
72
+ ### Database Metadata Dashboard
73
+ View your RLS policies, triggers, functions, and indexes all in one place. This makes debugging and understanding your project security much easier.
74
+
75
+ <img src="/images/changelog/nov-2025/database-metadata.webp" alt="Database Metadata Dashboard" />
76
+
77
+ ### SQL Editor
78
+ Run SQL queries directly in the InsForge dashboard. No external tools required.
79
+
80
+ <img src="/images/changelog/nov-2025/sql-editor.webp" alt="SQL Editor in Dashboard" />
81
+
82
+ ### Usage Page
83
+ A new dashboard section that displays a clear breakdown of your resource usage and what your plan includes.
84
+
85
+ <img src="/images/changelog/nov-2025/usage-page.webp" alt="Usage Page Dashboard" />
86
+ </Accordion>
87
+ </AccordionGroup>
88
+
89
+ ## October 2025
90
+
91
+ <AccordionGroup>
92
+ <Accordion title="Oct 30 - OAuth Providers, SDK & Logs" icon="rocket">
93
+ ### OAuth: 4 New Third-Party Providers
94
+ 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.
95
+
96
+ After enabling, you can implement these logins directly through your agent by sending a simple prompt:
97
+
98
+ ```text
99
+ implement Discord login
100
+ ```
101
+
102
+ <img src="/images/changelog/october-2025/oauth-providers.webp" alt="OAuth Providers - LinkedIn, Microsoft, Facebook, and Discord" />
103
+
104
+ ### Import CSV to Your Table
105
+ You can now upload `.csv` files directly into any table from the dashboard. Perfect for bringing in sample data or migrating from other tools.
106
+
107
+ <img src="/images/changelog/october-2025/csv-upload.webp" alt="CSV Upload to Tables Feature" />
108
+
109
+ ### InsForge.js SDK
110
+ 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.
111
+
112
+ **Repository:** [GitHub](https://github.com/InsForge/InsForge-sdk-js)
113
+
114
+ ### Logs
115
+ 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.
116
+
117
+ <img src="/images/changelog/october-2025/logs-feature.webp" alt="Real-time Logs Monitoring Feature" />
118
+ </Accordion>
119
+ </AccordionGroup>