insforge 0.3.3 → 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 -780
  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
@@ -0,0 +1,105 @@
1
+ ---
2
+ title: Architecture
3
+ description: Serverless JavaScript functions running in isolated Deno runtime
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ InsForge Functions provide a secure, scalable serverless compute platform that runs JavaScript/TypeScript code in isolated Deno workers with full access to the InsForge SDK.
9
+
10
+ ## Technology Stack
11
+
12
+ ```mermaid
13
+ graph TB
14
+ Client[Client Application] --> Backend[Backend API :7130]
15
+ Backend --> Proxy[Proxy Layer]
16
+ Proxy --> Deno[Deno Runtime :7133]
17
+ Deno --> Worker[Web Worker]
18
+ Worker --> Sandbox[Isolated Sandbox]
19
+
20
+ Backend --> DB[(PostgreSQL)]
21
+ Deno --> DB
22
+ Worker --> SDK[InsForge SDK]
23
+ SDK --> Backend
24
+
25
+ style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
26
+ style Backend fill:#166534,stroke:#22c55e,color:#dcfce7
27
+ style Proxy fill:#1e40af,stroke:#3b82f6,color:#dbeafe
28
+ style Deno fill:#c2410c,stroke:#fb923c,color:#fed7aa
29
+ style Worker fill:#4c1d95,stroke:#8b5cf6,color:#ede9fe
30
+ style Sandbox fill:#7c2d12,stroke:#f97316,color:#fed7aa
31
+ style DB fill:#0e7490,stroke:#06b6d4,color:#cffafe
32
+ style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
33
+ ```
34
+
35
+ ## Core Components
36
+
37
+ | Component | Technology | Port | Purpose |
38
+ |-----------|------------|------|---------|
39
+ | **Backend API** | Node.js/Express | 7130 | Function management, authentication, proxy |
40
+ | **Runtime** | Deno v2.0.6 | 7133 | Secure JavaScript/TypeScript execution |
41
+ | **Sandbox** | Web Workers | - | Isolated execution environment |
42
+ | **Database** | PostgreSQL | 5432 | Function code and metadata storage |
43
+ | **SDK** | @insforge/sdk | - | Pre-injected client for backend access |
44
+ | **Secrets** | AES-256-GCM | - | Encrypted environment variables |
45
+
46
+ ## How It Works
47
+
48
+ When a client makes a request to `/functions/{slug}`:
49
+
50
+ 1. The backend API receives and validates the request
51
+ 2. Request is proxied to the Deno runtime
52
+ 3. Function code is executed in an isolated Web Worker
53
+ 4. The function has access to the InsForge SDK and environment variables
54
+ 5. Response is returned to the client
55
+
56
+ ### Authentication Flow
57
+
58
+ ```mermaid
59
+ sequenceDiagram
60
+ participant C as Client
61
+ participant B as Backend API
62
+ participant D as Deno Runtime
63
+ participant W as Worker
64
+ participant SDK as InsForge SDK
65
+
66
+ C->>B: POST /functions/my-api<br/>Authorization: Bearer TOKEN
67
+ B->>D: Proxy request with headers
68
+ D->>D: Fetch function code from DB
69
+ D->>D: Decrypt secrets
70
+ D->>W: Create worker with code + secrets
71
+ W->>SDK: createClient({token})
72
+ SDK->>B: Validate token
73
+ B-->>SDK: User data
74
+ W->>C: HTTP Response
75
+ ```
76
+
77
+ ## Performance Characteristics
78
+
79
+ ### Execution Limits
80
+
81
+ | Limit | Value | Description |
82
+ |-------|-------|-------------|
83
+ | **Timeout** | 30 seconds | Maximum execution time per invocation |
84
+ | **Memory** | Worker default | Depends on Deno worker allocation |
85
+ | **Payload Size** | 10MB | Maximum request/response size |
86
+ | **Concurrent Workers** | System dependent | Limited by server resources |
87
+ | **Cold Start** | ~50-200ms | Time to create new worker |
88
+
89
+ ### Optimization Strategies
90
+
91
+ 1. **Worker Pooling**: Workers are created on-demand
92
+ 2. **Code Caching**: Function code cached in memory
93
+ 3. **Secret Caching**: Decrypted secrets cached per execution
94
+ 4. **SDK Reuse**: SDK client created once per worker
95
+
96
+ ## Best Practices
97
+
98
+ 1. **Keep Functions Small**: Single responsibility per function
99
+ 2. **Handle Errors Gracefully**: Always return proper HTTP responses
100
+ 3. **Validate Input**: Check request data before processing
101
+ 4. **Use Caching**: Cache frequently accessed data
102
+ 5. **Optimize Queries**: Use efficient database queries
103
+ 6. **Monitor Performance**: Track execution times and errors
104
+ 7. **Secure Secrets**: Never log sensitive data
105
+ 8. **Test Locally**: Test functions before deployment
@@ -0,0 +1,184 @@
1
+ ---
2
+ title: Functions SDK Reference
3
+ description: Invoke serverless functions with the InsForge SDK
4
+ ---
5
+
6
+ import Installation from '/snippets/sdk-installation.mdx';
7
+
8
+ <Installation />
9
+
10
+ ## invoke()
11
+
12
+ Invoke a serverless function by slug.
13
+
14
+ ### Parameters
15
+
16
+ - `slug` (string, required) - Function slug/name
17
+ - `body` (any, optional) - Request body (JSON-serializable)
18
+ - `headers` (object, optional) - Custom headers
19
+ - `method` ('GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', optional) - HTTP method (default: POST)
20
+
21
+ ### Returns
22
+
23
+ ```typescript
24
+ {
25
+ data: any | null, // Response from function
26
+ error: Error | null
27
+ }
28
+ ```
29
+
30
+ <Note>
31
+ SDK automatically includes authentication token from logged-in user.
32
+ </Note>
33
+
34
+ ### Example (POST with body)
35
+
36
+ ```javascript
37
+ const { data, error } = await insforge.functions.invoke('hello-world', {
38
+ body: { name: 'World', greeting: 'Hello' }
39
+ })
40
+
41
+ console.log(data)
42
+ ```
43
+
44
+ ### Output (POST with body)
45
+
46
+ ```json
47
+ {
48
+ "data": {
49
+ "message": "Hello, World!",
50
+ "timestamp": "2024-01-15T10:30:00Z"
51
+ },
52
+ "error": null
53
+ }
54
+ ```
55
+
56
+ ### Example (GET request)
57
+
58
+ ```javascript
59
+ const { data, error } = await insforge.functions.invoke('get-stats', {
60
+ method: 'GET'
61
+ })
62
+
63
+ console.log(data)
64
+ ```
65
+
66
+ ### Output (GET request)
67
+
68
+ ```json
69
+ {
70
+ "data": {
71
+ "users": 100,
72
+ "posts": 500,
73
+ "comments": 1200
74
+ },
75
+ "error": null
76
+ }
77
+ ```
78
+
79
+ ### Example (With custom headers)
80
+
81
+ ```javascript
82
+ const { data, error } = await insforge.functions.invoke('api-endpoint', {
83
+ method: 'PUT',
84
+ body: { id: '123', status: 'active' },
85
+ headers: { 'X-Custom-Header': 'value' }
86
+ })
87
+ ```
88
+
89
+ ### Output (With custom headers)
90
+
91
+ ```json
92
+ {
93
+ "data": {
94
+ "updated": true,
95
+ "id": "123"
96
+ },
97
+ "error": null
98
+ }
99
+ ```
100
+
101
+ ## Complete Serverless Function Examples
102
+
103
+ ### Example 1: Public Function (No Authentication Required)
104
+
105
+ ```javascript
106
+ // Use anon token for public data access
107
+ // No import needed - createClient is injected by the worker template
108
+ module.exports = async function(request) {
109
+ const corsHeaders = {
110
+ 'Access-Control-Allow-Origin': '*',
111
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
112
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization'
113
+ };
114
+
115
+ if (request.method === 'OPTIONS') {
116
+ return new Response(null, { status: 204, headers: corsHeaders });
117
+ }
118
+
119
+ // Create client with anon token - no authentication needed
120
+ const client = createClient({
121
+ baseUrl: Deno.env.get('INSFORGE_INTERNAL_URL') || 'http://insforge:7130',
122
+ anonKey: Deno.env.get('ANON_KEY')
123
+ });
124
+
125
+ // Access public data
126
+ const { data, error } = await client.database
127
+ .from('public_posts')
128
+ .select('*')
129
+ .limit(10);
130
+
131
+ return new Response(JSON.stringify({ data }), {
132
+ status: 200,
133
+ headers: { ...corsHeaders, 'Content-Type': 'application/json' }
134
+ });
135
+ }
136
+ ```
137
+
138
+ ### Example 2: Authenticated Function (Access User Data)
139
+
140
+ ```javascript
141
+ // Use functionToken to access authenticated user's data
142
+ // No import needed - createClient is injected by the worker template
143
+ module.exports = async function(request) {
144
+ const corsHeaders = {
145
+ 'Access-Control-Allow-Origin': '*',
146
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
147
+ 'Access-Control-Allow-Headers': 'Content-Type, Authorization'
148
+ };
149
+
150
+ if (request.method === 'OPTIONS') {
151
+ return new Response(null, { status: 204, headers: corsHeaders });
152
+ }
153
+
154
+ // Extract token from request headers
155
+ const authHeader = request.headers.get('Authorization');
156
+ const userToken = authHeader ? authHeader.replace('Bearer ', '') : null;
157
+
158
+ // Create client with user's token for authenticated access
159
+ const client = createClient({
160
+ baseUrl: Deno.env.get('INSFORGE_INTERNAL_URL') || 'http://insforge:7130',
161
+ edgeFunctionToken: userToken
162
+ });
163
+
164
+ // Get authenticated user
165
+ const { data: userData } = await client.auth.getCurrentUser();
166
+ if (!userData?.user?.id) {
167
+ return new Response(JSON.stringify({ error: 'Unauthorized' }), {
168
+ status: 401,
169
+ headers: { ...corsHeaders, 'Content-Type': 'application/json' }
170
+ });
171
+ }
172
+
173
+ // Access user's private data or create records with user_id
174
+ await client.database.from('user_posts').insert([{
175
+ user_id: userData.user.id,
176
+ content: 'My post'
177
+ }]);
178
+
179
+ return new Response(JSON.stringify({ success: true }), {
180
+ status: 200,
181
+ headers: { ...corsHeaders, 'Content-Type': 'application/json' }
182
+ });
183
+ }
184
+ ```
@@ -0,0 +1,243 @@
1
+ ---
2
+ title: Architecture
3
+ description: Enterprise-grade storage system powered by AWS S3
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ InsForge provides a high-performance, scalable storage system built on AWS S3, delivering enterprise-grade reliability with 99.999999999% (11 9's) durability.
9
+
10
+ ## Technology Stack
11
+
12
+ ```mermaid
13
+ graph TB
14
+ Client[Client Application] --> SDK[InsForge SDK]
15
+ SDK --> StorageAPI[Storage API]
16
+
17
+ StorageAPI --> S3[AWS S3]
18
+
19
+ StorageAPI --> DB[(PostgreSQL)]
20
+ DB --> Metadata[File Metadata]
21
+ DB --> Buckets[Bucket Configuration]
22
+
23
+ S3 --> DirectUpload[Presigned URLs]
24
+ S3 --> SecureAccess[IAM Policies]
25
+
26
+ style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
27
+ style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
28
+ style StorageAPI fill:#166534,stroke:#22c55e,color:#dcfce7
29
+ style S3 fill:#ea580c,stroke:#f97316,color:#fed7aa
30
+ style DB fill:#0e7490,stroke:#06b6d4,color:#cffafe
31
+ style Metadata fill:#0e7490,stroke:#22d3ee,color:#cffafe
32
+ style Buckets fill:#0e7490,stroke:#22d3ee,color:#cffafe
33
+ style DirectUpload fill:#ea580c,stroke:#fb923c,color:#fed7aa
34
+ style SecureAccess fill:#ea580c,stroke:#fb923c,color:#fed7aa
35
+ ```
36
+
37
+ ## Core Components
38
+
39
+ | Component | Technology | Purpose |
40
+ |-----------|------------|---------|
41
+ | **Storage Backend** | AWS S3 | Enterprise-grade object storage |
42
+ | **Metadata Store** | PostgreSQL | File metadata, bucket configuration |
43
+ | **Upload Handler** | Multer | Multipart form data parsing (both backends) |
44
+ | **URL Strategy** | Presigned URLs | Secure direct uploads/downloads (S3 only) |
45
+ | **Access Control** | JWT + Bucket visibility | Public/private bucket permissions |
46
+
47
+ ## AWS S3 Architecture
48
+
49
+ ### Enterprise Features
50
+
51
+ - **Direct Uploads**: Presigned URLs bypass API server for unlimited scale
52
+ - **IAM Security**: Role-based authentication without credential management
53
+ - **Multi-Tenancy**: Secure isolation between projects using app key prefix
54
+ - **Bucket Policies**: Public and private bucket configurations
55
+ - **Automatic Cleanup**: Configurable lifecycle policies
56
+ - **Metadata Tracking**: Rich file metadata stored in PostgreSQL
57
+
58
+ ## Upload Strategies
59
+
60
+ ### Direct Upload to S3
61
+
62
+ ```mermaid
63
+ sequenceDiagram
64
+ participant Client
65
+ participant API
66
+ participant S3
67
+ participant DB
68
+
69
+ Client->>API: POST/PUT with multipart/form-data
70
+ API->>S3: Upload file
71
+ S3-->>API: Success
72
+ API->>DB: Store metadata
73
+ API-->>Client: {url, key, size}
74
+ ```
75
+
76
+ ### Presigned URL Upload (Recommended)
77
+
78
+ ```mermaid
79
+ sequenceDiagram
80
+ participant Client
81
+ participant API
82
+ participant S3
83
+ participant DB
84
+
85
+ Client->>API: GET upload strategy
86
+ API->>S3: Generate presigned URL
87
+ S3-->>API: Presigned URL
88
+ API-->>Client: {uploadUrl, key}
89
+ Client->>S3: Direct upload
90
+ Client->>API: Confirm upload
91
+ API->>DB: Store metadata
92
+ API-->>Client: {url, key, size}
93
+ ```
94
+
95
+ ## Bucket Configuration
96
+
97
+ ### Bucket Types
98
+
99
+ | Type | Access | Use Case |
100
+ |------|--------|----------|
101
+ | **Public** | No auth required for downloads | Public assets, images, static files |
102
+ | **Private** | Auth required for all operations | User files, sensitive documents |
103
+
104
+
105
+ ## File Operations
106
+
107
+ ### Upload Flow
108
+
109
+ 1. **Request Upload**: Client requests upload permission
110
+ 2. **Validation**: Check auth, bucket permissions, file size
111
+ 3. **Strategy Selection**: Choose direct or presigned upload
112
+ 4. **Upload**: Client uploads via selected method
113
+ 5. **Confirmation**: Verify upload and store metadata
114
+ 6. **Response**: Return file URL and metadata
115
+
116
+ ### Download Flow
117
+
118
+ 1. **Request File**: Client requests file access
119
+ 2. **Permission Check**: Verify bucket/object permissions
120
+ 3. **Strategy Selection**: Direct serve or presigned URL
121
+ 4. **Delivery**: Stream file or redirect to URL
122
+
123
+ ## Security Features
124
+
125
+ <CardGroup cols={2}>
126
+ <Card title="Bucket Policies" icon="shield">
127
+ Public, private, or protected bucket access control
128
+ </Card>
129
+
130
+ <Card title="JWT Authentication" icon="key">
131
+ Token-based access for private resources
132
+ </Card>
133
+
134
+ <Card title="Presigned URLs" icon="link">
135
+ Time-limited URLs for secure S3 access
136
+ </Card>
137
+
138
+ <Card title="MIME Type Validation" icon="file-check">
139
+ Restrict uploads to allowed file types
140
+ </Card>
141
+
142
+ <Card title="Size Limits" icon="weight">
143
+ 10MB default, configurable via MAX_FILE_SIZE
144
+ </Card>
145
+
146
+ <Card title="App Key Isolation" icon="key">
147
+ Multi-tenant isolation using app key prefix in S3
148
+ </Card>
149
+ </CardGroup>
150
+
151
+ ## Intelligent Metadata Management
152
+
153
+ InsForge maintains optimized metadata in PostgreSQL for instant queries:
154
+
155
+ - **Fast Search**: Indexed metadata for sub-millisecond lookups
156
+ - **Rich Metadata**: MIME types, sizes, timestamps, custom tags
157
+ - **Usage Analytics**: Track downloads, bandwidth, popular files
158
+ - **Access Control**: Fine-grained permissions per file or bucket
159
+
160
+ ### Secure URL Generation
161
+
162
+ | Type | Use Case | Security |
163
+ |------|----------|----------|
164
+ | **Public Access** | Static assets, images | Direct S3 URLs |
165
+ | **Presigned GET** | Private file access | Time-limited, single-use |
166
+ | **Presigned POST** | Direct uploads | Validated, size-limited |
167
+
168
+ ## Performance Optimizations
169
+
170
+ ### Performance Features
171
+
172
+ - **Direct S3 Access**: Bypass API server for uploads/downloads
173
+ - **Browser Caching**: Cache-Control headers
174
+ - **ETag Support**: Conditional requests for S3
175
+ - **Parallel Uploads**: Support for multipart uploads
176
+
177
+ ### Upload Methods
178
+
179
+ **1. Direct Upload through API Server:**
180
+ - Client sends file to `/api/storage/buckets/{bucket}/objects`
181
+ - File passes through API server memory
182
+ - Server uploads to S3
183
+ - Limited by server memory (10MB default)
184
+
185
+ **2. Presigned URL Upload (Recommended):**
186
+ - Client requests upload URL from `/api/storage/buckets/{bucket}/upload-strategy`
187
+ - Server returns presigned POST URL
188
+ - Client uploads directly to S3 (bypasses API server)
189
+ - No server memory constraints
190
+ - Client confirms upload via `/api/storage/buckets/{bucket}/objects/{key}/confirm-upload`
191
+
192
+ ## Configuration
193
+
194
+ ### Environment Variables
195
+
196
+ | Variable | Description | Example |
197
+ |----------|-------------|---------|
198
+ | `AWS_S3_BUCKET` | S3 bucket name | `my-app-storage` |
199
+ | `AWS_REGION` | AWS region | `us-east-2` |
200
+ | `APP_KEY` | App key for S3 multi-tenancy | `my-app-key` |
201
+
202
+ ### S3 Configuration
203
+
204
+ ```javascript
205
+ // S3 client configuration
206
+ const s3Client = new S3Client({
207
+ region: this.region, // e.g., 'us-east-2'
208
+ // IAM role credentials are automatically used on EC2
209
+ // No explicit credentials needed in production
210
+ });
211
+
212
+ // File paths use app key prefix for multi-tenancy
213
+ const s3Key = `${this.appKey}/${bucket}/${key}`;
214
+ ```
215
+
216
+ ## Best Practices
217
+
218
+ <CardGroup cols={2}>
219
+ <Card title="Use Buckets" icon="folder">
220
+ Organize files logically in buckets
221
+ </Card>
222
+
223
+ <Card title="Set Limits" icon="gauge">
224
+ Configure appropriate size/type limits
225
+ </Card>
226
+
227
+ <Card title="Clean URLs" icon="link">
228
+ Use consistent, SEO-friendly key naming
229
+ </Card>
230
+
231
+ <Card title="Metadata" icon="tags">
232
+ Store searchable metadata in database
233
+ </Card>
234
+
235
+ <Card title="Backup Strategy" icon="cloud-arrow-up">
236
+ Implement regular backups for production
237
+ </Card>
238
+
239
+ <Card title="Monitor Usage" icon="chart-line">
240
+ Track storage costs and usage patterns
241
+ </Card>
242
+ </CardGroup>
243
+