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,689 @@
1
+ openapi: 3.0.3
2
+ info:
3
+ title: Insforge AI API
4
+ version: 1.0.0
5
+ description: AI services for chat and image generation with OpenRouter integration
6
+
7
+ paths:
8
+ /api/ai/configurations:
9
+ post:
10
+ summary: Create AI configuration
11
+ description: Create a new AI configuration with model and system prompt
12
+ tags:
13
+ - Admin
14
+ security:
15
+ - bearerAuth: []
16
+ requestBody:
17
+ required: true
18
+ content:
19
+ application/json:
20
+ schema:
21
+ $ref: '#/components/schemas/CreateAIConfigurationRequest'
22
+ responses:
23
+ '201':
24
+ description: AI configuration created successfully
25
+ content:
26
+ application/json:
27
+ schema:
28
+ type: object
29
+ properties:
30
+ id:
31
+ type: string
32
+ format: uuid
33
+ message:
34
+ type: string
35
+ '400':
36
+ description: Validation error
37
+ '401':
38
+ description: Unauthorized
39
+ '500':
40
+ description: Failed to create AI configuration
41
+
42
+ get:
43
+ summary: List AI configurations
44
+ description: Get all AI configurations
45
+ tags:
46
+ - Admin
47
+ security:
48
+ - bearerAuth: []
49
+ responses:
50
+ '200':
51
+ description: List of AI configurations
52
+ content:
53
+ application/json:
54
+ schema:
55
+ type: array
56
+ items:
57
+ $ref: '#/components/schemas/AIConfiguration'
58
+ '401':
59
+ description: Unauthorized
60
+ '500':
61
+ description: Failed to fetch AI configurations
62
+
63
+ /api/ai/configurations/{id}:
64
+ patch:
65
+ summary: Update AI configuration
66
+ description: Update an existing AI configuration's system prompt
67
+ tags:
68
+ - Admin
69
+ security:
70
+ - bearerAuth: []
71
+ parameters:
72
+ - in: path
73
+ name: id
74
+ required: true
75
+ schema:
76
+ type: string
77
+ format: uuid
78
+ requestBody:
79
+ required: true
80
+ content:
81
+ application/json:
82
+ schema:
83
+ $ref: '#/components/schemas/UpdateAIConfigurationRequest'
84
+ responses:
85
+ '200':
86
+ description: AI configuration updated successfully
87
+ content:
88
+ application/json:
89
+ schema:
90
+ type: object
91
+ properties:
92
+ message:
93
+ type: string
94
+ '400':
95
+ description: Validation error
96
+ '401':
97
+ description: Unauthorized
98
+ '404':
99
+ description: AI configuration not found
100
+ '500':
101
+ description: Failed to update AI configuration
102
+
103
+ delete:
104
+ summary: Delete AI configuration
105
+ description: Delete an AI configuration
106
+ tags:
107
+ - Admin
108
+ security:
109
+ - bearerAuth: []
110
+ parameters:
111
+ - in: path
112
+ name: id
113
+ required: true
114
+ schema:
115
+ type: string
116
+ format: uuid
117
+ responses:
118
+ '200':
119
+ description: AI configuration deleted successfully
120
+ content:
121
+ application/json:
122
+ schema:
123
+ type: object
124
+ properties:
125
+ message:
126
+ type: string
127
+ '401':
128
+ description: Unauthorized
129
+ '404':
130
+ description: AI configuration not found
131
+ '500':
132
+ description: Failed to delete AI configuration
133
+
134
+ /api/ai/usage/summary:
135
+ get:
136
+ summary: Get AI usage summary
137
+ description: Get AI usage summary statistics
138
+ tags:
139
+ - Admin
140
+ security:
141
+ - bearerAuth: []
142
+ parameters:
143
+ - in: query
144
+ name: configId
145
+ schema:
146
+ type: string
147
+ format: uuid
148
+ description: Filter by configuration ID
149
+ - in: query
150
+ name: startDate
151
+ schema:
152
+ type: string
153
+ format: date-time
154
+ description: Start date for usage period
155
+ - in: query
156
+ name: endDate
157
+ schema:
158
+ type: string
159
+ format: date-time
160
+ description: End date for usage period
161
+ responses:
162
+ '200':
163
+ description: Usage summary
164
+ content:
165
+ application/json:
166
+ schema:
167
+ $ref: '#/components/schemas/AIUsageSummary'
168
+ '400':
169
+ description: Validation error
170
+ '401':
171
+ description: Unauthorized
172
+ '500':
173
+ description: Failed to fetch usage summary
174
+
175
+ /api/ai/usage:
176
+ get:
177
+ summary: Get AI usage records
178
+ description: Get AI usage records with pagination
179
+ tags:
180
+ - Admin
181
+ security:
182
+ - bearerAuth: []
183
+ parameters:
184
+ - in: query
185
+ name: startDate
186
+ schema:
187
+ type: string
188
+ format: date-time
189
+ description: Start date for usage period
190
+ - in: query
191
+ name: endDate
192
+ schema:
193
+ type: string
194
+ format: date-time
195
+ description: End date for usage period
196
+ - in: query
197
+ name: limit
198
+ schema:
199
+ type: string
200
+ default: "50"
201
+ description: Number of records to return
202
+ - in: query
203
+ name: offset
204
+ schema:
205
+ type: string
206
+ default: "0"
207
+ description: Number of records to skip
208
+ responses:
209
+ '200':
210
+ description: Usage records
211
+ content:
212
+ application/json:
213
+ schema:
214
+ type: array
215
+ items:
216
+ $ref: '#/components/schemas/AIUsageRecord'
217
+ '400':
218
+ description: Validation error
219
+ '401':
220
+ description: Unauthorized
221
+ '500':
222
+ description: Failed to fetch usage records
223
+
224
+ /api/ai/usage/config/{configId}:
225
+ get:
226
+ summary: Get usage by configuration
227
+ description: Get usage records for a specific AI configuration
228
+ tags:
229
+ - Admin
230
+ security:
231
+ - bearerAuth: []
232
+ parameters:
233
+ - in: path
234
+ name: configId
235
+ required: true
236
+ schema:
237
+ type: string
238
+ format: uuid
239
+ - in: query
240
+ name: startDate
241
+ schema:
242
+ type: string
243
+ format: date-time
244
+ description: Start date for usage period
245
+ - in: query
246
+ name: endDate
247
+ schema:
248
+ type: string
249
+ format: date-time
250
+ description: End date for usage period
251
+ responses:
252
+ '200':
253
+ description: Configuration usage records
254
+ content:
255
+ application/json:
256
+ schema:
257
+ type: array
258
+ items:
259
+ $ref: '#/components/schemas/AIUsageRecord'
260
+ '401':
261
+ description: Unauthorized
262
+ '500':
263
+ description: Failed to fetch config usage records
264
+
265
+ /api/ai/models:
266
+ get:
267
+ summary: Get all available AI models
268
+ description: Returns list of all available text and image models from OpenRouter
269
+ tags:
270
+ - Client
271
+ security:
272
+ - bearerAuth: []
273
+ responses:
274
+ '200':
275
+ description: List of available models categorized by type
276
+ content:
277
+ application/json:
278
+ schema:
279
+ $ref: '#/components/schemas/ListModelsResponse'
280
+ '401':
281
+ description: Unauthorized
282
+ '500':
283
+ description: Failed to get models list
284
+
285
+ /api/ai/chat/completion:
286
+ post:
287
+ summary: Generate chat completion
288
+ description: Send a chat message to any supported model with optional streaming
289
+ tags:
290
+ - Client
291
+ security:
292
+ - bearerAuth: []
293
+ requestBody:
294
+ required: true
295
+ content:
296
+ application/json:
297
+ schema:
298
+ $ref: '#/components/schemas/ChatRequest'
299
+ responses:
300
+ '200':
301
+ description: Chat completion response
302
+ content:
303
+ application/json:
304
+ schema:
305
+ $ref: '#/components/schemas/ChatCompletionResponse'
306
+ text/event-stream:
307
+ schema:
308
+ type: string
309
+ description: Server-sent events stream for streaming responses
310
+ '400':
311
+ description: Invalid request - missing model or messages
312
+ '401':
313
+ description: Unauthorized
314
+ '500':
315
+ description: Failed to get response
316
+
317
+ /api/ai/image/generation:
318
+ post:
319
+ summary: Generate images
320
+ description: Generate images using specified model and prompt
321
+ tags:
322
+ - Client
323
+ security:
324
+ - bearerAuth: []
325
+ requestBody:
326
+ required: true
327
+ content:
328
+ application/json:
329
+ schema:
330
+ $ref: '#/components/schemas/ImageGenerationOptions'
331
+ responses:
332
+ '201':
333
+ description: Images generated successfully
334
+ content:
335
+ application/json:
336
+ schema:
337
+ type: object
338
+ properties:
339
+ model:
340
+ type: string
341
+ description: Model used for generation
342
+ images:
343
+ type: array
344
+ items:
345
+ $ref: '#/components/schemas/OpenRouterImageMessage'
346
+ text:
347
+ type: string
348
+ description: Text content from multimodal models
349
+ count:
350
+ type: integer
351
+ description: Number of images generated
352
+ metadata:
353
+ type: object
354
+ properties:
355
+ model:
356
+ type: string
357
+ revisedPrompt:
358
+ type: string
359
+ usage:
360
+ $ref: '#/components/schemas/TokenUsage'
361
+ nextActions:
362
+ type: string
363
+ example: Images have been generated successfully. Use the returned URLs or base64 data to access them.
364
+ '400':
365
+ description: Invalid request - missing model or prompt
366
+ '401':
367
+ description: Unauthorized
368
+ '500':
369
+ description: Failed to generate image
370
+
371
+ components:
372
+ securitySchemes:
373
+ bearerAuth:
374
+ type: http
375
+ scheme: bearer
376
+ bearerFormat: JWT
377
+ apiKey:
378
+ type: apiKey
379
+ in: header
380
+ name: x-api-key
381
+
382
+ schemas:
383
+ ChatMessage:
384
+ type: object
385
+ required:
386
+ - role
387
+ - content
388
+ properties:
389
+ role:
390
+ type: string
391
+ enum: [user, assistant, system]
392
+ description: Role of the message sender
393
+ content:
394
+ type: string
395
+ description: Message content
396
+
397
+ ChatRequest:
398
+ type: object
399
+ required:
400
+ - model
401
+ properties:
402
+ model:
403
+ type: string
404
+ description: OpenRouter model identifier
405
+ example: openai/gpt-4
406
+ messages:
407
+ type: array
408
+ description: Array of messages for conversation
409
+ items:
410
+ $ref: '#/components/schemas/ChatMessage'
411
+ stream:
412
+ type: boolean
413
+ default: false
414
+ description: Enable streaming response via Server-Sent Events
415
+ temperature:
416
+ type: number
417
+ minimum: 0
418
+ maximum: 2
419
+ description: Controls randomness in generation
420
+ maxTokens:
421
+ type: integer
422
+ description: Maximum number of tokens to generate
423
+ topP:
424
+ type: number
425
+ minimum: 0
426
+ maximum: 1
427
+ description: Nucleus sampling parameter
428
+ systemPrompt:
429
+ type: string
430
+ description: System prompt to guide model behavior
431
+
432
+ ChatCompletionResponse:
433
+ type: object
434
+ properties:
435
+ success:
436
+ type: boolean
437
+ content:
438
+ type: string
439
+ description: AI model response
440
+ metadata:
441
+ type: object
442
+ properties:
443
+ model:
444
+ type: string
445
+ usage:
446
+ $ref: '#/components/schemas/TokenUsage'
447
+
448
+ TokenUsage:
449
+ type: object
450
+ properties:
451
+ promptTokens:
452
+ type: integer
453
+ completionTokens:
454
+ type: integer
455
+ totalTokens:
456
+ type: integer
457
+
458
+ ImageGenerationOptions:
459
+ type: object
460
+ required:
461
+ - model
462
+ - prompt
463
+ properties:
464
+ model:
465
+ type: string
466
+ description: OpenRouter model identifier for image generation
467
+ example: openai/dall-e-3
468
+ prompt:
469
+ type: string
470
+ description: Text prompt describing the desired image
471
+ example: "A serene landscape with mountains and a lake at sunset"
472
+
473
+ OpenRouterImageMessage:
474
+ type: object
475
+ properties:
476
+ type:
477
+ type: string
478
+ enum: [image_url]
479
+ image_url:
480
+ type: object
481
+ properties:
482
+ url:
483
+ type: string
484
+ description: Can be a direct URL or data:image base64 URL
485
+
486
+ OpenRouterModel:
487
+ type: object
488
+ properties:
489
+ id:
490
+ type: string
491
+ name:
492
+ type: string
493
+ created:
494
+ type: integer
495
+ description:
496
+ type: string
497
+ architecture:
498
+ type: object
499
+ properties:
500
+ input_modalities:
501
+ type: array
502
+ items:
503
+ type: string
504
+ output_modalities:
505
+ type: array
506
+ items:
507
+ type: string
508
+ tokenizer:
509
+ type: string
510
+ instruct_type:
511
+ type: string
512
+ topProvider:
513
+ type: object
514
+ properties:
515
+ is_moderated:
516
+ type: boolean
517
+ context_length:
518
+ type: integer
519
+ max_completion_tokens:
520
+ type: integer
521
+ pricing:
522
+ type: object
523
+ properties:
524
+ prompt:
525
+ type: string
526
+ completion:
527
+ type: string
528
+ image:
529
+ type: string
530
+ request:
531
+ type: string
532
+ web_search:
533
+ type: string
534
+ internal_reasoning:
535
+ type: string
536
+ input_cache_read:
537
+ type: string
538
+ input_cache_write:
539
+ type: string
540
+ context_length:
541
+ type: integer
542
+ max_completion_tokens:
543
+ type: integer
544
+ per_request_limits:
545
+ type: object
546
+ supported_parameters:
547
+ type: array
548
+ items:
549
+ type: string
550
+
551
+ ListModelsResponse:
552
+ type: object
553
+ properties:
554
+ text:
555
+ type: array
556
+ items:
557
+ type: object
558
+ properties:
559
+ provider:
560
+ type: string
561
+ example: openrouter
562
+ configured:
563
+ type: boolean
564
+ models:
565
+ type: array
566
+ items:
567
+ $ref: '#/components/schemas/OpenRouterModel'
568
+ image:
569
+ type: array
570
+ items:
571
+ type: object
572
+ properties:
573
+ provider:
574
+ type: string
575
+ example: openrouter
576
+ configured:
577
+ type: boolean
578
+ models:
579
+ type: array
580
+ items:
581
+ $ref: '#/components/schemas/OpenRouterModel'
582
+
583
+ CreateAIConfigurationRequest:
584
+ type: object
585
+ required:
586
+ - modality
587
+ - provider
588
+ - modelId
589
+ properties:
590
+ modality:
591
+ type: string
592
+ enum: [text, image]
593
+ provider:
594
+ type: string
595
+ example: openrouter
596
+ modelId:
597
+ type: string
598
+ example: openai/gpt-4
599
+ systemPrompt:
600
+ type: string
601
+ description: Optional system prompt for the configuration
602
+
603
+ UpdateAIConfigurationRequest:
604
+ type: object
605
+ properties:
606
+ systemPrompt:
607
+ type: string
608
+ description: Updated system prompt
609
+
610
+ AIConfiguration:
611
+ type: object
612
+ properties:
613
+ id:
614
+ type: string
615
+ format: uuid
616
+ modality:
617
+ type: string
618
+ enum: [text, image]
619
+ provider:
620
+ type: string
621
+ modelId:
622
+ type: string
623
+ systemPrompt:
624
+ type: string
625
+ createdAt:
626
+ type: string
627
+ format: date-time
628
+ updatedAt:
629
+ type: string
630
+ format: date-time
631
+
632
+ AIUsageSummary:
633
+ type: object
634
+ properties:
635
+ totalRequests:
636
+ type: integer
637
+ totalTokens:
638
+ type: integer
639
+ totalCost:
640
+ type: number
641
+ byModel:
642
+ type: object
643
+ additionalProperties:
644
+ type: object
645
+ properties:
646
+ requests:
647
+ type: integer
648
+ tokens:
649
+ type: integer
650
+ cost:
651
+ type: number
652
+
653
+ AIUsageRecord:
654
+ type: object
655
+ properties:
656
+ id:
657
+ type: string
658
+ format: uuid
659
+ configId:
660
+ type: string
661
+ format: uuid
662
+ modelId:
663
+ type: string
664
+ promptTokens:
665
+ type: integer
666
+ completionTokens:
667
+ type: integer
668
+ totalTokens:
669
+ type: integer
670
+ cost:
671
+ type: number
672
+ createdAt:
673
+ type: string
674
+ format: date-time
675
+
676
+ ErrorResponse:
677
+ type: object
678
+ required:
679
+ - error
680
+ properties:
681
+ error:
682
+ type: string
683
+ description: Error message
684
+ details:
685
+ type: string
686
+ description: Additional error details
687
+ code:
688
+ type: string
689
+ description: Error code for programmatic handling