insforge 1.2.10 → 1.4.8

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 (506) hide show
  1. package/.claude-plugin/marketplace.json +20 -20
  2. package/.dockerignore +60 -60
  3. package/.env.example +83 -77
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +65 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -63
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +46 -44
  15. package/CLAUDE_PLUGIN.md +104 -104
  16. package/CODE_OF_CONDUCT.md +128 -128
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -30
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -182
  23. package/assets/Dark.svg +23 -23
  24. package/auth/package.json +30 -28
  25. package/auth/src/lib/broadcastService.ts +4 -4
  26. package/auth/src/lib/insforge.ts +8 -0
  27. package/auth/src/main.tsx +2 -4
  28. package/auth/src/pages/SignInPage.tsx +5 -2
  29. package/auth/src/pages/SignUpPage.tsx +5 -2
  30. package/auth/src/pages/VerifyEmailPage.tsx +18 -0
  31. package/auth/tsconfig.json +33 -32
  32. package/auth/tsconfig.node.json +11 -11
  33. package/backend/package.json +82 -75
  34. package/backend/src/api/middlewares/rate-limiters.ts +127 -127
  35. package/backend/src/api/routes/ai/index.routes.ts +475 -468
  36. package/backend/src/api/routes/auth/index.routes.ts +720 -570
  37. package/backend/src/api/routes/auth/oauth.routes.ts +478 -448
  38. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  39. package/backend/src/api/routes/database/index.routes.ts +80 -1
  40. package/backend/src/api/routes/database/records.routes.ts +48 -184
  41. package/backend/src/api/routes/database/rpc.routes.ts +69 -0
  42. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  43. package/backend/src/api/routes/deployments/index.routes.ts +192 -0
  44. package/backend/src/api/routes/docs/index.routes.ts +76 -76
  45. package/backend/src/api/routes/email/index.routes.ts +35 -0
  46. package/backend/src/api/routes/functions/index.routes.ts +21 -15
  47. package/backend/src/api/routes/metadata/index.routes.ts +38 -0
  48. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  49. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  50. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  51. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  52. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  53. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  54. package/backend/src/api/routes/webhooks/index.routes.ts +109 -0
  55. package/backend/src/infra/database/database.manager.ts +14 -11
  56. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  57. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  58. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  59. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  60. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  61. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  62. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  63. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  64. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  65. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  66. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  67. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  68. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  69. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  70. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  71. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  72. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  73. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  74. package/backend/src/infra/database/migrations/018_schema-rework.sql +441 -0
  75. package/backend/src/infra/database/migrations/019_create-deployments-table.sql +36 -0
  76. package/backend/src/infra/database/migrations/020_add-audio-modality.sql +11 -0
  77. package/backend/src/infra/database/migrations/bootstrap/bootstrap-migrations.js +103 -0
  78. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  79. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  80. package/backend/src/infra/security/token.manager.ts +216 -125
  81. package/backend/src/infra/socket/socket.manager.ts +198 -64
  82. package/backend/src/providers/ai/openrouter.provider.ts +24 -12
  83. package/backend/src/providers/database/base.provider.ts +39 -0
  84. package/backend/src/providers/database/cloud.provider.ts +159 -0
  85. package/backend/src/providers/deployments/vercel.provider.ts +516 -0
  86. package/backend/src/providers/email/base.provider.ts +4 -7
  87. package/backend/src/providers/email/cloud.provider.ts +84 -0
  88. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  89. package/backend/src/providers/oauth/index.ts +1 -0
  90. package/backend/src/server.ts +329 -284
  91. package/backend/src/services/ai/ai-config.service.ts +6 -6
  92. package/backend/src/services/ai/ai-model.service.ts +60 -60
  93. package/backend/src/services/ai/ai-usage.service.ts +7 -7
  94. package/backend/src/services/ai/chat-completion.service.ts +415 -220
  95. package/backend/src/services/ai/helpers.ts +64 -64
  96. package/backend/src/services/ai/image-generation.service.ts +3 -3
  97. package/backend/src/services/ai/index.ts +13 -13
  98. package/backend/src/services/auth/auth-config.service.ts +4 -4
  99. package/backend/src/services/auth/auth-otp.service.ts +6 -6
  100. package/backend/src/services/auth/auth.service.ts +148 -74
  101. package/backend/src/services/auth/index.ts +4 -4
  102. package/backend/src/services/auth/oauth-config.service.ts +12 -12
  103. package/backend/src/services/database/database-advance.service.ts +19 -55
  104. package/backend/src/services/database/database-table.service.ts +38 -94
  105. package/backend/src/services/database/database.service.ts +127 -0
  106. package/backend/src/services/database/postgrest-proxy.service.ts +165 -0
  107. package/backend/src/services/deployments/deployment.service.ts +693 -0
  108. package/backend/src/services/email/email.service.ts +5 -7
  109. package/backend/src/services/functions/function.service.ts +61 -41
  110. package/backend/src/services/logs/audit.service.ts +10 -10
  111. package/backend/src/services/realtime/index.ts +3 -0
  112. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  113. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  114. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  115. package/backend/src/services/secrets/secret.service.ts +101 -27
  116. package/backend/src/services/storage/storage.service.ts +30 -30
  117. package/backend/src/services/usage/usage.service.ts +6 -6
  118. package/backend/src/types/ai.ts +8 -0
  119. package/backend/src/types/auth.ts +16 -1
  120. package/backend/src/types/database.ts +2 -0
  121. package/backend/src/types/deployments.ts +33 -0
  122. package/backend/src/types/realtime.ts +18 -0
  123. package/backend/src/types/socket.ts +7 -31
  124. package/backend/src/types/storage.ts +1 -1
  125. package/backend/src/types/webhooks.ts +45 -0
  126. package/backend/src/utils/cookies.ts +34 -0
  127. package/backend/src/utils/environment.ts +0 -14
  128. package/backend/src/utils/s3-config-loader.ts +64 -0
  129. package/backend/src/utils/seed.ts +79 -43
  130. package/backend/src/utils/sql-parser.ts +216 -0
  131. package/backend/src/utils/utils.ts +114 -114
  132. package/backend/src/utils/validations.ts +10 -10
  133. package/backend/tests/README.md +133 -133
  134. package/backend/tests/cleanup-all-test-data.sh +230 -230
  135. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  136. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  137. package/backend/tests/local/test-ai-config.sh +129 -129
  138. package/backend/tests/local/test-ai-usage.sh +80 -80
  139. package/backend/tests/local/test-auth-router.sh +143 -143
  140. package/backend/tests/local/test-database-router.sh +222 -222
  141. package/backend/tests/local/test-e2e.sh +240 -240
  142. package/backend/tests/local/test-fk-errors.sh +96 -96
  143. package/backend/tests/local/test-functions.sh +123 -123
  144. package/backend/tests/local/test-id-field.sh +200 -200
  145. package/backend/tests/local/test-logs.sh +132 -132
  146. package/backend/tests/local/test-public-bucket.sh +264 -264
  147. package/backend/tests/local/test-rpc.sh +141 -0
  148. package/backend/tests/local/test-secrets.sh +249 -249
  149. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  150. package/backend/tests/local/test-traditional-rest.sh +208 -208
  151. package/backend/tests/manual/README.md +50 -50
  152. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  153. package/backend/tests/manual/seed-large-table.sql +100 -100
  154. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  155. package/backend/tests/manual/test-ai-model-plugins.sh +258 -0
  156. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  157. package/backend/tests/manual/test-database-advance.sh +296 -296
  158. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  159. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  160. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  161. package/backend/tests/manual/test-universal-storage.sh +263 -263
  162. package/backend/tests/manual/test-users.sql +17 -17
  163. package/backend/tests/run-all-tests.sh +139 -139
  164. package/backend/tests/setup.ts +0 -0
  165. package/backend/tests/test-config.sh +338 -338
  166. package/backend/tests/unit/analyze-query.test.ts +697 -0
  167. package/backend/tests/unit/database-advance.test.ts +326 -0
  168. package/backend/tests/unit/helpers.test.ts +2 -2
  169. package/backend/tsconfig.json +22 -22
  170. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  171. package/claude-plugin/README.md +133 -133
  172. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +273 -270
  173. package/docker-compose.prod.yml +204 -200
  174. package/docker-compose.yml +232 -228
  175. package/docker-init/db/db-init.sql +97 -97
  176. package/docker-init/db/jwt.sql +5 -5
  177. package/docker-init/db/postgresql.conf +16 -16
  178. package/docker-init/logs/vector.yml +236 -236
  179. package/docs/README.md +44 -44
  180. package/docs/agent-docs/deployment.md +79 -0
  181. package/docs/agent-docs/real-time.md +269 -0
  182. package/docs/changelog.mdx +212 -67
  183. package/docs/core-concepts/ai/architecture.mdx +350 -372
  184. package/docs/core-concepts/ai/sdk.mdx +238 -213
  185. package/docs/core-concepts/authentication/architecture.mdx +276 -278
  186. package/docs/core-concepts/authentication/sdk.mdx +710 -414
  187. package/docs/core-concepts/authentication/ui-components/customization.mdx +733 -529
  188. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +247 -221
  189. package/docs/core-concepts/authentication/ui-components/react-router.mdx +183 -184
  190. package/docs/core-concepts/authentication/ui-components/react.mdx +136 -129
  191. package/docs/core-concepts/database/architecture.mdx +292 -255
  192. package/docs/core-concepts/database/pgvector.mdx +138 -0
  193. package/docs/core-concepts/database/sdk.mdx +382 -382
  194. package/docs/core-concepts/deployments/architecture.mdx +152 -0
  195. package/docs/core-concepts/email/architecture.mdx +103 -0
  196. package/docs/core-concepts/email/sdk.mdx +53 -0
  197. package/docs/core-concepts/functions/architecture.mdx +105 -105
  198. package/docs/core-concepts/functions/sdk.mdx +183 -184
  199. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  200. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  201. package/docs/core-concepts/storage/architecture.mdx +243 -243
  202. package/docs/core-concepts/storage/sdk.mdx +253 -253
  203. package/docs/deployment/README.md +94 -94
  204. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  205. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  206. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  207. package/docs/deployment/deploy-to-render.md +441 -441
  208. package/docs/deprecated/insforge-auth-api.md +214 -214
  209. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  210. package/docs/deprecated/insforge-db-api.md +358 -358
  211. package/docs/deprecated/insforge-db-sdk.md +139 -139
  212. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  213. package/docs/deprecated/insforge-debug.md +64 -64
  214. package/docs/deprecated/insforge-instructions.md +123 -123
  215. package/docs/deprecated/insforge-project.md +117 -117
  216. package/docs/deprecated/insforge-storage-api.md +278 -278
  217. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  218. package/docs/docs.json +240 -210
  219. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  220. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  221. package/docs/examples/framework-guides/react.mdx +165 -165
  222. package/docs/examples/framework-guides/svelte.mdx +153 -153
  223. package/docs/examples/framework-guides/vue.mdx +159 -159
  224. package/docs/examples/overview.mdx +67 -67
  225. package/docs/favicon.png +0 -0
  226. package/docs/favicon.svg +4 -19
  227. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  228. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  229. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  230. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  231. package/docs/images/changelog/dec-2025/apple-oauth.mp4 +0 -0
  232. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  233. package/docs/images/changelog/dec-2025/moreModels.png +0 -0
  234. package/docs/images/changelog/dec-2025/multi-region.webp +0 -0
  235. package/docs/images/changelog/dec-2025/postgres-connection.webp +0 -0
  236. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  237. package/docs/images/changelog/dec-2025/realtime2.png +0 -0
  238. package/docs/images/icons/ai.svg +4 -4
  239. package/docs/images/logos/nextjs.svg +4 -4
  240. package/docs/images/logos/nuxt.svg +4 -4
  241. package/docs/images/logos/react.svg +5 -5
  242. package/docs/images/logos/svelte.svg +4 -4
  243. package/docs/images/logos/vue.svg +5 -5
  244. package/docs/images/mcp-setup/CC-MCP-1.mp4 +0 -0
  245. package/docs/images/mcp-setup/CC-MCP-2.mp4 +0 -0
  246. package/docs/images/mcp-setup/Cursor-MCP-1.mp4 +0 -0
  247. package/docs/images/mcp-setup/Cursor-MCP-2.mp4 +0 -0
  248. package/docs/images/mcp-setup/Cursor-MCP-3.mp4 +0 -0
  249. package/docs/images/mcp-setup/claude-code-connect.png +0 -0
  250. package/docs/images/mcp-setup/cline-1.png +0 -0
  251. package/docs/images/mcp-setup/cline-2.png +0 -0
  252. package/docs/images/mcp-setup/cline-3.png +0 -0
  253. package/docs/images/mcp-setup/connect-project.png +0 -0
  254. package/docs/images/mcp-setup/copilot-1.png +0 -0
  255. package/docs/images/mcp-setup/copilot-2.png +0 -0
  256. package/docs/images/mcp-setup/copilot-3.png +0 -0
  257. package/docs/images/mcp-setup/mcp-json-1.png +0 -0
  258. package/docs/images/mcp-setup/mcp-json-2.png +0 -0
  259. package/docs/images/mcp-setup/qoder-1.png +0 -0
  260. package/docs/images/mcp-setup/qoder-2.png +0 -0
  261. package/docs/images/mcp-setup/roocode-1.png +0 -0
  262. package/docs/images/mcp-setup/roocode-2.png +0 -0
  263. package/docs/images/mcp-setup/trae-1.png +0 -0
  264. package/docs/images/mcp-setup/trae-2.png +0 -0
  265. package/docs/images/mcp-setup/trae-3.png +0 -0
  266. package/docs/images/mcp-setup/trae-4.png +0 -0
  267. package/docs/images/mcp-setup/trae-5.png +0 -0
  268. package/docs/images/mcp-setup/windsurf-1.png +0 -0
  269. package/docs/images/mcp-setup/windsurf-2.png +0 -0
  270. package/docs/insforge-instructions-sdk.md +93 -88
  271. package/docs/introduction.mdx +46 -45
  272. package/docs/logo/dark.svg +22 -22
  273. package/docs/logo/light.svg +20 -20
  274. package/docs/mcp-setup.mdx +332 -0
  275. package/docs/oauth-server.mdx +563 -0
  276. package/docs/partnership.mdx +720 -646
  277. package/docs/quickstart.mdx +82 -82
  278. package/docs/showcase.mdx +52 -52
  279. package/docs/snippets/sdk-installation.mdx +21 -21
  280. package/docs/snippets/service-icons.mdx +27 -27
  281. package/docs/vscode-extension.mdx +74 -0
  282. package/eslint.config.js +1 -0
  283. package/examples/oauth/frontend-oauth-example.html +250 -250
  284. package/examples/response-examples.md +443 -443
  285. package/frontend/components.json +17 -17
  286. package/frontend/package.json +69 -69
  287. package/frontend/src/App.tsx +8 -3
  288. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  289. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  290. package/frontend/src/assets/icons/checked.svg +3 -3
  291. package/frontend/src/assets/icons/connected.svg +3 -3
  292. package/frontend/src/assets/icons/error.svg +3 -3
  293. package/frontend/src/assets/icons/loader.svg +9 -9
  294. package/frontend/src/assets/icons/pencil.svg +4 -4
  295. package/frontend/src/assets/icons/refresh.svg +4 -4
  296. package/frontend/src/assets/icons/step_active.svg +3 -3
  297. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  298. package/frontend/src/assets/icons/warning.svg +3 -3
  299. package/frontend/src/assets/logos/antigravity.svg +1 -0
  300. package/frontend/src/assets/logos/apple.svg +3 -3
  301. package/frontend/src/assets/logos/claude_code.svg +3 -3
  302. package/frontend/src/assets/logos/cline.svg +6 -6
  303. package/frontend/src/assets/logos/copilot.svg +10 -0
  304. package/frontend/src/assets/logos/cursor.svg +20 -20
  305. package/frontend/src/assets/logos/deepseek.svg +139 -0
  306. package/frontend/src/assets/logos/discord.svg +8 -8
  307. package/frontend/src/assets/logos/facebook.svg +3 -3
  308. package/frontend/src/assets/logos/gemini.svg +19 -19
  309. package/frontend/src/assets/logos/github.svg +5 -5
  310. package/frontend/src/assets/logos/google.svg +13 -13
  311. package/frontend/src/assets/logos/grok.svg +10 -10
  312. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  313. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  314. package/frontend/src/assets/logos/instagram.svg +1 -1
  315. package/frontend/src/assets/logos/kiro.svg +9 -0
  316. package/frontend/src/assets/logos/linkedin.svg +3 -3
  317. package/frontend/src/assets/logos/openai.svg +10 -10
  318. package/frontend/src/assets/logos/qoder.svg +4 -0
  319. package/frontend/src/assets/logos/qwen.svg +15 -0
  320. package/frontend/src/assets/logos/roo_code.svg +9 -9
  321. package/frontend/src/assets/logos/spotify.svg +16 -16
  322. package/frontend/src/assets/logos/tiktok.svg +5 -5
  323. package/frontend/src/assets/logos/trae.svg +3 -3
  324. package/frontend/src/assets/logos/windsurf.svg +10 -10
  325. package/frontend/src/assets/logos/x.svg +3 -3
  326. package/frontend/src/components/CodeBlock.tsx +2 -2
  327. package/frontend/src/components/ConnectCTA.tsx +3 -2
  328. package/frontend/src/components/datagrid/DataGrid.tsx +90 -62
  329. package/frontend/src/components/datagrid/datagridTypes.tsx +2 -1
  330. package/frontend/src/components/datagrid/index.ts +1 -1
  331. package/frontend/src/components/index.ts +0 -1
  332. package/frontend/src/components/layout/AppHeader.tsx +13 -37
  333. package/frontend/src/components/layout/AppSidebar.tsx +85 -100
  334. package/frontend/src/components/layout/Layout.tsx +34 -32
  335. package/frontend/src/components/layout/PrimaryMenu.tsx +12 -4
  336. package/frontend/src/components/radix/Select.tsx +151 -151
  337. package/frontend/src/features/ai/components/AIConfigCard.tsx +200 -200
  338. package/frontend/src/features/ai/components/AIEmptyState.tsx +23 -23
  339. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +102 -101
  340. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -135
  341. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -51
  342. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -118
  343. package/frontend/src/features/ai/components/index.ts +6 -6
  344. package/frontend/src/features/ai/helpers.ts +147 -141
  345. package/frontend/src/features/ai/{page → pages}/AIPage.tsx +166 -166
  346. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -96
  347. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  348. package/frontend/src/features/auth/components/UsersDataGrid.tsx +61 -31
  349. package/frontend/src/features/auth/components/index.ts +5 -5
  350. package/frontend/src/features/auth/helpers.tsx +8 -0
  351. package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +275 -275
  352. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  353. package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +1 -1
  354. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +0 -2
  355. package/frontend/src/features/database/components/ForeignKeyCell.tsx +38 -11
  356. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +18 -8
  357. package/frontend/src/features/database/components/LinkRecordModal.tsx +61 -13
  358. package/frontend/src/features/database/components/RecordFormField.tsx +1 -1
  359. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  360. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  361. package/frontend/src/features/database/components/TableSidebar.tsx +0 -3
  362. package/frontend/src/features/database/components/TablesEmptyState.tsx +1 -1
  363. package/frontend/src/features/database/components/TemplatePreview.tsx +1 -2
  364. package/frontend/src/features/database/constants.ts +16 -28
  365. package/frontend/src/features/database/hooks/useCSVImport.ts +3 -2
  366. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  367. package/frontend/src/features/database/hooks/useRawSQL.ts +3 -2
  368. package/frontend/src/features/database/hooks/useTables.ts +30 -28
  369. package/frontend/src/features/database/index.ts +1 -0
  370. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -42
  371. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +34 -51
  372. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +42 -58
  373. package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +2 -2
  374. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  375. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +34 -51
  376. package/frontend/src/features/database/services/advance.service.ts +1 -41
  377. package/frontend/src/features/database/services/database.service.ts +55 -0
  378. package/frontend/src/features/database/services/record.service.ts +4 -20
  379. package/frontend/src/features/database/services/table.service.ts +1 -10
  380. package/frontend/src/features/database/templates/ai-chatbot.ts +6 -6
  381. package/frontend/src/features/database/templates/ecommerce-platform.ts +2 -2
  382. package/frontend/src/features/database/templates/instagram-clone.ts +10 -10
  383. package/frontend/src/features/database/templates/notion-clone.ts +8 -8
  384. package/frontend/src/features/database/templates/reddit-clone.ts +10 -10
  385. package/frontend/src/features/deployments/components/DeploymentRow.tsx +93 -0
  386. package/frontend/src/features/deployments/components/DeploymentsEmptyState.tsx +15 -0
  387. package/frontend/src/features/deployments/hooks/useDeployments.ts +157 -0
  388. package/frontend/src/features/deployments/pages/DeploymentsPage.tsx +318 -0
  389. package/frontend/src/features/deployments/services/deployments.service.ts +63 -0
  390. package/frontend/src/features/functions/components/FunctionRow.tsx +72 -72
  391. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +56 -56
  392. package/frontend/src/features/functions/components/SecretRow.tsx +3 -3
  393. package/frontend/src/features/functions/components/index.ts +5 -5
  394. package/frontend/src/features/functions/hooks/useFunctions.ts +5 -4
  395. package/frontend/src/features/functions/hooks/useSecrets.ts +6 -9
  396. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  397. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +118 -116
  398. package/frontend/src/features/functions/services/function.service.ts +8 -25
  399. package/frontend/src/features/functions/services/secret.service.ts +23 -41
  400. package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +125 -118
  401. package/frontend/src/features/logs/components/LogDetailPanel.tsx +41 -0
  402. package/frontend/src/features/logs/components/LogsDataGrid.tsx +32 -1
  403. package/frontend/src/features/logs/components/index.ts +1 -0
  404. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  405. package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +36 -6
  406. package/frontend/src/features/onboard/components/ApiCredentialsSection.tsx +59 -0
  407. package/frontend/src/features/onboard/components/ConnectionStringSection.tsx +180 -0
  408. package/frontend/src/features/onboard/components/McpConnectionSection.tsx +159 -0
  409. package/frontend/src/features/onboard/components/OnboardingController.tsx +68 -0
  410. package/frontend/src/features/onboard/components/OnboardingModal.tsx +121 -267
  411. package/frontend/src/features/onboard/components/ShowPasswordButton.tsx +21 -0
  412. package/frontend/src/features/onboard/components/index.ts +9 -4
  413. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +1 -1
  414. package/frontend/src/features/onboard/components/mcp/QoderDeeplinkGenerator.tsx +36 -0
  415. package/frontend/src/features/onboard/components/mcp/helpers.tsx +123 -98
  416. package/frontend/src/features/onboard/components/mcp/index.ts +4 -3
  417. package/frontend/src/features/onboard/index.ts +17 -13
  418. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  419. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  420. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  421. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  422. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  423. package/frontend/src/features/realtime/index.ts +11 -0
  424. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  425. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  426. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  427. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  428. package/frontend/src/features/settings/pages/SettingsPage.tsx +349 -0
  429. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  430. package/frontend/src/features/visualizer/components/AuthNode.tsx +4 -4
  431. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +24 -11
  432. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +11 -36
  433. package/frontend/src/index.css +249 -249
  434. package/frontend/src/lib/contexts/ModalContext.tsx +35 -0
  435. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  436. package/frontend/src/lib/hooks/useMetadata.ts +45 -1
  437. package/frontend/src/lib/hooks/useModal.tsx +2 -0
  438. package/frontend/src/lib/routing/AppRoutes.tsx +103 -84
  439. package/frontend/src/lib/services/metadata.service.ts +20 -3
  440. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  441. package/frontend/src/lib/utils/menuItems.ts +223 -183
  442. package/frontend/src/lib/utils/utils.ts +196 -183
  443. package/frontend/tsconfig.json +25 -25
  444. package/frontend/tsconfig.node.json +9 -9
  445. package/functions/deno.json +24 -24
  446. package/functions/server.ts +6 -6
  447. package/functions/worker-template.js +1 -1
  448. package/i18n/README.ar.md +130 -130
  449. package/i18n/README.de.md +130 -130
  450. package/i18n/README.es.md +154 -154
  451. package/i18n/README.fr.md +134 -134
  452. package/i18n/README.hi.md +129 -129
  453. package/i18n/README.ja.md +174 -174
  454. package/i18n/README.ko.md +136 -136
  455. package/i18n/README.pt-BR.md +131 -131
  456. package/i18n/README.ru.md +129 -129
  457. package/i18n/README.zh-CN.md +133 -133
  458. package/openapi/ai.yaml +825 -715
  459. package/openapi/auth.yaml +1324 -1244
  460. package/openapi/email.yaml +158 -0
  461. package/openapi/functions.yaml +475 -475
  462. package/openapi/health.yaml +29 -29
  463. package/openapi/logs.yaml +221 -223
  464. package/openapi/metadata.yaml +175 -177
  465. package/openapi/realtime.yaml +699 -0
  466. package/openapi/records.yaml +381 -381
  467. package/openapi/secrets.yaml +370 -370
  468. package/openapi/storage.yaml +875 -875
  469. package/openapi/tables.yaml +462 -463
  470. package/package.json +97 -97
  471. package/shared-schemas/package.json +31 -31
  472. package/shared-schemas/src/ai-api.schema.ts +251 -143
  473. package/shared-schemas/src/ai.schema.ts +8 -4
  474. package/shared-schemas/src/auth-api.schema.ts +380 -339
  475. package/shared-schemas/src/auth.schema.ts +18 -11
  476. package/shared-schemas/src/cloud-events.schema.ts +26 -0
  477. package/shared-schemas/src/database-api.schema.ts +32 -1
  478. package/shared-schemas/src/database.schema.ts +39 -0
  479. package/shared-schemas/src/deployments-api.schema.ts +55 -0
  480. package/shared-schemas/src/deployments.schema.ts +30 -0
  481. package/shared-schemas/src/docs.schema.ts +32 -0
  482. package/shared-schemas/src/email-api.schema.ts +30 -0
  483. package/shared-schemas/src/functions-api.schema.ts +13 -4
  484. package/shared-schemas/src/functions.schema.ts +1 -1
  485. package/shared-schemas/src/index.ts +22 -14
  486. package/shared-schemas/src/metadata.schema.ts +39 -4
  487. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  488. package/shared-schemas/src/realtime.schema.ts +143 -0
  489. package/shared-schemas/src/secrets-api.schema.ts +44 -0
  490. package/shared-schemas/src/secrets.schema.ts +15 -0
  491. package/shared-schemas/tsconfig.json +21 -21
  492. package/tsconfig.json +7 -7
  493. package/zeabur/README.md +26 -13
  494. package/zeabur/template.yml +1001 -1032
  495. package/.cursor/rules/cursor-rules.mdc +0 -94
  496. package/backend/src/types/profile.ts +0 -55
  497. package/frontend/src/components/ProjectInfoModal.tsx +0 -128
  498. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  499. package/test-gemini.sh +0 -35
  500. package/test-usage-admin.sh +0 -57
  501. package/test-usage.sh +0 -50
  502. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  503. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  504. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  505. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  506. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
package/openapi/ai.yaml CHANGED
@@ -1,716 +1,826 @@
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
- - inputModality
587
- - outputModality
588
- - provider
589
- - modelId
590
-
591
- properties:
592
- inputModality:
593
- type: array
594
- items:
595
- type: string
596
- enum: [text, image]
597
- outputModality:
598
- type: array
599
- items:
600
- type: string
601
- enum: [text, image]
602
- provider:
603
- type: string
604
- example: openrouter
605
- modelId:
606
- type: string
607
- example: openai/gpt-4
608
- systemPrompt:
609
- type: string
610
- description: Optional system prompt for the configuration
611
-
612
- UpdateAIConfigurationRequest:
613
- type: object
614
- properties:
615
- systemPrompt:
616
- type: string
617
- description: Updated system prompt
618
-
619
- AIConfiguration:
620
- type: object
621
- properties:
622
- id:
623
- type: string
624
- format: uuid
625
- modality:
626
- type: string
627
- enum: [text, image]
628
- provider:
629
- type: string
630
- modelId:
631
- type: string
632
- systemPrompt:
633
- type: string
634
- createdAt:
635
- type: string
636
- format: date-time
637
- updatedAt:
638
- type: string
639
- format: date-time
640
-
641
- AIUsageSummary:
642
- type: object
643
- properties:
644
- totalRequests:
645
- type: integer
646
- totalTokens:
647
- type: integer
648
- totalCost:
649
- type: number
650
- byModel:
651
- type: object
652
- additionalProperties:
653
- type: object
654
- properties:
655
- requests:
656
- type: integer
657
- tokens:
658
- type: integer
659
- cost:
660
- type: number
661
-
662
- AIUsageRecord:
663
- type: object
664
- properties:
665
- id:
666
- type: string
667
- format: uuid
668
- configId:
669
- type: string
670
- format: uuid
671
- modelId:
672
- type: string
673
- promptTokens:
674
- type: integer
675
- completionTokens:
676
- type: integer
677
- totalTokens:
678
- type: integer
679
- cost:
680
- type: number
681
- createdAt:
682
- type: string
683
- format: date-time
684
- provider:
685
- type: string
686
- nullable: true
687
- model:
688
- type: string
689
- nullable: true
690
- inputModality:
691
- type: array
692
- nullable: true
693
- items:
694
- type: string
695
- enum: [text, image]
696
- outputModality:
697
- type: array
698
- nullable: true
699
- items:
700
- type: string
701
- enum: [text, image]
702
-
703
- ErrorResponse:
704
- type: object
705
- required:
706
- - error
707
- properties:
708
- error:
709
- type: string
710
- description: Error message
711
- details:
712
- type: string
713
- description: Additional error details
714
- code:
715
- type: string
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 (supports text, images, audio, and files/PDFs)
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
+ webSearch:
432
+ $ref: '#/components/schemas/WebSearchPlugin'
433
+ fileParser:
434
+ $ref: '#/components/schemas/FileParserPlugin'
435
+ thinking:
436
+ type: boolean
437
+ description: Enable extended reasoning capabilities (appends :thinking to model ID if not already present). Not every model supports this, only works with Anthropic models with the :thinking suffix.
438
+
439
+ ChatCompletionResponse:
440
+ type: object
441
+ properties:
442
+ text:
443
+ type: string
444
+ description: AI model response content
445
+ annotations:
446
+ type: array
447
+ description: URL citations from web search results (present when webSearch is enabled)
448
+ items:
449
+ $ref: '#/components/schemas/UrlCitationAnnotation'
450
+ metadata:
451
+ type: object
452
+ properties:
453
+ model:
454
+ type: string
455
+ usage:
456
+ $ref: '#/components/schemas/TokenUsage'
457
+
458
+ TokenUsage:
459
+ type: object
460
+ properties:
461
+ promptTokens:
462
+ type: integer
463
+ completionTokens:
464
+ type: integer
465
+ totalTokens:
466
+ type: integer
467
+
468
+ WebSearchPlugin:
469
+ type: object
470
+ required:
471
+ - enabled
472
+ properties:
473
+ enabled:
474
+ type: boolean
475
+ description: Enable web search integration
476
+ engine:
477
+ type: string
478
+ enum: [native, exa]
479
+ description: |
480
+ Search engine selection:
481
+ - native: Use provider's built-in web search (OpenAI, Anthropic, Perplexity, xAI)
482
+ - exa: Use Exa's search API
483
+ - undefined: Auto-select (native if available, otherwise Exa)
484
+ maxResults:
485
+ type: integer
486
+ minimum: 1
487
+ maximum: 10
488
+ default: 5
489
+ description: Maximum number of search results to include
490
+ searchPrompt:
491
+ type: string
492
+ description: Custom prompt for attaching search results to the message
493
+
494
+ FileParserPlugin:
495
+ type: object
496
+ required:
497
+ - enabled
498
+ properties:
499
+ enabled:
500
+ type: boolean
501
+ description: Enable file parsing for PDFs in messages
502
+ pdf:
503
+ type: object
504
+ properties:
505
+ engine:
506
+ type: string
507
+ enum: [pdf-text, mistral-ocr, native]
508
+ description: |
509
+ PDF processing engine:
510
+ - pdf-text: Best for well-structured PDFs with clear text content (Free)
511
+ - mistral-ocr: Best for scanned documents or PDFs with images ($2 per 1,000 pages)
512
+ - native: Only for models with native file support (charged as input tokens)
513
+ If not specified, defaults to native if available, otherwise mistral-ocr
514
+
515
+ FileContent:
516
+ type: object
517
+ description: File content for PDFs and other documents
518
+ required:
519
+ - type
520
+ - file
521
+ properties:
522
+ type:
523
+ type: string
524
+ enum: [file]
525
+ file:
526
+ type: object
527
+ required:
528
+ - filename
529
+ - file_data
530
+ properties:
531
+ filename:
532
+ type: string
533
+ description: Filename with extension (e.g., "document.pdf")
534
+ example: document.pdf
535
+ file_data:
536
+ type: string
537
+ description: |
538
+ File data can be:
539
+ - Public URL: "https://example.com/document.pdf"
540
+ - Base64 data URL: "data:application/pdf;base64,..."
541
+ example: "https://example.com/document.pdf"
542
+
543
+ UrlCitationAnnotation:
544
+ type: object
545
+ properties:
546
+ type:
547
+ type: string
548
+ enum: [url_citation]
549
+ urlCitation:
550
+ type: object
551
+ properties:
552
+ url:
553
+ type: string
554
+ description: URL of the cited source
555
+ title:
556
+ type: string
557
+ description: Title of the cited page
558
+ content:
559
+ type: string
560
+ description: Relevant content snippet from the source
561
+ startIndex:
562
+ type: integer
563
+ description: Start character index in response text where citation applies
564
+ endIndex:
565
+ type: integer
566
+ description: End character index in response text where citation applies
567
+
568
+ ImageGenerationOptions:
569
+ type: object
570
+ required:
571
+ - model
572
+ - prompt
573
+ properties:
574
+ model:
575
+ type: string
576
+ description: OpenRouter model identifier for image generation
577
+ example: openai/dall-e-3
578
+ prompt:
579
+ type: string
580
+ description: Text prompt describing the desired image
581
+ example: "A serene landscape with mountains and a lake at sunset"
582
+
583
+ OpenRouterImageMessage:
584
+ type: object
585
+ properties:
586
+ type:
587
+ type: string
588
+ enum: [image_url]
589
+ image_url:
590
+ type: object
591
+ properties:
592
+ url:
593
+ type: string
594
+ description: Can be a direct URL or data:image base64 URL
595
+
596
+ OpenRouterModel:
597
+ type: object
598
+ properties:
599
+ id:
600
+ type: string
601
+ name:
602
+ type: string
603
+ created:
604
+ type: integer
605
+ description:
606
+ type: string
607
+ architecture:
608
+ type: object
609
+ properties:
610
+ input_modalities:
611
+ type: array
612
+ items:
613
+ type: string
614
+ output_modalities:
615
+ type: array
616
+ items:
617
+ type: string
618
+ tokenizer:
619
+ type: string
620
+ instruct_type:
621
+ type: string
622
+ topProvider:
623
+ type: object
624
+ properties:
625
+ is_moderated:
626
+ type: boolean
627
+ context_length:
628
+ type: integer
629
+ max_completion_tokens:
630
+ type: integer
631
+ pricing:
632
+ type: object
633
+ properties:
634
+ prompt:
635
+ type: string
636
+ completion:
637
+ type: string
638
+ image:
639
+ type: string
640
+ request:
641
+ type: string
642
+ web_search:
643
+ type: string
644
+ internal_reasoning:
645
+ type: string
646
+ input_cache_read:
647
+ type: string
648
+ input_cache_write:
649
+ type: string
650
+ context_length:
651
+ type: integer
652
+ max_completion_tokens:
653
+ type: integer
654
+ per_request_limits:
655
+ type: object
656
+ supported_parameters:
657
+ type: array
658
+ items:
659
+ type: string
660
+
661
+ ListModelsResponse:
662
+ type: object
663
+ properties:
664
+ text:
665
+ type: array
666
+ items:
667
+ type: object
668
+ properties:
669
+ provider:
670
+ type: string
671
+ example: openrouter
672
+ configured:
673
+ type: boolean
674
+ models:
675
+ type: array
676
+ items:
677
+ $ref: '#/components/schemas/OpenRouterModel'
678
+ image:
679
+ type: array
680
+ items:
681
+ type: object
682
+ properties:
683
+ provider:
684
+ type: string
685
+ example: openrouter
686
+ configured:
687
+ type: boolean
688
+ models:
689
+ type: array
690
+ items:
691
+ $ref: '#/components/schemas/OpenRouterModel'
692
+
693
+ CreateAIConfigurationRequest:
694
+ type: object
695
+ required:
696
+ - inputModality
697
+ - outputModality
698
+ - provider
699
+ - modelId
700
+
701
+ properties:
702
+ inputModality:
703
+ type: array
704
+ items:
705
+ type: string
706
+ enum: [text, image]
707
+ outputModality:
708
+ type: array
709
+ items:
710
+ type: string
711
+ enum: [text, image]
712
+ provider:
713
+ type: string
714
+ example: openrouter
715
+ modelId:
716
+ type: string
717
+ example: openai/gpt-4
718
+ systemPrompt:
719
+ type: string
720
+ description: Optional system prompt for the configuration
721
+
722
+ UpdateAIConfigurationRequest:
723
+ type: object
724
+ properties:
725
+ systemPrompt:
726
+ type: string
727
+ description: Updated system prompt
728
+
729
+ AIConfiguration:
730
+ type: object
731
+ properties:
732
+ id:
733
+ type: string
734
+ format: uuid
735
+ modality:
736
+ type: string
737
+ enum: [text, image]
738
+ provider:
739
+ type: string
740
+ modelId:
741
+ type: string
742
+ systemPrompt:
743
+ type: string
744
+ createdAt:
745
+ type: string
746
+ format: date-time
747
+ updatedAt:
748
+ type: string
749
+ format: date-time
750
+
751
+ AIUsageSummary:
752
+ type: object
753
+ properties:
754
+ totalRequests:
755
+ type: integer
756
+ totalTokens:
757
+ type: integer
758
+ totalCost:
759
+ type: number
760
+ byModel:
761
+ type: object
762
+ additionalProperties:
763
+ type: object
764
+ properties:
765
+ requests:
766
+ type: integer
767
+ tokens:
768
+ type: integer
769
+ cost:
770
+ type: number
771
+
772
+ AIUsageRecord:
773
+ type: object
774
+ properties:
775
+ id:
776
+ type: string
777
+ format: uuid
778
+ configId:
779
+ type: string
780
+ format: uuid
781
+ modelId:
782
+ type: string
783
+ promptTokens:
784
+ type: integer
785
+ completionTokens:
786
+ type: integer
787
+ totalTokens:
788
+ type: integer
789
+ cost:
790
+ type: number
791
+ createdAt:
792
+ type: string
793
+ format: date-time
794
+ provider:
795
+ type: string
796
+ nullable: true
797
+ model:
798
+ type: string
799
+ nullable: true
800
+ inputModality:
801
+ type: array
802
+ nullable: true
803
+ items:
804
+ type: string
805
+ enum: [text, image]
806
+ outputModality:
807
+ type: array
808
+ nullable: true
809
+ items:
810
+ type: string
811
+ enum: [text, image]
812
+
813
+ ErrorResponse:
814
+ type: object
815
+ required:
816
+ - error
817
+ properties:
818
+ error:
819
+ type: string
820
+ description: Error message
821
+ details:
822
+ type: string
823
+ description: Additional error details
824
+ code:
825
+ type: string
716
826
  description: Error code for programmatic handling