insforge 0.3.1

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 (395) hide show
  1. package/.dockerignore +58 -0
  2. package/.env.example +49 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.yml +83 -0
  4. package/.github/ISSUE_TEMPLATE/config.yml +11 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.yml +79 -0
  6. package/.github/copilot-instructions.md +147 -0
  7. package/.github/workflows/build-image.yml +65 -0
  8. package/.github/workflows/ci-premerge-check.yml +24 -0
  9. package/.github/workflows/deploy-aws.yml +130 -0
  10. package/.github/workflows/lint-and-format.yml +33 -0
  11. package/.prettierignore +65 -0
  12. package/.prettierrc +9 -0
  13. package/CHANGELOG.md +3 -0
  14. package/CONTRIBUTING.md +126 -0
  15. package/Dockerfile +27 -0
  16. package/GITHUB_OAUTH_SETUP.md +49 -0
  17. package/GOOGLE_OAUTH_SETUP.md +148 -0
  18. package/LICENSE +201 -0
  19. package/README.md +134 -0
  20. package/assets/Dark.svg +23 -0
  21. package/assets/archDiagram.png +0 -0
  22. package/assets/banner.png +0 -0
  23. package/assets/mcpInstallv2.png +0 -0
  24. package/assets/sampleResponse.png +0 -0
  25. package/assets/signin.png +0 -0
  26. package/assets/userflow.png +0 -0
  27. package/backend/migrations/000_create-base-tables.sql +142 -0
  28. package/backend/migrations/001_create-helper-functions.sql +41 -0
  29. package/backend/migrations/002_rename-auth-tables.sql +30 -0
  30. package/backend/migrations/003_create-users-table.sql +56 -0
  31. package/backend/migrations/004_add-reload-postgrest-func.sql +24 -0
  32. package/backend/migrations/005_enable-project-admin-modify-users.sql +30 -0
  33. package/backend/migrations/006_modify-ai-usage-table.sql +25 -0
  34. package/backend/migrations/007_drop-metadata-table.sql +2 -0
  35. package/backend/migrations/008_add-system-tables.sql +77 -0
  36. package/backend/migrations/009_add-function-secrets.sql +24 -0
  37. package/backend/migrations/010_modify-ai-config-modalities.sql +93 -0
  38. package/backend/migrations/011_refactor-secrets-table.sql +15 -0
  39. package/backend/migrations/012_add-storage-uploaded-by.sql +8 -0
  40. package/backend/package.json +75 -0
  41. package/backend/src/api/middleware/auth.ts +240 -0
  42. package/backend/src/api/middleware/error.ts +231 -0
  43. package/backend/src/api/middleware/upload.ts +59 -0
  44. package/backend/src/api/routes/agent.ts +29 -0
  45. package/backend/src/api/routes/ai.ts +472 -0
  46. package/backend/src/api/routes/auth.oauth.ts +482 -0
  47. package/backend/src/api/routes/auth.ts +386 -0
  48. package/backend/src/api/routes/database.advance.ts +275 -0
  49. package/backend/src/api/routes/database.records.ts +246 -0
  50. package/backend/src/api/routes/database.tables.ts +161 -0
  51. package/backend/src/api/routes/docs.ts +66 -0
  52. package/backend/src/api/routes/functions.ts +183 -0
  53. package/backend/src/api/routes/logs.ts +150 -0
  54. package/backend/src/api/routes/metadata.ts +160 -0
  55. package/backend/src/api/routes/openapi.ts +82 -0
  56. package/backend/src/api/routes/secrets.ts +199 -0
  57. package/backend/src/api/routes/storage.ts +547 -0
  58. package/backend/src/api/routes/usage.ts +96 -0
  59. package/backend/src/core/ai/chat.ts +207 -0
  60. package/backend/src/core/ai/client.ts +242 -0
  61. package/backend/src/core/ai/config.ts +187 -0
  62. package/backend/src/core/ai/image.ts +156 -0
  63. package/backend/src/core/ai/model.ts +117 -0
  64. package/backend/src/core/ai/usage.ts +290 -0
  65. package/backend/src/core/auth/auth.ts +781 -0
  66. package/backend/src/core/auth/oauth.ts +398 -0
  67. package/backend/src/core/database/advance.ts +1074 -0
  68. package/backend/src/core/database/manager.ts +178 -0
  69. package/backend/src/core/database/table.ts +772 -0
  70. package/backend/src/core/documentation/agent.ts +689 -0
  71. package/backend/src/core/documentation/openapi.ts +856 -0
  72. package/backend/src/core/functions/functions.ts +310 -0
  73. package/backend/src/core/logs/analytics.ts +76 -0
  74. package/backend/src/core/logs/audit.ts +255 -0
  75. package/backend/src/core/logs/providers/base.provider.ts +83 -0
  76. package/backend/src/core/logs/providers/cloudwatch.provider.ts +510 -0
  77. package/backend/src/core/logs/providers/localdb.provider.ts +246 -0
  78. package/backend/src/core/secrets/encryption.ts +58 -0
  79. package/backend/src/core/secrets/secrets.ts +410 -0
  80. package/backend/src/core/socket/socket.ts +388 -0
  81. package/backend/src/core/socket/types.ts +79 -0
  82. package/backend/src/core/storage/storage.ts +923 -0
  83. package/backend/src/server.ts +288 -0
  84. package/backend/src/types/ai.ts +46 -0
  85. package/backend/src/types/auth.ts +90 -0
  86. package/backend/src/types/database.ts +136 -0
  87. package/backend/src/types/error-constants.ts +86 -0
  88. package/backend/src/types/logs.ts +47 -0
  89. package/backend/src/types/profile.ts +55 -0
  90. package/backend/src/types/storage.ts +23 -0
  91. package/backend/src/utils/cloud-token.ts +39 -0
  92. package/backend/src/utils/constants.ts +1 -0
  93. package/backend/src/utils/environment.ts +35 -0
  94. package/backend/src/utils/helpers.ts +49 -0
  95. package/backend/src/utils/logger.ts +13 -0
  96. package/backend/src/utils/response.ts +62 -0
  97. package/backend/src/utils/seed.ts +205 -0
  98. package/backend/src/utils/sql-parser.ts +63 -0
  99. package/backend/src/utils/uuid.ts +9 -0
  100. package/backend/src/utils/validations.ts +129 -0
  101. package/backend/tests/README.md +134 -0
  102. package/backend/tests/cleanup-all-test-data.sh +231 -0
  103. package/backend/tests/cloud/test-s3-multitenant.sh +132 -0
  104. package/backend/tests/local/comprehensive-curl-tests.sh +156 -0
  105. package/backend/tests/local/test-auth-router.sh +144 -0
  106. package/backend/tests/local/test-database-router.sh +222 -0
  107. package/backend/tests/local/test-e2e.sh +241 -0
  108. package/backend/tests/local/test-fk-errors.sh +97 -0
  109. package/backend/tests/local/test-id-field.sh +201 -0
  110. package/backend/tests/local/test-public-bucket.sh +265 -0
  111. package/backend/tests/local/test-secrets.sh +248 -0
  112. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -0
  113. package/backend/tests/local/test-traditional-rest.sh +209 -0
  114. package/backend/tests/manual/README.md +51 -0
  115. package/backend/tests/manual/create-large-table-simple.sql +11 -0
  116. package/backend/tests/manual/seed-large-table.sql +101 -0
  117. package/backend/tests/manual/setup-large-table-extras.sql +34 -0
  118. package/backend/tests/manual/test-better-auth.sh +303 -0
  119. package/backend/tests/manual/test-bulk-upsert.sh +410 -0
  120. package/backend/tests/manual/test-database-advance.sh +297 -0
  121. package/backend/tests/manual/test-postgrest-stability.sh +192 -0
  122. package/backend/tests/manual/test-rawsql-export-import.sh +412 -0
  123. package/backend/tests/manual/test-universal-storage.sh +264 -0
  124. package/backend/tests/manual/test-users.sql +18 -0
  125. package/backend/tests/run-all-tests.sh +140 -0
  126. package/backend/tests/setup.ts +22 -0
  127. package/backend/tests/test-config.sh +303 -0
  128. package/backend/tsconfig.json +23 -0
  129. package/backend/tsup.config.ts +18 -0
  130. package/backend/vitest.config.ts +22 -0
  131. package/docker-compose.prod.yml +145 -0
  132. package/docker-compose.yml +167 -0
  133. package/docker-init/db/db-init.sql +125 -0
  134. package/docker-init/db/jwt.sql +5 -0
  135. package/docker-init/db/logs.sql +9 -0
  136. package/docker-init/db/postgresql.conf +17 -0
  137. package/docs/deprecated/insforge-auth-api.md +215 -0
  138. package/docs/deprecated/insforge-auth-sdk.md +100 -0
  139. package/docs/deprecated/insforge-db-api.md +359 -0
  140. package/docs/deprecated/insforge-db-sdk.md +140 -0
  141. package/docs/deprecated/insforge-debug-sdk.md +157 -0
  142. package/docs/deprecated/insforge-debug.md +65 -0
  143. package/docs/deprecated/insforge-instructions.md +124 -0
  144. package/docs/deprecated/insforge-project.md +118 -0
  145. package/docs/deprecated/insforge-storage-api.md +279 -0
  146. package/docs/deprecated/insforge-storage-sdk.md +159 -0
  147. package/docs/insforge-instructions-sdk.md +407 -0
  148. package/eslint.config.js +317 -0
  149. package/examples/oauth/frontend-oauth-example.html +251 -0
  150. package/examples/response-examples.md +444 -0
  151. package/frontend/README.md +112 -0
  152. package/frontend/components.json +17 -0
  153. package/frontend/index.html +13 -0
  154. package/frontend/package.json +63 -0
  155. package/frontend/public/favicon.ico +0 -0
  156. package/frontend/src/App.tsx +106 -0
  157. package/frontend/src/assets/icons/checkbox_checked.svg +6 -0
  158. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -0
  159. package/frontend/src/assets/icons/checked.svg +3 -0
  160. package/frontend/src/assets/icons/error.svg +3 -0
  161. package/frontend/src/assets/icons/pencil.svg +4 -0
  162. package/frontend/src/assets/icons/refresh.svg +4 -0
  163. package/frontend/src/assets/icons/step_active.svg +3 -0
  164. package/frontend/src/assets/icons/step_inactive.svg +11 -0
  165. package/frontend/src/assets/icons/warning.svg +3 -0
  166. package/frontend/src/assets/logos/amazon.svg +1 -0
  167. package/frontend/src/assets/logos/claude_code.svg +3 -0
  168. package/frontend/src/assets/logos/cline.svg +6 -0
  169. package/frontend/src/assets/logos/cursor.svg +20 -0
  170. package/frontend/src/assets/logos/discord.svg +9 -0
  171. package/frontend/src/assets/logos/gemini.svg +19 -0
  172. package/frontend/src/assets/logos/github.svg +5 -0
  173. package/frontend/src/assets/logos/google.svg +13 -0
  174. package/frontend/src/assets/logos/grok.svg +10 -0
  175. package/frontend/src/assets/logos/insforge_dark.svg +15 -0
  176. package/frontend/src/assets/logos/insforge_light.svg +15 -0
  177. package/frontend/src/assets/logos/openai.svg +10 -0
  178. package/frontend/src/assets/logos/roo_code.svg +9 -0
  179. package/frontend/src/assets/logos/trae.svg +3 -0
  180. package/frontend/src/assets/logos/windsurf.svg +10 -0
  181. package/frontend/src/components/ButtonWithLoading.tsx +27 -0
  182. package/frontend/src/components/Checkbox.tsx +61 -0
  183. package/frontend/src/components/CodeBlock.tsx +32 -0
  184. package/frontend/src/components/ConfirmDialog.tsx +96 -0
  185. package/frontend/src/components/CopyButton.tsx +69 -0
  186. package/frontend/src/components/DeleteActionButton.tsx +42 -0
  187. package/frontend/src/components/EmptyState.tsx +41 -0
  188. package/frontend/src/components/ErrorState.tsx +35 -0
  189. package/frontend/src/components/FeatureSidebar.tsx +126 -0
  190. package/frontend/src/components/FeatureSidebarItem.tsx +101 -0
  191. package/frontend/src/components/JsonHighlight.tsx +61 -0
  192. package/frontend/src/components/LoadingState.tsx +16 -0
  193. package/frontend/src/components/PaginationControls.tsx +54 -0
  194. package/frontend/src/components/PromptDialog.tsx +68 -0
  195. package/frontend/src/components/SearchInput.tsx +90 -0
  196. package/frontend/src/components/SelectionClearButton.tsx +26 -0
  197. package/frontend/src/components/Stepper.tsx +139 -0
  198. package/frontend/src/components/ThemeToggle.tsx +58 -0
  199. package/frontend/src/components/TypeBadge.tsx +20 -0
  200. package/frontend/src/components/datagrid/DataGrid.tsx +264 -0
  201. package/frontend/src/components/datagrid/DefaultCellRenderer.tsx +114 -0
  202. package/frontend/src/components/datagrid/IdCell.tsx +44 -0
  203. package/frontend/src/components/datagrid/SortableHeader.tsx +74 -0
  204. package/frontend/src/components/datagrid/cell-editors/BooleanCellEditor.tsx +54 -0
  205. package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +483 -0
  206. package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +362 -0
  207. package/frontend/src/components/datagrid/cell-editors/TextCellEditor.tsx +38 -0
  208. package/frontend/src/components/datagrid/cell-editors/index.ts +14 -0
  209. package/frontend/src/components/datagrid/cell-editors/types.ts +43 -0
  210. package/frontend/src/components/datagrid/datagridTypes.tsx +72 -0
  211. package/frontend/src/components/datagrid/index.tsx +20 -0
  212. package/frontend/src/components/index.ts +39 -0
  213. package/frontend/src/components/layout/AppHeader.tsx +146 -0
  214. package/frontend/src/components/layout/AppSidebar.tsx +190 -0
  215. package/frontend/src/components/layout/CloudLayout.tsx +95 -0
  216. package/frontend/src/components/layout/Layout.tsx +43 -0
  217. package/frontend/src/components/radix/Alert.tsx +45 -0
  218. package/frontend/src/components/radix/AlertDialog.tsx +115 -0
  219. package/frontend/src/components/radix/Avatar.tsx +45 -0
  220. package/frontend/src/components/radix/Badge.tsx +33 -0
  221. package/frontend/src/components/radix/Button.tsx +50 -0
  222. package/frontend/src/components/radix/Card.tsx +58 -0
  223. package/frontend/src/components/radix/Dialog.tsx +98 -0
  224. package/frontend/src/components/radix/DropdownMenu.tsx +185 -0
  225. package/frontend/src/components/radix/Form.tsx +167 -0
  226. package/frontend/src/components/radix/Input.tsx +22 -0
  227. package/frontend/src/components/radix/Label.tsx +19 -0
  228. package/frontend/src/components/radix/Popover.tsx +29 -0
  229. package/frontend/src/components/radix/ScrollArea.tsx +44 -0
  230. package/frontend/src/components/radix/Select.tsx +151 -0
  231. package/frontend/src/components/radix/Separator.tsx +26 -0
  232. package/frontend/src/components/radix/Sheet.tsx +119 -0
  233. package/frontend/src/components/radix/Skeleton.tsx +7 -0
  234. package/frontend/src/components/radix/Switch.tsx +29 -0
  235. package/frontend/src/components/radix/Tabs.tsx +50 -0
  236. package/frontend/src/components/radix/Textarea.tsx +21 -0
  237. package/frontend/src/components/radix/Tooltip.tsx +28 -0
  238. package/frontend/src/features/ai/components/AIConfigCard.tsx +154 -0
  239. package/frontend/src/features/ai/components/AIConfigDialog.tsx +76 -0
  240. package/frontend/src/features/ai/components/AIConfigForm.tsx +222 -0
  241. package/frontend/src/features/ai/components/AIEmptyState.tsx +18 -0
  242. package/frontend/src/features/ai/components/fields/ModalityField.tsx +87 -0
  243. package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +134 -0
  244. package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +33 -0
  245. package/frontend/src/features/ai/helpers.ts +155 -0
  246. package/frontend/src/features/ai/hooks/useAIConfigs.ts +221 -0
  247. package/frontend/src/features/ai/hooks/useAIUsage.ts +77 -0
  248. package/frontend/src/features/ai/page/AIPage.tsx +178 -0
  249. package/frontend/src/features/ai/services/ai.service.ts +148 -0
  250. package/frontend/src/features/auth/components/AddOAuthDialog.tsx +106 -0
  251. package/frontend/src/features/auth/components/AuthMethodTab.tsx +238 -0
  252. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +303 -0
  253. package/frontend/src/features/auth/components/OAuthEmptyState.tsx +15 -0
  254. package/frontend/src/features/auth/components/UserFormDialog.tsx +248 -0
  255. package/frontend/src/features/auth/components/UsersDataGrid.tsx +183 -0
  256. package/frontend/src/features/auth/components/UsersTab.tsx +114 -0
  257. package/frontend/src/features/auth/hooks/useOAuthConfig.ts +129 -0
  258. package/frontend/src/features/auth/hooks/useUsers.ts +57 -0
  259. package/frontend/src/features/auth/index.ts +9 -0
  260. package/frontend/src/features/auth/page/AuthenticationPage.tsx +169 -0
  261. package/frontend/src/features/auth/services/auth.service.ts +112 -0
  262. package/frontend/src/features/auth/services/oauth.service.ts +49 -0
  263. package/frontend/src/features/dashboard/page/DashboardPage.tsx +194 -0
  264. package/frontend/src/features/database/components/ColumnTypeSelect.tsx +64 -0
  265. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +282 -0
  266. package/frontend/src/features/database/components/ForeignKeyCell.tsx +187 -0
  267. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +378 -0
  268. package/frontend/src/features/database/components/LinkRecordModal.tsx +288 -0
  269. package/frontend/src/features/database/components/RecordFormDialog.tsx +164 -0
  270. package/frontend/src/features/database/components/RecordFormField.tsx +568 -0
  271. package/frontend/src/features/database/components/TableEmptyState.tsx +21 -0
  272. package/frontend/src/features/database/components/TableForm.tsx +656 -0
  273. package/frontend/src/features/database/components/TableFormColumn.tsx +137 -0
  274. package/frontend/src/features/database/components/TableListSkeleton.tsx +9 -0
  275. package/frontend/src/features/database/components/TableSidebar.tsx +47 -0
  276. package/frontend/src/features/database/constants.ts +26 -0
  277. package/frontend/src/features/database/helpers.ts +125 -0
  278. package/frontend/src/features/database/hooks/UseLinkModal.tsx +78 -0
  279. package/frontend/src/features/database/index.ts +12 -0
  280. package/frontend/src/features/database/page/DatabasePage.tsx +626 -0
  281. package/frontend/src/features/database/schema.ts +25 -0
  282. package/frontend/src/features/database/services/database.service.ts +216 -0
  283. package/frontend/src/features/functions/components/FunctionEmptyState.tsx +15 -0
  284. package/frontend/src/features/functions/components/FunctionRow.tsx +71 -0
  285. package/frontend/src/features/functions/components/FunctionViewer.tsx +46 -0
  286. package/frontend/src/features/functions/components/FunctionsContent.tsx +88 -0
  287. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +56 -0
  288. package/frontend/src/features/functions/components/SecretEmptyState.tsx +23 -0
  289. package/frontend/src/features/functions/components/SecretRow.tsx +68 -0
  290. package/frontend/src/features/functions/components/SecretsContent.tsx +120 -0
  291. package/frontend/src/features/functions/hooks/useFunctions.ts +106 -0
  292. package/frontend/src/features/functions/page/FunctionsPage.tsx +28 -0
  293. package/frontend/src/features/functions/services/functions.service.ts +48 -0
  294. package/frontend/src/features/login/components/AuthErrorBoundary.tsx +87 -0
  295. package/frontend/src/features/login/components/PrivateRoute.tsx +24 -0
  296. package/frontend/src/features/login/page/CloudLoginPage.tsx +93 -0
  297. package/frontend/src/features/login/page/LoginPage.tsx +174 -0
  298. package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +313 -0
  299. package/frontend/src/features/logs/components/LogsTable.tsx +199 -0
  300. package/frontend/src/features/logs/hooks/useAuditLogs.ts +39 -0
  301. package/frontend/src/features/logs/index.ts +5 -0
  302. package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +530 -0
  303. package/frontend/src/features/logs/page/AuditsPage.tsx +192 -0
  304. package/frontend/src/features/logs/services/log.service.ts +171 -0
  305. package/frontend/src/features/metadata/hooks/useMetadata.ts +53 -0
  306. package/frontend/src/features/metadata/index.ts +0 -0
  307. package/frontend/src/features/metadata/page/MetadataPage.tsx +136 -0
  308. package/frontend/src/features/metadata/services/metadata.service.ts +17 -0
  309. package/frontend/src/features/onboard/components/CompletionCard.tsx +41 -0
  310. package/frontend/src/features/onboard/components/OnboardButton.tsx +84 -0
  311. package/frontend/src/features/onboard/components/StepContent.tsx +91 -0
  312. package/frontend/src/features/onboard/components/TestConnectionStep.tsx +53 -0
  313. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +35 -0
  314. package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +144 -0
  315. package/frontend/src/features/onboard/components/mcp/index.ts +4 -0
  316. package/frontend/src/features/onboard/components/mcp/mcp-helper.tsx +98 -0
  317. package/frontend/src/features/onboard/index.ts +3 -0
  318. package/frontend/src/features/onboard/page/OnBoardPage.tsx +104 -0
  319. package/frontend/src/features/onboard/types.ts +8 -0
  320. package/frontend/src/features/secrets/hooks/useSecrets.ts +139 -0
  321. package/frontend/src/features/secrets/services/secrets.service.ts +57 -0
  322. package/frontend/src/features/storage/components/BucketEmptyState.tsx +19 -0
  323. package/frontend/src/features/storage/components/BucketFormDialog.tsx +194 -0
  324. package/frontend/src/features/storage/components/BucketListSkeleton.tsx +17 -0
  325. package/frontend/src/features/storage/components/FilePreviewDialog.tsx +287 -0
  326. package/frontend/src/features/storage/components/StorageDataGrid.tsx +239 -0
  327. package/frontend/src/features/storage/components/StorageManager.tsx +236 -0
  328. package/frontend/src/features/storage/components/StorageSidebar.tsx +44 -0
  329. package/frontend/src/features/storage/components/UploadToast.tsx +46 -0
  330. package/frontend/src/features/storage/index.ts +3 -0
  331. package/frontend/src/features/storage/page/StoragePage.tsx +553 -0
  332. package/frontend/src/features/storage/services/storage.service.ts +144 -0
  333. package/frontend/src/features/visualizer/components/AuthNode.tsx +107 -0
  334. package/frontend/src/features/visualizer/components/BucketNode.tsx +34 -0
  335. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +359 -0
  336. package/frontend/src/features/visualizer/components/TableNode.tsx +152 -0
  337. package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +24 -0
  338. package/frontend/src/features/visualizer/components/index.ts +5 -0
  339. package/frontend/src/features/visualizer/page/VisualizerPage.tsx +127 -0
  340. package/frontend/src/index.css +248 -0
  341. package/frontend/src/lib/api/client.ts +163 -0
  342. package/frontend/src/lib/contexts/AuthContext.tsx +157 -0
  343. package/frontend/src/lib/contexts/OnboardStepContext.tsx +68 -0
  344. package/frontend/src/lib/contexts/SocketContext.tsx +303 -0
  345. package/frontend/src/lib/contexts/ThemeContext.tsx +125 -0
  346. package/frontend/src/lib/hooks/useAuth.ts +4 -0
  347. package/frontend/src/lib/hooks/useConfirm.ts +55 -0
  348. package/frontend/src/lib/hooks/useInterval.ts +27 -0
  349. package/frontend/src/lib/hooks/useMediaQuery.ts +59 -0
  350. package/frontend/src/lib/hooks/useOnboardingCompletion.ts +29 -0
  351. package/frontend/src/lib/hooks/usePagination.ts +27 -0
  352. package/frontend/src/lib/hooks/useTimeout.ts +27 -0
  353. package/frontend/src/lib/hooks/useToast.tsx +229 -0
  354. package/frontend/src/lib/utils/constants.ts +38 -0
  355. package/frontend/src/lib/utils/utils.ts +165 -0
  356. package/frontend/src/lib/utils/validation-schemas.ts +126 -0
  357. package/frontend/src/main.tsx +16 -0
  358. package/frontend/src/rdg.css +194 -0
  359. package/frontend/src/vite-env.d.ts +12 -0
  360. package/frontend/tailwind.config.js +97 -0
  361. package/frontend/tsconfig.json +26 -0
  362. package/frontend/tsconfig.node.json +10 -0
  363. package/frontend/vite.config.ts +37 -0
  364. package/frontend/vitest.config.ts +36 -0
  365. package/functions/deno.json +25 -0
  366. package/functions/server.ts +290 -0
  367. package/functions/worker-template.js +126 -0
  368. package/openapi/ai.yaml +689 -0
  369. package/openapi/auth.yaml +563 -0
  370. package/openapi/functions.yaml +476 -0
  371. package/openapi/health.yaml +30 -0
  372. package/openapi/logs.yaml +224 -0
  373. package/openapi/metadata.yaml +178 -0
  374. package/openapi/records.yaml +382 -0
  375. package/openapi/secrets.yaml +371 -0
  376. package/openapi/storage.yaml +876 -0
  377. package/openapi/tables.yaml +464 -0
  378. package/package.json +88 -0
  379. package/shared-schemas/package.json +31 -0
  380. package/shared-schemas/src/ai-api.schema.ts +167 -0
  381. package/shared-schemas/src/ai.schema.ts +54 -0
  382. package/shared-schemas/src/auth-api.schema.ts +193 -0
  383. package/shared-schemas/src/auth.schema.ts +94 -0
  384. package/shared-schemas/src/database-api.schema.ts +259 -0
  385. package/shared-schemas/src/database.schema.ts +69 -0
  386. package/shared-schemas/src/functions-api.schema.ts +25 -0
  387. package/shared-schemas/src/functions.schema.ts +16 -0
  388. package/shared-schemas/src/index.ts +13 -0
  389. package/shared-schemas/src/logs-api.schema.ts +49 -0
  390. package/shared-schemas/src/logs.schema.ts +14 -0
  391. package/shared-schemas/src/metadata.schema.ts +56 -0
  392. package/shared-schemas/src/storage-api.schema.ts +65 -0
  393. package/shared-schemas/src/storage.schema.ts +19 -0
  394. package/shared-schemas/tsconfig.json +21 -0
  395. package/tsconfig.json +8 -0
@@ -0,0 +1,444 @@
1
+ # InsForge API Response Format Examples
2
+
3
+ All API responses now follow a consistent format with `success` field and proper structure.
4
+
5
+ ## Success Response Format
6
+
7
+ ```json
8
+ {
9
+ "success": true,
10
+ "data": <response_data>,
11
+ "meta": {
12
+ "timestamp": "2024-01-01T00:00:00.000Z",
13
+ "pagination": { // optional, only for list endpoints
14
+ "total": 100,
15
+ "limit": 10,
16
+ "offset": 0,
17
+ "page": 1,
18
+ "totalPages": 10
19
+ }
20
+ }
21
+ }
22
+ ```
23
+
24
+ ## Error Response Format
25
+
26
+ ```json
27
+ {
28
+ "success": false,
29
+ "error": {
30
+ "code": "ERROR_CODE",
31
+ "message": "Human readable error message",
32
+ "details": {} // optional
33
+ },
34
+ "meta": {
35
+ "timestamp": "2024-01-01T00:00:00.000Z"
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## Endpoint Examples
41
+
42
+ ### Authentication Endpoints
43
+
44
+ #### POST /auth/register
45
+ **Success Response (201):**
46
+ ```json
47
+ {
48
+ "success": true,
49
+ "data": {
50
+ "user": {
51
+ "id": "123",
52
+ "email": "user@example.com"
53
+ },
54
+ "token": "eyJhbGciOiJIUzI1NiIs..."
55
+ },
56
+ "meta": {
57
+ "timestamp": "2024-01-01T00:00:00.000Z"
58
+ }
59
+ }
60
+ ```
61
+
62
+ **Error Response (400):**
63
+ ```json
64
+ {
65
+ "success": false,
66
+ "error": {
67
+ "code": "ALREADY_EXISTS",
68
+ "message": "User already exists"
69
+ },
70
+ "meta": {
71
+ "timestamp": "2024-01-01T00:00:00.000Z"
72
+ }
73
+ }
74
+ ```
75
+
76
+ #### POST /auth/login
77
+ **Success Response (200):**
78
+ ```json
79
+ {
80
+ "success": true,
81
+ "data": {
82
+ "user": {
83
+ "id": "123",
84
+ "name": "John Doe",
85
+ "email": "user@example.com"
86
+ },
87
+ "token": "eyJhbGciOiJIUzI1NiIs..."
88
+ },
89
+ "meta": {
90
+ "timestamp": "2024-01-01T00:00:00.000Z"
91
+ }
92
+ }
93
+ ```
94
+
95
+ **Error Response (401):**
96
+ ```json
97
+ {
98
+ "success": false,
99
+ "error": {
100
+ "code": "INVALID_CREDENTIALS",
101
+ "message": "Invalid credentials"
102
+ },
103
+ "meta": {
104
+ "timestamp": "2024-01-01T00:00:00.000Z"
105
+ }
106
+ }
107
+ ```
108
+
109
+ #### GET /auth/me
110
+ **Success Response (200):**
111
+ ```json
112
+ {
113
+ "success": true,
114
+ "data": {
115
+ "user": {
116
+ "id": "123",
117
+ "email": "user@example.com",
118
+ "type": "user"
119
+ }
120
+ },
121
+ "meta": {
122
+ "timestamp": "2024-01-01T00:00:00.000Z"
123
+ }
124
+ }
125
+ ```
126
+
127
+ #### GET /auth/users
128
+ **Success Response (200):**
129
+ ```json
130
+ {
131
+ "success": true,
132
+ "data": [
133
+ {
134
+ "id": "123",
135
+ "email": "user1@example.com",
136
+ "created_at": "2024-01-01T00:00:00.000Z",
137
+ "updated_at": "2024-01-01T00:00:00.000Z"
138
+ },
139
+ {
140
+ "id": "124",
141
+ "email": "user2@example.com",
142
+ "created_at": "2024-01-01T00:00:00.000Z",
143
+ "updated_at": "2024-01-01T00:00:00.000Z"
144
+ }
145
+ ],
146
+ "meta": {
147
+ "timestamp": "2024-01-01T00:00:00.000Z"
148
+ }
149
+ }
150
+ ```
151
+
152
+ ### Tables Endpoints
153
+
154
+ #### GET /database/tables
155
+ **Success Response (200):**
156
+ ```json
157
+ {
158
+ "success": true,
159
+ "data": ["users", "posts", "comments"],
160
+ "meta": {
161
+ "timestamp": "2024-01-01T00:00:00.000Z"
162
+ }
163
+ }
164
+ ```
165
+
166
+ #### POST /database/tables
167
+ **Success Response (201):**
168
+ ```json
169
+ {
170
+ "success": true,
171
+ "data": {
172
+ "message": "Table created successfully",
173
+ "table_name": "posts"
174
+ },
175
+ "meta": {
176
+ "timestamp": "2024-01-01T00:00:00.000Z"
177
+ }
178
+ }
179
+ ```
180
+
181
+ #### GET /database/records/:table
182
+ **Success Response with Pagination (200):**
183
+ ```json
184
+ {
185
+ "success": true,
186
+ "data": [
187
+ {
188
+ "id": 1,
189
+ "title": "First Post",
190
+ "content": "Hello World"
191
+ },
192
+ {
193
+ "id": 2,
194
+ "title": "Second Post",
195
+ "content": "Another post"
196
+ }
197
+ ],
198
+ "meta": {
199
+ "pagination": {
200
+ "total": 50,
201
+ "limit": 10,
202
+ "offset": 0,
203
+ "page": 1,
204
+ "totalPages": 5
205
+ },
206
+ "timestamp": "2024-01-01T00:00:00.000Z"
207
+ }
208
+ }
209
+ ```
210
+
211
+ #### GET /database/records/:table?id=eq.:id
212
+ **Success Response (200):**
213
+ ```json
214
+ {
215
+ "success": true,
216
+ "data": {
217
+ "id": 1,
218
+ "title": "First Post",
219
+ "content": "Hello World",
220
+ "created_at": "2024-01-01T00:00:00.000Z"
221
+ },
222
+ "meta": {
223
+ "timestamp": "2024-01-01T00:00:00.000Z"
224
+ }
225
+ }
226
+ ```
227
+
228
+ **Error Response (404):**
229
+ ```json
230
+ {
231
+ "success": false,
232
+ "error": {
233
+ "code": "NOT_FOUND",
234
+ "message": "Record not found"
235
+ },
236
+ "meta": {
237
+ "timestamp": "2024-01-01T00:00:00.000Z"
238
+ }
239
+ }
240
+ ```
241
+
242
+ #### POST /database/records/:table
243
+ **Success Response (201):**
244
+ ```json
245
+ {
246
+ "success": true,
247
+ "data": {
248
+ "message": "Records inserted successfully",
249
+ "inserted": 3,
250
+ "ids": [1, 2, 3]
251
+ },
252
+ "meta": {
253
+ "timestamp": "2024-01-01T00:00:00.000Z"
254
+ }
255
+ }
256
+ ```
257
+
258
+ #### PATCH /database/records/:table?id=eq.:id
259
+ **Success Response (200):**
260
+ ```json
261
+ {
262
+ "success": true,
263
+ "data": {
264
+ "message": "Record updated successfully",
265
+ "affected": 1
266
+ },
267
+ "meta": {
268
+ "timestamp": "2024-01-01T00:00:00.000Z"
269
+ }
270
+ }
271
+ ```
272
+
273
+ #### DELETE /database/records/:table?id=eq.:id
274
+ **Success Response (200):**
275
+ ```json
276
+ {
277
+ "success": true,
278
+ "data": {
279
+ "message": "Record deleted successfully",
280
+ "affected": 1
281
+ },
282
+ "meta": {
283
+ "timestamp": "2024-01-01T00:00:00.000Z"
284
+ }
285
+ }
286
+ ```
287
+
288
+ #### GET /database/tables/:table/schema
289
+ **Success Response (200):**
290
+ ```json
291
+ {
292
+ "success": true,
293
+ "data": {
294
+ "table_name": "posts",
295
+ "columns": [
296
+ {
297
+ "name": "id",
298
+ "type": "INTEGER",
299
+ "nullable": false,
300
+ "primary_key": true,
301
+ "default_value": null
302
+ },
303
+ {
304
+ "name": "title",
305
+ "type": "TEXT",
306
+ "nullable": false,
307
+ "primary_key": false,
308
+ "default_value": null
309
+ }
310
+ ]
311
+ },
312
+ "meta": {
313
+ "timestamp": "2024-01-01T00:00:00.000Z"
314
+ }
315
+ }
316
+ ```
317
+
318
+ #### PATCH /database/tables/:table
319
+ **Success Response (200):**
320
+ ```json
321
+ {
322
+ "success": true,
323
+ "data": {
324
+ "message": "Table schema updated successfully",
325
+ "table_name": "posts",
326
+ "operations": [
327
+ "Added column: tags",
328
+ "Renamed column: content → body",
329
+ "Dropped columns: temp_field"
330
+ ]
331
+ },
332
+ "meta": {
333
+ "timestamp": "2024-01-01T00:00:00.000Z"
334
+ }
335
+ }
336
+ ```
337
+
338
+ #### DELETE /database/tables/:table
339
+ **Success Response (200):**
340
+ ```json
341
+ {
342
+ "success": true,
343
+ "data": {
344
+ "message": "Table deleted successfully",
345
+ "table_name": "posts"
346
+ },
347
+ "meta": {
348
+ "timestamp": "2024-01-01T00:00:00.000Z"
349
+ }
350
+ }
351
+ ```
352
+
353
+ ### Metadata Endpoints
354
+
355
+ #### GET /metadata
356
+ **Success Response (200):**
357
+ ```json
358
+ {
359
+ "success": true,
360
+ "data": {
361
+ "app_name": "My InsForge App",
362
+ "app_description": "Backend as a Service",
363
+ "created_at": "2024-01-01T00:00:00.000Z"
364
+ },
365
+ "meta": {
366
+ "timestamp": "2024-01-01T00:00:00.000Z"
367
+ }
368
+ }
369
+ ```
370
+
371
+ #### GET /metadata/api-key
372
+ **Success Response (200):**
373
+ ```json
374
+ {
375
+ "success": true,
376
+ "data": {
377
+ "api_key": "ik_1234567890abcdef..."
378
+ },
379
+ "meta": {
380
+ "timestamp": "2024-01-01T00:00:00.000Z"
381
+ }
382
+ }
383
+ ```
384
+
385
+ ### MCP Endpoints
386
+
387
+ #### GET /mcp/metadata
388
+ **Success Response (200):**
389
+ ```json
390
+ {
391
+ "success": true,
392
+ "data": {
393
+ "app_name": "My InsForge App",
394
+ "app_description": "Backend as a Service",
395
+ "mcp_tools": {
396
+ "database": {
397
+ "create_table": true,
398
+ "modify_table": true,
399
+ "delete_table": true,
400
+ "query_records": true,
401
+ "insert_records": true,
402
+ "update_records": true,
403
+ "delete_records": true
404
+ }
405
+ }
406
+ },
407
+ "meta": {
408
+ "timestamp": "2024-01-01T00:00:00.000Z"
409
+ }
410
+ }
411
+ ```
412
+
413
+ ### System Endpoints
414
+
415
+ #### GET /health
416
+ **Success Response (200):**
417
+ ```json
418
+ {
419
+ "success": true,
420
+ "data": {
421
+ "status": "ok",
422
+ "service": "Insforge Backend",
423
+ "timestamp": "2024-01-01T00:00:00.000Z"
424
+ }
425
+ }
426
+ ```
427
+
428
+ ### Common Error Codes
429
+
430
+ - `MISSING_AUTH` - No authentication provided
431
+ - `INVALID_AUTH` - Invalid authentication token or API key
432
+ - `INVALID_CREDENTIALS` - Wrong username/password
433
+ - `TOKEN_EXPIRED` - JWT token has expired
434
+ - `FORBIDDEN` - Access denied
435
+ - `INSUFFICIENT_PERMISSIONS` - Missing required permissions
436
+ - `VALIDATION_ERROR` - Input validation failed
437
+ - `INVALID_INPUT` - Invalid input format
438
+ - `MISSING_FIELD` - Required field missing
439
+ - `NOT_FOUND` - Resource not found
440
+ - `ALREADY_EXISTS` - Resource already exists
441
+ - `DATABASE_ERROR` - Database operation failed
442
+ - `CONSTRAINT_VIOLATION` - Database constraint violated
443
+ - `INTERNAL_ERROR` - Internal server error
444
+ - `SERVICE_UNAVAILABLE` - Service temporarily unavailable
@@ -0,0 +1,112 @@
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.
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": false,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "tailwind.config.js",
8
+ "css": "src/index.css",
9
+ "baseColor": "zinc",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "aliases": {
14
+ "components": "@/components",
15
+ "utils": "@/lib/utils"
16
+ }
17
+ }
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/x-icon" href="/favicon.ico" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>InsForge Dashboard</title>
8
+ </head>
9
+ <body>
10
+ <div id="root"></div>
11
+ <script type="module" src="/src/main.tsx"></script>
12
+ </body>
13
+ </html>
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "insforge-dashboard",
3
+ "version": "1.0.0",
4
+ "author": "Insforge",
5
+ "description": "Admin dashboard for Insforge backend management",
6
+ "type": "module",
7
+ "scripts": {
8
+ "dev": "vite",
9
+ "build": "vite build",
10
+ "preview": "vite preview",
11
+ "test": "vitest",
12
+ "test:ui": "vitest --ui",
13
+ "test:coverage": "vitest --coverage",
14
+ "test:watch": "vitest --watch"
15
+ },
16
+ "dependencies": {
17
+ "@hookform/resolvers": "^5.1.1",
18
+ "@radix-ui/react-alert-dialog": "^1.1.14",
19
+ "@radix-ui/react-avatar": "^1.1.10",
20
+ "@radix-ui/react-dialog": "^1.1.14",
21
+ "@radix-ui/react-dropdown-menu": "^2.1.15",
22
+ "@radix-ui/react-icons": "^1.3.2",
23
+ "@radix-ui/react-label": "^2.1.7",
24
+ "@radix-ui/react-popover": "^1.1.14",
25
+ "@radix-ui/react-scroll-area": "^1.2.9",
26
+ "@radix-ui/react-select": "^2.2.5",
27
+ "@radix-ui/react-separator": "^1.1.7",
28
+ "@radix-ui/react-slot": "^1.2.3",
29
+ "@radix-ui/react-switch": "^1.2.5",
30
+ "@radix-ui/react-tabs": "^1.1.12",
31
+ "@radix-ui/react-tooltip": "^1.2.7",
32
+ "@tanstack/react-query": "^5.83.0",
33
+ "@types/uuid": "^10.0.0",
34
+ "@xyflow/react": "^12.8.4",
35
+ "class-variance-authority": "^0.7.1",
36
+ "clsx": "^2.1.1",
37
+ "date-fns": "^4.1.0",
38
+ "lucide-react": "^0.536.0",
39
+ "react": "19.1.1",
40
+ "react-data-grid": "7.0.0-beta.47",
41
+ "react-dom": "19.1.1",
42
+ "react-hook-form": "^7.61.1",
43
+ "react-router-dom": "^7.7.0",
44
+ "socket.io-client": "^4.8.1",
45
+ "tailwind-merge": "^3.3.1",
46
+ "uuid": "^11.1.0",
47
+ "zod": "^3.23.8"
48
+ },
49
+ "devDependencies": {
50
+ "@tailwindcss/vite": "^4.1.11",
51
+ "@testing-library/jest-dom": "^6.6.3",
52
+ "@testing-library/react": "^16.3.0",
53
+ "@types/react": "^19.1.8",
54
+ "@types/react-dom": "^19.1.6",
55
+ "@vitejs/plugin-react": "^4.7.0",
56
+ "@vitest/ui": "^3.2.4",
57
+ "jsdom": "^26.1.0",
58
+ "tailwindcss": "^4.1.11",
59
+ "tailwindcss-animate": "^1.0.7",
60
+ "vite": "^7.0.5",
61
+ "vite-plugin-svgr": "^4.3.0"
62
+ }
63
+ }
Binary file