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,167 +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/logs.sql:/docker-entrypoint-initdb.d/03-logs.sql
17
- - ./docker-init/db/postgresql.conf:/etc/postgresql/postgresql.conf
18
- ports:
19
- - "5432:5432"
20
- networks:
21
- - insforge-network
22
- healthcheck:
23
- test: ["CMD-SHELL", "pg_isready -U postgres"]
24
- interval: 5s
25
- timeout: 5s
26
- retries: 5
27
-
28
- postgrest:
29
- image: postgrest/postgrest:v12.2.12
30
- container_name: insforge-postgrest
31
- restart: unless-stopped
32
- environment:
33
- # POSTGRES_USER: ${POSTGRES_USER:-postgres}
34
- # POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
35
- # POSTGRES_DB: ${POSTGRES_DB:-insforge}
36
- PGRST_DB_URI: postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-insforge}
37
- PGRST_OPENAPI_SERVER_PROXY_URI: http://localhost:3000
38
- PGRST_DB_SCHEMA: public
39
- PGRST_DB_ANON_ROLE: anon
40
- PGRST_JWT_SECRET: ${JWT_SECRET}
41
- # Enable schema reloading via NOTIFY
42
- PGRST_DB_CHANNEL_ENABLED: true
43
- PGRST_DB_CHANNEL: pgrst
44
- ports:
45
- - "5430:3000"
46
- depends_on:
47
- postgres:
48
- condition: service_healthy
49
- networks:
50
- - insforge-network
51
-
52
- insforge:
53
- image: node:20-alpine
54
- container_name: insforge
55
- working_dir: /app
56
- depends_on:
57
- postgres:
58
- condition: service_healthy
59
- ports:
60
- - "7130:7130"
61
- - "7131:7131"
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-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
- # PostgreSQL connection
72
- - POSTGRES_HOST=postgres
73
- - POSTGRES_PORT=5432
74
- - POSTGRES_DB=${POSTGRES_DB:-insforge}
75
- - POSTGRES_USER=${POSTGRES_USER:-postgres}
76
- - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
77
- - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-insforge}
78
- - POSTGREST_BASE_URL=http://postgrest:3000
79
- # Deno Runtime URL for serverless functions
80
- - DENO_RUNTIME_URL=http://deno:7133
81
- # Storage Configuration
82
- - AWS_S3_BUCKET=${AWS_S3_BUCKET:-}
83
- - AWS_REGION=${AWS_REGION:-}
84
- # Multi-tenant Cloud Configuration
85
- - DEPLOYMENT_ID=${DEPLOYMENT_ID:-}
86
- - PROJECT_ID=${PROJECT_ID:-}
87
- - APP_KEY=${APP_KEY:-}
88
- - ACCESS_API_KEY=${ACCESS_API_KEY:-}
89
- # LLM Model API keys
90
- - OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
91
- # OAuth Configuration
92
- - GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID:-}
93
- - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
94
- - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
95
- - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
96
- volumes:
97
- - ./package.json:/app/package.json
98
- - ./backend:/app/backend
99
- - ./frontend:/app/frontend
100
- - ./shared-schemas:/app/shared-schemas
101
- - ./docs:/app/docs
102
- - node_modules:/app/node_modules
103
- - backend_node_modules:/app/backend/node_modules
104
- - frontend_node_modules:/app/frontend/node_modules
105
- - shared_schemas_node_modules:/app/shared-schemas/node_modules
106
- command: sh -c "npm install && cd backend && npm run migrate:up && cd .. && npm run dev"
107
- restart: unless-stopped
108
- networks:
109
- - insforge-network
110
-
111
- # Deno serverless runtime for edge functions
112
- deno:
113
- image: denoland/deno:alpine-2.0.6
114
- container_name: insforge-deno
115
- working_dir: /app
116
- depends_on:
117
- - postgres
118
- - postgrest
119
- ports:
120
- - "7133:7133"
121
- environment:
122
- - PORT=7133
123
- - DENO_ENV=${DENO_ENV:-development}
124
- - DENO_DIR=/deno-dir
125
- # PostgreSQL connection
126
- - POSTGRES_HOST=postgres
127
- - POSTGRES_PORT=5432
128
- - POSTGRES_DB=${POSTGRES_DB:-insforge}
129
- - POSTGRES_USER=${POSTGRES_USER:-postgres}
130
- - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
131
- - POSTGREST_BASE_URL=http://postgrest:3000
132
- # Worker timeout (30 seconds default)
133
- - WORKER_TIMEOUT_MS=${WORKER_TIMEOUT_MS:-30000}
134
- # Encryption keys for decrypting function secrets
135
- - ENCRYPTION_KEY=${ENCRYPTION_KEY}
136
- - JWT_SECRET=${JWT_SECRET}
137
- volumes:
138
- - ./functions:/app/functions
139
- - deno_cache:/deno-dir
140
- command: >
141
- sh -c "
142
- echo 'Downloading Deno dependencies...' &&
143
- deno cache functions/server.ts &&
144
- echo 'Starting Deno server on port 7133...' &&
145
- deno run --allow-net --allow-env --allow-read=./functions/worker-template.js --watch functions/server.ts
146
- "
147
- restart: unless-stopped
148
- networks:
149
- - insforge-network
150
-
151
- volumes:
152
- postgres-data:
153
- driver: local
154
- node_modules:
155
- driver: local
156
- backend_node_modules:
157
- driver: local
158
- frontend_node_modules:
159
- driver: local
160
- shared_schemas_node_modules:
161
- driver: local
162
- deno_cache:
163
- driver: local
164
-
165
- networks:
166
- insforge-network:
167
- driver: bridge
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
+ - 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,125 +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
- -- NOTICE: The anon role is intended for unauthenticated users, so it should only have read access.
20
- GRANT SELECT ON ALL TABLES IN SCHEMA public TO anon;
21
- ALTER DEFAULT PRIVILEGES IN SCHEMA public
22
- GRANT SELECT ON TABLES TO anon;
23
-
24
- GRANT SELECT ON ALL TABLES IN SCHEMA public TO authenticated;
25
- ALTER DEFAULT PRIVILEGES IN SCHEMA public
26
- GRANT SELECT ON TABLES TO authenticated;
27
-
28
- GRANT INSERT ON ALL TABLES IN SCHEMA public TO authenticated;
29
- ALTER DEFAULT PRIVILEGES IN SCHEMA public
30
- GRANT INSERT ON TABLES TO authenticated;
31
-
32
- GRANT UPDATE ON ALL TABLES IN SCHEMA public TO authenticated;
33
- ALTER DEFAULT PRIVILEGES IN SCHEMA public
34
- GRANT UPDATE ON TABLES TO authenticated;
35
-
36
- GRANT DELETE ON ALL TABLES IN SCHEMA public TO authenticated;
37
- ALTER DEFAULT PRIVILEGES IN SCHEMA public
38
- GRANT DELETE ON TABLES TO authenticated;
39
-
40
- GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO project_admin;
41
- ALTER DEFAULT PRIVILEGES IN SCHEMA public
42
- GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO project_admin;
43
-
44
- -- Create function to automatically create RLS policies for new tables
45
- CREATE OR REPLACE FUNCTION public.create_default_policies()
46
- RETURNS event_trigger AS $$
47
- DECLARE
48
- obj record;
49
- table_schema text;
50
- table_name text;
51
- has_rls boolean;
52
- BEGIN
53
- FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag = 'CREATE TABLE'
54
- LOOP
55
- -- Extract schema and table name from object_identity
56
- -- Handle quoted identifiers by removing quotes
57
- SELECT INTO table_schema, table_name
58
- split_part(obj.object_identity, '.', 1),
59
- trim(both '"' from split_part(obj.object_identity, '.', 2));
60
- -- Check if RLS is enabled on the table
61
- SELECT INTO has_rls
62
- rowsecurity
63
- FROM pg_tables
64
- WHERE schemaname = table_schema
65
- AND tablename = table_name;
66
- -- Only create policies if RLS is enabled
67
- IF has_rls THEN
68
- -- Create policies for each role
69
- -- anon: read-only access
70
- EXECUTE format('CREATE POLICY "anon_policy" ON %s FOR SELECT TO anon USING (true)', obj.object_identity);
71
- -- authenticated: full access
72
- EXECUTE format('CREATE POLICY "authenticated_policy" ON %s FOR ALL TO authenticated USING (true) WITH CHECK (true)', obj.object_identity);
73
- -- project_admin: full access
74
- EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
75
- END IF;
76
- END LOOP;
77
- END;
78
- $$ LANGUAGE plpgsql;
79
-
80
- -- Create event trigger to run the function when new tables are created
81
- CREATE EVENT TRIGGER create_policies_on_table_create
82
- ON ddl_command_end
83
- WHEN TAG IN ('CREATE TABLE')
84
- EXECUTE FUNCTION public.create_default_policies();
85
-
86
- -- Create function to handle RLS enablement
87
- CREATE OR REPLACE FUNCTION public.create_policies_after_rls()
88
- RETURNS event_trigger AS $$
89
- DECLARE
90
- obj record;
91
- table_schema text;
92
- table_name text;
93
- BEGIN
94
- FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands() WHERE command_tag = 'ALTER TABLE'
95
- LOOP
96
- -- Extract schema and table name
97
- -- Handle quoted identifiers by removing quotes
98
- SELECT INTO table_schema, table_name
99
- split_part(obj.object_identity, '.', 1),
100
- trim(both '"' from split_part(obj.object_identity, '.', 2));
101
- -- Check if table has RLS enabled and no policies yet
102
- IF EXISTS (
103
- SELECT 1 FROM pg_tables
104
- WHERE schemaname = table_schema
105
- AND tablename = table_name
106
- AND rowsecurity = true
107
- ) AND NOT EXISTS (
108
- SELECT 1 FROM pg_policies
109
- WHERE schemaname = table_schema
110
- AND tablename = table_name
111
- ) THEN
112
- -- Create default policies
113
- EXECUTE format('CREATE POLICY "anon_policy" ON %s FOR SELECT TO anon USING (true)', obj.object_identity);
114
- EXECUTE format('CREATE POLICY "authenticated_policy" ON %s FOR ALL TO authenticated USING (true) WITH CHECK (true)', obj.object_identity);
115
- EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
116
- END IF;
117
- END LOOP;
118
- END;
119
- $$ LANGUAGE plpgsql;
120
-
121
- -- Create event trigger for ALTER TABLE commands
122
- CREATE EVENT TRIGGER create_policies_on_rls_enable
123
- ON ddl_command_end
124
- WHEN TAG IN ('ALTER TABLE')
125
- 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();
@@ -1,5 +1,5 @@
1
- \set jwt_secret `echo "$JWT_SECRET"`
2
- \set jwt_exp `echo "$JWT_EXP"`
3
-
4
- ALTER DATABASE postgres SET "app.settings.jwt_secret" TO :'jwt_secret';
5
- ALTER DATABASE postgres SET "app.settings.jwt_exp" TO :'jwt_exp';
1
+ \set jwt_secret `echo "$JWT_SECRET"`
2
+ \set jwt_exp `echo "$JWT_EXP"`
3
+
4
+ ALTER DATABASE postgres SET "app.settings.jwt_secret" TO :'jwt_secret';
5
+ ALTER DATABASE postgres SET "app.settings.jwt_exp" TO :'jwt_exp';