insforge 0.3.2 → 1.2.10

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 (507) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.cursor/rules/cursor-rules.mdc +94 -0
  3. package/.dockerignore +3 -0
  4. package/.env.example +33 -4
  5. package/.github/ISSUE_TEMPLATE/bug_report.yml +13 -60
  6. package/.github/ISSUE_TEMPLATE/config.yml +2 -2
  7. package/.github/ISSUE_TEMPLATE/feature_request.yml +10 -63
  8. package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
  9. package/.github/workflows/build-image.yml +2 -1
  10. package/.github/workflows/e2e.yml +63 -0
  11. package/CHANGELOG.md +41 -0
  12. package/CLAUDE_PLUGIN.md +104 -0
  13. package/CODE_OF_CONDUCT.md +128 -0
  14. package/CONTRIBUTING.md +1 -1
  15. package/Dockerfile +4 -1
  16. package/README.md +66 -18
  17. package/assets/mcpInstallv2.png +0 -0
  18. package/assets/sampleResponse.png +0 -0
  19. package/auth/index.html +13 -0
  20. package/auth/package.json +28 -0
  21. package/auth/public/favicon.ico +0 -0
  22. package/auth/src/App.tsx +33 -0
  23. package/auth/src/components/ErrorCard.tsx +37 -0
  24. package/auth/src/components/Layout.tsx +13 -0
  25. package/auth/src/index.css +19 -0
  26. package/auth/src/lib/broadcastService.ts +115 -0
  27. package/auth/src/lib/utils.ts +11 -0
  28. package/auth/src/main.tsx +22 -0
  29. package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
  30. package/auth/src/pages/ResetPasswordPage.tsx +11 -0
  31. package/auth/src/pages/SignInPage.tsx +57 -0
  32. package/auth/src/pages/SignUpPage.tsx +57 -0
  33. package/auth/src/pages/VerifyEmailPage.tsx +20 -0
  34. package/auth/src/vite-env.d.ts +10 -0
  35. package/auth/tsconfig.json +32 -0
  36. package/auth/tsconfig.node.json +11 -0
  37. package/auth/vite.config.ts +25 -0
  38. package/backend/package.json +9 -9
  39. package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
  40. package/backend/src/api/middlewares/rate-limiters.ts +127 -0
  41. package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +20 -24
  42. package/backend/src/api/routes/auth/index.routes.ts +570 -0
  43. package/backend/src/api/routes/auth/oauth.routes.ts +448 -0
  44. package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +107 -65
  45. package/backend/src/api/routes/database/index.routes.ts +13 -0
  46. package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +22 -8
  47. package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +20 -23
  48. package/backend/src/api/routes/docs/index.routes.ts +76 -0
  49. package/backend/src/api/routes/functions/index.routes.ts +188 -0
  50. package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
  51. package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +21 -31
  52. package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
  53. package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +34 -53
  54. package/backend/src/api/routes/usage/index.routes.ts +89 -0
  55. package/backend/src/infra/config/app.config.ts +51 -0
  56. package/backend/src/{core/database/manager.ts → infra/database/database.manager.ts} +76 -85
  57. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -0
  58. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
  59. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
  60. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
  61. package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
  62. package/backend/src/infra/security/token.manager.ts +125 -0
  63. package/backend/src/{core/socket/socket.ts → infra/socket/socket.manager.ts} +15 -15
  64. package/backend/src/providers/ai/openrouter.provider.ts +377 -0
  65. package/backend/src/providers/email/base.provider.ts +41 -0
  66. package/backend/src/providers/email/cloud.provider.ts +187 -0
  67. package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
  68. package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
  69. package/backend/src/providers/logs/local.provider.ts +185 -0
  70. package/backend/src/providers/oauth/base.provider.ts +29 -0
  71. package/backend/src/providers/oauth/discord.provider.ts +195 -0
  72. package/backend/src/providers/oauth/facebook.provider.ts +194 -0
  73. package/backend/src/providers/oauth/github.provider.ts +208 -0
  74. package/backend/src/providers/oauth/google.provider.ts +249 -0
  75. package/backend/src/providers/oauth/index.ts +7 -0
  76. package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
  77. package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
  78. package/backend/src/providers/oauth/x.provider.ts +202 -0
  79. package/backend/src/providers/storage/base.provider.ts +29 -0
  80. package/backend/src/providers/storage/local.provider.ts +103 -0
  81. package/backend/src/providers/storage/s3.provider.ts +313 -0
  82. package/backend/src/server.ts +70 -74
  83. package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
  84. package/backend/src/services/ai/ai-model.service.ts +60 -0
  85. package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
  86. package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
  87. package/backend/src/services/ai/helpers.ts +64 -0
  88. package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
  89. package/backend/src/services/ai/index.ts +13 -0
  90. package/backend/src/services/auth/auth-config.service.ts +250 -0
  91. package/backend/src/services/auth/auth-otp.service.ts +424 -0
  92. package/backend/src/services/auth/auth.service.ts +1136 -0
  93. package/backend/src/services/auth/index.ts +4 -0
  94. package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
  95. package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
  96. package/backend/src/services/database/database-table.service.ts +811 -0
  97. package/backend/src/services/email/email.service.ts +75 -0
  98. package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
  99. package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
  100. package/backend/src/services/logs/log.service.ts +73 -0
  101. package/backend/src/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
  102. package/backend/src/services/storage/storage.service.ts +617 -0
  103. package/backend/src/services/usage/usage.service.ts +149 -0
  104. package/backend/src/types/auth.ts +66 -2
  105. package/backend/src/types/email.ts +8 -0
  106. package/backend/src/types/error-constants.ts +4 -0
  107. package/backend/src/types/logs.ts +0 -29
  108. package/backend/src/{core/socket/types.ts → types/socket.ts} +5 -6
  109. package/backend/src/utils/environment.ts +9 -3
  110. package/backend/src/utils/logger.ts +20 -2
  111. package/backend/src/utils/seed.ts +150 -57
  112. package/backend/src/utils/sql-parser.ts +1 -1
  113. package/backend/src/utils/utils.ts +114 -0
  114. package/backend/src/utils/validations.ts +40 -4
  115. package/backend/tests/local/test-ai-config.sh +129 -0
  116. package/backend/tests/local/test-ai-usage.sh +80 -0
  117. package/backend/tests/local/test-auth-router.sh +1 -1
  118. package/backend/tests/local/test-e2e.sh +1 -1
  119. package/backend/tests/local/test-functions.sh +123 -0
  120. package/backend/tests/local/test-logs.sh +132 -0
  121. package/backend/tests/local/test-public-bucket.sh +3 -3
  122. package/backend/tests/local/test-secrets.sh +14 -12
  123. package/backend/tests/local/test-traditional-rest.sh +2 -2
  124. package/backend/tests/manual/test-rawsql-modes.sh +244 -0
  125. package/backend/tests/test-config.sh +37 -1
  126. package/backend/tests/unit/cloud-token.test.ts +48 -0
  127. package/backend/tests/unit/constant.test.ts +8 -0
  128. package/backend/tests/unit/email.test.ts +372 -0
  129. package/backend/tests/unit/environment.test.ts +59 -0
  130. package/backend/tests/unit/helpers.test.ts +63 -0
  131. package/backend/tests/unit/logger.test.ts +22 -0
  132. package/backend/tests/unit/rate-limit.test.ts +154 -0
  133. package/backend/tests/unit/response.test.ts +58 -0
  134. package/backend/tests/unit/sql-parser.test.ts +74 -0
  135. package/backend/tests/unit/uuid.test.ts +21 -0
  136. package/backend/tests/unit/validations.test.ts +80 -0
  137. package/backend/tsconfig.json +1 -1
  138. package/backend/vitest.config.ts +11 -0
  139. package/claude-plugin/.claude-plugin/plugin.json +24 -0
  140. package/claude-plugin/README.md +133 -0
  141. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
  142. package/docker-compose.prod.yml +60 -4
  143. package/docker-compose.yml +65 -4
  144. package/docker-init/db/db-init.sql +6 -34
  145. package/docker-init/logs/vector.yml +236 -0
  146. package/docs/README.md +44 -0
  147. package/docs/changelog.mdx +67 -0
  148. package/docs/core-concepts/ai/architecture.mdx +373 -0
  149. package/docs/core-concepts/ai/sdk.mdx +213 -0
  150. package/docs/core-concepts/authentication/architecture.mdx +278 -0
  151. package/docs/core-concepts/authentication/sdk.mdx +414 -0
  152. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
  153. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
  154. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
  155. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
  156. package/docs/core-concepts/database/architecture.mdx +256 -0
  157. package/docs/core-concepts/database/sdk.mdx +382 -0
  158. package/docs/core-concepts/functions/architecture.mdx +105 -0
  159. package/docs/core-concepts/functions/sdk.mdx +184 -0
  160. package/docs/core-concepts/storage/architecture.mdx +243 -0
  161. package/docs/core-concepts/storage/sdk.mdx +253 -0
  162. package/docs/deployment/README.md +94 -0
  163. package/docs/deployment/deploy-to-aws-ec2.md +565 -0
  164. package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
  165. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
  166. package/docs/deployment/deploy-to-render.md +441 -0
  167. package/docs/docs.json +210 -0
  168. package/docs/examples/framework-guides/nextjs.mdx +131 -0
  169. package/docs/examples/framework-guides/nuxt.mdx +165 -0
  170. package/docs/examples/framework-guides/react.mdx +165 -0
  171. package/docs/examples/framework-guides/svelte.mdx +153 -0
  172. package/docs/examples/framework-guides/vue.mdx +159 -0
  173. package/docs/examples/overview.mdx +67 -0
  174. package/docs/favicon.svg +19 -0
  175. package/docs/images/changelog/nov-2025/auth-components.webp +0 -0
  176. package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
  177. package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
  178. package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
  179. package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
  180. package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
  181. package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
  182. package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
  183. package/docs/images/checks-passed.png +0 -0
  184. package/docs/images/dashboard-connect-expanded.png +0 -0
  185. package/docs/images/dashboard-connect.png +0 -0
  186. package/docs/images/hero-dark.png +0 -0
  187. package/docs/images/hero-light.png +0 -0
  188. package/docs/images/icons/ai.svg +4 -0
  189. package/docs/images/icons/auth.svg +1 -0
  190. package/docs/images/icons/database.svg +1 -0
  191. package/docs/images/icons/function.svg +1 -0
  192. package/docs/images/icons/storage.svg +1 -0
  193. package/docs/images/logos/nextjs.svg +4 -0
  194. package/docs/images/logos/nuxt.svg +4 -0
  195. package/docs/images/logos/react.svg +5 -0
  196. package/docs/images/logos/svelte.svg +4 -0
  197. package/docs/images/logos/vue.svg +5 -0
  198. package/docs/images/mcp-install.png +0 -0
  199. package/docs/images/onboarding-mcp.png +0 -0
  200. package/docs/insforge-instructions-sdk.md +55 -374
  201. package/docs/introduction.mdx +45 -0
  202. package/docs/logo/dark.svg +22 -0
  203. package/docs/logo/light.svg +20 -0
  204. package/docs/partnership.mdx +647 -0
  205. package/docs/quickstart.mdx +83 -0
  206. package/docs/showcase/2048-arena.png +0 -0
  207. package/docs/showcase/framegen-cloud.png +0 -0
  208. package/docs/showcase/line-connect-race.png +0 -0
  209. package/docs/showcase/moment-vibe.png +0 -0
  210. package/docs/showcase/national-flags.png +0 -0
  211. package/docs/showcase/pokemon-vibe.png +0 -0
  212. package/docs/showcase/pure-browse-buy.png +0 -0
  213. package/docs/showcase.mdx +52 -0
  214. package/docs/snippets/sdk-installation.mdx +22 -0
  215. package/docs/snippets/service-icons.mdx +27 -0
  216. package/eslint.config.js +10 -3
  217. package/frontend/package.json +10 -4
  218. package/frontend/src/App.tsx +13 -82
  219. package/frontend/src/assets/icons/connected.svg +3 -0
  220. package/frontend/src/assets/icons/loader.svg +9 -0
  221. package/frontend/src/assets/logos/apple.svg +4 -0
  222. package/frontend/src/assets/logos/discord.svg +1 -1
  223. package/frontend/src/assets/logos/facebook.svg +3 -0
  224. package/frontend/src/assets/logos/instagram.svg +2 -0
  225. package/frontend/src/assets/logos/linkedin.svg +3 -0
  226. package/frontend/src/assets/logos/microsoft.svg +1 -0
  227. package/frontend/src/assets/logos/spotify.svg +17 -0
  228. package/frontend/src/assets/logos/tiktok.svg +6 -0
  229. package/frontend/src/assets/logos/x.svg +3 -0
  230. package/frontend/src/components/Checkbox.tsx +27 -29
  231. package/frontend/src/components/CodeBlock.tsx +55 -2
  232. package/frontend/src/components/CodeEditor.tsx +92 -0
  233. package/frontend/src/components/ConfirmDialog.tsx +1 -1
  234. package/frontend/src/components/ConnectCTA.tsx +38 -0
  235. package/frontend/src/components/CopyButton.tsx +52 -15
  236. package/frontend/src/components/ErrorState.tsx +1 -2
  237. package/frontend/src/components/FeatureSidebar.tsx +6 -6
  238. package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
  239. package/frontend/src/components/JsonHighlight.tsx +21 -9
  240. package/frontend/src/components/ProjectInfoModal.tsx +128 -0
  241. package/frontend/src/components/PromptDialog.tsx +1 -4
  242. package/frontend/src/components/SearchInput.tsx +1 -2
  243. package/frontend/src/components/Stepper.tsx +53 -0
  244. package/frontend/src/components/ThemeToggle.tsx +3 -3
  245. package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
  246. package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
  247. package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
  248. package/frontend/src/components/datagrid/index.ts +23 -0
  249. package/frontend/src/components/index.ts +23 -30
  250. package/frontend/src/components/layout/AppHeader.tsx +133 -92
  251. package/frontend/src/components/layout/AppSidebar.tsx +80 -170
  252. package/frontend/src/components/layout/Layout.tsx +12 -23
  253. package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
  254. package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
  255. package/frontend/src/components/layout/index.ts +5 -0
  256. package/frontend/src/components/radix/Tooltip.tsx +24 -13
  257. package/frontend/src/components/radix/index.ts +22 -0
  258. package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
  259. package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
  260. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
  261. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
  262. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
  263. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
  264. package/frontend/src/features/ai/components/index.ts +6 -0
  265. package/frontend/src/features/ai/helpers.ts +57 -71
  266. package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
  267. package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
  268. package/frontend/src/features/ai/page/AIPage.tsx +67 -79
  269. package/frontend/src/features/ai/services/ai.service.ts +5 -5
  270. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
  271. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +53 -30
  272. package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
  273. package/frontend/src/features/auth/components/UsersDataGrid.tsx +44 -14
  274. package/frontend/src/features/auth/components/index.ts +5 -0
  275. package/frontend/src/features/auth/helpers.tsx +200 -0
  276. package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
  277. package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
  278. package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
  279. package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
  280. package/frontend/src/features/auth/index.ts +3 -2
  281. package/frontend/src/features/auth/page/AuthMethodsPage.tsx +275 -0
  282. package/frontend/src/features/auth/page/ConfigurationPage.tsx +395 -0
  283. package/frontend/src/features/auth/page/UsersPage.tsx +285 -0
  284. package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
  285. package/frontend/src/features/auth/services/config.service.ts +19 -0
  286. package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
  287. package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
  288. package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
  289. package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
  290. package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
  291. package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
  292. package/frontend/src/features/dashboard/components/index.ts +4 -0
  293. package/frontend/src/features/dashboard/page/DashboardPage.tsx +187 -169
  294. package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
  295. package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
  296. package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
  297. package/frontend/src/features/dashboard/prompts/index.ts +31 -0
  298. package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
  299. package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
  300. package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
  301. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
  302. package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
  303. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
  304. package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
  305. package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
  306. package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
  307. package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
  308. package/frontend/src/features/database/components/TableForm.tsx +28 -15
  309. package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
  310. package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
  311. package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
  312. package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
  313. package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
  314. package/frontend/src/features/database/components/index.ts +19 -0
  315. package/frontend/src/features/database/constants.ts +28 -2
  316. package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
  317. package/frontend/src/features/database/helpers.ts +2 -2
  318. package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
  319. package/frontend/src/features/database/hooks/useFullMetadata.ts +18 -0
  320. package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
  321. package/frontend/src/features/database/hooks/useRecords.ts +139 -0
  322. package/frontend/src/features/database/hooks/useTables.ts +131 -0
  323. package/frontend/src/features/database/index.ts +6 -1
  324. package/frontend/src/features/database/page/FunctionsPage.tsx +211 -0
  325. package/frontend/src/features/database/page/IndexesPage.tsx +240 -0
  326. package/frontend/src/features/database/page/PoliciesPage.tsx +248 -0
  327. package/frontend/src/features/database/page/SQLEditorPage.tsx +382 -0
  328. package/frontend/src/features/database/page/{DatabasePage.tsx → TablesPage.tsx} +186 -185
  329. package/frontend/src/features/database/page/TemplatesPage.tsx +39 -0
  330. package/frontend/src/features/database/page/TriggersPage.tsx +242 -0
  331. package/frontend/src/features/database/services/advance.service.ts +66 -0
  332. package/frontend/src/features/database/services/{database.service.ts → record.service.ts} +67 -64
  333. package/frontend/src/features/database/services/table.service.ts +64 -0
  334. package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
  335. package/frontend/src/features/database/templates/crm-system.ts +528 -0
  336. package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
  337. package/frontend/src/features/database/templates/index.ts +34 -0
  338. package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
  339. package/frontend/src/features/database/templates/notion-clone.ts +483 -0
  340. package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
  341. package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
  342. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
  343. package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
  344. package/frontend/src/features/functions/components/index.ts +5 -0
  345. package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
  346. package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
  347. package/frontend/src/features/functions/page/FunctionsPage.tsx +160 -17
  348. package/frontend/src/features/functions/{components/SecretsContent.tsx → page/SecretsPage.tsx} +8 -12
  349. package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
  350. package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
  351. package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
  352. package/frontend/src/features/login/page/CloudLoginPage.tsx +79 -54
  353. package/frontend/src/features/login/page/LoginPage.tsx +16 -23
  354. package/frontend/src/features/login/services/partnership.service.ts +65 -0
  355. package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
  356. package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
  357. package/frontend/src/features/logs/components/index.ts +2 -0
  358. package/frontend/src/features/logs/helpers.ts +24 -0
  359. package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
  360. package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
  361. package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
  362. package/frontend/src/features/logs/hooks/useMcpUsage.ts +181 -0
  363. package/frontend/src/features/logs/index.ts +8 -2
  364. package/frontend/src/features/logs/page/AuditsPage.tsx +91 -38
  365. package/frontend/src/features/logs/page/LogsPage.tsx +152 -0
  366. package/frontend/src/features/logs/page/MCPLogsPage.tsx +84 -0
  367. package/frontend/src/features/logs/services/audit.service.ts +63 -0
  368. package/frontend/src/features/logs/services/log.service.ts +15 -110
  369. package/frontend/src/features/logs/services/usage.service.ts +31 -0
  370. package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
  371. package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
  372. package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
  373. package/frontend/src/features/onboard/components/index.ts +4 -0
  374. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
  375. package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
  376. package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
  377. package/frontend/src/features/onboard/index.ts +13 -3
  378. package/frontend/src/features/storage/components/BucketEmptyState.tsx +9 -6
  379. package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
  380. package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
  381. package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
  382. package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
  383. package/frontend/src/features/storage/components/index.ts +12 -0
  384. package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
  385. package/frontend/src/features/storage/page/StoragePage.tsx +41 -115
  386. package/frontend/src/features/storage/services/storage.service.ts +22 -1
  387. package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
  388. package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
  389. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
  390. package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
  391. package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
  392. package/frontend/src/features/visualizer/page/VisualizerPage.tsx +33 -29
  393. package/frontend/src/index.css +1 -0
  394. package/frontend/src/lib/analytics/posthog.tsx +27 -0
  395. package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
  396. package/frontend/src/lib/contexts/SocketContext.tsx +5 -6
  397. package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
  398. package/frontend/src/lib/hooks/useToast.tsx +6 -2
  399. package/frontend/src/lib/routing/AppRoutes.tsx +84 -0
  400. package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
  401. package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
  402. package/frontend/src/lib/utils/menuItems.ts +183 -0
  403. package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
  404. package/frontend/src/lib/utils/utils.ts +19 -1
  405. package/frontend/src/vite-env.d.ts +1 -0
  406. package/frontend/vite.config.ts +5 -3
  407. package/functions/server.ts +28 -3
  408. package/functions/worker-template.js +15 -4
  409. package/i18n/README.ar.md +130 -0
  410. package/i18n/README.de.md +130 -0
  411. package/i18n/README.es.md +154 -0
  412. package/i18n/README.fr.md +134 -0
  413. package/i18n/README.hi.md +129 -0
  414. package/i18n/README.ja.md +174 -0
  415. package/i18n/README.ko.md +137 -0
  416. package/i18n/README.pt-BR.md +131 -0
  417. package/i18n/README.ru.md +129 -0
  418. package/i18n/README.zh-CN.md +133 -0
  419. package/openapi/ai.yaml +31 -4
  420. package/openapi/auth.yaml +827 -146
  421. package/package.json +16 -7
  422. package/shared-schemas/package.json +1 -1
  423. package/shared-schemas/src/ai-api.schema.ts +34 -58
  424. package/shared-schemas/src/ai.schema.ts +5 -0
  425. package/shared-schemas/src/auth-api.schema.ts +154 -8
  426. package/shared-schemas/src/auth.schema.ts +42 -6
  427. package/shared-schemas/src/cloud-events.schema.ts +57 -0
  428. package/shared-schemas/src/database-api.schema.ts +3 -3
  429. package/shared-schemas/src/database.schema.ts +1 -1
  430. package/shared-schemas/src/index.ts +1 -0
  431. package/shared-schemas/src/logs-api.schema.ts +7 -1
  432. package/shared-schemas/src/logs.schema.ts +26 -0
  433. package/shared-schemas/src/metadata.schema.ts +9 -4
  434. package/test-gemini.sh +35 -0
  435. package/test-usage-admin.sh +57 -0
  436. package/test-usage.sh +50 -0
  437. package/zeabur/README.md +13 -0
  438. package/zeabur/template.yml +1032 -0
  439. package/.github/workflows/deploy-aws.yml +0 -130
  440. package/backend/src/api/routes/agent.ts +0 -29
  441. package/backend/src/api/routes/auth.oauth.ts +0 -482
  442. package/backend/src/api/routes/auth.ts +0 -386
  443. package/backend/src/api/routes/docs.ts +0 -66
  444. package/backend/src/api/routes/functions.ts +0 -183
  445. package/backend/src/api/routes/openapi.ts +0 -82
  446. package/backend/src/api/routes/usage.ts +0 -96
  447. package/backend/src/core/ai/client.ts +0 -242
  448. package/backend/src/core/ai/model.ts +0 -117
  449. package/backend/src/core/auth/auth.ts +0 -781
  450. package/backend/src/core/database/table.ts +0 -772
  451. package/backend/src/core/documentation/agent.ts +0 -689
  452. package/backend/src/core/documentation/openapi.ts +0 -856
  453. package/backend/src/core/logs/analytics.ts +0 -76
  454. package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
  455. package/backend/src/core/storage/storage.ts +0 -923
  456. package/backend/src/utils/cloud-token.ts +0 -39
  457. package/backend/src/utils/helpers.ts +0 -49
  458. package/backend/src/utils/uuid.ts +0 -9
  459. package/backend/tests/manual/test-better-auth.sh +0 -303
  460. package/docker-init/db/logs.sql +0 -9
  461. package/frontend/README.md +0 -112
  462. package/frontend/src/components/datagrid/index.tsx +0 -20
  463. package/frontend/src/components/layout/CloudLayout.tsx +0 -95
  464. package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
  465. package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
  466. package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
  467. package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
  468. package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
  469. package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
  470. package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
  471. package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
  472. package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
  473. package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
  474. package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
  475. package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
  476. package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
  477. package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
  478. package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
  479. package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
  480. package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
  481. package/frontend/src/features/metadata/index.ts +0 -0
  482. package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
  483. package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
  484. package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
  485. package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
  486. package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
  487. package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
  488. package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
  489. package/frontend/src/features/onboard/types.ts +0 -8
  490. package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
  491. package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
  492. /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
  493. /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
  494. /package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +0 -0
  495. /package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +0 -0
  496. /package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +0 -0
  497. /package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +0 -0
  498. /package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +0 -0
  499. /package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +0 -0
  500. /package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +0 -0
  501. /package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +0 -0
  502. /package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +0 -0
  503. /package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +0 -0
  504. /package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +0 -0
  505. /package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +0 -0
  506. /package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +0 -0
  507. /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
@@ -11,7 +11,6 @@ services:
11
11
  - postgres-data:/var/lib/postgresql/data
12
12
  - ./docker-init/db/db-init.sql:/docker-entrypoint-initdb.d/01-init.sql
13
13
  - ./docker-init/db/jwt.sql:/docker-entrypoint-initdb.d/02-jwt.sql
14
- - ./docker-init/db/logs.sql:/docker-entrypoint-initdb.d/03-logs.sql
15
14
  - ./docker-init/db/postgresql.conf:/etc/postgresql/postgresql.conf
16
15
  ports:
17
16
  - "5432:5432"
@@ -35,7 +34,7 @@ services:
35
34
  PGRST_OPENAPI_SERVER_PROXY_URI: http://localhost:3000
36
35
  PGRST_DB_SCHEMA: public
37
36
  PGRST_DB_ANON_ROLE: anon
38
- PGRST_JWT_SECRET: ${JWT_SECRET}
37
+ PGRST_JWT_SECRET: ${JWT_SECRET:-dev-secret-please-change-in-production}
39
38
  ports:
40
39
  - "5430:3000"
41
40
  depends_on:
@@ -50,6 +49,7 @@ services:
50
49
  dockerfile: Dockerfile
51
50
  args:
52
51
  VITE_API_BASE_URL: ${VITE_API_BASE_URL:-http://localhost:7130}
52
+ VITE_PUBLIC_POSTHOG_KEY: ${VITE_PUBLIC_POSTHOG_KEY:-}
53
53
  container_name: insforge
54
54
  depends_on:
55
55
  postgres:
@@ -57,14 +57,17 @@ services:
57
57
  ports:
58
58
  - "7130:7130"
59
59
  - "7131:7131"
60
+ - "7132:7132"
60
61
  environment:
61
62
  - PORT=7130
62
63
  - PROJECT_ROOT=/app
63
64
  - API_BASE_URL=${API_BASE_URL:-}
64
- - JWT_SECRET=${JWT_SECRET:-dev-secret-change-in-production}
65
+ - JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
65
66
  - ENCRYPTION_KEY=${ENCRYPTION_KEY:-}
66
67
  - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
67
68
  - ADMIN_PASSWORD=${ADMIN_PASSWORD:-change-this-password}
69
+ - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
70
+ - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
68
71
  # PostgreSQL connection
69
72
  - POSTGRES_HOST=postgres
70
73
  - POSTGRES_PORT=5432
@@ -78,6 +81,9 @@ services:
78
81
  # Storage Configuration
79
82
  - AWS_S3_BUCKET=${AWS_S3_BUCKET:-}
80
83
  - AWS_REGION=${AWS_REGION:-}
84
+ - AWS_CLOUDFRONT_URL=${AWS_CLOUDFRONT_URL:-}
85
+ - AWS_CLOUDFRONT_KEY_PAIR_ID=${AWS_CLOUDFRONT_KEY_PAIR_ID:-}
86
+ - AWS_CLOUDFRONT_PRIVATE_KEY=${AWS_CLOUDFRONT_PRIVATE_KEY:-}
81
87
  # Multi-tenant Cloud Configuration
82
88
  - DEPLOYMENT_ID=${DEPLOYMENT_ID:-}
83
89
  - PROJECT_ID=${PROJECT_ID:-}
@@ -90,6 +96,19 @@ services:
90
96
  - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
91
97
  - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
92
98
  - GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET:-}
99
+ - DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID:-}
100
+ - DISCORD_CLIENT_SECRET=${DISCORD_CLIENT_SECRET:-}
101
+ - MICROSOFT_CLIENT_ID=${MICROSOFT_CLIENT_ID:-}
102
+ - MICROSOFT_CLIENT_SECRET=${MICROSOFT_CLIENT_SECRET:-}
103
+ - LINKEDIN_CLIENT_ID=${LINKEDIN_CLIENT_ID:-}
104
+ - LINKEDIN_CLIENT_SECRET=${LINKEDIN_CLIENT_SECRET:-}
105
+ # Logs directory
106
+ - LOGS_DIR=/insforge-logs
107
+ # Storage directory (for local file storage when S3 is not configured)
108
+ - STORAGE_DIR=/insforge-storage
109
+ volumes:
110
+ - storage-data:/insforge-storage
111
+ - shared-logs:/insforge-logs
93
112
  restart: unless-stopped
94
113
  networks:
95
114
  - insforge-network
@@ -119,7 +138,7 @@ services:
119
138
  - WORKER_TIMEOUT_MS=${WORKER_TIMEOUT_MS:-30000}
120
139
  # Encryption keys for decrypting function secrets
121
140
  - ENCRYPTION_KEY=${ENCRYPTION_KEY}
122
- - JWT_SECRET=${JWT_SECRET}
141
+ - JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
123
142
  volumes:
124
143
  - ./functions:/app/functions
125
144
  - deno_cache:/deno-dir
@@ -134,11 +153,48 @@ services:
134
153
  networks:
135
154
  - insforge-network
136
155
 
156
+ # Vector.dev for log collection and shipping
157
+ vector:
158
+ container_name: insforge-vector
159
+ image: timberio/vector:0.28.1-alpine
160
+ restart: unless-stopped
161
+ depends_on:
162
+ postgres:
163
+ condition: service_healthy
164
+ postgrest:
165
+ condition: service_started
166
+ insforge:
167
+ condition: service_started
168
+ deno:
169
+ condition: service_started
170
+ volumes:
171
+ - ./docker-init/logs/vector.yml:/etc/vector/vector.yml:ro
172
+ - /var/run/docker.sock:/var/run/docker.sock:ro
173
+ - shared-logs:/insforge-logs
174
+ healthcheck:
175
+ test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:7135/health"]
176
+ timeout: 5s
177
+ interval: 5s
178
+ retries: 3
179
+ environment:
180
+ - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-}
181
+ - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-}
182
+ - AWS_REGION=${AWS_REGION:-skip}
183
+ - PROJECT_ID=${PROJECT_ID:-}
184
+ - HOSTNAME_OVERRIDE=${HOSTNAME_OVERRIDE:-}
185
+ command: ["--config", "/etc/vector/vector.yml"]
186
+ networks:
187
+ - insforge-network
188
+
137
189
  volumes:
138
190
  postgres-data:
139
191
  driver: local
140
192
  deno_cache:
141
193
  driver: local
194
+ storage-data:
195
+ driver: local
196
+ shared-logs:
197
+ driver: local
142
198
 
143
199
  networks:
144
200
  insforge-network:
@@ -13,7 +13,6 @@ services:
13
13
  - postgres-data:/var/lib/postgresql/data
14
14
  - ./docker-init/db/db-init.sql:/docker-entrypoint-initdb.d/01-init.sql
15
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
16
  - ./docker-init/db/postgresql.conf:/etc/postgresql/postgresql.conf
18
17
  ports:
19
18
  - "5432:5432"
@@ -37,7 +36,7 @@ services:
37
36
  PGRST_OPENAPI_SERVER_PROXY_URI: http://localhost:3000
38
37
  PGRST_DB_SCHEMA: public
39
38
  PGRST_DB_ANON_ROLE: anon
40
- PGRST_JWT_SECRET: ${JWT_SECRET}
39
+ PGRST_JWT_SECRET: ${JWT_SECRET:-dev-secret-please-change-in-production}
41
40
  # Enable schema reloading via NOTIFY
42
41
  PGRST_DB_CHANNEL_ENABLED: true
43
42
  PGRST_DB_CHANNEL: pgrst
@@ -59,15 +58,18 @@ services:
59
58
  ports:
60
59
  - "7130:7130"
61
60
  - "7131:7131"
61
+ - "7132:7132"
62
62
  environment:
63
63
  - PORT=7130
64
64
  - PROJECT_ROOT=/app
65
65
  - API_BASE_URL=${API_BASE_URL:-}
66
66
  - VITE_API_BASE_URL=${VITE_API_BASE_URL:-}
67
- - JWT_SECRET=${JWT_SECRET:-dev-secret-change-in-production}
67
+ - JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
68
68
  - ENCRYPTION_KEY=${ENCRYPTION_KEY:-}
69
69
  - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@example.com}
70
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:-}
71
73
  # PostgreSQL connection
72
74
  - POSTGRES_HOST=postgres
73
75
  - POSTGRES_PORT=5432
@@ -81,11 +83,15 @@ services:
81
83
  # Storage Configuration
82
84
  - AWS_S3_BUCKET=${AWS_S3_BUCKET:-}
83
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:-}
84
89
  # Multi-tenant Cloud Configuration
85
90
  - DEPLOYMENT_ID=${DEPLOYMENT_ID:-}
86
91
  - PROJECT_ID=${PROJECT_ID:-}
87
92
  - APP_KEY=${APP_KEY:-}
88
93
  - ACCESS_API_KEY=${ACCESS_API_KEY:-}
94
+ - CLOUD_API_HOST=${CLOUD_API_HOST:-}
89
95
  # LLM Model API keys
90
96
  - OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
91
97
  # OAuth Configuration
@@ -93,16 +99,32 @@ services:
93
99
  - GOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET:-}
94
100
  - GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID:-}
95
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}
96
114
  volumes:
97
115
  - ./package.json:/app/package.json
98
116
  - ./backend:/app/backend
99
117
  - ./frontend:/app/frontend
118
+ - ./auth:/app/auth
100
119
  - ./shared-schemas:/app/shared-schemas
101
120
  - ./docs:/app/docs
102
121
  - node_modules:/app/node_modules
103
122
  - backend_node_modules:/app/backend/node_modules
104
123
  - frontend_node_modules:/app/frontend/node_modules
124
+ - auth_node_modules:/app/auth/node_modules
105
125
  - shared_schemas_node_modules:/app/shared-schemas/node_modules
126
+ - shared-logs:/insforge-logs
127
+ - storage-data:/insforge-storage
106
128
  command: sh -c "npm install && cd backend && npm run migrate:up && cd .. && npm run dev"
107
129
  restart: unless-stopped
108
130
  networks:
@@ -133,7 +155,7 @@ services:
133
155
  - WORKER_TIMEOUT_MS=${WORKER_TIMEOUT_MS:-30000}
134
156
  # Encryption keys for decrypting function secrets
135
157
  - ENCRYPTION_KEY=${ENCRYPTION_KEY}
136
- - JWT_SECRET=${JWT_SECRET}
158
+ - JWT_SECRET=${JWT_SECRET:-dev-secret-please-change-in-production}
137
159
  volumes:
138
160
  - ./functions:/app/functions
139
161
  - deno_cache:/deno-dir
@@ -148,6 +170,39 @@ services:
148
170
  networks:
149
171
  - insforge-network
150
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
+
151
206
  volumes:
152
207
  postgres-data:
153
208
  driver: local
@@ -157,10 +212,16 @@ volumes:
157
212
  driver: local
158
213
  frontend_node_modules:
159
214
  driver: local
215
+ auth_node_modules:
216
+ driver: local
160
217
  shared_schemas_node_modules:
161
218
  driver: local
162
219
  deno_cache:
163
220
  driver: local
221
+ shared-logs:
222
+ driver: local
223
+ storage-data:
224
+ driver: local
164
225
 
165
226
  networks:
166
227
  insforge-network:
@@ -16,31 +16,8 @@ GRANT USAGE ON SCHEMA public TO project_admin;
16
16
  GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO project_admin;
17
17
 
18
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
-
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;
44
21
  -- Create function to automatically create RLS policies for new tables
45
22
  CREATE OR REPLACE FUNCTION public.create_default_policies()
46
23
  RETURNS event_trigger AS $$
@@ -65,12 +42,8 @@ BEGIN
65
42
  AND tablename = table_name;
66
43
  -- Only create policies if RLS is enabled
67
44
  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
45
+ -- Create policy for project_admin role only
46
+ -- Users must define their own policies for anon and authenticated roles
74
47
  EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
75
48
  END IF;
76
49
  END LOOP;
@@ -109,9 +82,8 @@ BEGIN
109
82
  WHERE schemaname = table_schema
110
83
  AND tablename = table_name
111
84
  ) 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);
85
+ -- Create policy for project_admin role only
86
+ -- Users must define their own policies for anon and authenticated roles
115
87
  EXECUTE format('CREATE POLICY "project_admin_policy" ON %s FOR ALL TO project_admin USING (true) WITH CHECK (true)', obj.object_identity);
116
88
  END IF;
117
89
  END LOOP;
@@ -0,0 +1,236 @@
1
+ api:
2
+ enabled: true
3
+ address: 0.0.0.0:7135
4
+
5
+ sources:
6
+ docker_host:
7
+ type: docker_logs
8
+ exclude_containers:
9
+ - insforge-vector
10
+ include_containers:
11
+ - insforge
12
+ - insforge-deno
13
+ - insforge-postgrest
14
+ - insforge-postgres
15
+
16
+ transforms:
17
+ project_logs:
18
+ type: remap
19
+ inputs:
20
+ - docker_host
21
+ source: |-
22
+ .project = "default"
23
+ .event_message = del(.message)
24
+ # Remove leading slash from container name if present
25
+ container = to_string!(del(.container_name))
26
+ if starts_with(container, "/") {
27
+ .appname = slice!(container, 1)
28
+ } else {
29
+ .appname = container
30
+ }
31
+ del(.container_created_at)
32
+ del(.container_id)
33
+ del(.source_type)
34
+ del(.stream)
35
+ del(.label)
36
+ del(.image)
37
+ del(.host)
38
+ del(.stream)
39
+
40
+ router:
41
+ type: route
42
+ inputs:
43
+ - project_logs
44
+ route:
45
+ insforge: '.appname == "insforge"'
46
+ deno: '.appname == "insforge-deno"'
47
+ rest: '.appname == "insforge-postgrest"'
48
+ db: '.appname == "insforge-postgres"'
49
+ realtime: '.appname == "insforge-realtime"'
50
+ # PostgREST logs with proper parsing
51
+ rest_logs:
52
+ type: remap
53
+ inputs:
54
+ - router.rest
55
+ source: |-
56
+ # .metadata.host = .project
57
+ # Parse PostgREST log format: DD/Mon/YYYY:HH:MM:SS +ZZZZ: message
58
+ parsed, err = parse_regex(.event_message, r'^(?P<time>\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} [+-]\d{4}): (?P<msg>.*)$')
59
+
60
+ if err == null && parsed != null {
61
+ .event_message = parsed.msg
62
+ .metadata.level = "info"
63
+ } else {
64
+ # If parsing fails, keep original message
65
+ .metadata.level = "info"
66
+ }
67
+ # InsForge logs are structured JSON, parse and handle both request logs and application logs
68
+ insforge_logs:
69
+ type: remap
70
+ inputs:
71
+ - router.insforge
72
+ source: |-
73
+ # Remove the [backend] prefix if present
74
+ .event_message = replace!(.event_message, r'^\[backend\] ', "")
75
+
76
+ req, err = parse_json(.event_message)
77
+ if err == null {
78
+ # Set timestamp from log
79
+ if req.timestamp != null {
80
+ .timestamp = to_timestamp!(req.timestamp)
81
+ }
82
+
83
+ # Set log level
84
+ .metadata.level = req.level
85
+
86
+ # Check if this is a request log (has duration field)
87
+ if req.duration != null {
88
+ # Flatten request log fields to top level
89
+ .user_agent = req.userAgent
90
+ .ip = req.ip
91
+ .method = req.method
92
+ .path = req.path
93
+ .protocol = "HTTP/1.1"
94
+ .status_code = req.status
95
+ .size = req.size
96
+ .duration = req.duration
97
+ # Format as nginx-style log line
98
+ .event_message = join!([req.method, req.path, to_string!(req.status), to_string!(req.size), req.duration, "-", req.ip, "-", req.userAgent], " ")
99
+ .log_type = "request"
100
+ } else {
101
+ # This is an application log
102
+ .event_message = join!([req.level, req.message], " - ")
103
+ .log_type = "application"
104
+ if req.error != null {
105
+ .error = req.error
106
+ }
107
+ if req.stack != null {
108
+ .stack = req.stack
109
+ }
110
+ }
111
+ }
112
+ realtime_logs:
113
+ type: remap
114
+ inputs:
115
+ - router.realtime
116
+ source: |-
117
+ parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
118
+ if err == null {
119
+ .event_message = parsed.msg
120
+ .metadata.level = parsed.level
121
+ }
122
+ deno_logs:
123
+ type: remap
124
+ inputs:
125
+ - router.deno
126
+ source: |-
127
+ parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
128
+ if err == null {
129
+ .event_message = parsed.msg
130
+ .timestamp = to_timestamp!(parsed.time)
131
+ .metadata.level = upcase!(parsed.level)
132
+ # .metadata.host = .project
133
+ }
134
+ # Postgres logs with proper parsing
135
+ db_logs:
136
+ type: remap
137
+ inputs:
138
+ - router.db
139
+ source: |-
140
+ # .metadata.host = "db-default"
141
+ # Parse PostgreSQL log format: YYYY-MM-DD HH:MM:SS.SSS TZ [PID] LEVEL: message
142
+ parsed, err = parse_regex(.event_message, r'^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) (?P<tz>\w+) \[(?P<pid>\d+)\] (?P<level>LOG|ERROR|WARNING|INFO|NOTICE|FATAL|PANIC|STATEMENT|DETAIL): (?P<msg>.*)$')
143
+
144
+ if err == null && parsed != null {
145
+ .metadata.parsed.pid = parsed.pid
146
+ .metadata.level = upcase!(parsed.level)
147
+ .event_message = parsed.msg
148
+
149
+ # Normalize STATEMENT and DETAIL to appropriate log levels
150
+ if .metadata.level == "STATEMENT" {
151
+ .metadata.level = "INFO"
152
+ }
153
+ if .metadata.level == "DETAIL" {
154
+ .metadata.level = "INFO"
155
+ }
156
+ } else {
157
+ # If parsing fails, keep original message and set default severity
158
+ .metadata.level = "LOG"
159
+ }
160
+
161
+ sinks:
162
+ # File sinks - JSONL format for FileProvider (always enabled)
163
+ file_insforge:
164
+ type: 'file'
165
+ inputs:
166
+ - insforge_logs
167
+ path: '/insforge-logs/insforge.logs.jsonl'
168
+ encoding:
169
+ codec: 'json'
170
+ file_deno:
171
+ type: 'file'
172
+ inputs:
173
+ - deno_logs
174
+ path: '/insforge-logs/function.logs.jsonl'
175
+ encoding:
176
+ codec: 'json'
177
+ file_rest:
178
+ type: 'file'
179
+ inputs:
180
+ - rest_logs
181
+ path: '/insforge-logs/postgrest.logs.jsonl'
182
+ encoding:
183
+ codec: 'json'
184
+ file_db:
185
+ type: 'file'
186
+ inputs:
187
+ - db_logs
188
+ path: '/insforge-logs/postgres.logs.jsonl'
189
+ encoding:
190
+ codec: 'json'
191
+
192
+ # CloudWatch sinks (ignored if AWS_REGION not set)
193
+ cw_insforge:
194
+ type: aws_cloudwatch_logs
195
+ inputs:
196
+ - insforge_logs
197
+ region: ${AWS_REGION:-skip}
198
+ group_name: /insforge/local
199
+ stream_name: ${HOSTNAME_OVERRIDE:-local}-insforge-vector
200
+ encoding:
201
+ codec: json
202
+ healthcheck:
203
+ enabled: false
204
+ cw_rest:
205
+ type: aws_cloudwatch_logs
206
+ inputs:
207
+ - rest_logs
208
+ region: ${AWS_REGION:-skip}
209
+ group_name: /insforge/local
210
+ stream_name: ${HOSTNAME_OVERRIDE:-local}-postgrest-vector
211
+ encoding:
212
+ codec: json
213
+ healthcheck:
214
+ enabled: false
215
+ cw_deno:
216
+ type: aws_cloudwatch_logs
217
+ inputs:
218
+ - deno_logs
219
+ region: ${AWS_REGION:-skip}
220
+ group_name: /insforge/local
221
+ stream_name: ${HOSTNAME_OVERRIDE:-local}-function-vector
222
+ encoding:
223
+ codec: json
224
+ healthcheck:
225
+ enabled: false
226
+ cw_db:
227
+ type: aws_cloudwatch_logs
228
+ inputs:
229
+ - db_logs
230
+ region: ${AWS_REGION:-skip}
231
+ group_name: /insforge/local
232
+ stream_name: ${HOSTNAME_OVERRIDE:-local}-postgres-vector
233
+ encoding:
234
+ codec: json
235
+ healthcheck:
236
+ enabled: false
package/docs/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # Mintlify Starter Kit
2
+
3
+ Use the starter kit to get your docs deployed and ready to customize.
4
+
5
+ Click the green **Use this template** button at the top of this repo to copy the Mintlify starter kit. The starter kit contains examples with
6
+
7
+ - Guide pages
8
+ - Navigation
9
+ - Customizations
10
+ - API reference pages
11
+ - Use of popular components
12
+
13
+ **[Follow the full quickstart guide](https://starter.mintlify.com/quickstart)**
14
+
15
+ ## Development
16
+
17
+ Install the [Mintlify CLI](https://www.npmjs.com/package/mint) to preview your documentation changes locally. To install, use the following command:
18
+
19
+ ```
20
+ npm i -g mint
21
+ ```
22
+
23
+ Run the following command at the root of your documentation, where your `docs.json` is located:
24
+
25
+ ```
26
+ mint dev
27
+ ```
28
+
29
+ View your local preview at `http://localhost:3000`.
30
+
31
+ ## Publishing changes
32
+
33
+ Install our GitHub app from your [dashboard](https://dashboard.mintlify.com/settings/organization/github-app) to propagate changes from your repo to your deployment. Changes are deployed to production automatically after pushing to the default branch.
34
+
35
+ ## Need help?
36
+
37
+ ### Troubleshooting
38
+
39
+ - If your dev environment isn't running: Run `mint update` to ensure you have the most recent version of the CLI.
40
+ - If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
41
+
42
+ ### Resources
43
+ - [Mintlify documentation](https://mintlify.com/docs)
44
+ - [Mintlify community](https://mintlify.com/community)
@@ -0,0 +1,67 @@
1
+ ---
2
+ title: "Changelog"
3
+ description: "Latest updates and improvements to InsForge"
4
+ ---
5
+
6
+ ## November 2025
7
+
8
+ <AccordionGroup>
9
+ <Accordion title="November 30, 2025" icon="rocket">
10
+ ### QuickStart Prompts & Templates
11
+ Get started faster with our new quickstart prompts and templates for common apps. Builders can now start with one click and get a fullstack app running in **5 minutes**.
12
+
13
+ <img src="/images/changelog/nov-2025/quickstart-prompts.webp" alt="QuickStart Prompts and Templates" />
14
+
15
+ ### Auth Components
16
+ Drop-in prebuilt React auth components for your app. Get a working auth flow right away with social sign-on support built in by default.
17
+
18
+ <img src="/images/changelog/nov-2025/auth-components.webp" alt="Auth Components with Social Sign-on" />
19
+
20
+ ### Database Metadata Dashboard
21
+ View your RLS policies, triggers, functions, and indexes all in one place. This makes debugging and understanding your project security much easier.
22
+
23
+ <img src="/images/changelog/nov-2025/database-metadata.webp" alt="Database Metadata Dashboard" />
24
+
25
+ ### SQL Editor
26
+ Run SQL queries directly in the InsForge dashboard. No external tools required.
27
+
28
+ <img src="/images/changelog/nov-2025/sql-editor.webp" alt="SQL Editor in Dashboard" />
29
+
30
+ ### Usage Page
31
+ A new dashboard section that displays a clear breakdown of your resource usage and what your plan includes.
32
+
33
+ <img src="/images/changelog/nov-2025/usage-page.webp" alt="Usage Page Dashboard" />
34
+ </Accordion>
35
+ </AccordionGroup>
36
+
37
+ ## October 2025
38
+
39
+ <AccordionGroup>
40
+ <Accordion title="October 30, 2025" icon="rocket">
41
+ ### OAuth: 4 New Third-Party Providers
42
+ You can now enable third-party logins with **LinkedIn, Microsoft, Facebook, and Discord**. On InsForge Cloud, we provide shared credentials for developers who want to quickly test these login flows.
43
+
44
+ After enabling, you can implement these logins directly through your agent by sending a simple prompt:
45
+
46
+ ```text
47
+ implement Discord login
48
+ ```
49
+
50
+ <img src="/images/changelog/october-2025/oauth-providers.webp" alt="OAuth Providers - LinkedIn, Microsoft, Facebook, and Discord" />
51
+
52
+ ### Import CSV to Your Table
53
+ You can now upload `.csv` files directly into any table from the dashboard. Perfect for bringing in sample data or migrating from other tools.
54
+
55
+ <img src="/images/changelog/october-2025/csv-upload.webp" alt="CSV Upload to Tables Feature" />
56
+
57
+ ### InsForge.js SDK
58
+ We've released our **insforge-js SDK** to make it easier for developers to integrate InsForge into their workflows. Manage auth, query databases, and control your backend programmatically with a few lines of code.
59
+
60
+ **Repository:** [GitHub](https://github.com/InsForge/InsForge-sdk-js)
61
+
62
+ ### Logs
63
+ The new logs page lets you monitor container logs in real time. You can watch your backend activity directly in the dashboard, or let AI coding agents query logs through the InsForge MCP to automatically debug and search for errors.
64
+
65
+ <img src="/images/changelog/october-2025/logs-feature.webp" alt="Real-time Logs Monitoring Feature" />
66
+ </Accordion>
67
+ </AccordionGroup>