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
package/openapi/auth.yaml CHANGED
@@ -5,6 +5,228 @@ info:
5
5
  description: Authentication endpoints with separated auth and profile tables
6
6
 
7
7
  paths:
8
+ /api/auth/public-config:
9
+ get:
10
+ summary: Get public authentication configuration
11
+ description: Get all public authentication configuration including OAuth providers and email auth settings (public endpoint)
12
+ tags:
13
+ - Client
14
+ responses:
15
+ '200':
16
+ description: Public authentication configuration
17
+ content:
18
+ application/json:
19
+ schema:
20
+ type: object
21
+ properties:
22
+ oAuthProviders:
23
+ type: array
24
+ items:
25
+ type: object
26
+ properties:
27
+ provider:
28
+ type: string
29
+ enum: [google, github, discord, linkedin, facebook, microsoft]
30
+ useSharedKey:
31
+ type: boolean
32
+ requireEmailVerification:
33
+ type: boolean
34
+ passwordMinLength:
35
+ type: integer
36
+ minimum: 4
37
+ maximum: 128
38
+ requireNumber:
39
+ type: boolean
40
+ requireLowercase:
41
+ type: boolean
42
+ requireUppercase:
43
+ type: boolean
44
+ requireSpecialChar:
45
+ type: boolean
46
+ verifyEmailRedirectTo:
47
+ type: string
48
+ nullable: true
49
+ description: URL to redirect users after successful email verification (if not set, shows default success page)
50
+ resetPasswordRedirectTo:
51
+ type: string
52
+ nullable: true
53
+ description: URL to redirect users after successful password reset (if not set, shows default success page)
54
+ verifyEmailMethod:
55
+ type: string
56
+ enum: [code, link]
57
+ description: Method for email verification (code = 6-digit OTP, link = magic link)
58
+ resetPasswordMethod:
59
+ type: string
60
+ enum: [code, link]
61
+ description: Method for password reset (code = 6-digit OTP + exchange flow, link = magic link)
62
+
63
+ /api/auth/config:
64
+ get:
65
+ summary: Get authentication configuration
66
+ description: Get current authentication settings including all configuration options (admin only)
67
+ tags:
68
+ - Admin
69
+ security:
70
+ - bearerAuth: []
71
+ responses:
72
+ '200':
73
+ description: Authentication configuration
74
+ content:
75
+ application/json:
76
+ schema:
77
+ type: object
78
+ properties:
79
+ id:
80
+ type: string
81
+ format: uuid
82
+ requireEmailVerification:
83
+ type: boolean
84
+ passwordMinLength:
85
+ type: integer
86
+ minimum: 4
87
+ maximum: 128
88
+ requireNumber:
89
+ type: boolean
90
+ requireLowercase:
91
+ type: boolean
92
+ requireUppercase:
93
+ type: boolean
94
+ requireSpecialChar:
95
+ type: boolean
96
+ verifyEmailRedirectTo:
97
+ type: string
98
+ nullable: true
99
+ description: URL to redirect users after successful email verification (if not set, shows default success page)
100
+ resetPasswordRedirectTo:
101
+ type: string
102
+ nullable: true
103
+ description: URL to redirect users after successful password reset (if not set, shows default success page)
104
+ verifyEmailMethod:
105
+ type: string
106
+ enum: [code, link]
107
+ description: Method for email verification (code = 6-digit OTP, link = magic link)
108
+ resetPasswordMethod:
109
+ type: string
110
+ enum: [code, link]
111
+ description: Method for password reset (code = 6-digit OTP + exchange flow, link = magic link)
112
+ signInRedirectTo:
113
+ type: string
114
+ nullable: true
115
+ description: URL to redirect users after successful sign in
116
+ createdAt:
117
+ type: string
118
+ format: date-time
119
+ updatedAt:
120
+ type: string
121
+ format: date-time
122
+ '401':
123
+ description: Unauthorized
124
+ '403':
125
+ description: Forbidden - Admin only
126
+
127
+ put:
128
+ summary: Update authentication configuration
129
+ description: Update authentication settings (admin only)
130
+ tags:
131
+ - Admin
132
+ security:
133
+ - bearerAuth: []
134
+ requestBody:
135
+ required: true
136
+ content:
137
+ application/json:
138
+ schema:
139
+ type: object
140
+ properties:
141
+ requireEmailVerification:
142
+ type: boolean
143
+ passwordMinLength:
144
+ type: integer
145
+ minimum: 4
146
+ maximum: 128
147
+ requireNumber:
148
+ type: boolean
149
+ requireLowercase:
150
+ type: boolean
151
+ requireUppercase:
152
+ type: boolean
153
+ requireSpecialChar:
154
+ type: boolean
155
+ verifyEmailRedirectTo:
156
+ type: string
157
+ nullable: true
158
+ description: URL to redirect users after successful email verification (if not set, shows default success page)
159
+ resetPasswordRedirectTo:
160
+ type: string
161
+ nullable: true
162
+ description: URL to redirect users after successful password reset (if not set, shows default success page)
163
+ verifyEmailMethod:
164
+ type: string
165
+ enum: [code, link]
166
+ description: Method for email verification (code = 6-digit OTP, link = magic link)
167
+ resetPasswordMethod:
168
+ type: string
169
+ enum: [code, link]
170
+ description: Method for password reset (code = 6-digit OTP + exchange flow, link = magic link)
171
+ signInRedirectTo:
172
+ type: string
173
+ nullable: true
174
+ description: URL to redirect users after successful sign in
175
+ responses:
176
+ '200':
177
+ description: Configuration updated successfully
178
+ content:
179
+ application/json:
180
+ schema:
181
+ type: object
182
+ properties:
183
+ id:
184
+ type: string
185
+ format: uuid
186
+ requireEmailVerification:
187
+ type: boolean
188
+ passwordMinLength:
189
+ type: integer
190
+ minimum: 4
191
+ maximum: 128
192
+ requireNumber:
193
+ type: boolean
194
+ requireLowercase:
195
+ type: boolean
196
+ requireUppercase:
197
+ type: boolean
198
+ requireSpecialChar:
199
+ type: boolean
200
+ verifyEmailRedirectTo:
201
+ type: string
202
+ nullable: true
203
+ description: URL to redirect users after successful email verification (if not set, shows default success page)
204
+ resetPasswordRedirectTo:
205
+ type: string
206
+ nullable: true
207
+ description: URL to redirect users after successful password reset (if not set, shows default success page)
208
+ verifyEmailMethod:
209
+ type: string
210
+ enum: [code, link]
211
+ resetPasswordMethod:
212
+ type: string
213
+ enum: [code, link]
214
+ signInRedirectTo:
215
+ type: string
216
+ nullable: true
217
+ createdAt:
218
+ type: string
219
+ format: date-time
220
+ updatedAt:
221
+ type: string
222
+ format: date-time
223
+ '400':
224
+ description: Invalid request
225
+ '401':
226
+ description: Unauthorized
227
+ '403':
228
+ description: Forbidden - Admin only
229
+
8
230
  /api/auth/users:
9
231
  post:
10
232
  summary: Register new user
@@ -27,13 +249,13 @@ paths:
27
249
  example: user@example.com
28
250
  password:
29
251
  type: string
30
- minLength: 8
252
+ description: Password meeting configured requirements (check /api/auth/email/config for current requirements)
31
253
  example: securepassword123
32
254
  name:
33
255
  type: string
34
256
  example: John Doe
35
257
  responses:
36
- '201':
258
+ '200':
37
259
  description: User created successfully
38
260
  content:
39
261
  application/json:
@@ -41,26 +263,18 @@ paths:
41
263
  type: object
42
264
  properties:
43
265
  user:
44
- type: object
45
- properties:
46
- id:
47
- type: string
48
- format: uuid
49
- email:
50
- type: string
51
- name:
52
- type: string
53
- emailVerified:
54
- type: boolean
55
- createdAt:
56
- type: string
57
- format: date-time
58
- updatedAt:
59
- type: string
60
- format: date-time
266
+ $ref: '#/components/schemas/UserResponse'
61
267
  accessToken:
62
268
  type: string
63
- description: JWT authentication token
269
+ nullable: true
270
+ description: JWT authentication token (null if email verification required)
271
+ requireEmailVerification:
272
+ type: boolean
273
+ description: Whether email verification is required before login
274
+ redirectTo:
275
+ type: string
276
+ format: uri
277
+ description: Optional URL to redirect user after registration (only present if email verification not required)
64
278
  '400':
65
279
  description: Invalid request
66
280
  '409':
@@ -74,25 +288,23 @@ paths:
74
288
  security:
75
289
  - bearerAuth: []
76
290
  parameters:
77
- - name: page
291
+ - name: offset
78
292
  in: query
79
293
  schema:
80
- type: integer
81
- default: 1
294
+ type: string
295
+ default: '0'
296
+ description: Number of records to skip
82
297
  - name: limit
83
- in: query
84
- schema:
85
- type: integer
86
- default: 10
87
- - name: search
88
298
  in: query
89
299
  schema:
90
300
  type: string
91
- - name: role
301
+ default: '10'
302
+ description: Maximum number of records to return
303
+ - name: search
92
304
  in: query
93
305
  schema:
94
306
  type: string
95
- enum: [user, admin]
307
+ description: Search by email or name
96
308
  responses:
97
309
  '200':
98
310
  description: List of users
@@ -104,19 +316,7 @@ paths:
104
316
  data:
105
317
  type: array
106
318
  items:
107
- type: object
108
- properties:
109
- id:
110
- type: string
111
- email:
112
- type: string
113
- name:
114
- type: string
115
- role:
116
- type: string
117
- created_at:
118
- type: string
119
- format: date-time
319
+ $ref: '#/components/schemas/UserResponse'
120
320
  pagination:
121
321
  type: object
122
322
  properties:
@@ -168,6 +368,38 @@ paths:
168
368
  '403':
169
369
  description: Forbidden - Admin only
170
370
 
371
+ /api/auth/users/{userId}:
372
+ get:
373
+ summary: Get specific user
374
+ description: Get user details by ID (admin only)
375
+ tags:
376
+ - Admin
377
+ security:
378
+ - bearerAuth: []
379
+ parameters:
380
+ - name: userId
381
+ in: path
382
+ required: true
383
+ schema:
384
+ type: string
385
+ format: uuid
386
+ description: User ID
387
+ responses:
388
+ '200':
389
+ description: User details
390
+ content:
391
+ application/json:
392
+ schema:
393
+ $ref: '#/components/schemas/UserResponse'
394
+ '400':
395
+ description: Invalid user ID format
396
+ '401':
397
+ description: Unauthorized
398
+ '403':
399
+ description: Forbidden - Admin only
400
+ '404':
401
+ description: User not found
402
+
171
403
  /api/auth/sessions:
172
404
  post:
173
405
  summary: User login
@@ -198,32 +430,22 @@ paths:
198
430
  type: object
199
431
  properties:
200
432
  user:
201
- type: object
202
- properties:
203
- id:
204
- type: string
205
- format: uuid
206
- email:
207
- type: string
208
- name:
209
- type: string
210
- emailVerified:
211
- type: boolean
212
- createdAt:
213
- type: string
214
- format: date-time
215
- updatedAt:
216
- type: string
217
- format: date-time
433
+ $ref: '#/components/schemas/UserResponse'
218
434
  accessToken:
219
435
  type: string
436
+ redirectTo:
437
+ type: string
438
+ format: uri
439
+ description: Optional URL to redirect user after login (if configured)
220
440
  '401':
221
441
  description: Invalid credentials
442
+ '403':
443
+ description: Email verification required
222
444
 
223
445
  /api/auth/sessions/current:
224
446
  get:
225
447
  summary: Get current user
226
- description: Returns the currently authenticated user
448
+ description: Returns the currently authenticated user's basic info from JWT token
227
449
  tags:
228
450
  - Client
229
451
  security:
@@ -241,12 +463,13 @@ paths:
241
463
  properties:
242
464
  id:
243
465
  type: string
466
+ format: uuid
244
467
  email:
245
468
  type: string
246
- name:
247
- type: string
469
+ format: email
248
470
  role:
249
471
  type: string
472
+ enum: [authenticated, project_admin]
250
473
  '401':
251
474
  description: Unauthorized
252
475
 
@@ -279,20 +502,10 @@ paths:
279
502
  schema:
280
503
  type: object
281
504
  properties:
505
+ user:
506
+ $ref: '#/components/schemas/UserResponse'
282
507
  accessToken:
283
508
  type: string
284
- user:
285
- type: object
286
- properties:
287
- id:
288
- type: string
289
- email:
290
- type: string
291
- name:
292
- type: string
293
- role:
294
- type: string
295
- enum: [admin]
296
509
  '401':
297
510
  description: Invalid credentials
298
511
  '403':
@@ -325,28 +538,11 @@ paths:
325
538
  schema:
326
539
  type: object
327
540
  properties:
541
+ user:
542
+ $ref: '#/components/schemas/UserResponse'
328
543
  accessToken:
329
544
  type: string
330
545
  description: Internal JWT for admin authentication
331
- user:
332
- type: object
333
- properties:
334
- id:
335
- type: string
336
- format: uuid
337
- email:
338
- type: string
339
- name:
340
- type: string
341
- example: Administrator
342
- emailVerified:
343
- type: boolean
344
- createdAt:
345
- type: string
346
- format: date-time
347
- updatedAt:
348
- type: string
349
- format: date-time
350
546
  '400':
351
547
  description: Invalid authorization code or JWT verification failed
352
548
  content:
@@ -359,7 +555,7 @@ paths:
359
555
  summary: Generate anonymous token
360
556
  description: Generate a non-expiring anonymous JWT token for public API access (admin only)
361
557
  tags:
362
- - Client
558
+ - Admin
363
559
  security:
364
560
  - bearerAuth: []
365
561
  responses:
@@ -383,67 +579,484 @@ paths:
383
579
  '403':
384
580
  description: Forbidden - admin access required
385
581
 
386
- /api/auth/oauth/google:
387
- get:
388
- summary: Initiate Google OAuth flow
582
+ /api/auth/email/send-verification:
583
+ post:
584
+ summary: Send email verification (code or link based on config)
585
+ description: Send email verification using the method configured in auth settings (verifyEmailMethod). When method is 'code', sends a 6-digit numeric code. When method is 'link', sends a magic link. Prevents user enumeration by returning success even if email doesn't exist.
389
586
  tags:
390
587
  - Client
391
- parameters:
392
- - name: redirect_uri
393
- in: query
394
- schema:
395
- type: string
396
- format: uri
397
- description: URL to redirect after authentication
588
+ requestBody:
589
+ required: true
590
+ content:
591
+ application/json:
592
+ schema:
593
+ type: object
594
+ required:
595
+ - email
596
+ properties:
597
+ email:
598
+ type: string
599
+ format: email
600
+ example: user@example.com
398
601
  responses:
399
- '302':
400
- description: Redirect to Google OAuth
401
- '500':
402
- description: OAuth not configured
602
+ '202':
603
+ description: Verification email sent (if email exists). Message varies based on configured method.
604
+ content:
605
+ application/json:
606
+ schema:
607
+ type: object
608
+ properties:
609
+ success:
610
+ type: boolean
611
+ message:
612
+ type: string
613
+ example: "If your email is registered, we have sent you a verification code/link. Please check your inbox."
614
+ '400':
615
+ description: Invalid request
403
616
 
404
- /api/auth/oauth/github:
405
- get:
406
- summary: Initiate GitHub OAuth flow
617
+ /api/auth/email/verify:
618
+ post:
619
+ summary: Verify email with code or link
620
+ description: |
621
+ Verify email address using the method configured in auth settings (verifyEmailMethod):
622
+ - Code verification: Provide both `email` and `otp` (6-digit numeric code)
623
+ - Link verification: Provide only `otp` (64-character hex token from magic link)
624
+
625
+ Successfully verified users will receive a session token.
626
+
627
+ The email verification link sent to users always points to the backend API endpoint.
628
+ If `verifyEmailRedirectTo` is configured, the backend will redirect to that URL after successful verification.
629
+ Otherwise, a default success page is displayed.
407
630
  tags:
408
631
  - Client
409
- parameters:
410
- - name: redirect_uri
411
- in: query
412
- schema:
413
- type: string
414
- format: uri
415
- description: URL to redirect after authentication
632
+ requestBody:
633
+ required: true
634
+ content:
635
+ application/json:
636
+ schema:
637
+ type: object
638
+ required:
639
+ - otp
640
+ properties:
641
+ email:
642
+ type: string
643
+ format: email
644
+ description: Required for numeric code verification, omit for magic link verification
645
+ example: user@example.com
646
+ otp:
647
+ type: string
648
+ description: Either a 6-digit numeric code or a 64-character hex token from magic link
649
+ example: "123456"
416
650
  responses:
417
- '302':
418
- description: Redirect to GitHub OAuth
419
- '500':
420
- description: OAuth not configured
651
+ '200':
652
+ description: Email verified successfully, session created
653
+ content:
654
+ application/json:
655
+ schema:
656
+ type: object
657
+ properties:
658
+ user:
659
+ $ref: '#/components/schemas/UserResponse'
660
+ accessToken:
661
+ type: string
662
+ description: JWT authentication token
663
+ redirectTo:
664
+ type: string
665
+ format: uri
666
+ description: Optional URL to redirect user after verification (only present if configured)
667
+ '400':
668
+ description: Invalid verification code or token
669
+ '401':
670
+ description: Verification code/token expired or invalid
421
671
 
422
- /api/auth/oauth/shared/callback:
423
- get:
424
- summary: Shared OAuth callback handler
425
- description: Handles OAuth callbacks from all providers
672
+ /api/auth/email/send-reset-password:
673
+ post:
674
+ summary: Send password reset (code or link based on config)
675
+ description: Send password reset email using the method configured in auth settings (resetPasswordMethod). When method is 'code', sends a 6-digit numeric code for two-step flow. When method is 'link', sends a magic link. Prevents user enumeration by returning success even if email doesn't exist.
426
676
  tags:
427
677
  - Client
428
- parameters:
429
- - name: code
430
- in: query
431
- schema:
432
- type: string
433
- description: Authorization code from OAuth provider
434
- - name: state
435
- in: query
678
+ requestBody:
679
+ required: true
680
+ content:
681
+ application/json:
682
+ schema:
683
+ type: object
684
+ required:
685
+ - email
686
+ properties:
687
+ email:
688
+ type: string
689
+ format: email
690
+ example: user@example.com
691
+ responses:
692
+ '202':
693
+ description: Password reset email sent (if email exists). Message varies based on configured method.
694
+ content:
695
+ application/json:
696
+ schema:
697
+ type: object
698
+ properties:
699
+ success:
700
+ type: boolean
701
+ message:
702
+ type: string
703
+ example: "If your email is registered, we have sent you a password reset code/link. Please check your inbox."
704
+ '400':
705
+ description: Invalid request
706
+
707
+ /api/auth/email/exchange-reset-password-token:
708
+ post:
709
+ summary: Exchange reset password code for reset token
710
+ description: |
711
+ Step 1 of two-step password reset flow (only used when resetPasswordMethod is 'code'):
712
+ 1. Verify the 6-digit code sent to user's email
713
+ 2. Return a reset token that can be used to actually reset the password
714
+
715
+ This endpoint is not used when resetPasswordMethod is 'link' (magic link flow is direct).
716
+ tags:
717
+ - Client
718
+ requestBody:
719
+ required: true
720
+ content:
721
+ application/json:
722
+ schema:
723
+ type: object
724
+ required:
725
+ - email
726
+ - code
727
+ properties:
728
+ email:
729
+ type: string
730
+ format: email
731
+ example: user@example.com
732
+ code:
733
+ type: string
734
+ description: 6-digit numeric code from email
735
+ example: "123456"
736
+ responses:
737
+ '200':
738
+ description: Code verified successfully, reset token returned
739
+ content:
740
+ application/json:
741
+ schema:
742
+ type: object
743
+ properties:
744
+ token:
745
+ type: string
746
+ description: Reset token to be used in reset-password endpoint
747
+ expiresAt:
748
+ type: string
749
+ format: date-time
750
+ description: Token expiration timestamp
751
+ '400':
752
+ description: Invalid request
753
+ '401':
754
+ description: Invalid or expired code
755
+
756
+ /api/auth/email/reset-password:
757
+ post:
758
+ summary: Reset password with token
759
+ description: |
760
+ Reset user password with a token. The token can be:
761
+ - Magic link token (64-character hex token from send-reset-password when method is 'link')
762
+ - Reset token (from exchange-reset-password-token after code verification when method is 'code')
763
+
764
+ Both token types use RESET_PASSWORD purpose and are verified the same way.
765
+
766
+ Flow summary:
767
+ - Code method: send-reset-password → exchange-reset-password-token → reset-password (with resetToken)
768
+ - Link method: send-reset-password → reset-password (with link token directly)
769
+ tags:
770
+ - Client
771
+ requestBody:
772
+ required: true
773
+ content:
774
+ application/json:
775
+ schema:
776
+ type: object
777
+ required:
778
+ - newPassword
779
+ - otp
780
+ properties:
781
+ newPassword:
782
+ type: string
783
+ description: New password meeting configured requirements
784
+ example: newSecurePassword123
785
+ otp:
786
+ type: string
787
+ description: Reset token (either from magic link or from exchange-reset-password-token endpoint)
788
+ example: "a1b2c3d4..."
789
+ responses:
790
+ '200':
791
+ description: Password reset successfully
792
+ content:
793
+ application/json:
794
+ schema:
795
+ type: object
796
+ properties:
797
+ message:
798
+ type: string
799
+ example: "Password reset successfully"
800
+ '400':
801
+ description: Invalid request or password requirements not met
802
+ '401':
803
+ description: Verification code/token expired or invalid
804
+
805
+ /api/auth/oauth/configs:
806
+ get:
807
+ summary: List all OAuth configurations
808
+ description: Get all configured OAuth providers (admin only)
809
+ tags:
810
+ - Admin
811
+ security:
812
+ - bearerAuth: []
813
+ responses:
814
+ '200':
815
+ description: List of OAuth configurations
816
+ content:
817
+ application/json:
818
+ schema:
819
+ type: object
820
+ properties:
821
+ data:
822
+ type: array
823
+ items:
824
+ $ref: '#/components/schemas/OAuthConfig'
825
+ count:
826
+ type: integer
827
+ '401':
828
+ description: Unauthorized
829
+ '403':
830
+ description: Forbidden - Admin only
831
+
832
+ post:
833
+ summary: Create OAuth configuration
834
+ description: Create a new OAuth provider configuration (admin only)
835
+ tags:
836
+ - Admin
837
+ security:
838
+ - bearerAuth: []
839
+ requestBody:
840
+ required: true
841
+ content:
842
+ application/json:
843
+ schema:
844
+ type: object
845
+ required:
846
+ - provider
847
+ properties:
848
+ provider:
849
+ type: string
850
+ enum: [google, github, discord, linkedin, facebook, microsoft]
851
+ clientId:
852
+ type: string
853
+ clientSecret:
854
+ type: string
855
+ redirectUri:
856
+ type: string
857
+ scopes:
858
+ type: array
859
+ items:
860
+ type: string
861
+ useSharedKey:
862
+ type: boolean
863
+ responses:
864
+ '200':
865
+ description: OAuth configuration created
866
+ content:
867
+ application/json:
868
+ schema:
869
+ $ref: '#/components/schemas/OAuthConfig'
870
+ '400':
871
+ description: Invalid request
872
+ '401':
873
+ description: Unauthorized
874
+ '403':
875
+ description: Forbidden - Admin only
876
+
877
+ /api/auth/oauth/{provider}/config:
878
+ get:
879
+ summary: Get OAuth configuration for specific provider
880
+ description: Get OAuth configuration including client secret (admin only)
881
+ tags:
882
+ - Admin
883
+ security:
884
+ - bearerAuth: []
885
+ parameters:
886
+ - name: provider
887
+ in: path
888
+ required: true
436
889
  schema:
437
890
  type: string
438
- description: JWT encoded state with provider and redirect URL
439
- - name: token
891
+ enum: [google, github, discord, linkedin, facebook, microsoft]
892
+ responses:
893
+ '200':
894
+ description: OAuth configuration
895
+ content:
896
+ application/json:
897
+ schema:
898
+ allOf:
899
+ - $ref: '#/components/schemas/OAuthConfig'
900
+ - type: object
901
+ properties:
902
+ clientSecret:
903
+ type: string
904
+ '401':
905
+ description: Unauthorized
906
+ '403':
907
+ description: Forbidden - Admin only
908
+ '404':
909
+ description: Configuration not found
910
+
911
+ put:
912
+ summary: Update OAuth configuration
913
+ description: Update OAuth provider configuration (admin only)
914
+ tags:
915
+ - Admin
916
+ security:
917
+ - bearerAuth: []
918
+ parameters:
919
+ - name: provider
920
+ in: path
921
+ required: true
922
+ schema:
923
+ type: string
924
+ enum: [google, github, discord, linkedin, facebook, microsoft]
925
+ requestBody:
926
+ required: true
927
+ content:
928
+ application/json:
929
+ schema:
930
+ type: object
931
+ properties:
932
+ clientId:
933
+ type: string
934
+ clientSecret:
935
+ type: string
936
+ redirectUri:
937
+ type: string
938
+ scopes:
939
+ type: array
940
+ items:
941
+ type: string
942
+ useSharedKey:
943
+ type: boolean
944
+ responses:
945
+ '200':
946
+ description: Configuration updated
947
+ content:
948
+ application/json:
949
+ schema:
950
+ $ref: '#/components/schemas/OAuthConfig'
951
+ '400':
952
+ description: Invalid request
953
+ '401':
954
+ description: Unauthorized
955
+ '403':
956
+ description: Forbidden - Admin only
957
+ '404':
958
+ description: Configuration not found
959
+
960
+ delete:
961
+ summary: Delete OAuth configuration
962
+ description: Delete OAuth provider configuration (admin only)
963
+ tags:
964
+ - Admin
965
+ security:
966
+ - bearerAuth: []
967
+ parameters:
968
+ - name: provider
969
+ in: path
970
+ required: true
971
+ schema:
972
+ type: string
973
+ enum: [google, github, discord, linkedin, facebook, microsoft]
974
+ responses:
975
+ '200':
976
+ description: Configuration deleted
977
+ content:
978
+ application/json:
979
+ schema:
980
+ type: object
981
+ properties:
982
+ success:
983
+ type: boolean
984
+ message:
985
+ type: string
986
+ '401':
987
+ description: Unauthorized
988
+ '403':
989
+ description: Forbidden - Admin only
990
+ '404':
991
+ description: Configuration not found
992
+
993
+ /api/auth/oauth/{provider}:
994
+ get:
995
+ summary: Initiate OAuth flow
996
+ description: Generate OAuth authorization URL for any supported provider
997
+ tags:
998
+ - Client
999
+ parameters:
1000
+ - name: provider
1001
+ in: path
1002
+ required: true
1003
+ schema:
1004
+ type: string
1005
+ enum: [google, github, discord, linkedin, facebook, microsoft]
1006
+ - name: redirect_uri
440
1007
  in: query
1008
+ required: true
441
1009
  schema:
442
1010
  type: string
443
- description: Direct ID token (for Google)
1011
+ format: uri
1012
+ description: URL to redirect after authentication
1013
+ responses:
1014
+ '200':
1015
+ description: OAuth authorization URL
1016
+ content:
1017
+ application/json:
1018
+ schema:
1019
+ type: object
1020
+ properties:
1021
+ authUrl:
1022
+ type: string
1023
+ format: uri
1024
+ '400':
1025
+ description: Invalid request or provider not supported
1026
+ '500':
1027
+ description: OAuth not configured
1028
+
1029
+ /api/auth/oauth/shared/callback/{state}:
1030
+ get:
1031
+ summary: Shared OAuth callback handler
1032
+ description: Handles OAuth callbacks from InsForge Cloud shared OAuth
1033
+ tags:
1034
+ - Client
1035
+ parameters:
1036
+ - name: state
1037
+ in: path
1038
+ required: true
1039
+ schema:
1040
+ type: string
1041
+ description: JWT state parameter
1042
+ - name: success
1043
+ in: query
1044
+ schema:
1045
+ type: string
1046
+ description: Success flag
1047
+ - name: error
1048
+ in: query
1049
+ schema:
1050
+ type: string
1051
+ description: Error message
1052
+ - name: payload
1053
+ in: query
1054
+ schema:
1055
+ type: string
1056
+ description: Base64 encoded user payload
444
1057
  responses:
445
1058
  '302':
446
- description: Redirect with access token and user info in query params
1059
+ description: Redirect to application with access token or error
447
1060
  headers:
448
1061
  Location:
449
1062
  schema:
@@ -453,7 +1066,7 @@ paths:
453
1066
  /api/auth/oauth/{provider}/callback:
454
1067
  get:
455
1068
  summary: Provider-specific OAuth callback
456
- description: Alternative callback endpoint for specific providers
1069
+ description: OAuth callback endpoint for provider-specific flows
457
1070
  tags:
458
1071
  - Client
459
1072
  parameters:
@@ -462,22 +1075,32 @@ paths:
462
1075
  required: true
463
1076
  schema:
464
1077
  type: string
465
- enum: [google, github]
1078
+ enum: [google, github, discord, linkedin, facebook, microsoft]
466
1079
  - name: code
467
1080
  in: query
468
1081
  schema:
469
1082
  type: string
1083
+ description: Authorization code from OAuth provider
470
1084
  - name: state
471
1085
  in: query
1086
+ required: true
472
1087
  schema:
473
1088
  type: string
1089
+ description: JWT state with redirect URI
474
1090
  - name: token
475
1091
  in: query
476
1092
  schema:
477
1093
  type: string
1094
+ description: Direct ID token (for some providers)
478
1095
  responses:
479
1096
  '302':
480
- description: Redirect with access token
1097
+ description: Redirect to application with access token
1098
+ headers:
1099
+ Location:
1100
+ schema:
1101
+ type: string
1102
+ format: uri
1103
+ description: Redirect URL with access_token, user_id, email, and name query params
481
1104
 
482
1105
  components:
483
1106
  securitySchemes:
@@ -489,8 +1112,66 @@ components:
489
1112
  type: apiKey
490
1113
  in: header
491
1114
  name: x-api-key
492
-
1115
+
493
1116
  schemas:
1117
+ UserResponse:
1118
+ type: object
1119
+ properties:
1120
+ id:
1121
+ type: string
1122
+ format: uuid
1123
+ email:
1124
+ type: string
1125
+ format: email
1126
+ name:
1127
+ type: string
1128
+ emailVerified:
1129
+ type: boolean
1130
+ identities:
1131
+ type: array
1132
+ items:
1133
+ type: object
1134
+ properties:
1135
+ provider:
1136
+ type: string
1137
+ providerType:
1138
+ type: string
1139
+ createdAt:
1140
+ type: string
1141
+ format: date-time
1142
+ updatedAt:
1143
+ type: string
1144
+ format: date-time
1145
+
1146
+ OAuthConfig:
1147
+ type: object
1148
+ properties:
1149
+ id:
1150
+ type: string
1151
+ format: uuid
1152
+ provider:
1153
+ type: string
1154
+ enum: [google, github, discord, linkedin, facebook, microsoft]
1155
+ clientId:
1156
+ type: string
1157
+ nullable: true
1158
+ redirectUri:
1159
+ type: string
1160
+ nullable: true
1161
+ scopes:
1162
+ type: array
1163
+ items:
1164
+ type: string
1165
+ nullable: true
1166
+ useSharedKey:
1167
+ type: boolean
1168
+ createdAt:
1169
+ type: string
1170
+ format: date-time
1171
+ updatedAt:
1172
+ type: string
1173
+ format: date-time
1174
+
494
1175
  AuthRecord:
495
1176
  type: object
496
1177
  properties:
@@ -509,7 +1190,7 @@ components:
509
1190
  updatedAt:
510
1191
  type: string
511
1192
  format: date-time
512
-
1193
+
513
1194
  ProfileRecord:
514
1195
  type: object
515
1196
  properties:
@@ -537,7 +1218,7 @@ components:
537
1218
  updatedAt:
538
1219
  type: string
539
1220
  format: date-time
540
-
1221
+
541
1222
  ErrorResponse:
542
1223
  type: object
543
1224
  required:
@@ -560,4 +1241,4 @@ components:
560
1241
  nextActions:
561
1242
  type: string
562
1243
  description: Suggested action to resolve the error
563
- example: "Please use a different email address"
1244
+ example: "Please use a different email address"