insforge 1.2.10 → 1.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (506) hide show
  1. package/.claude-plugin/marketplace.json +20 -20
  2. package/.dockerignore +60 -60
  3. package/.env.example +83 -77
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +65 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -63
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +46 -44
  15. package/CLAUDE_PLUGIN.md +104 -104
  16. package/CODE_OF_CONDUCT.md +128 -128
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -30
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -182
  23. package/assets/Dark.svg +23 -23
  24. package/auth/package.json +30 -28
  25. package/auth/src/lib/broadcastService.ts +4 -4
  26. package/auth/src/lib/insforge.ts +8 -0
  27. package/auth/src/main.tsx +2 -4
  28. package/auth/src/pages/SignInPage.tsx +5 -2
  29. package/auth/src/pages/SignUpPage.tsx +5 -2
  30. package/auth/src/pages/VerifyEmailPage.tsx +18 -0
  31. package/auth/tsconfig.json +33 -32
  32. package/auth/tsconfig.node.json +11 -11
  33. package/backend/package.json +82 -75
  34. package/backend/src/api/middlewares/rate-limiters.ts +127 -127
  35. package/backend/src/api/routes/ai/index.routes.ts +475 -468
  36. package/backend/src/api/routes/auth/index.routes.ts +720 -570
  37. package/backend/src/api/routes/auth/oauth.routes.ts +478 -448
  38. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  39. package/backend/src/api/routes/database/index.routes.ts +80 -1
  40. package/backend/src/api/routes/database/records.routes.ts +48 -184
  41. package/backend/src/api/routes/database/rpc.routes.ts +69 -0
  42. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  43. package/backend/src/api/routes/deployments/index.routes.ts +192 -0
  44. package/backend/src/api/routes/docs/index.routes.ts +76 -76
  45. package/backend/src/api/routes/email/index.routes.ts +35 -0
  46. package/backend/src/api/routes/functions/index.routes.ts +21 -15
  47. package/backend/src/api/routes/metadata/index.routes.ts +38 -0
  48. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  49. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  50. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  51. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  52. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  53. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  54. package/backend/src/api/routes/webhooks/index.routes.ts +109 -0
  55. package/backend/src/infra/database/database.manager.ts +14 -11
  56. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  57. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  58. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  59. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  60. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  61. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  62. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  63. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  64. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  65. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  66. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  67. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  68. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  69. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  70. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  71. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  72. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  73. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  74. package/backend/src/infra/database/migrations/018_schema-rework.sql +441 -0
  75. package/backend/src/infra/database/migrations/019_create-deployments-table.sql +36 -0
  76. package/backend/src/infra/database/migrations/020_add-audio-modality.sql +11 -0
  77. package/backend/src/infra/database/migrations/bootstrap/bootstrap-migrations.js +103 -0
  78. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  79. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  80. package/backend/src/infra/security/token.manager.ts +216 -125
  81. package/backend/src/infra/socket/socket.manager.ts +198 -64
  82. package/backend/src/providers/ai/openrouter.provider.ts +24 -12
  83. package/backend/src/providers/database/base.provider.ts +39 -0
  84. package/backend/src/providers/database/cloud.provider.ts +159 -0
  85. package/backend/src/providers/deployments/vercel.provider.ts +516 -0
  86. package/backend/src/providers/email/base.provider.ts +4 -7
  87. package/backend/src/providers/email/cloud.provider.ts +84 -0
  88. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  89. package/backend/src/providers/oauth/index.ts +1 -0
  90. package/backend/src/server.ts +329 -284
  91. package/backend/src/services/ai/ai-config.service.ts +6 -6
  92. package/backend/src/services/ai/ai-model.service.ts +60 -60
  93. package/backend/src/services/ai/ai-usage.service.ts +7 -7
  94. package/backend/src/services/ai/chat-completion.service.ts +415 -220
  95. package/backend/src/services/ai/helpers.ts +64 -64
  96. package/backend/src/services/ai/image-generation.service.ts +3 -3
  97. package/backend/src/services/ai/index.ts +13 -13
  98. package/backend/src/services/auth/auth-config.service.ts +4 -4
  99. package/backend/src/services/auth/auth-otp.service.ts +6 -6
  100. package/backend/src/services/auth/auth.service.ts +148 -74
  101. package/backend/src/services/auth/index.ts +4 -4
  102. package/backend/src/services/auth/oauth-config.service.ts +12 -12
  103. package/backend/src/services/database/database-advance.service.ts +19 -55
  104. package/backend/src/services/database/database-table.service.ts +38 -94
  105. package/backend/src/services/database/database.service.ts +127 -0
  106. package/backend/src/services/database/postgrest-proxy.service.ts +165 -0
  107. package/backend/src/services/deployments/deployment.service.ts +693 -0
  108. package/backend/src/services/email/email.service.ts +5 -7
  109. package/backend/src/services/functions/function.service.ts +61 -41
  110. package/backend/src/services/logs/audit.service.ts +10 -10
  111. package/backend/src/services/realtime/index.ts +3 -0
  112. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  113. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  114. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  115. package/backend/src/services/secrets/secret.service.ts +101 -27
  116. package/backend/src/services/storage/storage.service.ts +30 -30
  117. package/backend/src/services/usage/usage.service.ts +6 -6
  118. package/backend/src/types/ai.ts +8 -0
  119. package/backend/src/types/auth.ts +16 -1
  120. package/backend/src/types/database.ts +2 -0
  121. package/backend/src/types/deployments.ts +33 -0
  122. package/backend/src/types/realtime.ts +18 -0
  123. package/backend/src/types/socket.ts +7 -31
  124. package/backend/src/types/storage.ts +1 -1
  125. package/backend/src/types/webhooks.ts +45 -0
  126. package/backend/src/utils/cookies.ts +34 -0
  127. package/backend/src/utils/environment.ts +0 -14
  128. package/backend/src/utils/s3-config-loader.ts +64 -0
  129. package/backend/src/utils/seed.ts +79 -43
  130. package/backend/src/utils/sql-parser.ts +216 -0
  131. package/backend/src/utils/utils.ts +114 -114
  132. package/backend/src/utils/validations.ts +10 -10
  133. package/backend/tests/README.md +133 -133
  134. package/backend/tests/cleanup-all-test-data.sh +230 -230
  135. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  136. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  137. package/backend/tests/local/test-ai-config.sh +129 -129
  138. package/backend/tests/local/test-ai-usage.sh +80 -80
  139. package/backend/tests/local/test-auth-router.sh +143 -143
  140. package/backend/tests/local/test-database-router.sh +222 -222
  141. package/backend/tests/local/test-e2e.sh +240 -240
  142. package/backend/tests/local/test-fk-errors.sh +96 -96
  143. package/backend/tests/local/test-functions.sh +123 -123
  144. package/backend/tests/local/test-id-field.sh +200 -200
  145. package/backend/tests/local/test-logs.sh +132 -132
  146. package/backend/tests/local/test-public-bucket.sh +264 -264
  147. package/backend/tests/local/test-rpc.sh +141 -0
  148. package/backend/tests/local/test-secrets.sh +249 -249
  149. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  150. package/backend/tests/local/test-traditional-rest.sh +208 -208
  151. package/backend/tests/manual/README.md +50 -50
  152. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  153. package/backend/tests/manual/seed-large-table.sql +100 -100
  154. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  155. package/backend/tests/manual/test-ai-model-plugins.sh +258 -0
  156. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  157. package/backend/tests/manual/test-database-advance.sh +296 -296
  158. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  159. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  160. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  161. package/backend/tests/manual/test-universal-storage.sh +263 -263
  162. package/backend/tests/manual/test-users.sql +17 -17
  163. package/backend/tests/run-all-tests.sh +139 -139
  164. package/backend/tests/setup.ts +0 -0
  165. package/backend/tests/test-config.sh +338 -338
  166. package/backend/tests/unit/analyze-query.test.ts +697 -0
  167. package/backend/tests/unit/database-advance.test.ts +326 -0
  168. package/backend/tests/unit/helpers.test.ts +2 -2
  169. package/backend/tsconfig.json +22 -22
  170. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  171. package/claude-plugin/README.md +133 -133
  172. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +273 -270
  173. package/docker-compose.prod.yml +204 -200
  174. package/docker-compose.yml +232 -228
  175. package/docker-init/db/db-init.sql +97 -97
  176. package/docker-init/db/jwt.sql +5 -5
  177. package/docker-init/db/postgresql.conf +16 -16
  178. package/docker-init/logs/vector.yml +236 -236
  179. package/docs/README.md +44 -44
  180. package/docs/agent-docs/deployment.md +79 -0
  181. package/docs/agent-docs/real-time.md +269 -0
  182. package/docs/changelog.mdx +212 -67
  183. package/docs/core-concepts/ai/architecture.mdx +350 -372
  184. package/docs/core-concepts/ai/sdk.mdx +238 -213
  185. package/docs/core-concepts/authentication/architecture.mdx +276 -278
  186. package/docs/core-concepts/authentication/sdk.mdx +710 -414
  187. package/docs/core-concepts/authentication/ui-components/customization.mdx +733 -529
  188. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +247 -221
  189. package/docs/core-concepts/authentication/ui-components/react-router.mdx +183 -184
  190. package/docs/core-concepts/authentication/ui-components/react.mdx +136 -129
  191. package/docs/core-concepts/database/architecture.mdx +292 -255
  192. package/docs/core-concepts/database/pgvector.mdx +138 -0
  193. package/docs/core-concepts/database/sdk.mdx +382 -382
  194. package/docs/core-concepts/deployments/architecture.mdx +152 -0
  195. package/docs/core-concepts/email/architecture.mdx +103 -0
  196. package/docs/core-concepts/email/sdk.mdx +53 -0
  197. package/docs/core-concepts/functions/architecture.mdx +105 -105
  198. package/docs/core-concepts/functions/sdk.mdx +183 -184
  199. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  200. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  201. package/docs/core-concepts/storage/architecture.mdx +243 -243
  202. package/docs/core-concepts/storage/sdk.mdx +253 -253
  203. package/docs/deployment/README.md +94 -94
  204. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  205. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  206. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  207. package/docs/deployment/deploy-to-render.md +441 -441
  208. package/docs/deprecated/insforge-auth-api.md +214 -214
  209. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  210. package/docs/deprecated/insforge-db-api.md +358 -358
  211. package/docs/deprecated/insforge-db-sdk.md +139 -139
  212. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  213. package/docs/deprecated/insforge-debug.md +64 -64
  214. package/docs/deprecated/insforge-instructions.md +123 -123
  215. package/docs/deprecated/insforge-project.md +117 -117
  216. package/docs/deprecated/insforge-storage-api.md +278 -278
  217. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  218. package/docs/docs.json +240 -210
  219. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  220. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  221. package/docs/examples/framework-guides/react.mdx +165 -165
  222. package/docs/examples/framework-guides/svelte.mdx +153 -153
  223. package/docs/examples/framework-guides/vue.mdx +159 -159
  224. package/docs/examples/overview.mdx +67 -67
  225. package/docs/favicon.png +0 -0
  226. package/docs/favicon.svg +4 -19
  227. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  228. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  229. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  230. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  231. package/docs/images/changelog/dec-2025/apple-oauth.mp4 +0 -0
  232. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  233. package/docs/images/changelog/dec-2025/moreModels.png +0 -0
  234. package/docs/images/changelog/dec-2025/multi-region.webp +0 -0
  235. package/docs/images/changelog/dec-2025/postgres-connection.webp +0 -0
  236. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  237. package/docs/images/changelog/dec-2025/realtime2.png +0 -0
  238. package/docs/images/icons/ai.svg +4 -4
  239. package/docs/images/logos/nextjs.svg +4 -4
  240. package/docs/images/logos/nuxt.svg +4 -4
  241. package/docs/images/logos/react.svg +5 -5
  242. package/docs/images/logos/svelte.svg +4 -4
  243. package/docs/images/logos/vue.svg +5 -5
  244. package/docs/images/mcp-setup/CC-MCP-1.mp4 +0 -0
  245. package/docs/images/mcp-setup/CC-MCP-2.mp4 +0 -0
  246. package/docs/images/mcp-setup/Cursor-MCP-1.mp4 +0 -0
  247. package/docs/images/mcp-setup/Cursor-MCP-2.mp4 +0 -0
  248. package/docs/images/mcp-setup/Cursor-MCP-3.mp4 +0 -0
  249. package/docs/images/mcp-setup/claude-code-connect.png +0 -0
  250. package/docs/images/mcp-setup/cline-1.png +0 -0
  251. package/docs/images/mcp-setup/cline-2.png +0 -0
  252. package/docs/images/mcp-setup/cline-3.png +0 -0
  253. package/docs/images/mcp-setup/connect-project.png +0 -0
  254. package/docs/images/mcp-setup/copilot-1.png +0 -0
  255. package/docs/images/mcp-setup/copilot-2.png +0 -0
  256. package/docs/images/mcp-setup/copilot-3.png +0 -0
  257. package/docs/images/mcp-setup/mcp-json-1.png +0 -0
  258. package/docs/images/mcp-setup/mcp-json-2.png +0 -0
  259. package/docs/images/mcp-setup/qoder-1.png +0 -0
  260. package/docs/images/mcp-setup/qoder-2.png +0 -0
  261. package/docs/images/mcp-setup/roocode-1.png +0 -0
  262. package/docs/images/mcp-setup/roocode-2.png +0 -0
  263. package/docs/images/mcp-setup/trae-1.png +0 -0
  264. package/docs/images/mcp-setup/trae-2.png +0 -0
  265. package/docs/images/mcp-setup/trae-3.png +0 -0
  266. package/docs/images/mcp-setup/trae-4.png +0 -0
  267. package/docs/images/mcp-setup/trae-5.png +0 -0
  268. package/docs/images/mcp-setup/windsurf-1.png +0 -0
  269. package/docs/images/mcp-setup/windsurf-2.png +0 -0
  270. package/docs/insforge-instructions-sdk.md +93 -88
  271. package/docs/introduction.mdx +46 -45
  272. package/docs/logo/dark.svg +22 -22
  273. package/docs/logo/light.svg +20 -20
  274. package/docs/mcp-setup.mdx +332 -0
  275. package/docs/oauth-server.mdx +563 -0
  276. package/docs/partnership.mdx +720 -646
  277. package/docs/quickstart.mdx +82 -82
  278. package/docs/showcase.mdx +52 -52
  279. package/docs/snippets/sdk-installation.mdx +21 -21
  280. package/docs/snippets/service-icons.mdx +27 -27
  281. package/docs/vscode-extension.mdx +74 -0
  282. package/eslint.config.js +1 -0
  283. package/examples/oauth/frontend-oauth-example.html +250 -250
  284. package/examples/response-examples.md +443 -443
  285. package/frontend/components.json +17 -17
  286. package/frontend/package.json +69 -69
  287. package/frontend/src/App.tsx +8 -3
  288. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  289. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  290. package/frontend/src/assets/icons/checked.svg +3 -3
  291. package/frontend/src/assets/icons/connected.svg +3 -3
  292. package/frontend/src/assets/icons/error.svg +3 -3
  293. package/frontend/src/assets/icons/loader.svg +9 -9
  294. package/frontend/src/assets/icons/pencil.svg +4 -4
  295. package/frontend/src/assets/icons/refresh.svg +4 -4
  296. package/frontend/src/assets/icons/step_active.svg +3 -3
  297. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  298. package/frontend/src/assets/icons/warning.svg +3 -3
  299. package/frontend/src/assets/logos/antigravity.svg +1 -0
  300. package/frontend/src/assets/logos/apple.svg +3 -3
  301. package/frontend/src/assets/logos/claude_code.svg +3 -3
  302. package/frontend/src/assets/logos/cline.svg +6 -6
  303. package/frontend/src/assets/logos/copilot.svg +10 -0
  304. package/frontend/src/assets/logos/cursor.svg +20 -20
  305. package/frontend/src/assets/logos/deepseek.svg +139 -0
  306. package/frontend/src/assets/logos/discord.svg +8 -8
  307. package/frontend/src/assets/logos/facebook.svg +3 -3
  308. package/frontend/src/assets/logos/gemini.svg +19 -19
  309. package/frontend/src/assets/logos/github.svg +5 -5
  310. package/frontend/src/assets/logos/google.svg +13 -13
  311. package/frontend/src/assets/logos/grok.svg +10 -10
  312. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  313. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  314. package/frontend/src/assets/logos/instagram.svg +1 -1
  315. package/frontend/src/assets/logos/kiro.svg +9 -0
  316. package/frontend/src/assets/logos/linkedin.svg +3 -3
  317. package/frontend/src/assets/logos/openai.svg +10 -10
  318. package/frontend/src/assets/logos/qoder.svg +4 -0
  319. package/frontend/src/assets/logos/qwen.svg +15 -0
  320. package/frontend/src/assets/logos/roo_code.svg +9 -9
  321. package/frontend/src/assets/logos/spotify.svg +16 -16
  322. package/frontend/src/assets/logos/tiktok.svg +5 -5
  323. package/frontend/src/assets/logos/trae.svg +3 -3
  324. package/frontend/src/assets/logos/windsurf.svg +10 -10
  325. package/frontend/src/assets/logos/x.svg +3 -3
  326. package/frontend/src/components/CodeBlock.tsx +2 -2
  327. package/frontend/src/components/ConnectCTA.tsx +3 -2
  328. package/frontend/src/components/datagrid/DataGrid.tsx +90 -62
  329. package/frontend/src/components/datagrid/datagridTypes.tsx +2 -1
  330. package/frontend/src/components/datagrid/index.ts +1 -1
  331. package/frontend/src/components/index.ts +0 -1
  332. package/frontend/src/components/layout/AppHeader.tsx +13 -37
  333. package/frontend/src/components/layout/AppSidebar.tsx +85 -100
  334. package/frontend/src/components/layout/Layout.tsx +34 -32
  335. package/frontend/src/components/layout/PrimaryMenu.tsx +12 -4
  336. package/frontend/src/components/radix/Select.tsx +151 -151
  337. package/frontend/src/features/ai/components/AIConfigCard.tsx +200 -200
  338. package/frontend/src/features/ai/components/AIEmptyState.tsx +23 -23
  339. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +102 -101
  340. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -135
  341. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -51
  342. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -118
  343. package/frontend/src/features/ai/components/index.ts +6 -6
  344. package/frontend/src/features/ai/helpers.ts +147 -141
  345. package/frontend/src/features/ai/{page → pages}/AIPage.tsx +166 -166
  346. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -96
  347. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  348. package/frontend/src/features/auth/components/UsersDataGrid.tsx +61 -31
  349. package/frontend/src/features/auth/components/index.ts +5 -5
  350. package/frontend/src/features/auth/helpers.tsx +8 -0
  351. package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +275 -275
  352. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  353. package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +1 -1
  354. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +0 -2
  355. package/frontend/src/features/database/components/ForeignKeyCell.tsx +38 -11
  356. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +18 -8
  357. package/frontend/src/features/database/components/LinkRecordModal.tsx +61 -13
  358. package/frontend/src/features/database/components/RecordFormField.tsx +1 -1
  359. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  360. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  361. package/frontend/src/features/database/components/TableSidebar.tsx +0 -3
  362. package/frontend/src/features/database/components/TablesEmptyState.tsx +1 -1
  363. package/frontend/src/features/database/components/TemplatePreview.tsx +1 -2
  364. package/frontend/src/features/database/constants.ts +16 -28
  365. package/frontend/src/features/database/hooks/useCSVImport.ts +3 -2
  366. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  367. package/frontend/src/features/database/hooks/useRawSQL.ts +3 -2
  368. package/frontend/src/features/database/hooks/useTables.ts +30 -28
  369. package/frontend/src/features/database/index.ts +1 -0
  370. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -42
  371. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +34 -51
  372. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +42 -58
  373. package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +2 -2
  374. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  375. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +34 -51
  376. package/frontend/src/features/database/services/advance.service.ts +1 -41
  377. package/frontend/src/features/database/services/database.service.ts +55 -0
  378. package/frontend/src/features/database/services/record.service.ts +4 -20
  379. package/frontend/src/features/database/services/table.service.ts +1 -10
  380. package/frontend/src/features/database/templates/ai-chatbot.ts +6 -6
  381. package/frontend/src/features/database/templates/ecommerce-platform.ts +2 -2
  382. package/frontend/src/features/database/templates/instagram-clone.ts +10 -10
  383. package/frontend/src/features/database/templates/notion-clone.ts +8 -8
  384. package/frontend/src/features/database/templates/reddit-clone.ts +10 -10
  385. package/frontend/src/features/deployments/components/DeploymentRow.tsx +93 -0
  386. package/frontend/src/features/deployments/components/DeploymentsEmptyState.tsx +15 -0
  387. package/frontend/src/features/deployments/hooks/useDeployments.ts +157 -0
  388. package/frontend/src/features/deployments/pages/DeploymentsPage.tsx +318 -0
  389. package/frontend/src/features/deployments/services/deployments.service.ts +63 -0
  390. package/frontend/src/features/functions/components/FunctionRow.tsx +72 -72
  391. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +56 -56
  392. package/frontend/src/features/functions/components/SecretRow.tsx +3 -3
  393. package/frontend/src/features/functions/components/index.ts +5 -5
  394. package/frontend/src/features/functions/hooks/useFunctions.ts +5 -4
  395. package/frontend/src/features/functions/hooks/useSecrets.ts +6 -9
  396. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  397. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +118 -116
  398. package/frontend/src/features/functions/services/function.service.ts +8 -25
  399. package/frontend/src/features/functions/services/secret.service.ts +23 -41
  400. package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +125 -118
  401. package/frontend/src/features/logs/components/LogDetailPanel.tsx +41 -0
  402. package/frontend/src/features/logs/components/LogsDataGrid.tsx +32 -1
  403. package/frontend/src/features/logs/components/index.ts +1 -0
  404. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  405. package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +36 -6
  406. package/frontend/src/features/onboard/components/ApiCredentialsSection.tsx +59 -0
  407. package/frontend/src/features/onboard/components/ConnectionStringSection.tsx +180 -0
  408. package/frontend/src/features/onboard/components/McpConnectionSection.tsx +159 -0
  409. package/frontend/src/features/onboard/components/OnboardingController.tsx +68 -0
  410. package/frontend/src/features/onboard/components/OnboardingModal.tsx +121 -267
  411. package/frontend/src/features/onboard/components/ShowPasswordButton.tsx +21 -0
  412. package/frontend/src/features/onboard/components/index.ts +9 -4
  413. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +1 -1
  414. package/frontend/src/features/onboard/components/mcp/QoderDeeplinkGenerator.tsx +36 -0
  415. package/frontend/src/features/onboard/components/mcp/helpers.tsx +123 -98
  416. package/frontend/src/features/onboard/components/mcp/index.ts +4 -3
  417. package/frontend/src/features/onboard/index.ts +17 -13
  418. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  419. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  420. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  421. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  422. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  423. package/frontend/src/features/realtime/index.ts +11 -0
  424. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  425. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  426. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  427. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  428. package/frontend/src/features/settings/pages/SettingsPage.tsx +349 -0
  429. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  430. package/frontend/src/features/visualizer/components/AuthNode.tsx +4 -4
  431. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +24 -11
  432. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +11 -36
  433. package/frontend/src/index.css +249 -249
  434. package/frontend/src/lib/contexts/ModalContext.tsx +35 -0
  435. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  436. package/frontend/src/lib/hooks/useMetadata.ts +45 -1
  437. package/frontend/src/lib/hooks/useModal.tsx +2 -0
  438. package/frontend/src/lib/routing/AppRoutes.tsx +103 -84
  439. package/frontend/src/lib/services/metadata.service.ts +20 -3
  440. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  441. package/frontend/src/lib/utils/menuItems.ts +223 -183
  442. package/frontend/src/lib/utils/utils.ts +196 -183
  443. package/frontend/tsconfig.json +25 -25
  444. package/frontend/tsconfig.node.json +9 -9
  445. package/functions/deno.json +24 -24
  446. package/functions/server.ts +6 -6
  447. package/functions/worker-template.js +1 -1
  448. package/i18n/README.ar.md +130 -130
  449. package/i18n/README.de.md +130 -130
  450. package/i18n/README.es.md +154 -154
  451. package/i18n/README.fr.md +134 -134
  452. package/i18n/README.hi.md +129 -129
  453. package/i18n/README.ja.md +174 -174
  454. package/i18n/README.ko.md +136 -136
  455. package/i18n/README.pt-BR.md +131 -131
  456. package/i18n/README.ru.md +129 -129
  457. package/i18n/README.zh-CN.md +133 -133
  458. package/openapi/ai.yaml +825 -715
  459. package/openapi/auth.yaml +1324 -1244
  460. package/openapi/email.yaml +158 -0
  461. package/openapi/functions.yaml +475 -475
  462. package/openapi/health.yaml +29 -29
  463. package/openapi/logs.yaml +221 -223
  464. package/openapi/metadata.yaml +175 -177
  465. package/openapi/realtime.yaml +699 -0
  466. package/openapi/records.yaml +381 -381
  467. package/openapi/secrets.yaml +370 -370
  468. package/openapi/storage.yaml +875 -875
  469. package/openapi/tables.yaml +462 -463
  470. package/package.json +97 -97
  471. package/shared-schemas/package.json +31 -31
  472. package/shared-schemas/src/ai-api.schema.ts +251 -143
  473. package/shared-schemas/src/ai.schema.ts +8 -4
  474. package/shared-schemas/src/auth-api.schema.ts +380 -339
  475. package/shared-schemas/src/auth.schema.ts +18 -11
  476. package/shared-schemas/src/cloud-events.schema.ts +26 -0
  477. package/shared-schemas/src/database-api.schema.ts +32 -1
  478. package/shared-schemas/src/database.schema.ts +39 -0
  479. package/shared-schemas/src/deployments-api.schema.ts +55 -0
  480. package/shared-schemas/src/deployments.schema.ts +30 -0
  481. package/shared-schemas/src/docs.schema.ts +32 -0
  482. package/shared-schemas/src/email-api.schema.ts +30 -0
  483. package/shared-schemas/src/functions-api.schema.ts +13 -4
  484. package/shared-schemas/src/functions.schema.ts +1 -1
  485. package/shared-schemas/src/index.ts +22 -14
  486. package/shared-schemas/src/metadata.schema.ts +39 -4
  487. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  488. package/shared-schemas/src/realtime.schema.ts +143 -0
  489. package/shared-schemas/src/secrets-api.schema.ts +44 -0
  490. package/shared-schemas/src/secrets.schema.ts +15 -0
  491. package/shared-schemas/tsconfig.json +21 -21
  492. package/tsconfig.json +7 -7
  493. package/zeabur/README.md +26 -13
  494. package/zeabur/template.yml +1001 -1032
  495. package/.cursor/rules/cursor-rules.mdc +0 -94
  496. package/backend/src/types/profile.ts +0 -55
  497. package/frontend/src/components/ProjectInfoModal.tsx +0 -128
  498. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  499. package/test-gemini.sh +0 -35
  500. package/test-usage-admin.sh +0 -57
  501. package/test-usage.sh +0 -50
  502. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  503. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  504. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  505. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  506. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
@@ -1,228 +1,232 @@
1
- version: '3.8'
2
-
3
- services:
4
- postgres:
5
- image: postgres:15.13
6
- container_name: insforge-postgres
7
- command: postgres -c config_file=/etc/postgresql/postgresql.conf
8
- environment:
9
- - POSTGRES_USER=${POSTGRES_USER:-postgres}
10
- - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
11
- - POSTGRES_DB=${POSTGRES_DB:-insforge}
12
- volumes:
13
- - postgres-data:/var/lib/postgresql/data
14
- - ./docker-init/db/db-init.sql:/docker-entrypoint-initdb.d/01-init.sql
15
- - ./docker-init/db/jwt.sql:/docker-entrypoint-initdb.d/02-jwt.sql
16
- - ./docker-init/db/postgresql.conf:/etc/postgresql/postgresql.conf
17
- ports:
18
- - "5432:5432"
19
- networks:
20
- - insforge-network
21
- healthcheck:
22
- test: ["CMD-SHELL", "pg_isready -U postgres"]
23
- interval: 5s
24
- timeout: 5s
25
- retries: 5
26
-
27
- postgrest:
28
- image: postgrest/postgrest:v12.2.12
29
- container_name: insforge-postgrest
30
- restart: unless-stopped
31
- environment:
32
- # POSTGRES_USER: ${POSTGRES_USER:-postgres}
33
- # POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
34
- # POSTGRES_DB: ${POSTGRES_DB:-insforge}
35
- PGRST_DB_URI: postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-insforge}
36
- PGRST_OPENAPI_SERVER_PROXY_URI: http://localhost:3000
37
- PGRST_DB_SCHEMA: public
38
- PGRST_DB_ANON_ROLE: anon
39
- PGRST_JWT_SECRET: ${JWT_SECRET:-dev-secret-please-change-in-production}
40
- # Enable schema reloading via NOTIFY
41
- PGRST_DB_CHANNEL_ENABLED: true
42
- PGRST_DB_CHANNEL: pgrst
43
- ports:
44
- - "5430:3000"
45
- depends_on:
46
- postgres:
47
- condition: service_healthy
48
- networks:
49
- - insforge-network
50
-
51
- insforge:
52
- image: node:20-alpine
53
- container_name: insforge
54
- working_dir: /app
55
- depends_on:
56
- postgres:
57
- condition: service_healthy
58
- ports:
59
- - "7130:7130"
60
- - "7131:7131"
61
- - "7132:7132"
62
- environment:
63
- - PORT=7130
64
- - PROJECT_ROOT=/app
65
- - API_BASE_URL=${API_BASE_URL:-}
66
- - VITE_API_BASE_URL=${VITE_API_BASE_URL:-}
67
- - JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
68
- - ENCRYPTION_KEY=${ENCRYPTION_KEY:-}
69
- - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
70
- - ADMIN_PASSWORD=${ADMIN_PASSWORD:-change-this-password}
71
- - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
72
- - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
73
- # PostgreSQL connection
74
- - POSTGRES_HOST=postgres
75
- - POSTGRES_PORT=5432
76
- - POSTGRES_DB=${POSTGRES_DB:-insforge}
77
- - POSTGRES_USER=${POSTGRES_USER:-postgres}
78
- - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
79
- - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-insforge}
80
- - POSTGREST_BASE_URL=http://postgrest:3000
81
- # Deno Runtime URL for serverless functions
82
- - DENO_RUNTIME_URL=http://deno:7133
83
- # Storage Configuration
84
- - AWS_S3_BUCKET=${AWS_S3_BUCKET:-}
85
- - AWS_REGION=${AWS_REGION:-}
86
- - AWS_CLOUDFRONT_URL=${AWS_CLOUDFRONT_URL:-}
87
- - AWS_CLOUDFRONT_KEY_PAIR_ID=${AWS_CLOUDFRONT_KEY_PAIR_ID:-}
88
- - AWS_CLOUDFRONT_PRIVATE_KEY=${AWS_CLOUDFRONT_PRIVATE_KEY:-}
89
- # Multi-tenant Cloud Configuration
90
- - DEPLOYMENT_ID=${DEPLOYMENT_ID:-}
91
- - PROJECT_ID=${PROJECT_ID:-}
92
- - APP_KEY=${APP_KEY:-}
93
- - ACCESS_API_KEY=${ACCESS_API_KEY:-}
94
- - CLOUD_API_HOST=${CLOUD_API_HOST:-}
95
- # LLM Model API keys
96
- - OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
97
- # OAuth Configuration
98
- - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID:-}
99
- - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
100
- - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
101
- - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
102
- - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID:-}
103
- - DISCORD_CLIENT_SECRET=${DISCORD_CLIENT_SECRET:-}
104
- - MICROSOFT_CLIENT_ID=${MICROSOFT_CLIENT_ID:-}
105
- - MICROSOFT_CLIENT_SECRET=${MICROSOFT_CLIENT_SECRET:-}
106
- - LINKEDIN_CLIENT_ID=${LINKEDIN_CLIENT_ID:-}
107
- - LINKEDIN_CLIENT_SECRET=${LINKEDIN_CLIENT_SECRET:-}
108
- # Logs directory
109
- - LOGS_DIR=/insforge-logs
110
- # Storage directory (for local file storage when S3 is not configured)
111
- - STORAGE_DIR=/insforge-storage
112
- # Auth app URL for development proxy
113
- - AUTH_APP_URL=${AUTH_APP_URL:-http://localhost:7132}
114
- volumes:
115
- - ./package.json:/app/package.json
116
- - ./backend:/app/backend
117
- - ./frontend:/app/frontend
118
- - ./auth:/app/auth
119
- - ./shared-schemas:/app/shared-schemas
120
- - ./docs:/app/docs
121
- - node_modules:/app/node_modules
122
- - backend_node_modules:/app/backend/node_modules
123
- - frontend_node_modules:/app/frontend/node_modules
124
- - auth_node_modules:/app/auth/node_modules
125
- - shared_schemas_node_modules:/app/shared-schemas/node_modules
126
- - shared-logs:/insforge-logs
127
- - storage-data:/insforge-storage
128
- command: sh -c "npm install && cd backend && npm run migrate:up && cd .. && npm run dev"
129
- restart: unless-stopped
130
- networks:
131
- - insforge-network
132
-
133
- # Deno serverless runtime for edge functions
134
- deno:
135
- image: denoland/deno:alpine-2.0.6
136
- container_name: insforge-deno
137
- working_dir: /app
138
- depends_on:
139
- - postgres
140
- - postgrest
141
- ports:
142
- - "7133:7133"
143
- environment:
144
- - PORT=7133
145
- - DENO_ENV=${DENO_ENV:-development}
146
- - DENO_DIR=/deno-dir
147
- # PostgreSQL connection
148
- - POSTGRES_HOST=postgres
149
- - POSTGRES_PORT=5432
150
- - POSTGRES_DB=${POSTGRES_DB:-insforge}
151
- - POSTGRES_USER=${POSTGRES_USER:-postgres}
152
- - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
153
- - POSTGREST_BASE_URL=http://postgrest:3000
154
- # Worker timeout (30 seconds default)
155
- - WORKER_TIMEOUT_MS=${WORKER_TIMEOUT_MS:-30000}
156
- # Encryption keys for decrypting function secrets
157
- - ENCRYPTION_KEY=${ENCRYPTION_KEY}
158
- - JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
159
- volumes:
160
- - ./functions:/app/functions
161
- - deno_cache:/deno-dir
162
- command: >
163
- sh -c "
164
- echo 'Downloading Deno dependencies...' &&
165
- deno cache functions/server.ts &&
166
- echo 'Starting Deno server on port 7133...' &&
167
- deno run --allow-net --allow-env --allow-read=./functions/worker-template.js --watch functions/server.ts
168
- "
169
- restart: unless-stopped
170
- networks:
171
- - insforge-network
172
-
173
- # Vector.dev for log collection and shipping
174
- vector:
175
- container_name: insforge-vector
176
- image: timberio/vector:0.28.1-alpine
177
- restart: unless-stopped
178
- depends_on:
179
- postgres:
180
- condition: service_healthy
181
- postgrest:
182
- condition: service_started
183
- insforge:
184
- condition: service_started
185
- deno:
186
- condition: service_started
187
- volumes:
188
- - ./docker-init/logs/vector.yml:/etc/vector/vector.yml:ro
189
- - /var/run/docker.sock:/var/run/docker.sock:ro
190
- - shared-logs:/insforge-logs
191
- healthcheck:
192
- test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7135/health"]
193
- timeout: 5s
194
- interval: 5s
195
- retries: 3
196
- environment:
197
- - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
198
- - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
199
- - AWS_REGION=${AWS_REGION:-skip}
200
- - PROJECT_ID=${PROJECT_ID:-}
201
- - HOSTNAME_OVERRIDE=${HOSTNAME_OVERRIDE:-}
202
- command: ["--config", "/etc/vector/vector.yml"]
203
- networks:
204
- - insforge-network
205
-
206
- volumes:
207
- postgres-data:
208
- driver: local
209
- node_modules:
210
- driver: local
211
- backend_node_modules:
212
- driver: local
213
- frontend_node_modules:
214
- driver: local
215
- auth_node_modules:
216
- driver: local
217
- shared_schemas_node_modules:
218
- driver: local
219
- deno_cache:
220
- driver: local
221
- shared-logs:
222
- driver: local
223
- storage-data:
224
- driver: local
225
-
226
- networks:
227
- insforge-network:
228
- driver: bridge
1
+ version: '3.8'
2
+
3
+ services:
4
+ postgres:
5
+ image: ghcr.io/insforge/postgres:v15.13.1
6
+ container_name: insforge-postgres
7
+ command: postgres -c config_file=/etc/postgresql/postgresql.conf
8
+ environment:
9
+ - POSTGRES_USER=${POSTGRES_USER:-postgres}
10
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
11
+ - POSTGRES_DB=${POSTGRES_DB:-insforge}
12
+ volumes:
13
+ - postgres-data:/var/lib/postgresql/data
14
+ - ./docker-init/db/db-init.sql:/docker-entrypoint-initdb.d/01-init.sql
15
+ - ./docker-init/db/jwt.sql:/docker-entrypoint-initdb.d/02-jwt.sql
16
+ - ./docker-init/db/postgresql.conf:/etc/postgresql/postgresql.conf
17
+ ports:
18
+ - "5432:5432"
19
+ networks:
20
+ - insforge-network
21
+ healthcheck:
22
+ test: ["CMD-SHELL", "pg_isready -U postgres"]
23
+ interval: 5s
24
+ timeout: 5s
25
+ retries: 5
26
+
27
+ postgrest:
28
+ image: postgrest/postgrest:v12.2.12
29
+ container_name: insforge-postgrest
30
+ restart: unless-stopped
31
+ environment:
32
+ # POSTGRES_USER: ${POSTGRES_USER:-postgres}
33
+ # POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
34
+ # POSTGRES_DB: ${POSTGRES_DB:-insforge}
35
+ PGRST_DB_URI: postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-insforge}
36
+ PGRST_OPENAPI_SERVER_PROXY_URI: http://localhost:3000
37
+ PGRST_DB_SCHEMA: public
38
+ PGRST_DB_ANON_ROLE: anon
39
+ PGRST_JWT_SECRET: ${JWT_SECRET:-dev-secret-please-change-in-production}
40
+ # Enable schema reloading via NOTIFY
41
+ PGRST_DB_CHANNEL_ENABLED: true
42
+ PGRST_DB_CHANNEL: pgrst
43
+ ports:
44
+ - "5430:3000"
45
+ depends_on:
46
+ postgres:
47
+ condition: service_healthy
48
+ networks:
49
+ - insforge-network
50
+
51
+ insforge:
52
+ image: node:20-alpine
53
+ container_name: insforge
54
+ working_dir: /app
55
+ depends_on:
56
+ postgres:
57
+ condition: service_healthy
58
+ ports:
59
+ - "7130:7130"
60
+ - "7131:7131"
61
+ - "7132:7132"
62
+ environment:
63
+ - PORT=7130
64
+ - PROJECT_ROOT=/app
65
+ - API_BASE_URL=${API_BASE_URL:-}
66
+ - VITE_API_BASE_URL=${VITE_API_BASE_URL:-}
67
+ - JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
68
+ - ENCRYPTION_KEY=${ENCRYPTION_KEY:-}
69
+ - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
70
+ - ADMIN_PASSWORD=${ADMIN_PASSWORD:-change-this-password}
71
+ - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
72
+ - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
73
+ # PostgreSQL connection
74
+ - POSTGRES_HOST=postgres
75
+ - POSTGRES_PORT=5432
76
+ - POSTGRES_DB=${POSTGRES_DB:-insforge}
77
+ - POSTGRES_USER=${POSTGRES_USER:-postgres}
78
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
79
+ - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-insforge}
80
+ - POSTGREST_BASE_URL=http://postgrest:3000
81
+ # Deno Runtime URL for serverless functions
82
+ - DENO_RUNTIME_URL=http://deno:7133
83
+ # Storage Configuration
84
+ - AWS_S3_BUCKET=${AWS_S3_BUCKET:-}
85
+ - AWS_REGION=${AWS_REGION:-}
86
+ - AWS_CLOUDFRONT_URL=${AWS_CLOUDFRONT_URL:-}
87
+ - AWS_CLOUDFRONT_KEY_PAIR_ID=${AWS_CLOUDFRONT_KEY_PAIR_ID:-}
88
+ - AWS_CLOUDFRONT_PRIVATE_KEY=${AWS_CLOUDFRONT_PRIVATE_KEY:-}
89
+ # Multi-tenant Cloud Configuration
90
+ - DEPLOYMENT_ID=${DEPLOYMENT_ID:-}
91
+ - PROJECT_ID=${PROJECT_ID:-}
92
+ - APP_KEY=${APP_KEY:-}
93
+ - ACCESS_API_KEY=${ACCESS_API_KEY:-}
94
+ - CLOUD_API_HOST=${CLOUD_API_HOST:-}
95
+ # LLM Model API keys
96
+ - OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
97
+ # OAuth Configuration
98
+ - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID:-}
99
+ - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
100
+ - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
101
+ - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
102
+ - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID:-}
103
+ - DISCORD_CLIENT_SECRET=${DISCORD_CLIENT_SECRET:-}
104
+ - MICROSOFT_CLIENT_ID=${MICROSOFT_CLIENT_ID:-}
105
+ - MICROSOFT_CLIENT_SECRET=${MICROSOFT_CLIENT_SECRET:-}
106
+ - LINKEDIN_CLIENT_ID=${LINKEDIN_CLIENT_ID:-}
107
+ - LINKEDIN_CLIENT_SECRET=${LINKEDIN_CLIENT_SECRET:-}
108
+ - X_CLIENT_ID=${X_CLIENT_ID:-}
109
+ - X_CLIENT_SECRET=${X_CLIENT_SECRET:-}
110
+ - APPLE_CLIENT_ID=${APPLE_CLIENT_ID:-}
111
+ - APPLE_CLIENT_SECRET=${APPLE_CLIENT_SECRET:-}
112
+ # Logs directory
113
+ - LOGS_DIR=/insforge-logs
114
+ # Storage directory (for local file storage when S3 is not configured)
115
+ - STORAGE_DIR=/insforge-storage
116
+ # Auth app URL for development proxy
117
+ - AUTH_APP_URL=${AUTH_APP_URL:-http://localhost:7132}
118
+ volumes:
119
+ - ./package.json:/app/package.json
120
+ - ./backend:/app/backend
121
+ - ./frontend:/app/frontend
122
+ - ./auth:/app/auth
123
+ - ./shared-schemas:/app/shared-schemas
124
+ - ./docs:/app/docs
125
+ - node_modules:/app/node_modules
126
+ - backend_node_modules:/app/backend/node_modules
127
+ - frontend_node_modules:/app/frontend/node_modules
128
+ - auth_node_modules:/app/auth/node_modules
129
+ - shared_schemas_node_modules:/app/shared-schemas/node_modules
130
+ - shared-logs:/insforge-logs
131
+ - storage-data:/insforge-storage
132
+ command: sh -c "npm install && cd backend && npm run migrate:up && cd .. && npm run dev"
133
+ restart: unless-stopped
134
+ networks:
135
+ - insforge-network
136
+
137
+ # Deno serverless runtime for edge functions
138
+ deno:
139
+ image: denoland/deno:alpine-2.0.6
140
+ container_name: insforge-deno
141
+ working_dir: /app
142
+ depends_on:
143
+ - postgres
144
+ - postgrest
145
+ ports:
146
+ - "7133:7133"
147
+ environment:
148
+ - PORT=7133
149
+ - DENO_ENV=${DENO_ENV:-development}
150
+ - DENO_DIR=/deno-dir
151
+ # PostgreSQL connection
152
+ - POSTGRES_HOST=postgres
153
+ - POSTGRES_PORT=5432
154
+ - POSTGRES_DB=${POSTGRES_DB:-insforge}
155
+ - POSTGRES_USER=${POSTGRES_USER:-postgres}
156
+ - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
157
+ - POSTGREST_BASE_URL=http://postgrest:3000
158
+ # Worker timeout (60 seconds default)
159
+ - WORKER_TIMEOUT_MS=${WORKER_TIMEOUT_MS:-60000}
160
+ # Encryption keys for decrypting function secrets
161
+ - ENCRYPTION_KEY=${ENCRYPTION_KEY}
162
+ - JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
163
+ volumes:
164
+ - ./functions:/app/functions
165
+ - deno_cache:/deno-dir
166
+ command: >
167
+ sh -c "
168
+ echo 'Downloading Deno dependencies...' &&
169
+ deno cache functions/server.ts &&
170
+ echo 'Starting Deno server on port 7133...' &&
171
+ deno run --allow-net --allow-env --allow-read=./functions/worker-template.js --watch functions/server.ts
172
+ "
173
+ restart: unless-stopped
174
+ networks:
175
+ - insforge-network
176
+
177
+ # Vector.dev for log collection and shipping
178
+ vector:
179
+ container_name: insforge-vector
180
+ image: timberio/vector:0.28.1-alpine
181
+ restart: unless-stopped
182
+ depends_on:
183
+ postgres:
184
+ condition: service_healthy
185
+ postgrest:
186
+ condition: service_started
187
+ insforge:
188
+ condition: service_started
189
+ deno:
190
+ condition: service_started
191
+ volumes:
192
+ - ./docker-init/logs/vector.yml:/etc/vector/vector.yml:ro
193
+ - /var/run/docker.sock:/var/run/docker.sock:ro
194
+ - shared-logs:/insforge-logs
195
+ healthcheck:
196
+ test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7135/health"]
197
+ timeout: 5s
198
+ interval: 5s
199
+ retries: 3
200
+ environment:
201
+ - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
202
+ - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
203
+ - AWS_REGION=${AWS_REGION:-skip}
204
+ - PROJECT_ID=${PROJECT_ID:-}
205
+ - HOSTNAME_OVERRIDE=${HOSTNAME_OVERRIDE:-}
206
+ command: ["--config", "/etc/vector/vector.yml"]
207
+ networks:
208
+ - insforge-network
209
+
210
+ volumes:
211
+ postgres-data:
212
+ driver: local
213
+ node_modules:
214
+ driver: local
215
+ backend_node_modules:
216
+ driver: local
217
+ frontend_node_modules:
218
+ driver: local
219
+ auth_node_modules:
220
+ driver: local
221
+ shared_schemas_node_modules:
222
+ driver: local
223
+ deno_cache:
224
+ driver: local
225
+ shared-logs:
226
+ driver: local
227
+ storage-data:
228
+ driver: local
229
+
230
+ networks:
231
+ insforge-network:
232
+ driver: bridge
@@ -1,97 +1,97 @@
1
- -- init.sql
2
- -- Create role for anonymous user
3
- CREATE ROLE anon NOLOGIN;
4
-
5
- -- Create role for authenticator
6
- CREATE ROLE authenticated NOLOGIN;
7
-
8
- -- Create project admin role for admin users
9
- CREATE ROLE project_admin NOLOGIN;
10
-
11
- GRANT USAGE ON SCHEMA public TO anon;
12
- GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO anon;
13
- GRANT USAGE ON SCHEMA public TO authenticated;
14
- GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO authenticated;
15
- GRANT USAGE ON SCHEMA public TO project_admin;
16
- GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO project_admin;
17
-
18
- -- Grant permissions to roles
19
- GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO anon, authenticated, project_admin;
20
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO anon, authenticated, project_admin;
21
- -- Create function to automatically create RLS policies for new tables
22
- CREATE OR REPLACE FUNCTION public.create_default_policies()
23
- RETURNS event_trigger AS $$
24
- DECLARE
25
- obj record;
26
- table_schema text;
27
- table_name text;
28
- has_rls boolean;
29
- BEGIN
30
- FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag = 'CREATE TABLE'
31
- LOOP
32
- -- Extract schema and table name from object_identity
33
- -- Handle quoted identifiers by removing quotes
34
- SELECT INTO table_schema, table_name
35
- split_part(obj.object_identity, '.', 1),
36
- trim(both '"' from split_part(obj.object_identity, '.', 2));
37
- -- Check if RLS is enabled on the table
38
- SELECT INTO has_rls
39
- rowsecurity
40
- FROM pg_tables
41
- WHERE schemaname = table_schema
42
- AND tablename = table_name;
43
- -- Only create policies if RLS is enabled
44
- IF has_rls THEN
45
- -- Create policy for project_admin role only
46
- -- Users must define their own policies for anon and authenticated roles
47
- EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
48
- END IF;
49
- END LOOP;
50
- END;
51
- $$ LANGUAGE plpgsql;
52
-
53
- -- Create event trigger to run the function when new tables are created
54
- CREATE EVENT TRIGGER create_policies_on_table_create
55
- ON ddl_command_end
56
- WHEN TAG IN ('CREATE TABLE')
57
- EXECUTE FUNCTION public.create_default_policies();
58
-
59
- -- Create function to handle RLS enablement
60
- CREATE OR REPLACE FUNCTION public.create_policies_after_rls()
61
- RETURNS event_trigger AS $$
62
- DECLARE
63
- obj record;
64
- table_schema text;
65
- table_name text;
66
- BEGIN
67
- FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag = 'ALTER TABLE'
68
- LOOP
69
- -- Extract schema and table name
70
- -- Handle quoted identifiers by removing quotes
71
- SELECT INTO table_schema, table_name
72
- split_part(obj.object_identity, '.', 1),
73
- trim(both '"' from split_part(obj.object_identity, '.', 2));
74
- -- Check if table has RLS enabled and no policies yet
75
- IF EXISTS (
76
- SELECT 1 FROM pg_tables
77
- WHERE schemaname = table_schema
78
- AND tablename = table_name
79
- AND rowsecurity = true
80
- ) AND NOT EXISTS (
81
- SELECT 1 FROM pg_policies
82
- WHERE schemaname = table_schema
83
- AND tablename = table_name
84
- ) THEN
85
- -- Create policy for project_admin role only
86
- -- Users must define their own policies for anon and authenticated roles
87
- EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
88
- END IF;
89
- END LOOP;
90
- END;
91
- $$ LANGUAGE plpgsql;
92
-
93
- -- Create event trigger for ALTER TABLE commands
94
- CREATE EVENT TRIGGER create_policies_on_rls_enable
95
- ON ddl_command_end
96
- WHEN TAG IN ('ALTER TABLE')
97
- EXECUTE FUNCTION public.create_policies_after_rls();
1
+ -- init.sql
2
+ -- Create role for anonymous user
3
+ CREATE ROLE anon NOLOGIN;
4
+
5
+ -- Create role for authenticator
6
+ CREATE ROLE authenticated NOLOGIN;
7
+
8
+ -- Create project admin role for admin users
9
+ CREATE ROLE project_admin NOLOGIN;
10
+
11
+ GRANT USAGE ON SCHEMA public TO anon;
12
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO anon;
13
+ GRANT USAGE ON SCHEMA public TO authenticated;
14
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO authenticated;
15
+ GRANT USAGE ON SCHEMA public TO project_admin;
16
+ GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO project_admin;
17
+
18
+ -- Grant permissions to roles
19
+ GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO anon, authenticated, project_admin;
20
+ ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO anon, authenticated, project_admin;
21
+ -- Create function to automatically create RLS policies for new tables
22
+ CREATE OR REPLACE FUNCTION public.create_default_policies()
23
+ RETURNS event_trigger AS $$
24
+ DECLARE
25
+ obj record;
26
+ table_schema text;
27
+ table_name text;
28
+ has_rls boolean;
29
+ BEGIN
30
+ FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag = 'CREATE TABLE'
31
+ LOOP
32
+ -- Extract schema and table name from object_identity
33
+ -- Handle quoted identifiers by removing quotes
34
+ SELECT INTO table_schema, table_name
35
+ split_part(obj.object_identity, '.', 1),
36
+ trim(both '"' from split_part(obj.object_identity, '.', 2));
37
+ -- Check if RLS is enabled on the table
38
+ SELECT INTO has_rls
39
+ rowsecurity
40
+ FROM pg_tables
41
+ WHERE schemaname = table_schema
42
+ AND tablename = table_name;
43
+ -- Only create policies if RLS is enabled
44
+ IF has_rls THEN
45
+ -- Create policy for project_admin role only
46
+ -- Users must define their own policies for anon and authenticated roles
47
+ EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
48
+ END IF;
49
+ END LOOP;
50
+ END;
51
+ $$ LANGUAGE plpgsql;
52
+
53
+ -- Create event trigger to run the function when new tables are created
54
+ CREATE EVENT TRIGGER create_policies_on_table_create
55
+ ON ddl_command_end
56
+ WHEN TAG IN ('CREATE TABLE')
57
+ EXECUTE FUNCTION public.create_default_policies();
58
+
59
+ -- Create function to handle RLS enablement
60
+ CREATE OR REPLACE FUNCTION public.create_policies_after_rls()
61
+ RETURNS event_trigger AS $$
62
+ DECLARE
63
+ obj record;
64
+ table_schema text;
65
+ table_name text;
66
+ BEGIN
67
+ FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag = 'ALTER TABLE'
68
+ LOOP
69
+ -- Extract schema and table name
70
+ -- Handle quoted identifiers by removing quotes
71
+ SELECT INTO table_schema, table_name
72
+ split_part(obj.object_identity, '.', 1),
73
+ trim(both '"' from split_part(obj.object_identity, '.', 2));
74
+ -- Check if table has RLS enabled and no policies yet
75
+ IF EXISTS (
76
+ SELECT 1 FROM pg_tables
77
+ WHERE schemaname = table_schema
78
+ AND tablename = table_name
79
+ AND rowsecurity = true
80
+ ) AND NOT EXISTS (
81
+ SELECT 1 FROM pg_policies
82
+ WHERE schemaname = table_schema
83
+ AND tablename = table_name
84
+ ) THEN
85
+ -- Create policy for project_admin role only
86
+ -- Users must define their own policies for anon and authenticated roles
87
+ EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
88
+ END IF;
89
+ END LOOP;
90
+ END;
91
+ $$ LANGUAGE plpgsql;
92
+
93
+ -- Create event trigger for ALTER TABLE commands
94
+ CREATE EVENT TRIGGER create_policies_on_rls_enable
95
+ ON ddl_command_end
96
+ WHEN TAG IN ('ALTER TABLE')
97
+ EXECUTE FUNCTION public.create_policies_after_rls();