insforge 0.3.3 → 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 (635) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.dockerignore +60 -57
  3. package/.env.example +84 -49
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -83
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -79
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +66 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -0
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +44 -3
  15. package/CLAUDE_PLUGIN.md +104 -0
  16. package/CODE_OF_CONDUCT.md +128 -0
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -27
  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 -134
  23. package/assets/Dark.svg +23 -23
  24. package/assets/mcpInstallv2.png +0 -0
  25. package/assets/sampleResponse.png +0 -0
  26. package/auth/index.html +13 -0
  27. package/auth/package.json +28 -0
  28. package/auth/public/favicon.ico +0 -0
  29. package/auth/src/App.tsx +33 -0
  30. package/auth/src/components/ErrorCard.tsx +37 -0
  31. package/auth/src/components/Layout.tsx +13 -0
  32. package/auth/src/index.css +19 -0
  33. package/auth/src/lib/broadcastService.ts +117 -0
  34. package/auth/src/lib/utils.ts +11 -0
  35. package/auth/src/main.tsx +22 -0
  36. package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
  37. package/auth/src/pages/ResetPasswordPage.tsx +11 -0
  38. package/auth/src/pages/SignInPage.tsx +60 -0
  39. package/auth/src/pages/SignUpPage.tsx +60 -0
  40. package/auth/src/pages/VerifyEmailPage.tsx +20 -0
  41. package/auth/src/vite-env.d.ts +10 -0
  42. package/auth/tsconfig.json +32 -0
  43. package/auth/tsconfig.node.json +11 -0
  44. package/auth/vite.config.ts +25 -0
  45. package/backend/package.json +78 -75
  46. package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
  47. package/backend/src/api/middlewares/rate-limiters.ts +127 -0
  48. package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +22 -26
  49. package/backend/src/api/routes/auth/index.routes.ts +667 -0
  50. package/backend/src/api/routes/auth/oauth.routes.ts +473 -0
  51. package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +128 -65
  52. package/backend/src/api/routes/database/index.routes.ts +90 -0
  53. package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +26 -12
  54. package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +6 -23
  55. package/backend/src/api/routes/docs/index.routes.ts +75 -0
  56. package/backend/src/api/routes/email/index.routes.ts +35 -0
  57. package/backend/src/api/routes/functions/index.routes.ts +194 -0
  58. package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
  59. package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +33 -31
  60. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  61. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  62. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  63. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  64. package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
  65. package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +48 -61
  66. package/backend/src/api/routes/usage/index.routes.ts +91 -0
  67. package/backend/src/infra/config/app.config.ts +51 -0
  68. package/backend/src/infra/database/database.manager.ts +182 -0
  69. package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +141 -141
  70. package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +40 -40
  71. package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +29 -29
  72. package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +55 -55
  73. package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +23 -23
  74. package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +29 -29
  75. package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +24 -24
  76. package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +1 -1
  77. package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +76 -76
  78. package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +23 -23
  79. package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +93 -93
  80. package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +15 -15
  81. package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +7 -7
  82. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -0
  83. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
  84. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
  85. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
  86. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  87. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  88. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  89. package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
  90. package/backend/src/infra/security/token.manager.ts +219 -0
  91. package/backend/src/infra/socket/socket.manager.ts +522 -0
  92. package/backend/src/providers/ai/openrouter.provider.ts +380 -0
  93. package/backend/src/providers/email/base.provider.ts +38 -0
  94. package/backend/src/providers/email/cloud.provider.ts +271 -0
  95. package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
  96. package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
  97. package/backend/src/providers/logs/local.provider.ts +185 -0
  98. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  99. package/backend/src/providers/oauth/base.provider.ts +29 -0
  100. package/backend/src/providers/oauth/discord.provider.ts +195 -0
  101. package/backend/src/providers/oauth/facebook.provider.ts +194 -0
  102. package/backend/src/providers/oauth/github.provider.ts +208 -0
  103. package/backend/src/providers/oauth/google.provider.ts +249 -0
  104. package/backend/src/providers/oauth/index.ts +8 -0
  105. package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
  106. package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
  107. package/backend/src/providers/oauth/x.provider.ts +202 -0
  108. package/backend/src/providers/storage/base.provider.ts +29 -0
  109. package/backend/src/providers/storage/local.provider.ts +103 -0
  110. package/backend/src/providers/storage/s3.provider.ts +313 -0
  111. package/backend/src/server.ts +317 -288
  112. package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
  113. package/backend/src/services/ai/ai-model.service.ts +60 -0
  114. package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
  115. package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
  116. package/backend/src/services/ai/helpers.ts +64 -0
  117. package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
  118. package/backend/src/services/ai/index.ts +13 -0
  119. package/backend/src/services/auth/auth-config.service.ts +250 -0
  120. package/backend/src/services/auth/auth-otp.service.ts +424 -0
  121. package/backend/src/services/auth/auth.service.ts +1150 -0
  122. package/backend/src/services/auth/index.ts +4 -0
  123. package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
  124. package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
  125. package/backend/src/services/database/database-table.service.ts +802 -0
  126. package/backend/src/services/database/database.service.ts +127 -0
  127. package/backend/src/services/email/email.service.ts +73 -0
  128. package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
  129. package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
  130. package/backend/src/services/logs/log.service.ts +73 -0
  131. package/backend/src/services/realtime/index.ts +3 -0
  132. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  133. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  134. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  135. package/backend/src/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
  136. package/backend/src/services/storage/storage.service.ts +617 -0
  137. package/backend/src/services/usage/usage.service.ts +149 -0
  138. package/backend/src/types/auth.ts +77 -2
  139. package/backend/src/types/email.ts +8 -0
  140. package/backend/src/types/error-constants.ts +4 -0
  141. package/backend/src/types/logs.ts +0 -29
  142. package/backend/src/types/realtime.ts +18 -0
  143. package/backend/src/{core/socket/types.ts → types/socket.ts} +11 -36
  144. package/backend/src/utils/cookies.ts +35 -0
  145. package/backend/src/utils/environment.ts +9 -3
  146. package/backend/src/utils/logger.ts +20 -2
  147. package/backend/src/utils/s3-config-loader.ts +64 -0
  148. package/backend/src/utils/seed.ts +301 -205
  149. package/backend/src/utils/sql-parser.ts +91 -1
  150. package/backend/src/utils/utils.ts +114 -0
  151. package/backend/src/utils/validations.ts +40 -4
  152. package/backend/tests/README.md +133 -133
  153. package/backend/tests/cleanup-all-test-data.sh +230 -230
  154. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  155. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  156. package/backend/tests/local/test-ai-config.sh +129 -0
  157. package/backend/tests/local/test-ai-usage.sh +80 -0
  158. package/backend/tests/local/test-auth-router.sh +143 -143
  159. package/backend/tests/local/test-database-router.sh +222 -222
  160. package/backend/tests/local/test-e2e.sh +240 -240
  161. package/backend/tests/local/test-fk-errors.sh +96 -96
  162. package/backend/tests/local/test-functions.sh +123 -0
  163. package/backend/tests/local/test-id-field.sh +200 -200
  164. package/backend/tests/local/test-logs.sh +132 -0
  165. package/backend/tests/local/test-public-bucket.sh +264 -264
  166. package/backend/tests/local/test-secrets.sh +249 -247
  167. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  168. package/backend/tests/local/test-traditional-rest.sh +208 -208
  169. package/backend/tests/manual/README.md +50 -50
  170. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  171. package/backend/tests/manual/seed-large-table.sql +100 -100
  172. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  173. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  174. package/backend/tests/manual/test-database-advance.sh +296 -296
  175. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  176. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  177. package/backend/tests/manual/test-rawsql-modes.sh +244 -0
  178. package/backend/tests/manual/test-universal-storage.sh +263 -263
  179. package/backend/tests/manual/test-users.sql +17 -17
  180. package/backend/tests/run-all-tests.sh +139 -139
  181. package/backend/tests/setup.ts +0 -0
  182. package/backend/tests/test-config.sh +338 -302
  183. package/backend/tests/unit/analyze-query.test.ts +697 -0
  184. package/backend/tests/unit/cloud-token.test.ts +48 -0
  185. package/backend/tests/unit/constant.test.ts +8 -0
  186. package/backend/tests/unit/email.test.ts +372 -0
  187. package/backend/tests/unit/environment.test.ts +59 -0
  188. package/backend/tests/unit/helpers.test.ts +63 -0
  189. package/backend/tests/unit/logger.test.ts +22 -0
  190. package/backend/tests/unit/rate-limit.test.ts +154 -0
  191. package/backend/tests/unit/response.test.ts +58 -0
  192. package/backend/tests/unit/sql-parser.test.ts +74 -0
  193. package/backend/tests/unit/uuid.test.ts +21 -0
  194. package/backend/tests/unit/validations.test.ts +80 -0
  195. package/backend/tsconfig.json +22 -22
  196. package/backend/vitest.config.ts +11 -0
  197. package/claude-plugin/.claude-plugin/plugin.json +24 -0
  198. package/claude-plugin/README.md +133 -0
  199. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
  200. package/docker-compose.prod.yml +204 -144
  201. package/docker-compose.yml +232 -167
  202. package/docker-init/db/db-init.sql +97 -125
  203. package/docker-init/db/jwt.sql +5 -5
  204. package/docker-init/db/postgresql.conf +16 -16
  205. package/docker-init/logs/vector.yml +236 -0
  206. package/docs/README.md +44 -0
  207. package/docs/agent-docs/real-time.md +269 -0
  208. package/docs/changelog.mdx +119 -0
  209. package/docs/core-concepts/ai/architecture.mdx +373 -0
  210. package/docs/core-concepts/ai/sdk.mdx +213 -0
  211. package/docs/core-concepts/authentication/architecture.mdx +278 -0
  212. package/docs/core-concepts/authentication/sdk.mdx +414 -0
  213. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
  214. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
  215. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
  216. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
  217. package/docs/core-concepts/database/architecture.mdx +256 -0
  218. package/docs/core-concepts/database/sdk.mdx +382 -0
  219. package/docs/core-concepts/email/architecture.mdx +101 -0
  220. package/docs/core-concepts/email/sdk.mdx +53 -0
  221. package/docs/core-concepts/functions/architecture.mdx +105 -0
  222. package/docs/core-concepts/functions/sdk.mdx +184 -0
  223. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  224. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  225. package/docs/core-concepts/storage/architecture.mdx +243 -0
  226. package/docs/core-concepts/storage/sdk.mdx +253 -0
  227. package/docs/deployment/README.md +94 -0
  228. package/docs/deployment/deploy-to-aws-ec2.md +565 -0
  229. package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
  230. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
  231. package/docs/deployment/deploy-to-render.md +441 -0
  232. package/docs/deprecated/insforge-auth-api.md +214 -214
  233. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  234. package/docs/deprecated/insforge-db-api.md +358 -358
  235. package/docs/deprecated/insforge-db-sdk.md +139 -139
  236. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  237. package/docs/deprecated/insforge-debug.md +64 -64
  238. package/docs/deprecated/insforge-instructions.md +123 -123
  239. package/docs/deprecated/insforge-project.md +117 -117
  240. package/docs/deprecated/insforge-storage-api.md +278 -278
  241. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  242. package/docs/docs.json +232 -0
  243. package/docs/examples/framework-guides/nextjs.mdx +131 -0
  244. package/docs/examples/framework-guides/nuxt.mdx +165 -0
  245. package/docs/examples/framework-guides/react.mdx +165 -0
  246. package/docs/examples/framework-guides/svelte.mdx +153 -0
  247. package/docs/examples/framework-guides/vue.mdx +159 -0
  248. package/docs/examples/overview.mdx +67 -0
  249. package/docs/favicon.svg +19 -0
  250. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  251. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  252. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  253. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  254. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  255. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  256. package/docs/images/changelog/nov-2025/auth-components.webp +0 -0
  257. package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
  258. package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
  259. package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
  260. package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
  261. package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
  262. package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
  263. package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
  264. package/docs/images/checks-passed.png +0 -0
  265. package/docs/images/dashboard-connect-expanded.png +0 -0
  266. package/docs/images/dashboard-connect.png +0 -0
  267. package/docs/images/hero-dark.png +0 -0
  268. package/docs/images/hero-light.png +0 -0
  269. package/docs/images/icons/ai.svg +4 -0
  270. package/docs/images/icons/auth.svg +1 -0
  271. package/docs/images/icons/database.svg +1 -0
  272. package/docs/images/icons/function.svg +1 -0
  273. package/docs/images/icons/storage.svg +1 -0
  274. package/docs/images/logos/nextjs.svg +4 -0
  275. package/docs/images/logos/nuxt.svg +4 -0
  276. package/docs/images/logos/react.svg +5 -0
  277. package/docs/images/logos/svelte.svg +4 -0
  278. package/docs/images/logos/vue.svg +5 -0
  279. package/docs/images/mcp-install.png +0 -0
  280. package/docs/images/onboarding-mcp.png +0 -0
  281. package/docs/insforge-instructions-sdk.md +89 -407
  282. package/docs/introduction.mdx +45 -0
  283. package/docs/logo/dark.svg +22 -0
  284. package/docs/logo/light.svg +20 -0
  285. package/docs/partnership.mdx +652 -0
  286. package/docs/quickstart.mdx +83 -0
  287. package/docs/showcase/2048-arena.png +0 -0
  288. package/docs/showcase/framegen-cloud.png +0 -0
  289. package/docs/showcase/line-connect-race.png +0 -0
  290. package/docs/showcase/moment-vibe.png +0 -0
  291. package/docs/showcase/national-flags.png +0 -0
  292. package/docs/showcase/pokemon-vibe.png +0 -0
  293. package/docs/showcase/pure-browse-buy.png +0 -0
  294. package/docs/showcase.mdx +52 -0
  295. package/docs/snippets/sdk-installation.mdx +22 -0
  296. package/docs/snippets/service-icons.mdx +27 -0
  297. package/eslint.config.js +10 -3
  298. package/examples/oauth/frontend-oauth-example.html +250 -250
  299. package/examples/response-examples.md +443 -443
  300. package/frontend/components.json +17 -17
  301. package/frontend/package.json +69 -63
  302. package/frontend/src/App.tsx +13 -82
  303. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  304. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  305. package/frontend/src/assets/icons/checked.svg +3 -3
  306. package/frontend/src/assets/icons/connected.svg +3 -0
  307. package/frontend/src/assets/icons/error.svg +3 -3
  308. package/frontend/src/assets/icons/loader.svg +9 -0
  309. package/frontend/src/assets/icons/pencil.svg +4 -4
  310. package/frontend/src/assets/icons/refresh.svg +4 -4
  311. package/frontend/src/assets/icons/step_active.svg +3 -3
  312. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  313. package/frontend/src/assets/icons/warning.svg +3 -3
  314. package/frontend/src/assets/logos/apple.svg +4 -0
  315. package/frontend/src/assets/logos/claude_code.svg +3 -3
  316. package/frontend/src/assets/logos/cline.svg +6 -6
  317. package/frontend/src/assets/logos/cursor.svg +20 -20
  318. package/frontend/src/assets/logos/discord.svg +8 -8
  319. package/frontend/src/assets/logos/facebook.svg +3 -0
  320. package/frontend/src/assets/logos/gemini.svg +19 -19
  321. package/frontend/src/assets/logos/github.svg +5 -5
  322. package/frontend/src/assets/logos/google.svg +13 -13
  323. package/frontend/src/assets/logos/grok.svg +10 -10
  324. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  325. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  326. package/frontend/src/assets/logos/instagram.svg +2 -0
  327. package/frontend/src/assets/logos/linkedin.svg +3 -0
  328. package/frontend/src/assets/logos/microsoft.svg +1 -0
  329. package/frontend/src/assets/logos/openai.svg +10 -10
  330. package/frontend/src/assets/logos/roo_code.svg +9 -9
  331. package/frontend/src/assets/logos/spotify.svg +17 -0
  332. package/frontend/src/assets/logos/tiktok.svg +6 -0
  333. package/frontend/src/assets/logos/trae.svg +3 -3
  334. package/frontend/src/assets/logos/windsurf.svg +10 -10
  335. package/frontend/src/assets/logos/x.svg +3 -0
  336. package/frontend/src/components/Checkbox.tsx +27 -29
  337. package/frontend/src/components/CodeBlock.tsx +55 -2
  338. package/frontend/src/components/CodeEditor.tsx +92 -0
  339. package/frontend/src/components/ConfirmDialog.tsx +1 -1
  340. package/frontend/src/components/ConnectCTA.tsx +38 -0
  341. package/frontend/src/components/CopyButton.tsx +52 -15
  342. package/frontend/src/components/ErrorState.tsx +1 -2
  343. package/frontend/src/components/FeatureSidebar.tsx +6 -6
  344. package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
  345. package/frontend/src/components/JsonHighlight.tsx +21 -9
  346. package/frontend/src/components/ProjectInfoModal.tsx +128 -0
  347. package/frontend/src/components/PromptDialog.tsx +1 -4
  348. package/frontend/src/components/SearchInput.tsx +1 -2
  349. package/frontend/src/components/Stepper.tsx +53 -0
  350. package/frontend/src/components/ThemeToggle.tsx +3 -3
  351. package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
  352. package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
  353. package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
  354. package/frontend/src/components/datagrid/index.ts +23 -0
  355. package/frontend/src/components/index.ts +23 -30
  356. package/frontend/src/components/layout/AppHeader.tsx +131 -91
  357. package/frontend/src/components/layout/AppSidebar.tsx +80 -170
  358. package/frontend/src/components/layout/Layout.tsx +12 -23
  359. package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
  360. package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
  361. package/frontend/src/components/layout/index.ts +5 -0
  362. package/frontend/src/components/radix/Tooltip.tsx +24 -13
  363. package/frontend/src/components/radix/index.ts +22 -0
  364. package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
  365. package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
  366. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
  367. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
  368. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
  369. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
  370. package/frontend/src/features/ai/components/index.ts +6 -0
  371. package/frontend/src/features/ai/helpers.ts +57 -71
  372. package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
  373. package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
  374. package/frontend/src/features/ai/pages/AIPage.tsx +166 -0
  375. package/frontend/src/features/ai/services/ai.service.ts +5 -5
  376. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
  377. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +54 -30
  378. package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
  379. package/frontend/src/features/auth/components/UsersDataGrid.tsx +50 -14
  380. package/frontend/src/features/auth/components/index.ts +5 -0
  381. package/frontend/src/features/auth/helpers.tsx +208 -0
  382. package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
  383. package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
  384. package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
  385. package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
  386. package/frontend/src/features/auth/index.ts +3 -2
  387. package/frontend/src/features/auth/pages/AuthMethodsPage.tsx +275 -0
  388. package/frontend/src/features/auth/pages/ConfigurationPage.tsx +395 -0
  389. package/frontend/src/features/auth/pages/UsersPage.tsx +257 -0
  390. package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
  391. package/frontend/src/features/auth/services/config.service.ts +19 -0
  392. package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
  393. package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
  394. package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
  395. package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
  396. package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
  397. package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
  398. package/frontend/src/features/dashboard/components/index.ts +4 -0
  399. package/frontend/src/features/dashboard/pages/DashboardPage.tsx +212 -0
  400. package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
  401. package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
  402. package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
  403. package/frontend/src/features/dashboard/prompts/index.ts +31 -0
  404. package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
  405. package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
  406. package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
  407. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
  408. package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
  409. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
  410. package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
  411. package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
  412. package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
  413. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  414. package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
  415. package/frontend/src/features/database/components/TableForm.tsx +28 -19
  416. package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
  417. package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
  418. package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
  419. package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
  420. package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
  421. package/frontend/src/features/database/components/index.ts +19 -0
  422. package/frontend/src/features/database/constants.ts +28 -2
  423. package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
  424. package/frontend/src/features/database/helpers.ts +2 -2
  425. package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
  426. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  427. package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
  428. package/frontend/src/features/database/hooks/useRecords.ts +139 -0
  429. package/frontend/src/features/database/hooks/useTables.ts +135 -0
  430. package/frontend/src/features/database/index.ts +7 -1
  431. package/frontend/src/features/database/pages/FunctionsPage.tsx +203 -0
  432. package/frontend/src/features/database/pages/IndexesPage.tsx +228 -0
  433. package/frontend/src/features/database/pages/PoliciesPage.tsx +237 -0
  434. package/frontend/src/features/database/pages/SQLEditorPage.tsx +382 -0
  435. package/frontend/src/features/database/{page/DatabasePage.tsx → pages/TablesPage.tsx} +168 -209
  436. package/frontend/src/features/database/pages/TemplatesPage.tsx +39 -0
  437. package/frontend/src/features/database/pages/TriggersPage.tsx +230 -0
  438. package/frontend/src/features/database/services/advance.service.ts +40 -0
  439. package/frontend/src/features/database/services/database.service.ts +33 -194
  440. package/frontend/src/features/database/services/record.service.ts +219 -0
  441. package/frontend/src/features/database/services/table.service.ts +58 -0
  442. package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
  443. package/frontend/src/features/database/templates/crm-system.ts +528 -0
  444. package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
  445. package/frontend/src/features/database/templates/index.ts +34 -0
  446. package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
  447. package/frontend/src/features/database/templates/notion-clone.ts +483 -0
  448. package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
  449. package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
  450. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
  451. package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
  452. package/frontend/src/features/functions/components/index.ts +5 -0
  453. package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
  454. package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
  455. package/frontend/src/features/functions/pages/FunctionsPage.tsx +148 -0
  456. package/frontend/src/features/functions/{components/SecretsContent.tsx → pages/SecretsPage.tsx} +19 -21
  457. package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
  458. package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
  459. package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
  460. package/frontend/src/features/login/pages/CloudLoginPage.tsx +118 -0
  461. package/frontend/src/features/login/{page → pages}/LoginPage.tsx +16 -23
  462. package/frontend/src/features/login/services/partnership.service.ts +65 -0
  463. package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
  464. package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
  465. package/frontend/src/features/logs/components/index.ts +2 -0
  466. package/frontend/src/features/logs/helpers.ts +24 -0
  467. package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
  468. package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
  469. package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
  470. package/frontend/src/features/logs/hooks/useMcpUsage.ts +128 -0
  471. package/frontend/src/features/logs/index.ts +8 -2
  472. package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +91 -38
  473. package/frontend/src/features/logs/pages/LogsPage.tsx +152 -0
  474. package/frontend/src/features/logs/pages/MCPLogsPage.tsx +84 -0
  475. package/frontend/src/features/logs/services/audit.service.ts +63 -0
  476. package/frontend/src/features/logs/services/log.service.ts +15 -110
  477. package/frontend/src/features/logs/services/usage.service.ts +31 -0
  478. package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
  479. package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
  480. package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
  481. package/frontend/src/features/onboard/components/index.ts +4 -0
  482. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
  483. package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
  484. package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
  485. package/frontend/src/features/onboard/index.ts +13 -3
  486. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  487. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  488. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  489. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  490. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  491. package/frontend/src/features/realtime/index.ts +11 -0
  492. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  493. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  494. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  495. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  496. package/frontend/src/features/storage/components/BucketEmptyState.tsx +9 -6
  497. package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
  498. package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
  499. package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
  500. package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
  501. package/frontend/src/features/storage/components/index.ts +12 -0
  502. package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
  503. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +41 -143
  504. package/frontend/src/features/storage/services/storage.service.ts +22 -1
  505. package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
  506. package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
  507. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
  508. package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
  509. package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
  510. package/frontend/src/features/visualizer/pages/VisualizerPage.tsx +97 -0
  511. package/frontend/src/index.css +1 -0
  512. package/frontend/src/lib/analytics/posthog.tsx +27 -0
  513. package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
  514. package/frontend/src/lib/contexts/SocketContext.tsx +123 -80
  515. package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
  516. package/frontend/src/lib/hooks/useToast.tsx +6 -2
  517. package/frontend/src/lib/routing/AppRoutes.tsx +99 -0
  518. package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
  519. package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
  520. package/frontend/src/lib/utils/menuItems.ts +207 -0
  521. package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
  522. package/frontend/src/lib/utils/utils.ts +32 -1
  523. package/frontend/src/vite-env.d.ts +1 -0
  524. package/frontend/tsconfig.json +25 -25
  525. package/frontend/tsconfig.node.json +9 -9
  526. package/frontend/vite.config.ts +5 -3
  527. package/functions/deno.json +24 -24
  528. package/functions/server.ts +315 -290
  529. package/functions/worker-template.js +15 -4
  530. package/i18n/README.ar.md +130 -0
  531. package/i18n/README.de.md +130 -0
  532. package/i18n/README.es.md +154 -0
  533. package/i18n/README.fr.md +134 -0
  534. package/i18n/README.hi.md +129 -0
  535. package/i18n/README.ja.md +174 -0
  536. package/i18n/README.ko.md +137 -0
  537. package/i18n/README.pt-BR.md +131 -0
  538. package/i18n/README.ru.md +129 -0
  539. package/i18n/README.zh-CN.md +133 -0
  540. package/openapi/ai.yaml +715 -688
  541. package/openapi/auth.yaml +1244 -563
  542. package/openapi/email.yaml +158 -0
  543. package/openapi/functions.yaml +475 -475
  544. package/openapi/health.yaml +29 -29
  545. package/openapi/logs.yaml +223 -223
  546. package/openapi/metadata.yaml +177 -177
  547. package/openapi/realtime.yaml +699 -0
  548. package/openapi/records.yaml +381 -381
  549. package/openapi/secrets.yaml +370 -370
  550. package/openapi/storage.yaml +875 -875
  551. package/openapi/tables.yaml +463 -463
  552. package/package.json +97 -88
  553. package/shared-schemas/package.json +31 -31
  554. package/shared-schemas/src/ai-api.schema.ts +34 -58
  555. package/shared-schemas/src/ai.schema.ts +63 -54
  556. package/shared-schemas/src/auth-api.schema.ts +352 -193
  557. package/shared-schemas/src/auth.schema.ts +43 -7
  558. package/shared-schemas/src/cloud-events.schema.ts +57 -0
  559. package/shared-schemas/src/database-api.schema.ts +35 -4
  560. package/shared-schemas/src/database.schema.ts +40 -1
  561. package/shared-schemas/src/docs.schema.ts +26 -0
  562. package/shared-schemas/src/email-api.schema.ts +30 -0
  563. package/shared-schemas/src/index.ts +5 -0
  564. package/shared-schemas/src/logs-api.schema.ts +7 -1
  565. package/shared-schemas/src/logs.schema.ts +26 -0
  566. package/shared-schemas/src/metadata.schema.ts +18 -4
  567. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  568. package/shared-schemas/src/realtime.schema.ts +143 -0
  569. package/shared-schemas/tsconfig.json +21 -21
  570. package/tsconfig.json +7 -7
  571. package/zeabur/README.md +13 -0
  572. package/zeabur/template.yml +1032 -0
  573. package/.github/workflows/deploy-aws.yml +0 -130
  574. package/backend/src/api/routes/agent.ts +0 -29
  575. package/backend/src/api/routes/auth.oauth.ts +0 -482
  576. package/backend/src/api/routes/auth.ts +0 -386
  577. package/backend/src/api/routes/docs.ts +0 -66
  578. package/backend/src/api/routes/functions.ts +0 -183
  579. package/backend/src/api/routes/openapi.ts +0 -82
  580. package/backend/src/api/routes/usage.ts +0 -96
  581. package/backend/src/core/ai/client.ts +0 -242
  582. package/backend/src/core/ai/model.ts +0 -117
  583. package/backend/src/core/auth/auth.ts +0 -780
  584. package/backend/src/core/database/manager.ts +0 -178
  585. package/backend/src/core/database/table.ts +0 -772
  586. package/backend/src/core/documentation/agent.ts +0 -689
  587. package/backend/src/core/documentation/openapi.ts +0 -856
  588. package/backend/src/core/logs/analytics.ts +0 -76
  589. package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
  590. package/backend/src/core/socket/socket.ts +0 -388
  591. package/backend/src/core/storage/storage.ts +0 -923
  592. package/backend/src/utils/cloud-token.ts +0 -39
  593. package/backend/src/utils/helpers.ts +0 -49
  594. package/backend/src/utils/uuid.ts +0 -9
  595. package/backend/tests/manual/test-better-auth.sh +0 -303
  596. package/docker-init/db/logs.sql +0 -9
  597. package/frontend/README.md +0 -112
  598. package/frontend/src/components/datagrid/index.tsx +0 -20
  599. package/frontend/src/components/layout/CloudLayout.tsx +0 -95
  600. package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
  601. package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
  602. package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
  603. package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
  604. package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
  605. package/frontend/src/features/ai/page/AIPage.tsx +0 -178
  606. package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
  607. package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
  608. package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
  609. package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
  610. package/frontend/src/features/dashboard/page/DashboardPage.tsx +0 -194
  611. package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
  612. package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
  613. package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
  614. package/frontend/src/features/functions/page/FunctionsPage.tsx +0 -28
  615. package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
  616. package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
  617. package/frontend/src/features/login/page/CloudLoginPage.tsx +0 -93
  618. package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
  619. package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
  620. package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
  621. package/frontend/src/features/metadata/index.ts +0 -0
  622. package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
  623. package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
  624. package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
  625. package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
  626. package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
  627. package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
  628. package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
  629. package/frontend/src/features/onboard/types.ts +0 -8
  630. package/frontend/src/features/visualizer/page/VisualizerPage.tsx +0 -127
  631. package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
  632. package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
  633. /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
  634. /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
  635. /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
@@ -1,17 +1,17 @@
1
- # PostgreSQL configuration for InsForge
2
- # Enable logical replication for Logflare
3
-
4
- # Listen on all interfaces to allow container connections
5
- listen_addresses = '*'
6
-
7
- # Set WAL level to logical for Logflare replication
8
- wal_level = logical
9
-
10
- # Set max replication slots (needed for logical replication)
11
- max_replication_slots = 10
12
-
13
- # Set max WAL senders
14
- max_wal_senders = 10
15
-
16
- # Shared preload libraries (if needed)
1
+ # PostgreSQL configuration for InsForge
2
+ # Enable logical replication for Logflare
3
+
4
+ # Listen on all interfaces to allow container connections
5
+ listen_addresses = '*'
6
+
7
+ # Set WAL level to logical for Logflare replication
8
+ wal_level = logical
9
+
10
+ # Set max replication slots (needed for logical replication)
11
+ max_replication_slots = 10
12
+
13
+ # Set max WAL senders
14
+ max_wal_senders = 10
15
+
16
+ # Shared preload libraries (if needed)
17
17
  # shared_preload_libraries = 'pg_stat_statements'
@@ -0,0 +1,236 @@
1
+ api:
2
+ enabled: true
3
+ address: 0.0.0.0:7135
4
+
5
+ sources:
6
+ docker_host:
7
+ type: docker_logs
8
+ exclude_containers:
9
+ - insforge-vector
10
+ include_containers:
11
+ - insforge
12
+ - insforge-deno
13
+ - insforge-postgrest
14
+ - insforge-postgres
15
+
16
+ transforms:
17
+ project_logs:
18
+ type: remap
19
+ inputs:
20
+ - docker_host
21
+ source: |-
22
+ .project = "default"
23
+ .event_message = del(.message)
24
+ # Remove leading slash from container name if present
25
+ container = to_string!(del(.container_name))
26
+ if starts_with(container, "/") {
27
+ .appname = slice!(container, 1)
28
+ } else {
29
+ .appname = container
30
+ }
31
+ del(.container_created_at)
32
+ del(.container_id)
33
+ del(.source_type)
34
+ del(.stream)
35
+ del(.label)
36
+ del(.image)
37
+ del(.host)
38
+ del(.stream)
39
+
40
+ router:
41
+ type: route
42
+ inputs:
43
+ - project_logs
44
+ route:
45
+ insforge: '.appname == "insforge"'
46
+ deno: '.appname == "insforge-deno"'
47
+ rest: '.appname == "insforge-postgrest"'
48
+ db: '.appname == "insforge-postgres"'
49
+ realtime: '.appname == "insforge-realtime"'
50
+ # PostgREST logs with proper parsing
51
+ rest_logs:
52
+ type: remap
53
+ inputs:
54
+ - router.rest
55
+ source: |-
56
+ # .metadata.host = .project
57
+ # Parse PostgREST log format: DD/Mon/YYYY:HH:MM:SS +ZZZZ: message
58
+ parsed, err = parse_regex(.event_message, r'^(?P<time>\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} [+-]\d{4}): (?P<msg>.*)$')
59
+
60
+ if err == null && parsed != null {
61
+ .event_message = parsed.msg
62
+ .metadata.level = "info"
63
+ } else {
64
+ # If parsing fails, keep original message
65
+ .metadata.level = "info"
66
+ }
67
+ # InsForge logs are structured JSON, parse and handle both request logs and application logs
68
+ insforge_logs:
69
+ type: remap
70
+ inputs:
71
+ - router.insforge
72
+ source: |-
73
+ # Remove the [backend] prefix if present
74
+ .event_message = replace!(.event_message, r'^\[backend\] ', "")
75
+
76
+ req, err = parse_json(.event_message)
77
+ if err == null {
78
+ # Set timestamp from log
79
+ if req.timestamp != null {
80
+ .timestamp = to_timestamp!(req.timestamp)
81
+ }
82
+
83
+ # Set log level
84
+ .metadata.level = req.level
85
+
86
+ # Check if this is a request log (has duration field)
87
+ if req.duration != null {
88
+ # Flatten request log fields to top level
89
+ .user_agent = req.userAgent
90
+ .ip = req.ip
91
+ .method = req.method
92
+ .path = req.path
93
+ .protocol = "HTTP/1.1"
94
+ .status_code = req.status
95
+ .size = req.size
96
+ .duration = req.duration
97
+ # Format as nginx-style log line
98
+ .event_message = join!([req.method, req.path, to_string!(req.status), to_string!(req.size), req.duration, "-", req.ip, "-", req.userAgent], " ")
99
+ .log_type = "request"
100
+ } else {
101
+ # This is an application log
102
+ .event_message = join!([req.level, req.message], " - ")
103
+ .log_type = "application"
104
+ if req.error != null {
105
+ .error = req.error
106
+ }
107
+ if req.stack != null {
108
+ .stack = req.stack
109
+ }
110
+ }
111
+ }
112
+ realtime_logs:
113
+ type: remap
114
+ inputs:
115
+ - router.realtime
116
+ source: |-
117
+ parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
118
+ if err == null {
119
+ .event_message = parsed.msg
120
+ .metadata.level = parsed.level
121
+ }
122
+ deno_logs:
123
+ type: remap
124
+ inputs:
125
+ - router.deno
126
+ source: |-
127
+ parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
128
+ if err == null {
129
+ .event_message = parsed.msg
130
+ .timestamp = to_timestamp!(parsed.time)
131
+ .metadata.level = upcase!(parsed.level)
132
+ # .metadata.host = .project
133
+ }
134
+ # Postgres logs with proper parsing
135
+ db_logs:
136
+ type: remap
137
+ inputs:
138
+ - router.db
139
+ source: |-
140
+ # .metadata.host = "db-default"
141
+ # Parse PostgreSQL log format: YYYY-MM-DD HH:MM:SS.SSS TZ [PID] LEVEL: message
142
+ parsed, err = parse_regex(.event_message, r'^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) (?P<tz>\w+) \[(?P<pid>\d+)\] (?P<level>LOG|ERROR|WARNING|INFO|NOTICE|FATAL|PANIC|STATEMENT|DETAIL): (?P<msg>.*)$')
143
+
144
+ if err == null && parsed != null {
145
+ .metadata.parsed.pid = parsed.pid
146
+ .metadata.level = upcase!(parsed.level)
147
+ .event_message = parsed.msg
148
+
149
+ # Normalize STATEMENT and DETAIL to appropriate log levels
150
+ if .metadata.level == "STATEMENT" {
151
+ .metadata.level = "INFO"
152
+ }
153
+ if .metadata.level == "DETAIL" {
154
+ .metadata.level = "INFO"
155
+ }
156
+ } else {
157
+ # If parsing fails, keep original message and set default severity
158
+ .metadata.level = "LOG"
159
+ }
160
+
161
+ sinks:
162
+ # File sinks - JSONL format for FileProvider (always enabled)
163
+ file_insforge:
164
+ type: 'file'
165
+ inputs:
166
+ - insforge_logs
167
+ path: '/insforge-logs/insforge.logs.jsonl'
168
+ encoding:
169
+ codec: 'json'
170
+ file_deno:
171
+ type: 'file'
172
+ inputs:
173
+ - deno_logs
174
+ path: '/insforge-logs/function.logs.jsonl'
175
+ encoding:
176
+ codec: 'json'
177
+ file_rest:
178
+ type: 'file'
179
+ inputs:
180
+ - rest_logs
181
+ path: '/insforge-logs/postgrest.logs.jsonl'
182
+ encoding:
183
+ codec: 'json'
184
+ file_db:
185
+ type: 'file'
186
+ inputs:
187
+ - db_logs
188
+ path: '/insforge-logs/postgres.logs.jsonl'
189
+ encoding:
190
+ codec: 'json'
191
+
192
+ # CloudWatch sinks (ignored if AWS_REGION not set)
193
+ cw_insforge:
194
+ type: aws_cloudwatch_logs
195
+ inputs:
196
+ - insforge_logs
197
+ region: ${AWS_REGION:-skip}
198
+ group_name: /insforge/local
199
+ stream_name: ${HOSTNAME_OVERRIDE:-local}-insforge-vector
200
+ encoding:
201
+ codec: json
202
+ healthcheck:
203
+ enabled: false
204
+ cw_rest:
205
+ type: aws_cloudwatch_logs
206
+ inputs:
207
+ - rest_logs
208
+ region: ${AWS_REGION:-skip}
209
+ group_name: /insforge/local
210
+ stream_name: ${HOSTNAME_OVERRIDE:-local}-postgrest-vector
211
+ encoding:
212
+ codec: json
213
+ healthcheck:
214
+ enabled: false
215
+ cw_deno:
216
+ type: aws_cloudwatch_logs
217
+ inputs:
218
+ - deno_logs
219
+ region: ${AWS_REGION:-skip}
220
+ group_name: /insforge/local
221
+ stream_name: ${HOSTNAME_OVERRIDE:-local}-function-vector
222
+ encoding:
223
+ codec: json
224
+ healthcheck:
225
+ enabled: false
226
+ cw_db:
227
+ type: aws_cloudwatch_logs
228
+ inputs:
229
+ - db_logs
230
+ region: ${AWS_REGION:-skip}
231
+ group_name: /insforge/local
232
+ stream_name: ${HOSTNAME_OVERRIDE:-local}-postgres-vector
233
+ encoding:
234
+ codec: json
235
+ healthcheck:
236
+ enabled: false
package/docs/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # Mintlify Starter Kit
2
+
3
+ Use the starter kit to get your docs deployed and ready to customize.
4
+
5
+ Click the green **Use this template** button at the top of this repo to copy the Mintlify starter kit. The starter kit contains examples with
6
+
7
+ - Guide pages
8
+ - Navigation
9
+ - Customizations
10
+ - API reference pages
11
+ - Use of popular components
12
+
13
+ **[Follow the full quickstart guide](https://starter.mintlify.com/quickstart)**
14
+
15
+ ## Development
16
+
17
+ Install the [Mintlify CLI](https://www.npmjs.com/package/mint) to preview your documentation changes locally. To install, use the following command:
18
+
19
+ ```
20
+ npm i -g mint
21
+ ```
22
+
23
+ Run the following command at the root of your documentation, where your `docs.json` is located:
24
+
25
+ ```
26
+ mint dev
27
+ ```
28
+
29
+ View your local preview at `http://localhost:3000`.
30
+
31
+ ## Publishing changes
32
+
33
+ Install our GitHub app from your [dashboard](https://dashboard.mintlify.com/settings/organization/github-app) to propagate changes from your repo to your deployment. Changes are deployed to production automatically after pushing to the default branch.
34
+
35
+ ## Need help?
36
+
37
+ ### Troubleshooting
38
+
39
+ - If your dev environment isn't running: Run `mint update` to ensure you have the most recent version of the CLI.
40
+ - If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
41
+
42
+ ### Resources
43
+ - [Mintlify documentation](https://mintlify.com/docs)
44
+ - [Mintlify community](https://mintlify.com/community)
@@ -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 |
@@ -0,0 +1,119 @@
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>