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
@@ -1,39 +0,0 @@
1
- import { createRemoteJWKSet, JWTPayload, jwtVerify } from 'jose';
2
- import { AppError } from '@/api/middleware/error.js';
3
- import { ERROR_CODES, NEXT_ACTION } from '@/types/error-constants.js';
4
-
5
- /**
6
- * Helper function to verify cloud backend JWT token
7
- * Validates JWT tokens from api.insforge.dev using JWKS
8
- */
9
- export async function verifyCloudToken(
10
- token: string
11
- ): Promise<{ projectId: string; payload: JWTPayload }> {
12
- // Create JWKS endpoint for remote key set
13
- const JWKS = createRemoteJWKSet(
14
- new URL((process.env.CLOUD_API_HOST || 'https://api.insforge.dev') + '/.well-known/jwks.json')
15
- );
16
-
17
- // Verify the token with jose
18
- const { payload } = await jwtVerify(token, JWKS, {
19
- algorithms: ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512'],
20
- });
21
-
22
- // Verify project_id matches if configured
23
- const tokenProjectId = payload['projectId'] as string;
24
- const expectedProjectId = process.env.PROJECT_ID;
25
-
26
- if (expectedProjectId && tokenProjectId !== expectedProjectId) {
27
- throw new AppError(
28
- 'Project ID mismatch',
29
- 403,
30
- ERROR_CODES.AUTH_UNAUTHORIZED,
31
- NEXT_ACTION.CHECK_TOKEN
32
- );
33
- }
34
-
35
- return {
36
- projectId: tokenProjectId || expectedProjectId || 'local',
37
- payload,
38
- };
39
- }
@@ -1,49 +0,0 @@
1
- import { ColumnType } from '@insforge/shared-schemas';
2
-
3
- export const convertSqlTypeToColumnType = (sqlType: string): ColumnType | string => {
4
- switch (sqlType.toLowerCase()) {
5
- case 'uuid':
6
- return ColumnType.UUID;
7
- case 'timestamptz':
8
- case 'timestamp with time zone':
9
- return ColumnType.DATETIME;
10
- case 'date':
11
- return ColumnType.DATE;
12
- case 'integer':
13
- case 'bigint':
14
- case 'smallint':
15
- case 'int':
16
- case 'int2':
17
- case 'int4':
18
- case 'serial':
19
- case 'serial2':
20
- case 'serial4':
21
- case 'serial8':
22
- case 'smallserial':
23
- case 'bigserial':
24
- return ColumnType.INTEGER;
25
- case 'double precision':
26
- case 'real':
27
- case 'numeric':
28
- case 'float':
29
- case 'float4':
30
- case 'float8':
31
- case 'decimal':
32
- return ColumnType.FLOAT;
33
- case 'boolean':
34
- case 'bool':
35
- return ColumnType.BOOLEAN;
36
- case 'json':
37
- case 'jsonb':
38
- case 'array':
39
- return ColumnType.JSON;
40
- case 'text':
41
- case 'varchar':
42
- case 'char':
43
- case 'character varying':
44
- case 'character':
45
- return ColumnType.STRING;
46
- default:
47
- return sqlType.slice(0, 5);
48
- }
49
- };
@@ -1,9 +0,0 @@
1
- import crypto from 'crypto';
2
-
3
- /**
4
- * Generate a UUID v4
5
- * @returns A UUID v4 string
6
- */
7
- export function generateUUID(): string {
8
- return crypto.randomUUID();
9
- }
@@ -1,303 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Better Auth test script
4
- # Tests the Better Auth v2 endpoints including admin functionality
5
-
6
- # Get the directory where this script is located
7
- SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
8
-
9
- # Test configuration
10
- TEST_API_BASE="${TEST_API_BASE:-http://localhost:7130/api}"
11
- TEST_ADMIN_EMAIL="${TEST_ADMIN_EMAIL:-${ADMIN_EMAIL:-admin@example.com}}"
12
- TEST_ADMIN_PASSWORD="${TEST_ADMIN_PASSWORD:-${ADMIN_PASSWORD:-change-this-password}}"
13
- TEST_USER_EMAIL_PREFIX="${TEST_USER_EMAIL_PREFIX:-testuser_}"
14
-
15
- # Colors for output
16
- RED='\033[0;31m'
17
- GREEN='\033[0;32m'
18
- YELLOW='\033[1;33m'
19
- BLUE='\033[0;34m'
20
- NC='\033[0m' # No Color
21
-
22
- # Utility functions
23
- print_success() {
24
- echo -e "${GREEN}✅ $1${NC}"
25
- }
26
-
27
- print_fail() {
28
- echo -e "${RED}❌ $1${NC}"
29
- }
30
-
31
- print_info() {
32
- echo -e "${YELLOW}$1${NC}"
33
- }
34
-
35
- # Simple cleanup tracking
36
- declare -a TEST_USERS_CREATED=()
37
-
38
- register_test_user() {
39
- local user_email=$1
40
- TEST_USERS_CREATED+=("$user_email")
41
- }
42
-
43
- echo "🧪 Testing Better Auth v2..."
44
-
45
- # Use configuration from test-config.sh
46
- API_BASE="$TEST_API_BASE"
47
- BETTER_AUTH_BASE="${API_BASE}/auth/v2"
48
- ADMIN_TOKEN=""
49
- USER_TOKEN=""
50
-
51
- # Test function
52
- # $1: method, $2: endpoint, $3: data, $4: description, $5: expected status (optional)
53
- test_endpoint() {
54
- local method=$1
55
- local endpoint=$2
56
- local data=$3
57
- local description=$4
58
- local expected_status=${5:-200}
59
- local token=${6:-""}
60
-
61
- print_info "Test: $description"
62
-
63
- local response
64
- if [ "$method" = "GET" ]; then
65
- if [ -n "$token" ]; then
66
- response=$(curl -s -w "\n%{http_code}" -X GET "$endpoint" \
67
- -H "Content-Type: application/json" \
68
- -H "Authorization: Bearer $token")
69
- else
70
- response=$(curl -s -w "\n%{http_code}" -X GET "$endpoint" \
71
- -H "Content-Type: application/json")
72
- fi
73
- elif [ "$method" = "POST" ]; then
74
- if [ -n "$token" ]; then
75
- response=$(curl -s -w "\n%{http_code}" -X POST "$endpoint" \
76
- -H "Content-Type: application/json" \
77
- -H "Authorization: Bearer $token" \
78
- -d "$data")
79
- else
80
- response=$(curl -s -w "\n%{http_code}" -X POST "$endpoint" \
81
- -H "Content-Type: application/json" \
82
- -d "$data")
83
- fi
84
- elif [ "$method" = "DELETE" ]; then
85
- if [ -n "$token" ]; then
86
- response=$(curl -s -w "\n%{http_code}" -X DELETE "$endpoint" \
87
- -H "Content-Type: application/json" \
88
- -H "Authorization: Bearer $token")
89
- else
90
- response=$(curl -s -w "\n%{http_code}" -X DELETE "$endpoint" \
91
- -H "Content-Type: application/json")
92
- fi
93
- fi
94
-
95
- # Split response into body and status code
96
- # Use sed instead of head -n -1 for better compatibility
97
- body=$(echo "$response" | sed '$d')
98
- status=$(echo "$response" | tail -n 1)
99
-
100
- if [ "$status" = "$expected_status" ]; then
101
- print_success "Success ($status)"
102
- if [ -n "$body" ]; then
103
- echo "Response: $body" | head -c 200
104
- echo ""
105
- fi
106
- else
107
- print_fail "Failed - Expected $expected_status, got $status"
108
- echo "Error: $body"
109
- fi
110
- echo ""
111
- }
112
-
113
- echo "=== Admin Authentication Tests ==="
114
- echo ""
115
-
116
- # 1. Test admin sign-in with correct credentials
117
- print_info "1. Admin sign-in with correct credentials"
118
- admin_response=$(curl -s -X POST "$BETTER_AUTH_BASE/admin/sign-in" \
119
- -H "Content-Type: application/json" \
120
- -d "{\"email\":\"$TEST_ADMIN_EMAIL\",\"password\":\"$TEST_ADMIN_PASSWORD\"}")
121
-
122
- if echo "$admin_response" | grep -q '"token"'; then
123
- print_success "Admin sign-in successful"
124
- ADMIN_TOKEN=$(echo "$admin_response" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
125
- admin_user=$(echo "$admin_response" | grep -o '"user":{[^}]*}' || echo "")
126
- echo "Admin info: $admin_user"
127
- else
128
- print_fail "Admin sign-in failed"
129
- echo "Response: $admin_response"
130
- fi
131
- echo ""
132
-
133
- # 2. Test admin sign-in with wrong password
134
- test_endpoint "POST" "$BETTER_AUTH_BASE/admin/sign-in" \
135
- "{\"email\":\"$TEST_ADMIN_EMAIL\",\"password\":\"wrong-password\"}" \
136
- "Admin sign-in with wrong password (should fail)" \
137
- "401"
138
-
139
- # 3. Test admin sign-in with non-admin email
140
- test_endpoint "POST" "$BETTER_AUTH_BASE/admin/sign-in" \
141
- "{\"email\":\"notadmin@example.com\",\"password\":\"$TEST_ADMIN_PASSWORD\"}" \
142
- "Admin sign-in with non-admin email (should fail)" \
143
- "403"
144
-
145
- # 4. Test admin register (should fail - already exists)
146
- test_endpoint "POST" "$BETTER_AUTH_BASE/admin/register" \
147
- "{\"email\":\"$TEST_ADMIN_EMAIL\",\"password\":\"$TEST_ADMIN_PASSWORD\",\"name\":\"Admin\"}" \
148
- "Admin register when already exists (should fail)" \
149
- "409"
150
-
151
- echo "=== Regular User Registration Tests ==="
152
- echo ""
153
-
154
- # 5. Register a regular user
155
- USER_EMAIL="${TEST_USER_EMAIL_PREFIX}betterauth_$(date +%s)@example.com"
156
- USER_PASS="testpass123"
157
- USER_NAME="Better Auth Test User"
158
-
159
- register_test_user "$USER_EMAIL"
160
-
161
- print_info "5. Registering new user: $USER_EMAIL"
162
- register_response=$(curl -s -X POST "$BETTER_AUTH_BASE/sign-up/email" \
163
- -H "Content-Type: application/json" \
164
- -d "{\"email\":\"$USER_EMAIL\",\"password\":\"$USER_PASS\",\"name\":\"$USER_NAME\"}")
165
-
166
- if echo "$register_response" | grep -q '"user"'; then
167
- print_success "User registration successful"
168
- user_info=$(echo "$register_response" | grep -o '"user":{[^}]*}' || echo "")
169
- echo "User info: $user_info"
170
- else
171
- print_fail "User registration failed"
172
- echo "Response: $register_response"
173
- fi
174
- echo ""
175
-
176
- # 6. Sign in as regular user
177
- print_info "6. Sign in as regular user"
178
- signin_response=$(curl -s -X POST "$BETTER_AUTH_BASE/sign-in/email" \
179
- -H "Content-Type: application/json" \
180
- -d "{\"email\":\"$USER_EMAIL\",\"password\":\"$USER_PASS\"}")
181
-
182
- if echo "$signin_response" | grep -q '"token"'; then
183
- print_success "User sign-in successful"
184
- USER_TOKEN=$(echo "$signin_response" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
185
- else
186
- print_fail "User sign-in failed"
187
- echo "Response: $signin_response"
188
- fi
189
- echo ""
190
-
191
- # 7. Test duplicate registration
192
- test_endpoint "POST" "$BETTER_AUTH_BASE/sign-up/email" \
193
- "{\"email\":\"$USER_EMAIL\",\"password\":\"$USER_PASS\",\"name\":\"Duplicate\"}" \
194
- "Duplicate user registration (should fail)" \
195
- "422"
196
-
197
- echo "=== Admin User Management Tests ==="
198
- echo ""
199
-
200
- # 8. List users with admin token
201
- print_info "8. List all users (admin only)"
202
- if [ -n "$ADMIN_TOKEN" ]; then
203
- users_response=$(curl -s -X GET "$BETTER_AUTH_BASE/admin/users" \
204
- -H "Authorization: Bearer $ADMIN_TOKEN")
205
-
206
- if echo "$users_response" | grep -q '"users"'; then
207
- print_success "List users successful"
208
- user_count=$(echo "$users_response" | grep -o '"total":[0-9]*' | cut -d':' -f2 || echo "0")
209
- echo "Total non-admin users: $user_count"
210
-
211
- # Verify admin is not in the list
212
- if echo "$users_response" | grep -q "$TEST_ADMIN_EMAIL"; then
213
- print_fail "Admin user should not be in regular user list!"
214
- else
215
- print_success "Admin correctly excluded from user list"
216
- fi
217
- else
218
- print_fail "List users failed"
219
- echo "Response: $users_response"
220
- fi
221
- else
222
- print_fail "No admin token available"
223
- fi
224
- echo ""
225
-
226
- # 9. List users with pagination
227
- test_endpoint "GET" "$BETTER_AUTH_BASE/admin/users?limit=5&offset=0" \
228
- "" \
229
- "List users with pagination (limit=5)" \
230
- "200" \
231
- "$ADMIN_TOKEN"
232
-
233
- # 10. Try to access admin endpoint without token
234
- test_endpoint "GET" "$BETTER_AUTH_BASE/admin/users" \
235
- "" \
236
- "Access admin endpoint without token (should fail)" \
237
- "401"
238
-
239
- # 11. Try to access admin endpoint with regular user token
240
- if [ -n "$USER_TOKEN" ]; then
241
- test_endpoint "GET" "$BETTER_AUTH_BASE/admin/users" \
242
- "" \
243
- "Access admin endpoint with regular user token (should fail)" \
244
- "401" \
245
- "$USER_TOKEN"
246
- fi
247
-
248
- echo "=== Token Verification Tests ==="
249
- echo ""
250
-
251
- # 12. Verify admin JWT claims
252
- if [ -n "$ADMIN_TOKEN" ]; then
253
- print_info "12. Verifying admin JWT claims"
254
- # Decode JWT payload (base64 decode the middle part)
255
- payload=$(echo "$ADMIN_TOKEN" | cut -d'.' -f2 | base64 -d 2>/dev/null || echo "")
256
-
257
- if echo "$payload" | grep -q '"role":"project_admin"'; then
258
- print_success "Admin token has correct role claim"
259
- else
260
- print_fail "Admin token missing project_admin role"
261
- fi
262
-
263
- if echo "$payload" | grep -q '"type":"admin"'; then
264
- print_success "Admin token has correct type claim"
265
- else
266
- print_fail "Admin token missing admin type"
267
- fi
268
- fi
269
-
270
- # 13. Note about regular user tokens
271
- if [ -n "$USER_TOKEN" ]; then
272
- print_info "13. Regular user tokens"
273
- print_success "Regular users receive session tokens (not JWTs)"
274
- echo "Token format: $USER_TOKEN" | cut -c1-50
275
- echo "..."
276
- fi
277
-
278
- echo ""
279
- echo "=== Additional Better Auth Tests ==="
280
- echo ""
281
-
282
- # 17. Test error handling
283
- test_endpoint "POST" "$BETTER_AUTH_BASE/sign-in/email" \
284
- "{\"email\":\"invalid-email\",\"password\":\"pass\"}" \
285
- "Sign in with invalid email format" \
286
- "400"
287
-
288
- test_endpoint "POST" "$BETTER_AUTH_BASE/sign-up/email" \
289
- "{\"email\":\"test@example.com\"}" \
290
- "Register without password" \
291
- "500"
292
-
293
- echo ""
294
- print_success "🎉 Better Auth test completed!"
295
-
296
- # Simple cleanup
297
- if [ ${#TEST_USERS_CREATED[@]} -gt 0 ]; then
298
- print_info "Test users created: ${#TEST_USERS_CREATED[@]}"
299
- print_info "Manual cleanup may be required for test users"
300
- fi
301
-
302
- echo ""
303
- print_info "Test completed!"
@@ -1,9 +0,0 @@
1
- \set pguser `echo "$POSTGRES_USER"`
2
-
3
- CREATE DATABASE _insforge WITH OWNER :pguser;
4
-
5
- \c _insforge
6
- create schema if not exists _analytics;
7
- alter schema _analytics owner to :pguser;
8
-
9
- \c insforge
@@ -1,112 +0,0 @@
1
- # Insforge Dashboard
2
-
3
- A React-based admin dashboard for managing Insforge projects and databases.
4
-
5
- ## Features
6
-
7
- - **Dashboard Overview**: System statistics and project overview
8
- - **Project Management**: Create, view, and delete projects
9
- - **Database Viewer**: Browse tables, schemas, and data
10
- - **API Key Management**: Copy and manage project API keys
11
- - **User Authentication**: Secure admin login
12
-
13
- ## Development
14
-
15
- ```bash
16
- # Install dependencies
17
- npm install
18
-
19
- # Start development server (runs on port 7131)
20
- npm run dev
21
-
22
- # Build for production
23
- npm run build
24
- ```
25
-
26
- ## Built With
27
-
28
- - **React 18** - UI Framework
29
- - **TypeScript** - Type safety
30
- - **Tailwind CSS** - Styling
31
- - **Vite** - Build tool
32
- - **React Router** - Navigation
33
- - **Lucide React** - Icons
34
-
35
- ## API Integration
36
-
37
- The dashboard communicates with the Insforge backend via REST API:
38
-
39
- ### Authentication
40
- - `POST /api/auth/register` - User registration
41
- - `POST /api/auth/login` - User login (email/password)
42
- - `GET /api/auth/me` - Get current user info
43
- - `GET /api/auth/users` - List all users (admin only)
44
-
45
- ### Database Management
46
- - `GET /api/database/tables` - List all tables
47
- - `POST /api/database/tables` - Create new table with schema
48
- - `DELETE /api/database/tables/:tablename` - Delete table
49
- - `GET /api/database/tables/:tablename/schema` - Get table schema
50
- - `PATCH /api/database/tables/:tablename/schema` - Modify table schema
51
-
52
- ### Record Operations
53
- - `GET /api/database/records/:tablename` - Query records (supports pagination)
54
- - `POST /api/database/records/:tablename` - Insert records
55
- - `PATCH /api/database/records/:tablename?id=eq.:id` - Update specific record
56
- - `DELETE /api/database/records/:tablename?id=eq.:id` - Delete specific record
57
-
58
- ### Storage
59
- - `GET /api/storage/buckets` - List all buckets
60
- - `POST /api/storage/buckets` - Create new bucket
61
- - `PATCH /api/storage/buckets/:bucketName` - Update bucket
62
- - `DELETE /api/storage/buckets/:bucketName` - Delete bucket
63
- - `GET /api/storage/buckets/:bucketName/objects` - List objects in bucket
64
- - `PUT /api/storage/buckets/:bucketName/objects/:objectKey` - Upload object with specific key
65
- - `POST /api/storage/buckets/:bucketName/objects` - Upload object with auto-generated key
66
- - `GET /api/storage/buckets/:bucketName/objects/:objectKey` - Download object
67
- - `DELETE /api/storage/buckets/:bucketName/objects/:objectKey` - Delete object
68
-
69
- ### Metadata & Logs
70
- - `GET /api/metadata` - Get system metadata and statistics
71
- - `GET /api/logs` - Get activity logs (admin only)
72
-
73
- ## Project Structure
74
-
75
- ```
76
- frontend/
77
- ├── src/
78
- │ ├── components/ # Reusable UI components
79
- │ │ ├── layout/ # Layout components
80
- │ │ └── table/ # Table components
81
- │ ├── features/ # Feature modules
82
- │ │ ├── auth/ # Authentication (login, users)
83
- │ │ ├── dashboard/ # Dashboard & metadata
84
- │ │ ├── database/ # Database management
85
- │ │ ├── logs/ # Activity logs
86
- │ │ └── storage/ # File storage
87
- │ ├── lib/ # Utilities and API client
88
- │ │ └── api/ # API client configuration
89
- │ ├── types/ # TypeScript type definitions
90
- │ ├── App.tsx # Main app component
91
- │ └── main.tsx # Entry point
92
- ├── public/ # Static assets
93
- ├── index.html # HTML template
94
- ├── vite.config.ts # Vite configuration
95
- └── package.json # Dependencies
96
- ```
97
-
98
- ## Usage
99
-
100
- 1. Start the Insforge backend server
101
- 2. Navigate to `http://localhost:7130` in your browser (production) or `http://localhost:7131` (development)
102
- 3. Login with your admin credentials (from .env file)
103
- 4. Create tables and manage data
104
-
105
- ### Key Features
106
- - **Table Management**: Create tables with explicit schemas defining column types
107
- - **Data Types**: Support for string, integer, float, boolean, datetime, json, uuid, and file types
108
- - **Auto-generated Fields**: Every table gets id, created_at, and updated_at fields
109
- - **Record Management**: Full CRUD operations with pagination support
110
- - **API Key**: Single API key for all database operations (displayed in dashboard)
111
-
112
- The dashboard is automatically served by the backend when you access the root URL.
@@ -1,20 +0,0 @@
1
- export type {
2
- Column,
3
- SortColumn,
4
- RenderCellProps,
5
- RenderEditCellProps,
6
- RenderHeaderCellProps,
7
- CellClickArgs,
8
- CellMouseEvent,
9
- } from 'react-data-grid';
10
- export * from './datagridTypes';
11
-
12
- import IdCell from './IdCell';
13
- import SortableHeaderRenderer from './SortableHeader';
14
- import { createDefaultCellRenderer } from './DefaultCellRenderer';
15
- import DataGrid, { type DataGridProps } from './DataGrid';
16
-
17
- export { IdCell, SortableHeaderRenderer, DataGrid, type DataGridProps, createDefaultCellRenderer };
18
-
19
- // Export cell editors
20
- export * from './cell-editors';
@@ -1,95 +0,0 @@
1
- import { useEffect } from 'react';
2
- import { useNavigate, useLocation } from 'react-router-dom';
3
- import { ThemeProvider } from '@/lib/contexts/ThemeContext';
4
- import { cn } from '@/lib/utils/utils';
5
- import { ServerEvents, useSocket } from '@/lib/contexts/SocketContext';
6
-
7
- interface CloudLayoutProps {
8
- children: React.ReactNode;
9
- }
10
-
11
- interface RouterMessage {
12
- type: 'ROUTE_CHANGE' | 'REFRESH';
13
- path: string;
14
- }
15
-
16
- export default function CloudLayout({ children }: CloudLayoutProps) {
17
- const navigate = useNavigate();
18
- const location = useLocation();
19
- const { socket } = useSocket();
20
-
21
- useEffect(() => {
22
- const handleCloudMessage = (event: MessageEvent) => {
23
- try {
24
- const message = event.data as RouterMessage;
25
-
26
- if (message.type === 'ROUTE_CHANGE' && message.path) {
27
- // Navigate to the corresponding cloud route
28
- void navigate(message.path);
29
- } else if (message.type === 'REFRESH') {
30
- window.location.reload();
31
- }
32
- } catch (error) {
33
- console.error('Error handling router message:', error);
34
- }
35
- };
36
-
37
- // Add event listener for messages from parent window
38
- window.addEventListener('message', handleCloudMessage);
39
-
40
- // Cleanup listener on unmount
41
- return () => {
42
- window.removeEventListener('message', handleCloudMessage);
43
- };
44
- }, [navigate]);
45
-
46
- useEffect(() => {
47
- // Only send messages if we're in an iframe (not the main window)
48
- if (window.parent !== window) {
49
- // Send the current route to the parent cloud application
50
- window.parent.postMessage(
51
- {
52
- type: 'APP_ROUTE_CHANGE',
53
- path: location.pathname,
54
- },
55
- '*'
56
- );
57
- }
58
- }, [location.pathname]);
59
-
60
- // Listen for MCP connection events and forward to parent
61
- useEffect(() => {
62
- if (!socket || window.parent === window) {
63
- return;
64
- }
65
-
66
- const handleMcpConnected = () => {
67
- window.parent.postMessage(
68
- {
69
- type: 'MCP_CONNECTION_STATUS',
70
- connected: true,
71
- },
72
- '*'
73
- );
74
- };
75
-
76
- socket.on(ServerEvents.MCP_CONNECTED, handleMcpConnected);
77
-
78
- return () => {
79
- socket.off(ServerEvents.MCP_CONNECTED, handleMcpConnected);
80
- };
81
- }, [socket]);
82
-
83
- return (
84
- <ThemeProvider forcedTheme="dark">
85
- <div
86
- className={cn(
87
- 'h-screen bg-neutral-800',
88
- location.pathname !== '/cloud/visualizer' && 'pt-13 pl-13'
89
- )}
90
- >
91
- {children}
92
- </div>
93
- </ThemeProvider>
94
- );
95
- }