insforge 0.3.3 → 1.3.0

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 (635) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.dockerignore +60 -57
  3. package/.env.example +84 -49
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -83
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -79
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -0
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +66 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -0
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +44 -3
  15. package/CLAUDE_PLUGIN.md +104 -0
  16. package/CODE_OF_CONDUCT.md +128 -0
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -27
  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 -134
  23. package/assets/Dark.svg +23 -23
  24. package/assets/mcpInstallv2.png +0 -0
  25. package/assets/sampleResponse.png +0 -0
  26. package/auth/index.html +13 -0
  27. package/auth/package.json +28 -0
  28. package/auth/public/favicon.ico +0 -0
  29. package/auth/src/App.tsx +33 -0
  30. package/auth/src/components/ErrorCard.tsx +37 -0
  31. package/auth/src/components/Layout.tsx +13 -0
  32. package/auth/src/index.css +19 -0
  33. package/auth/src/lib/broadcastService.ts +117 -0
  34. package/auth/src/lib/utils.ts +11 -0
  35. package/auth/src/main.tsx +22 -0
  36. package/auth/src/pages/ForgotPasswordPage.tsx +11 -0
  37. package/auth/src/pages/ResetPasswordPage.tsx +11 -0
  38. package/auth/src/pages/SignInPage.tsx +60 -0
  39. package/auth/src/pages/SignUpPage.tsx +60 -0
  40. package/auth/src/pages/VerifyEmailPage.tsx +20 -0
  41. package/auth/src/vite-env.d.ts +10 -0
  42. package/auth/tsconfig.json +32 -0
  43. package/auth/tsconfig.node.json +11 -0
  44. package/auth/vite.config.ts +25 -0
  45. package/backend/package.json +78 -75
  46. package/backend/src/api/{middleware → middlewares}/auth.ts +8 -9
  47. package/backend/src/api/middlewares/rate-limiters.ts +127 -0
  48. package/backend/src/api/routes/{ai.ts → ai/index.routes.ts} +22 -26
  49. package/backend/src/api/routes/auth/index.routes.ts +667 -0
  50. package/backend/src/api/routes/auth/oauth.routes.ts +473 -0
  51. package/backend/src/api/routes/{database.advance.ts → database/advance.routes.ts} +128 -65
  52. package/backend/src/api/routes/database/index.routes.ts +90 -0
  53. package/backend/src/api/routes/{database.records.ts → database/records.routes.ts} +26 -12
  54. package/backend/src/api/routes/{database.tables.ts → database/tables.routes.ts} +6 -23
  55. package/backend/src/api/routes/docs/index.routes.ts +75 -0
  56. package/backend/src/api/routes/email/index.routes.ts +35 -0
  57. package/backend/src/api/routes/functions/index.routes.ts +194 -0
  58. package/backend/src/api/routes/{logs.ts → logs/index.routes.ts} +25 -30
  59. package/backend/src/api/routes/{metadata.ts → metadata/index.routes.ts} +33 -31
  60. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  61. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  62. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  63. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  64. package/backend/src/api/routes/{secrets.ts → secrets/index.routes.ts} +27 -22
  65. package/backend/src/api/routes/{storage.ts → storage/index.routes.ts} +48 -61
  66. package/backend/src/api/routes/usage/index.routes.ts +91 -0
  67. package/backend/src/infra/config/app.config.ts +51 -0
  68. package/backend/src/infra/database/database.manager.ts +182 -0
  69. package/backend/{migrations → src/infra/database/migrations}/000_create-base-tables.sql +141 -141
  70. package/backend/{migrations → src/infra/database/migrations}/001_create-helper-functions.sql +40 -40
  71. package/backend/{migrations → src/infra/database/migrations}/002_rename-auth-tables.sql +29 -29
  72. package/backend/{migrations → src/infra/database/migrations}/003_create-users-table.sql +55 -55
  73. package/backend/{migrations → src/infra/database/migrations}/004_add-reload-postgrest-func.sql +23 -23
  74. package/backend/{migrations → src/infra/database/migrations}/005_enable-project-admin-modify-users.sql +29 -29
  75. package/backend/{migrations → src/infra/database/migrations}/006_modify-ai-usage-table.sql +24 -24
  76. package/backend/{migrations → src/infra/database/migrations}/007_drop-metadata-table.sql +1 -1
  77. package/backend/{migrations → src/infra/database/migrations}/008_add-system-tables.sql +76 -76
  78. package/backend/{migrations → src/infra/database/migrations}/009_add-function-secrets.sql +23 -23
  79. package/backend/{migrations → src/infra/database/migrations}/010_modify-ai-config-modalities.sql +93 -93
  80. package/backend/{migrations → src/infra/database/migrations}/011_refactor-secrets-table.sql +15 -15
  81. package/backend/{migrations → src/infra/database/migrations}/012_add-storage-uploaded-by.sql +7 -7
  82. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -0
  83. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +8 -0
  84. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +60 -0
  85. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -0
  86. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  87. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  88. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  89. package/backend/src/{core/secrets/encryption.ts → infra/security/encryption.manager.ts} +3 -2
  90. package/backend/src/infra/security/token.manager.ts +219 -0
  91. package/backend/src/infra/socket/socket.manager.ts +522 -0
  92. package/backend/src/providers/ai/openrouter.provider.ts +380 -0
  93. package/backend/src/providers/email/base.provider.ts +38 -0
  94. package/backend/src/providers/email/cloud.provider.ts +271 -0
  95. package/backend/src/{core/logs/providers → providers/logs}/base.provider.ts +11 -11
  96. package/backend/src/{core/logs/providers → providers/logs}/cloudwatch.provider.ts +61 -38
  97. package/backend/src/providers/logs/local.provider.ts +185 -0
  98. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  99. package/backend/src/providers/oauth/base.provider.ts +29 -0
  100. package/backend/src/providers/oauth/discord.provider.ts +195 -0
  101. package/backend/src/providers/oauth/facebook.provider.ts +194 -0
  102. package/backend/src/providers/oauth/github.provider.ts +208 -0
  103. package/backend/src/providers/oauth/google.provider.ts +249 -0
  104. package/backend/src/providers/oauth/index.ts +8 -0
  105. package/backend/src/providers/oauth/linkedin.provider.ts +240 -0
  106. package/backend/src/providers/oauth/microsoft.provider.ts +169 -0
  107. package/backend/src/providers/oauth/x.provider.ts +202 -0
  108. package/backend/src/providers/storage/base.provider.ts +29 -0
  109. package/backend/src/providers/storage/local.provider.ts +103 -0
  110. package/backend/src/providers/storage/s3.provider.ts +313 -0
  111. package/backend/src/server.ts +317 -288
  112. package/backend/src/{core/ai/config.ts → services/ai/ai-config.service.ts} +19 -24
  113. package/backend/src/services/ai/ai-model.service.ts +60 -0
  114. package/backend/src/{core/ai/usage.ts → services/ai/ai-usage.service.ts} +28 -35
  115. package/backend/src/{core/ai/chat.ts → services/ai/chat-completion.service.ts} +37 -24
  116. package/backend/src/services/ai/helpers.ts +64 -0
  117. package/backend/src/{core/ai/image.ts → services/ai/image-generation.service.ts} +17 -19
  118. package/backend/src/services/ai/index.ts +13 -0
  119. package/backend/src/services/auth/auth-config.service.ts +250 -0
  120. package/backend/src/services/auth/auth-otp.service.ts +424 -0
  121. package/backend/src/services/auth/auth.service.ts +1150 -0
  122. package/backend/src/services/auth/index.ts +4 -0
  123. package/backend/src/{core/auth/oauth.ts → services/auth/oauth-config.service.ts} +106 -52
  124. package/backend/src/{core/database/advance.ts → services/database/database-advance.service.ts} +97 -131
  125. package/backend/src/services/database/database-table.service.ts +802 -0
  126. package/backend/src/services/database/database.service.ts +127 -0
  127. package/backend/src/services/email/email.service.ts +73 -0
  128. package/backend/src/{core/functions/functions.ts → services/functions/function.service.ts} +95 -88
  129. package/backend/src/{core/logs/audit.ts → services/logs/audit.service.ts} +92 -75
  130. package/backend/src/services/logs/log.service.ts +73 -0
  131. package/backend/src/services/realtime/index.ts +3 -0
  132. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  133. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  134. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  135. package/backend/src/{core/secrets/secrets.ts → services/secrets/secret.service.ts} +48 -66
  136. package/backend/src/services/storage/storage.service.ts +617 -0
  137. package/backend/src/services/usage/usage.service.ts +149 -0
  138. package/backend/src/types/auth.ts +77 -2
  139. package/backend/src/types/email.ts +8 -0
  140. package/backend/src/types/error-constants.ts +4 -0
  141. package/backend/src/types/logs.ts +0 -29
  142. package/backend/src/types/realtime.ts +18 -0
  143. package/backend/src/{core/socket/types.ts → types/socket.ts} +11 -36
  144. package/backend/src/utils/cookies.ts +35 -0
  145. package/backend/src/utils/environment.ts +9 -3
  146. package/backend/src/utils/logger.ts +20 -2
  147. package/backend/src/utils/s3-config-loader.ts +64 -0
  148. package/backend/src/utils/seed.ts +301 -205
  149. package/backend/src/utils/sql-parser.ts +91 -1
  150. package/backend/src/utils/utils.ts +114 -0
  151. package/backend/src/utils/validations.ts +40 -4
  152. package/backend/tests/README.md +133 -133
  153. package/backend/tests/cleanup-all-test-data.sh +230 -230
  154. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  155. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  156. package/backend/tests/local/test-ai-config.sh +129 -0
  157. package/backend/tests/local/test-ai-usage.sh +80 -0
  158. package/backend/tests/local/test-auth-router.sh +143 -143
  159. package/backend/tests/local/test-database-router.sh +222 -222
  160. package/backend/tests/local/test-e2e.sh +240 -240
  161. package/backend/tests/local/test-fk-errors.sh +96 -96
  162. package/backend/tests/local/test-functions.sh +123 -0
  163. package/backend/tests/local/test-id-field.sh +200 -200
  164. package/backend/tests/local/test-logs.sh +132 -0
  165. package/backend/tests/local/test-public-bucket.sh +264 -264
  166. package/backend/tests/local/test-secrets.sh +249 -247
  167. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  168. package/backend/tests/local/test-traditional-rest.sh +208 -208
  169. package/backend/tests/manual/README.md +50 -50
  170. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  171. package/backend/tests/manual/seed-large-table.sql +100 -100
  172. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  173. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  174. package/backend/tests/manual/test-database-advance.sh +296 -296
  175. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  176. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  177. package/backend/tests/manual/test-rawsql-modes.sh +244 -0
  178. package/backend/tests/manual/test-universal-storage.sh +263 -263
  179. package/backend/tests/manual/test-users.sql +17 -17
  180. package/backend/tests/run-all-tests.sh +139 -139
  181. package/backend/tests/setup.ts +0 -0
  182. package/backend/tests/test-config.sh +338 -302
  183. package/backend/tests/unit/analyze-query.test.ts +697 -0
  184. package/backend/tests/unit/cloud-token.test.ts +48 -0
  185. package/backend/tests/unit/constant.test.ts +8 -0
  186. package/backend/tests/unit/email.test.ts +372 -0
  187. package/backend/tests/unit/environment.test.ts +59 -0
  188. package/backend/tests/unit/helpers.test.ts +63 -0
  189. package/backend/tests/unit/logger.test.ts +22 -0
  190. package/backend/tests/unit/rate-limit.test.ts +154 -0
  191. package/backend/tests/unit/response.test.ts +58 -0
  192. package/backend/tests/unit/sql-parser.test.ts +74 -0
  193. package/backend/tests/unit/uuid.test.ts +21 -0
  194. package/backend/tests/unit/validations.test.ts +80 -0
  195. package/backend/tsconfig.json +22 -22
  196. package/backend/vitest.config.ts +11 -0
  197. package/claude-plugin/.claude-plugin/plugin.json +24 -0
  198. package/claude-plugin/README.md +133 -0
  199. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -0
  200. package/docker-compose.prod.yml +204 -144
  201. package/docker-compose.yml +232 -167
  202. package/docker-init/db/db-init.sql +97 -125
  203. package/docker-init/db/jwt.sql +5 -5
  204. package/docker-init/db/postgresql.conf +16 -16
  205. package/docker-init/logs/vector.yml +236 -0
  206. package/docs/README.md +44 -0
  207. package/docs/agent-docs/real-time.md +269 -0
  208. package/docs/changelog.mdx +119 -0
  209. package/docs/core-concepts/ai/architecture.mdx +373 -0
  210. package/docs/core-concepts/ai/sdk.mdx +213 -0
  211. package/docs/core-concepts/authentication/architecture.mdx +278 -0
  212. package/docs/core-concepts/authentication/sdk.mdx +414 -0
  213. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -0
  214. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -0
  215. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -0
  216. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -0
  217. package/docs/core-concepts/database/architecture.mdx +256 -0
  218. package/docs/core-concepts/database/sdk.mdx +382 -0
  219. package/docs/core-concepts/email/architecture.mdx +101 -0
  220. package/docs/core-concepts/email/sdk.mdx +53 -0
  221. package/docs/core-concepts/functions/architecture.mdx +105 -0
  222. package/docs/core-concepts/functions/sdk.mdx +184 -0
  223. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  224. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  225. package/docs/core-concepts/storage/architecture.mdx +243 -0
  226. package/docs/core-concepts/storage/sdk.mdx +253 -0
  227. package/docs/deployment/README.md +94 -0
  228. package/docs/deployment/deploy-to-aws-ec2.md +565 -0
  229. package/docs/deployment/deploy-to-azure-virtual-machines.md +313 -0
  230. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -0
  231. package/docs/deployment/deploy-to-render.md +441 -0
  232. package/docs/deprecated/insforge-auth-api.md +214 -214
  233. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  234. package/docs/deprecated/insforge-db-api.md +358 -358
  235. package/docs/deprecated/insforge-db-sdk.md +139 -139
  236. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  237. package/docs/deprecated/insforge-debug.md +64 -64
  238. package/docs/deprecated/insforge-instructions.md +123 -123
  239. package/docs/deprecated/insforge-project.md +117 -117
  240. package/docs/deprecated/insforge-storage-api.md +278 -278
  241. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  242. package/docs/docs.json +232 -0
  243. package/docs/examples/framework-guides/nextjs.mdx +131 -0
  244. package/docs/examples/framework-guides/nuxt.mdx +165 -0
  245. package/docs/examples/framework-guides/react.mdx +165 -0
  246. package/docs/examples/framework-guides/svelte.mdx +153 -0
  247. package/docs/examples/framework-guides/vue.mdx +159 -0
  248. package/docs/examples/overview.mdx +67 -0
  249. package/docs/favicon.svg +19 -0
  250. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  251. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  252. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  253. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  254. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  255. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  256. package/docs/images/changelog/nov-2025/auth-components.webp +0 -0
  257. package/docs/images/changelog/nov-2025/database-metadata.webp +0 -0
  258. package/docs/images/changelog/nov-2025/quickstart-prompts.webp +0 -0
  259. package/docs/images/changelog/nov-2025/sql-editor.webp +0 -0
  260. package/docs/images/changelog/nov-2025/usage-page.webp +0 -0
  261. package/docs/images/changelog/october-2025/csv-upload.webp +0 -0
  262. package/docs/images/changelog/october-2025/logs-feature.webp +0 -0
  263. package/docs/images/changelog/october-2025/oauth-providers.webp +0 -0
  264. package/docs/images/checks-passed.png +0 -0
  265. package/docs/images/dashboard-connect-expanded.png +0 -0
  266. package/docs/images/dashboard-connect.png +0 -0
  267. package/docs/images/hero-dark.png +0 -0
  268. package/docs/images/hero-light.png +0 -0
  269. package/docs/images/icons/ai.svg +4 -0
  270. package/docs/images/icons/auth.svg +1 -0
  271. package/docs/images/icons/database.svg +1 -0
  272. package/docs/images/icons/function.svg +1 -0
  273. package/docs/images/icons/storage.svg +1 -0
  274. package/docs/images/logos/nextjs.svg +4 -0
  275. package/docs/images/logos/nuxt.svg +4 -0
  276. package/docs/images/logos/react.svg +5 -0
  277. package/docs/images/logos/svelte.svg +4 -0
  278. package/docs/images/logos/vue.svg +5 -0
  279. package/docs/images/mcp-install.png +0 -0
  280. package/docs/images/onboarding-mcp.png +0 -0
  281. package/docs/insforge-instructions-sdk.md +89 -407
  282. package/docs/introduction.mdx +45 -0
  283. package/docs/logo/dark.svg +22 -0
  284. package/docs/logo/light.svg +20 -0
  285. package/docs/partnership.mdx +652 -0
  286. package/docs/quickstart.mdx +83 -0
  287. package/docs/showcase/2048-arena.png +0 -0
  288. package/docs/showcase/framegen-cloud.png +0 -0
  289. package/docs/showcase/line-connect-race.png +0 -0
  290. package/docs/showcase/moment-vibe.png +0 -0
  291. package/docs/showcase/national-flags.png +0 -0
  292. package/docs/showcase/pokemon-vibe.png +0 -0
  293. package/docs/showcase/pure-browse-buy.png +0 -0
  294. package/docs/showcase.mdx +52 -0
  295. package/docs/snippets/sdk-installation.mdx +22 -0
  296. package/docs/snippets/service-icons.mdx +27 -0
  297. package/eslint.config.js +10 -3
  298. package/examples/oauth/frontend-oauth-example.html +250 -250
  299. package/examples/response-examples.md +443 -443
  300. package/frontend/components.json +17 -17
  301. package/frontend/package.json +69 -63
  302. package/frontend/src/App.tsx +13 -82
  303. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  304. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  305. package/frontend/src/assets/icons/checked.svg +3 -3
  306. package/frontend/src/assets/icons/connected.svg +3 -0
  307. package/frontend/src/assets/icons/error.svg +3 -3
  308. package/frontend/src/assets/icons/loader.svg +9 -0
  309. package/frontend/src/assets/icons/pencil.svg +4 -4
  310. package/frontend/src/assets/icons/refresh.svg +4 -4
  311. package/frontend/src/assets/icons/step_active.svg +3 -3
  312. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  313. package/frontend/src/assets/icons/warning.svg +3 -3
  314. package/frontend/src/assets/logos/apple.svg +4 -0
  315. package/frontend/src/assets/logos/claude_code.svg +3 -3
  316. package/frontend/src/assets/logos/cline.svg +6 -6
  317. package/frontend/src/assets/logos/cursor.svg +20 -20
  318. package/frontend/src/assets/logos/discord.svg +8 -8
  319. package/frontend/src/assets/logos/facebook.svg +3 -0
  320. package/frontend/src/assets/logos/gemini.svg +19 -19
  321. package/frontend/src/assets/logos/github.svg +5 -5
  322. package/frontend/src/assets/logos/google.svg +13 -13
  323. package/frontend/src/assets/logos/grok.svg +10 -10
  324. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  325. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  326. package/frontend/src/assets/logos/instagram.svg +2 -0
  327. package/frontend/src/assets/logos/linkedin.svg +3 -0
  328. package/frontend/src/assets/logos/microsoft.svg +1 -0
  329. package/frontend/src/assets/logos/openai.svg +10 -10
  330. package/frontend/src/assets/logos/roo_code.svg +9 -9
  331. package/frontend/src/assets/logos/spotify.svg +17 -0
  332. package/frontend/src/assets/logos/tiktok.svg +6 -0
  333. package/frontend/src/assets/logos/trae.svg +3 -3
  334. package/frontend/src/assets/logos/windsurf.svg +10 -10
  335. package/frontend/src/assets/logos/x.svg +3 -0
  336. package/frontend/src/components/Checkbox.tsx +27 -29
  337. package/frontend/src/components/CodeBlock.tsx +55 -2
  338. package/frontend/src/components/CodeEditor.tsx +92 -0
  339. package/frontend/src/components/ConfirmDialog.tsx +1 -1
  340. package/frontend/src/components/ConnectCTA.tsx +38 -0
  341. package/frontend/src/components/CopyButton.tsx +52 -15
  342. package/frontend/src/components/ErrorState.tsx +1 -2
  343. package/frontend/src/components/FeatureSidebar.tsx +6 -6
  344. package/frontend/src/components/FeatureSidebarItem.tsx +2 -2
  345. package/frontend/src/components/JsonHighlight.tsx +21 -9
  346. package/frontend/src/components/ProjectInfoModal.tsx +128 -0
  347. package/frontend/src/components/PromptDialog.tsx +1 -4
  348. package/frontend/src/components/SearchInput.tsx +1 -2
  349. package/frontend/src/components/Stepper.tsx +53 -0
  350. package/frontend/src/components/ThemeToggle.tsx +3 -3
  351. package/frontend/src/components/datagrid/DataGrid.tsx +25 -32
  352. package/frontend/src/components/datagrid/cell-editors/DateCellEditor.tsx +1 -2
  353. package/frontend/src/components/datagrid/cell-editors/JsonCellEditor.tsx +2 -4
  354. package/frontend/src/components/datagrid/index.ts +23 -0
  355. package/frontend/src/components/index.ts +23 -30
  356. package/frontend/src/components/layout/AppHeader.tsx +131 -91
  357. package/frontend/src/components/layout/AppSidebar.tsx +80 -170
  358. package/frontend/src/components/layout/Layout.tsx +12 -23
  359. package/frontend/src/components/layout/PrimaryMenu.tsx +187 -0
  360. package/frontend/src/components/layout/SecondaryMenu.tsx +70 -0
  361. package/frontend/src/components/layout/index.ts +5 -0
  362. package/frontend/src/components/radix/Tooltip.tsx +24 -13
  363. package/frontend/src/components/radix/index.ts +22 -0
  364. package/frontend/src/features/ai/components/AIConfigCard.tsx +129 -83
  365. package/frontend/src/features/ai/components/AIEmptyState.tsx +12 -7
  366. package/frontend/src/features/ai/components/ModalityFilterSidebar.tsx +101 -0
  367. package/frontend/src/features/ai/components/ModelSelectionDialog.tsx +135 -0
  368. package/frontend/src/features/ai/components/ModelSelectionGrid.tsx +51 -0
  369. package/frontend/src/features/ai/components/SystemPromptDialog.tsx +118 -0
  370. package/frontend/src/features/ai/components/index.ts +6 -0
  371. package/frontend/src/features/ai/helpers.ts +57 -71
  372. package/frontend/src/features/ai/hooks/useAIConfigs.ts +39 -113
  373. package/frontend/src/features/ai/hooks/useAIUsage.ts +0 -2
  374. package/frontend/src/features/ai/pages/AIPage.tsx +166 -0
  375. package/frontend/src/features/ai/services/ai.service.ts +5 -5
  376. package/frontend/src/features/auth/components/AuthPreview.tsx +96 -0
  377. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +54 -30
  378. package/frontend/src/features/auth/components/UserFormDialog.tsx +13 -6
  379. package/frontend/src/features/auth/components/UsersDataGrid.tsx +50 -14
  380. package/frontend/src/features/auth/components/index.ts +5 -0
  381. package/frontend/src/features/auth/helpers.tsx +208 -0
  382. package/frontend/src/features/auth/hooks/useAnonToken.ts +30 -0
  383. package/frontend/src/features/auth/hooks/useAuthConfig.ts +48 -0
  384. package/frontend/src/features/auth/hooks/useOAuthConfig.ts +14 -10
  385. package/frontend/src/features/auth/hooks/useUsers.ts +43 -5
  386. package/frontend/src/features/auth/index.ts +3 -2
  387. package/frontend/src/features/auth/pages/AuthMethodsPage.tsx +275 -0
  388. package/frontend/src/features/auth/pages/ConfigurationPage.tsx +395 -0
  389. package/frontend/src/features/auth/pages/UsersPage.tsx +257 -0
  390. package/frontend/src/features/auth/services/anonToken.service.ts +11 -0
  391. package/frontend/src/features/auth/services/config.service.ts +19 -0
  392. package/frontend/src/features/auth/services/{oauth.service.ts → oauth-config.service.ts} +4 -4
  393. package/frontend/src/features/auth/services/{auth.service.ts → user.service.ts} +7 -53
  394. package/frontend/src/features/dashboard/components/ConnectionSuccessBanner.tsx +35 -0
  395. package/frontend/src/features/dashboard/components/PromptCard.tsx +21 -0
  396. package/frontend/src/features/dashboard/components/PromptDialog.tsx +103 -0
  397. package/frontend/src/features/dashboard/components/StatsCard.tsx +50 -0
  398. package/frontend/src/features/dashboard/components/index.ts +4 -0
  399. package/frontend/src/features/dashboard/pages/DashboardPage.tsx +212 -0
  400. package/frontend/src/features/dashboard/prompts/ai-chatbot.ts +13 -0
  401. package/frontend/src/features/dashboard/prompts/crm-system.ts +13 -0
  402. package/frontend/src/features/dashboard/prompts/ecommerce-platform.ts +12 -0
  403. package/frontend/src/features/dashboard/prompts/index.ts +31 -0
  404. package/frontend/src/features/dashboard/prompts/instagram-clone.ts +11 -0
  405. package/frontend/src/features/dashboard/prompts/notion-clone.ts +14 -0
  406. package/frontend/src/features/dashboard/prompts/reddit-clone.ts +12 -0
  407. package/frontend/src/features/database/components/DatabaseDataGrid.tsx +48 -17
  408. package/frontend/src/features/database/components/ForeignKeyCell.tsx +15 -34
  409. package/frontend/src/features/database/components/ForeignKeyPopover.tsx +19 -20
  410. package/frontend/src/features/database/components/LinkRecordModal.tsx +120 -125
  411. package/frontend/src/features/database/components/RecordFormDialog.tsx +22 -33
  412. package/frontend/src/features/database/components/RecordFormField.tsx +45 -47
  413. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  414. package/frontend/src/features/database/components/TableEmptyState.tsx +6 -5
  415. package/frontend/src/features/database/components/TableForm.tsx +28 -19
  416. package/frontend/src/features/database/components/TableFormColumn.tsx +2 -3
  417. package/frontend/src/features/database/components/TableSidebar.tsx +1 -1
  418. package/frontend/src/features/database/components/TablesEmptyState.tsx +48 -0
  419. package/frontend/src/features/database/components/TemplateCard.tsx +37 -0
  420. package/frontend/src/features/database/components/TemplatePreview.tsx +92 -0
  421. package/frontend/src/features/database/components/index.ts +19 -0
  422. package/frontend/src/features/database/constants.ts +28 -2
  423. package/frontend/src/features/database/contexts/SQLEditorContext.tsx +188 -0
  424. package/frontend/src/features/database/helpers.ts +2 -2
  425. package/frontend/src/features/database/hooks/useCSVImport.ts +29 -0
  426. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  427. package/frontend/src/features/database/hooks/useRawSQL.ts +55 -0
  428. package/frontend/src/features/database/hooks/useRecords.ts +139 -0
  429. package/frontend/src/features/database/hooks/useTables.ts +135 -0
  430. package/frontend/src/features/database/index.ts +7 -1
  431. package/frontend/src/features/database/pages/FunctionsPage.tsx +203 -0
  432. package/frontend/src/features/database/pages/IndexesPage.tsx +228 -0
  433. package/frontend/src/features/database/pages/PoliciesPage.tsx +237 -0
  434. package/frontend/src/features/database/pages/SQLEditorPage.tsx +382 -0
  435. package/frontend/src/features/database/{page/DatabasePage.tsx → pages/TablesPage.tsx} +168 -209
  436. package/frontend/src/features/database/pages/TemplatesPage.tsx +39 -0
  437. package/frontend/src/features/database/pages/TriggersPage.tsx +230 -0
  438. package/frontend/src/features/database/services/advance.service.ts +40 -0
  439. package/frontend/src/features/database/services/database.service.ts +33 -194
  440. package/frontend/src/features/database/services/record.service.ts +219 -0
  441. package/frontend/src/features/database/services/table.service.ts +58 -0
  442. package/frontend/src/features/database/templates/ai-chatbot.ts +402 -0
  443. package/frontend/src/features/database/templates/crm-system.ts +528 -0
  444. package/frontend/src/features/database/templates/ecommerce-platform.ts +553 -0
  445. package/frontend/src/features/database/templates/index.ts +34 -0
  446. package/frontend/src/features/database/templates/instagram-clone.ts +222 -0
  447. package/frontend/src/features/database/templates/notion-clone.ts +483 -0
  448. package/frontend/src/features/database/templates/reddit-clone.ts +526 -0
  449. package/frontend/src/features/functions/components/FunctionRow.tsx +2 -1
  450. package/frontend/src/features/functions/components/FunctionsSidebar.tsx +1 -1
  451. package/frontend/src/features/functions/components/SecretRow.tsx +1 -1
  452. package/frontend/src/features/functions/components/index.ts +5 -0
  453. package/frontend/src/features/functions/hooks/useFunctions.ts +4 -4
  454. package/frontend/src/features/{secrets → functions}/hooks/useSecrets.ts +5 -5
  455. package/frontend/src/features/functions/pages/FunctionsPage.tsx +148 -0
  456. package/frontend/src/features/functions/{components/SecretsContent.tsx → pages/SecretsPage.tsx} +19 -21
  457. package/frontend/src/features/functions/services/{functions.service.ts → function.service.ts} +2 -2
  458. package/frontend/src/features/{secrets/services/secrets.service.ts → functions/services/secret.service.ts} +2 -2
  459. package/frontend/src/features/login/hooks/usePartnerOrigin.ts +27 -0
  460. package/frontend/src/features/login/pages/CloudLoginPage.tsx +118 -0
  461. package/frontend/src/features/login/{page → pages}/LoginPage.tsx +16 -23
  462. package/frontend/src/features/login/services/partnership.service.ts +65 -0
  463. package/frontend/src/features/logs/components/LogsDataGrid.tsx +89 -0
  464. package/frontend/src/features/logs/components/SeverityBadge.tsx +18 -0
  465. package/frontend/src/features/logs/components/index.ts +2 -0
  466. package/frontend/src/features/logs/helpers.ts +24 -0
  467. package/frontend/src/features/logs/hooks/useAuditLogs.ts +4 -4
  468. package/frontend/src/features/logs/hooks/useLogSources.ts +137 -0
  469. package/frontend/src/features/logs/hooks/useLogs.ts +163 -0
  470. package/frontend/src/features/logs/hooks/useMcpUsage.ts +128 -0
  471. package/frontend/src/features/logs/index.ts +8 -2
  472. package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +91 -38
  473. package/frontend/src/features/logs/pages/LogsPage.tsx +152 -0
  474. package/frontend/src/features/logs/pages/MCPLogsPage.tsx +84 -0
  475. package/frontend/src/features/logs/services/audit.service.ts +63 -0
  476. package/frontend/src/features/logs/services/log.service.ts +15 -110
  477. package/frontend/src/features/logs/services/usage.service.ts +31 -0
  478. package/frontend/src/features/onboard/components/McpConnectionStatus.tsx +68 -0
  479. package/frontend/src/features/onboard/components/OnboardingModal.tsx +267 -0
  480. package/frontend/src/features/onboard/components/VideoDemoModal.tsx +38 -0
  481. package/frontend/src/features/onboard/components/index.ts +4 -0
  482. package/frontend/src/features/onboard/components/mcp/CursorDeeplinkGenerator.tsx +2 -2
  483. package/frontend/src/features/onboard/components/mcp/{mcp-helper.tsx → helpers.tsx} +8 -8
  484. package/frontend/src/features/onboard/components/mcp/index.ts +2 -3
  485. package/frontend/src/features/onboard/index.ts +13 -3
  486. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  487. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  488. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  489. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  490. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  491. package/frontend/src/features/realtime/index.ts +11 -0
  492. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  493. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  494. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  495. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  496. package/frontend/src/features/storage/components/BucketEmptyState.tsx +9 -6
  497. package/frontend/src/features/storage/components/BucketFormDialog.tsx +25 -41
  498. package/frontend/src/features/storage/components/FilePreviewDialog.tsx +20 -8
  499. package/frontend/src/features/storage/components/StorageDataGrid.tsx +4 -3
  500. package/frontend/src/features/storage/components/StorageManager.tsx +23 -34
  501. package/frontend/src/features/storage/components/index.ts +12 -0
  502. package/frontend/src/features/storage/hooks/useStorage.ts +208 -0
  503. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +41 -143
  504. package/frontend/src/features/storage/services/storage.service.ts +22 -1
  505. package/frontend/src/features/visualizer/components/AuthNode.tsx +72 -56
  506. package/frontend/src/features/visualizer/components/BucketNode.tsx +4 -4
  507. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +108 -80
  508. package/frontend/src/features/visualizer/components/TableNode.tsx +34 -41
  509. package/frontend/src/features/visualizer/components/VisualizerSkeleton.tsx +12 -4
  510. package/frontend/src/features/visualizer/pages/VisualizerPage.tsx +97 -0
  511. package/frontend/src/index.css +1 -0
  512. package/frontend/src/lib/analytics/posthog.tsx +27 -0
  513. package/frontend/src/lib/contexts/AuthContext.tsx +38 -31
  514. package/frontend/src/lib/contexts/SocketContext.tsx +123 -80
  515. package/frontend/src/{features/metadata → lib}/hooks/useMetadata.ts +1 -1
  516. package/frontend/src/lib/hooks/useToast.tsx +6 -2
  517. package/frontend/src/lib/routing/AppRoutes.tsx +99 -0
  518. package/frontend/src/lib/routing/RequireAuth.tsx +27 -0
  519. package/frontend/src/lib/utils/cloudMessaging.ts +20 -0
  520. package/frontend/src/lib/utils/menuItems.ts +207 -0
  521. package/frontend/src/lib/utils/{validation-schemas.ts → schemaValidations.ts} +10 -5
  522. package/frontend/src/lib/utils/utils.ts +32 -1
  523. package/frontend/src/vite-env.d.ts +1 -0
  524. package/frontend/tsconfig.json +25 -25
  525. package/frontend/tsconfig.node.json +9 -9
  526. package/frontend/vite.config.ts +5 -3
  527. package/functions/deno.json +24 -24
  528. package/functions/server.ts +315 -290
  529. package/functions/worker-template.js +15 -4
  530. package/i18n/README.ar.md +130 -0
  531. package/i18n/README.de.md +130 -0
  532. package/i18n/README.es.md +154 -0
  533. package/i18n/README.fr.md +134 -0
  534. package/i18n/README.hi.md +129 -0
  535. package/i18n/README.ja.md +174 -0
  536. package/i18n/README.ko.md +137 -0
  537. package/i18n/README.pt-BR.md +131 -0
  538. package/i18n/README.ru.md +129 -0
  539. package/i18n/README.zh-CN.md +133 -0
  540. package/openapi/ai.yaml +715 -688
  541. package/openapi/auth.yaml +1244 -563
  542. package/openapi/email.yaml +158 -0
  543. package/openapi/functions.yaml +475 -475
  544. package/openapi/health.yaml +29 -29
  545. package/openapi/logs.yaml +223 -223
  546. package/openapi/metadata.yaml +177 -177
  547. package/openapi/realtime.yaml +699 -0
  548. package/openapi/records.yaml +381 -381
  549. package/openapi/secrets.yaml +370 -370
  550. package/openapi/storage.yaml +875 -875
  551. package/openapi/tables.yaml +463 -463
  552. package/package.json +97 -88
  553. package/shared-schemas/package.json +31 -31
  554. package/shared-schemas/src/ai-api.schema.ts +34 -58
  555. package/shared-schemas/src/ai.schema.ts +63 -54
  556. package/shared-schemas/src/auth-api.schema.ts +352 -193
  557. package/shared-schemas/src/auth.schema.ts +43 -7
  558. package/shared-schemas/src/cloud-events.schema.ts +57 -0
  559. package/shared-schemas/src/database-api.schema.ts +35 -4
  560. package/shared-schemas/src/database.schema.ts +40 -1
  561. package/shared-schemas/src/docs.schema.ts +26 -0
  562. package/shared-schemas/src/email-api.schema.ts +30 -0
  563. package/shared-schemas/src/index.ts +5 -0
  564. package/shared-schemas/src/logs-api.schema.ts +7 -1
  565. package/shared-schemas/src/logs.schema.ts +26 -0
  566. package/shared-schemas/src/metadata.schema.ts +18 -4
  567. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  568. package/shared-schemas/src/realtime.schema.ts +143 -0
  569. package/shared-schemas/tsconfig.json +21 -21
  570. package/tsconfig.json +7 -7
  571. package/zeabur/README.md +13 -0
  572. package/zeabur/template.yml +1032 -0
  573. package/.github/workflows/deploy-aws.yml +0 -130
  574. package/backend/src/api/routes/agent.ts +0 -29
  575. package/backend/src/api/routes/auth.oauth.ts +0 -482
  576. package/backend/src/api/routes/auth.ts +0 -386
  577. package/backend/src/api/routes/docs.ts +0 -66
  578. package/backend/src/api/routes/functions.ts +0 -183
  579. package/backend/src/api/routes/openapi.ts +0 -82
  580. package/backend/src/api/routes/usage.ts +0 -96
  581. package/backend/src/core/ai/client.ts +0 -242
  582. package/backend/src/core/ai/model.ts +0 -117
  583. package/backend/src/core/auth/auth.ts +0 -780
  584. package/backend/src/core/database/manager.ts +0 -178
  585. package/backend/src/core/database/table.ts +0 -772
  586. package/backend/src/core/documentation/agent.ts +0 -689
  587. package/backend/src/core/documentation/openapi.ts +0 -856
  588. package/backend/src/core/logs/analytics.ts +0 -76
  589. package/backend/src/core/logs/providers/localdb.provider.ts +0 -246
  590. package/backend/src/core/socket/socket.ts +0 -388
  591. package/backend/src/core/storage/storage.ts +0 -923
  592. package/backend/src/utils/cloud-token.ts +0 -39
  593. package/backend/src/utils/helpers.ts +0 -49
  594. package/backend/src/utils/uuid.ts +0 -9
  595. package/backend/tests/manual/test-better-auth.sh +0 -303
  596. package/docker-init/db/logs.sql +0 -9
  597. package/frontend/README.md +0 -112
  598. package/frontend/src/components/datagrid/index.tsx +0 -20
  599. package/frontend/src/components/layout/CloudLayout.tsx +0 -95
  600. package/frontend/src/features/ai/components/AIConfigDialog.tsx +0 -76
  601. package/frontend/src/features/ai/components/AIConfigForm.tsx +0 -222
  602. package/frontend/src/features/ai/components/fields/ModalityField.tsx +0 -87
  603. package/frontend/src/features/ai/components/fields/ModelSelectionField.tsx +0 -134
  604. package/frontend/src/features/ai/components/fields/SystemPromptField.tsx +0 -33
  605. package/frontend/src/features/ai/page/AIPage.tsx +0 -178
  606. package/frontend/src/features/auth/components/AddOAuthDialog.tsx +0 -106
  607. package/frontend/src/features/auth/components/AuthMethodTab.tsx +0 -238
  608. package/frontend/src/features/auth/components/UsersTab.tsx +0 -114
  609. package/frontend/src/features/auth/page/AuthenticationPage.tsx +0 -169
  610. package/frontend/src/features/dashboard/page/DashboardPage.tsx +0 -194
  611. package/frontend/src/features/database/hooks/UseLinkModal.tsx +0 -78
  612. package/frontend/src/features/functions/components/FunctionViewer.tsx +0 -46
  613. package/frontend/src/features/functions/components/FunctionsContent.tsx +0 -88
  614. package/frontend/src/features/functions/page/FunctionsPage.tsx +0 -28
  615. package/frontend/src/features/login/components/AuthErrorBoundary.tsx +0 -87
  616. package/frontend/src/features/login/components/PrivateRoute.tsx +0 -24
  617. package/frontend/src/features/login/page/CloudLoginPage.tsx +0 -93
  618. package/frontend/src/features/logs/components/AnalyticsLogsTable.tsx +0 -313
  619. package/frontend/src/features/logs/components/LogsTable.tsx +0 -199
  620. package/frontend/src/features/logs/page/AnalyticsLogsPage.tsx +0 -530
  621. package/frontend/src/features/metadata/index.ts +0 -0
  622. package/frontend/src/features/metadata/page/MetadataPage.tsx +0 -136
  623. package/frontend/src/features/onboard/components/CompletionCard.tsx +0 -41
  624. package/frontend/src/features/onboard/components/OnboardButton.tsx +0 -84
  625. package/frontend/src/features/onboard/components/StepContent.tsx +0 -91
  626. package/frontend/src/features/onboard/components/TestConnectionStep.tsx +0 -53
  627. package/frontend/src/features/onboard/components/mcp/McpInstallation.tsx +0 -144
  628. package/frontend/src/features/onboard/page/OnBoardPage.tsx +0 -104
  629. package/frontend/src/features/onboard/types.ts +0 -8
  630. package/frontend/src/features/visualizer/page/VisualizerPage.tsx +0 -127
  631. package/frontend/src/lib/contexts/OnboardStepContext.tsx +0 -68
  632. package/frontend/src/lib/hooks/useOnboardingCompletion.ts +0 -29
  633. /package/backend/src/api/{middleware → middlewares}/error.ts +0 -0
  634. /package/backend/src/api/{middleware → middlewares}/upload.ts +0 -0
  635. /package/frontend/src/{features/metadata → lib}/services/metadata.service.ts +0 -0
@@ -1,303 +1,339 @@
1
- #!/bin/bash
2
-
3
- # Test configuration file
4
- # Source this file in test scripts to get consistent configuration
5
-
6
- # API Configuration
7
- export TEST_API_BASE="${TEST_API_BASE:-http://localhost:7130/api}"
8
-
9
- # Admin credentials - can be overridden by environment variables
10
- export TEST_ADMIN_EMAIL="${TEST_ADMIN_EMAIL:-${ADMIN_EMAIL:-admin@example.com}}"
11
- export TEST_ADMIN_PASSWORD="${TEST_ADMIN_PASSWORD:-${ADMIN_PASSWORD:-change-this-password}}"
12
-
13
- # User test credentials
14
- export TEST_USER_EMAIL_PREFIX="${TEST_USER_EMAIL_PREFIX:-testuser_}"
15
-
16
- # Colors for output
17
- export RED='\033[0;31m'
18
- export GREEN='\033[0;32m'
19
- export YELLOW='\033[1;33m'
20
- export BLUE='\033[0;34m'
21
- export NC='\033[0m' # No Color
22
-
23
- # Utility functions
24
- print_success() {
25
- echo -e "${GREEN}✅ $1${NC}"
26
- }
27
-
28
- print_fail() {
29
- echo -e "${RED}❌ $1${NC}"
30
- track_test_failure
31
- }
32
-
33
- print_info() {
34
- echo -e "${YELLOW}$1${NC}"
35
- }
36
-
37
- print_blue() {
38
- echo -e "${BLUE}$1${NC}"
39
- }
40
-
41
- # Function to login as admin and get token
42
- get_admin_token() {
43
- # Use JWT admin endpoint
44
- local response=$(curl -s -X POST "$TEST_API_BASE/auth/admin/sessions" \
45
- -H "Content-Type: application/json" \
46
- -d "{\"email\":\"$TEST_ADMIN_EMAIL\",\"password\":\"$TEST_ADMIN_PASSWORD\"}")
47
-
48
- if echo "$response" | grep -q '"accessToken"'; then
49
- echo "$response" | grep -o '"accessToken":"[^"]*"' | cut -d'"' -f4
50
- else
51
- echo ""
52
- fi
53
- }
54
-
55
- # Function to get admin API key
56
- get_admin_api_key() {
57
- # Only use ACCESS_API_KEY environment variable
58
- if [ -n "$ACCESS_API_KEY" ]; then
59
- echo "$ACCESS_API_KEY"
60
- else
61
- echo ""
62
- fi
63
- }
64
-
65
- # Check if required tools are installed
66
- check_requirements() {
67
- if ! command -v curl &> /dev/null; then
68
- print_fail "curl is required but not installed"
69
- exit 1
70
- fi
71
-
72
- if ! command -v jq &> /dev/null; then
73
- print_info "jq is recommended for JSON parsing"
74
- fi
75
- }
76
-
77
- # Array to track test tables created
78
- declare -a TEST_TABLES_CREATED=()
79
-
80
- # Array to track test users created
81
- declare -a TEST_USERS_CREATED=()
82
-
83
- # Array to track test buckets created
84
- declare -a TEST_BUCKETS_CREATED=()
85
-
86
- # Function to register a table for cleanup
87
- register_test_table() {
88
- local table_name=$1
89
- TEST_TABLES_CREATED+=("$table_name")
90
- }
91
-
92
- # Function to register a user for cleanup
93
- register_test_user() {
94
- local user_email=$1
95
- TEST_USERS_CREATED+=("$user_email")
96
- }
97
-
98
- # Function to register a bucket for cleanup
99
- register_test_bucket() {
100
- local bucket_name=$1
101
- TEST_BUCKETS_CREATED+=("$bucket_name")
102
- }
103
-
104
- # Function to register a user with Better Auth
105
- register_user() {
106
- local email=$1
107
- local password=$2
108
- local name=${3:-"Test User"}
109
-
110
- # Use JWT registration
111
- curl -s -X POST "$TEST_API_BASE/auth/users" \
112
- -H "Content-Type: application/json" \
113
- -d "{\"email\":\"$email\",\"password\":\"$password\",\"name\":\"$name\"}"
114
- }
115
-
116
- # Function to login a user with Better Auth
117
- login_user() {
118
- local email=$1
119
- local password=$2
120
-
121
- # Use JWT login
122
- curl -s -X POST "$TEST_API_BASE/auth/sessions" \
123
- -H "Content-Type: application/json" \
124
- -d "{\"email\":\"$email\",\"password\":\"$password\"}"
125
- }
126
-
127
- # Function to get user profile with auth token
128
- get_user_profile() {
129
- local token=$1
130
-
131
- # Use JWT profile endpoint
132
- curl -s -X GET "$TEST_API_BASE/auth/sessions/current" \
133
- -H "Authorization: Bearer $token"
134
- }
135
-
136
- # Function to delete a table
137
- delete_table() {
138
- local table_name=$1
139
- local token=$2
140
-
141
- curl -s -X DELETE "$TEST_API_BASE/database/tables/$table_name" \
142
- -H "Authorization: Bearer $token" \
143
- -H "Content-Type: application/json" > /dev/null 2>&1
144
- }
145
-
146
- # Function to cleanup all test data
147
- cleanup_test_data() {
148
- # Always attempt cleanup, even if some parts fail
149
- print_info "🧹 Cleaning up test data..."
150
-
151
- local cleanup_failed=0
152
-
153
- # Try to get credentials - but continue cleanup even if they fail
154
- local admin_token=$(get_admin_token 2>/dev/null || echo "")
155
- local api_key=$(get_admin_api_key 2>/dev/null || echo "")
156
-
157
- if [ -z "$admin_token" ]; then
158
- print_info "No admin token available - some cleanup may be limited"
159
- fi
160
-
161
- if [ -z "$api_key" ]; then
162
- print_info "No API key available - bucket cleanup may be limited"
163
- fi
164
-
165
- # 1. Delete all registered test tables
166
- if [ ${#TEST_TABLES_CREATED[@]} -gt 0 ]; then
167
- if [ -n "$admin_token" ]; then
168
- print_info "Deleting test tables..."
169
- for table in "${TEST_TABLES_CREATED[@]}"; do
170
- print_info " - Deleting table: $table"
171
- if ! delete_table "$table" "$admin_token"; then
172
- echo " ✗ Failed to delete"
173
- cleanup_failed=1
174
- else
175
- echo " Deleted"
176
- fi
177
- done
178
- else
179
- print_fail "Cannot delete tables without admin token"
180
- print_info "Tables to delete manually:"
181
- for table in "${TEST_TABLES_CREATED[@]}"; do
182
- echo " - $table"
183
- done
184
- cleanup_failed=1
185
- fi
186
- fi
187
-
188
- # 2. Delete all test users
189
- if [ ${#TEST_USERS_CREATED[@]} -gt 0 ] && [ -n "$admin_token" ]; then
190
- print_info "Deleting test users..."
191
-
192
- # Get all users to find IDs of test users
193
- local users_response=$(curl -s -X GET "$TEST_API_BASE/auth/users?limit=100" \
194
- -H "Authorization: Bearer $admin_token" \
195
- -H "Content-Type: application/json" 2>/dev/null || echo "")
196
-
197
- if [ -n "$users_response" ] && echo "$users_response" | grep -q '"data"'; then
198
- local user_ids=()
199
-
200
- # Extract data array from response (new format uses "data" instead of "users")
201
- local users_json=$(echo "$users_response" | grep -o '"data":\[[^]]*\]' | sed 's/"data"://')
202
-
203
- # Find IDs of test users by email
204
- for test_email in "${TEST_USERS_CREATED[@]}"; do
205
- local user_id=$(echo "$users_json" | grep -B2 -A2 "\"email\":\"$test_email\"" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
206
- if [ -n "$user_id" ]; then
207
- user_ids+=("$user_id")
208
- print_info " - Found test user: $test_email (ID: $user_id)"
209
- fi
210
- done
211
-
212
- # Bulk delete test users
213
- if [ ${#user_ids[@]} -gt 0 ]; then
214
- local delete_response=$(curl -s -X DELETE "$TEST_API_BASE/auth/users" \
215
- -H "Authorization: Bearer $admin_token" \
216
- -H "Content-Type: application/json" \
217
- -d "{\"userIds\": [$(printf '"%s",' "${user_ids[@]}" | sed 's/,$//' )]}")
218
-
219
- if ! echo "$delete_response" | grep -q '"error"'; then
220
- print_success " Deleted ${#user_ids[@]} test users"
221
- else
222
- print_fail " Failed to delete test users"
223
- echo " Response: $delete_response"
224
- fi
225
- fi
226
- else
227
- print_fail " Could not list users for cleanup"
228
- fi
229
- fi
230
-
231
- # 3. Delete all test buckets
232
- if [ ${#TEST_BUCKETS_CREATED[@]} -gt 0 ]; then
233
- if [ -n "$api_key" ]; then
234
- print_info "Deleting test buckets..."
235
- for bucket in "${TEST_BUCKETS_CREATED[@]}"; do
236
- print_info " - Deleting bucket: $bucket"
237
- delete_response=$(curl -s -w "\n%{http_code}" -X DELETE "$TEST_API_BASE/storage/buckets/$bucket" \
238
- -H "Authorization: Bearer $api_key" 2>/dev/null || echo "500")
239
- status=$(echo "$delete_response" | tail -n 1)
240
- if [ "$status" -ge 200 ] && [ "$status" -lt 300 ]; then
241
- echo " Deleted"
242
- else
243
- echo " Failed (status: $status)"
244
- cleanup_failed=1
245
- fi
246
- done
247
- else
248
- print_fail "Cannot delete buckets without API key"
249
- print_info "Buckets to delete manually:"
250
- for bucket in "${TEST_BUCKETS_CREATED[@]}"; do
251
- echo " - $bucket"
252
- done
253
- cleanup_failed=1
254
- fi
255
- fi
256
-
257
- if [ $cleanup_failed -eq 1 ]; then
258
- print_fail "Cleanup completed with errors - some resources may need manual cleanup"
259
- else
260
- print_success "Cleanup completed successfully"
261
- fi
262
- }
263
-
264
- # Test failure tracking
265
- TEST_FAILED=0
266
-
267
- # Function to track test failures
268
- track_test_failure() {
269
- TEST_FAILED=1
270
- }
271
-
272
- # Function to exit with proper code
273
- exit_with_status() {
274
- if [ $TEST_FAILED -eq 1 ]; then
275
- exit 1
276
- else
277
- exit 0
278
- fi
279
- }
280
-
281
- # Set error handling
282
- set -E # Inherit ERR trap in functions
283
-
284
- # Function to handle script termination
285
- handle_exit() {
286
- local exit_code=$?
287
-
288
- # Run cleanup
289
- cleanup_test_data
290
-
291
- # Exit with the original exit code or our tracked failure status
292
- if [ $TEST_FAILED -eq 1 ] || [ $exit_code -ne 0 ]; then
293
- exit 1
294
- else
295
- exit 0
296
- fi
297
- }
298
-
299
- # Trap to ensure cleanup runs on any exit condition
300
- trap handle_exit EXIT
301
- trap handle_exit ERR
302
- trap handle_exit INT
1
+ #!/bin/bash
2
+
3
+ # Test configuration file
4
+ # Source this file in test scripts to get consistent configuration
5
+
6
+ # API Configuration
7
+ export TEST_API_BASE="${TEST_API_BASE:-http://localhost:7130/api}"
8
+
9
+ # Admin credentials - can be overridden by environment variables
10
+ export TEST_ADMIN_EMAIL="${TEST_ADMIN_EMAIL:-${ADMIN_EMAIL:-admin@example.com}}"
11
+ export TEST_ADMIN_PASSWORD="${TEST_ADMIN_PASSWORD:-${ADMIN_PASSWORD:-change-this-password}}"
12
+
13
+ # User test credentials
14
+ export TEST_USER_EMAIL_PREFIX="${TEST_USER_EMAIL_PREFIX:-testuser_}"
15
+
16
+ # Colors for output
17
+ export RED='\033[0;31m'
18
+ export GREEN='\033[0;32m'
19
+ export YELLOW='\033[1;33m'
20
+ export BLUE='\033[0;34m'
21
+ export NC='\033[0m' # No Color
22
+
23
+ # Utility functions
24
+ print_success() {
25
+ echo -e "${GREEN}✅ $1${NC}"
26
+ }
27
+
28
+ print_fail() {
29
+ echo -e "${RED}❌ $1${NC}"
30
+ track_test_failure
31
+ }
32
+
33
+ print_info() {
34
+ echo -e "${YELLOW}$1${NC}"
35
+ }
36
+
37
+ print_blue() {
38
+ echo -e "${BLUE}$1${NC}"
39
+ }
40
+
41
+ # Function to login as admin and get token
42
+ get_admin_token() {
43
+ # Use JWT admin endpoint
44
+ local response=$(curl -s -X POST "$TEST_API_BASE/auth/admin/sessions" \
45
+ -H "Content-Type: application/json" \
46
+ -d "{\"email\":\"$TEST_ADMIN_EMAIL\",\"password\":\"$TEST_ADMIN_PASSWORD\"}")
47
+
48
+ if echo "$response" | grep -q '"accessToken"'; then
49
+ echo "$response" | grep -o '"accessToken":"[^"]*"' | cut -d'"' -f4
50
+ else
51
+ echo ""
52
+ fi
53
+ }
54
+
55
+ # Function to get admin API key
56
+ get_admin_api_key() {
57
+ # Only use ACCESS_API_KEY environment variable
58
+ if [ -n "$ACCESS_API_KEY" ]; then
59
+ echo "$ACCESS_API_KEY"
60
+ else
61
+ echo ""
62
+ fi
63
+ }
64
+
65
+ # Check if required tools are installed
66
+ check_requirements() {
67
+ if ! command -v curl &> /dev/null; then
68
+ print_fail "curl is required but not installed"
69
+ exit 1
70
+ fi
71
+
72
+ if ! command -v jq &> /dev/null; then
73
+ print_info "jq is recommended for JSON parsing"
74
+ fi
75
+ }
76
+
77
+ # Array to track test tables created
78
+ declare -a TEST_TABLES_CREATED=()
79
+
80
+ # Array to track test users created
81
+ declare -a TEST_USERS_CREATED=()
82
+
83
+ # Array to track test buckets created
84
+ declare -a TEST_BUCKETS_CREATED=()
85
+
86
+ # Array to track test AI configs created
87
+ declare -a TEST_AI_CONFIGS_CREATED=()
88
+
89
+ # Function to register a table for cleanup
90
+ register_test_table() {
91
+ local table_name=$1
92
+ TEST_TABLES_CREATED+=("$table_name")
93
+ }
94
+
95
+ # Function to register a user for cleanup
96
+ register_test_user() {
97
+ local user_email=$1
98
+ TEST_USERS_CREATED+=("$user_email")
99
+ }
100
+
101
+ # Function to register a bucket for cleanup
102
+ register_test_bucket() {
103
+ local bucket_name=$1
104
+ TEST_BUCKETS_CREATED+=("$bucket_name")
105
+ }
106
+
107
+ # Function to register an AI config for cleanup
108
+ register_test_ai_config() {
109
+ local config_id=$1
110
+ TEST_AI_CONFIGS_CREATED+=("$config_id")
111
+ }
112
+
113
+ # Function to register a user with Better Auth
114
+ register_user() {
115
+ local email=$1
116
+ local password=$2
117
+ local name=${3:-"Test User"}
118
+
119
+ # Use JWT registration
120
+ curl -s -X POST "$TEST_API_BASE/auth/users" \
121
+ -H "Content-Type: application/json" \
122
+ -d "{\"email\":\"$email\",\"password\":\"$password\",\"name\":\"$name\"}"
123
+ }
124
+
125
+ # Function to login a user with Better Auth
126
+ login_user() {
127
+ local email=$1
128
+ local password=$2
129
+
130
+ # Use JWT login
131
+ curl -s -X POST "$TEST_API_BASE/auth/sessions" \
132
+ -H "Content-Type: application/json" \
133
+ -d "{\"email\":\"$email\",\"password\":\"$password\"}"
134
+ }
135
+
136
+ # Function to get user profile with auth token
137
+ get_user_profile() {
138
+ local token=$1
139
+
140
+ # Use JWT profile endpoint
141
+ curl -s -X GET "$TEST_API_BASE/auth/sessions/current" \
142
+ -H "Authorization: Bearer $token"
143
+ }
144
+
145
+ # Function to delete a table
146
+ delete_table() {
147
+ local table_name=$1
148
+ local token=$2
149
+
150
+ curl -s -X DELETE "$TEST_API_BASE/database/tables/$table_name" \
151
+ -H "Authorization: Bearer $token" \
152
+ -H "Content-Type: application/json" > /dev/null 2>&1
153
+ }
154
+
155
+ # Function to cleanup all test data
156
+ cleanup_test_data() {
157
+ # Always attempt cleanup, even if some parts fail
158
+ print_info "🧹 Cleaning up test data..."
159
+
160
+ local cleanup_failed=0
161
+
162
+ # Try to get credentials - but continue cleanup even if they fail
163
+ local admin_token=$(get_admin_token 2>/dev/null || echo "")
164
+ local api_key=$(get_admin_api_key 2>/dev/null || echo "")
165
+
166
+ if [ -z "$admin_token" ]; then
167
+ print_info "No admin token available - some cleanup may be limited"
168
+ fi
169
+
170
+ if [ -z "$api_key" ]; then
171
+ print_info "No API key available - bucket cleanup may be limited"
172
+ fi
173
+
174
+ # 1. Delete all registered test tables
175
+ if [ ${#TEST_TABLES_CREATED[@]} -gt 0 ]; then
176
+ if [ -n "$admin_token" ]; then
177
+ print_info "Deleting test tables..."
178
+ for table in "${TEST_TABLES_CREATED[@]}"; do
179
+ print_info " - Deleting table: $table"
180
+ if ! delete_table "$table" "$admin_token"; then
181
+ echo " ✗ Failed to delete"
182
+ cleanup_failed=1
183
+ else
184
+ echo " ✓ Deleted"
185
+ fi
186
+ done
187
+ else
188
+ print_fail "Cannot delete tables without admin token"
189
+ print_info "Tables to delete manually:"
190
+ for table in "${TEST_TABLES_CREATED[@]}"; do
191
+ echo " - $table"
192
+ done
193
+ cleanup_failed=1
194
+ fi
195
+ fi
196
+
197
+ # 2. Delete all test users
198
+ if [ ${#TEST_USERS_CREATED[@]} -gt 0 ] && [ -n "$admin_token" ]; then
199
+ print_info "Deleting test users..."
200
+
201
+ # Get all users to find IDs of test users
202
+ local users_response=$(curl -s -X GET "$TEST_API_BASE/auth/users?limit=100" \
203
+ -H "Authorization: Bearer $admin_token" \
204
+ -H "Content-Type: application/json" 2>/dev/null || echo "")
205
+
206
+ if [ -n "$users_response" ] && echo "$users_response" | grep -q '"data"'; then
207
+ local user_ids=()
208
+
209
+ # Extract data array from response (new format uses "data" instead of "users")
210
+ local users_json=$(echo "$users_response" | grep -o '"data":\[[^]]*\]' | sed 's/"data"://')
211
+
212
+ # Find IDs of test users by email
213
+ for test_email in "${TEST_USERS_CREATED[@]}"; do
214
+ local user_id=$(echo "$users_json" | grep -B2 -A2 "\"email\":\"$test_email\"" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
215
+ if [ -n "$user_id" ]; then
216
+ user_ids+=("$user_id")
217
+ print_info " - Found test user: $test_email (ID: $user_id)"
218
+ fi
219
+ done
220
+
221
+ # Bulk delete test users
222
+ if [ ${#user_ids[@]} -gt 0 ]; then
223
+ local delete_response=$(curl -s -X DELETE "$TEST_API_BASE/auth/users" \
224
+ -H "Authorization: Bearer $admin_token" \
225
+ -H "Content-Type: application/json" \
226
+ -d "{\"userIds\": [$(printf '"%s",' "${user_ids[@]}" | sed 's/,$//' )]}")
227
+
228
+ if ! echo "$delete_response" | grep -q '"error"'; then
229
+ print_success " Deleted ${#user_ids[@]} test users"
230
+ else
231
+ print_fail " Failed to delete test users"
232
+ echo " Response: $delete_response"
233
+ fi
234
+ fi
235
+ else
236
+ print_fail " Could not list users for cleanup"
237
+ fi
238
+ fi
239
+
240
+ # 3. Delete all test buckets
241
+ if [ ${#TEST_BUCKETS_CREATED[@]} -gt 0 ]; then
242
+ if [ -n "$api_key" ]; then
243
+ print_info "Deleting test buckets..."
244
+ for bucket in "${TEST_BUCKETS_CREATED[@]}"; do
245
+ print_info " - Deleting bucket: $bucket"
246
+ delete_response=$(curl -s -w "\n%{http_code}" -X DELETE "$TEST_API_BASE/storage/buckets/$bucket" \
247
+ -H "Authorization: Bearer $api_key" 2>/dev/null || echo "500")
248
+ status=$(echo "$delete_response" | tail -n 1)
249
+ if [ "$status" -ge 200 ] && [ "$status" -lt 300 ]; then
250
+ echo " ✓ Deleted"
251
+ else
252
+ echo " ✗ Failed (status: $status)"
253
+ cleanup_failed=1
254
+ fi
255
+ done
256
+ else
257
+ print_fail "Cannot delete buckets without API key"
258
+ print_info "Buckets to delete manually:"
259
+ for bucket in "${TEST_BUCKETS_CREATED[@]}"; do
260
+ echo " - $bucket"
261
+ done
262
+ cleanup_failed=1
263
+ fi
264
+ fi
265
+
266
+ # 4. Delete all test AI configurations
267
+ if [ ${#TEST_AI_CONFIGS_CREATED[@]} -gt 0 ]; then
268
+ if [ -n "$admin_token" ]; then
269
+ print_info "Deleting test AI configurations..."
270
+ for config_id in "${TEST_AI_CONFIGS_CREATED[@]}"; do
271
+ print_info " - Deleting AI config: $config_id"
272
+ delete_response=$(curl -s -w "\n%{http_code}" -X DELETE "$TEST_API_BASE/ai/configurations/$config_id" \
273
+ -H "Authorization: Bearer $admin_token" 2>/dev/null || echo "500")
274
+ status=$(echo "$delete_response" | tail -n 1)
275
+ # 404 is OK - means already deleted
276
+ if [ "$status" -ge 200 ] && [ "$status" -lt 300 ] || [ "$status" -eq 404 ]; then
277
+ echo " ✓ Deleted (or already gone)"
278
+ else
279
+ echo " ✗ Failed (status: $status)"
280
+ cleanup_failed=1
281
+ fi
282
+ done
283
+ else
284
+ print_fail "Cannot delete AI configs without admin token"
285
+ print_info "AI configs to delete manually:"
286
+ for config_id in "${TEST_AI_CONFIGS_CREATED[@]}"; do
287
+ echo " - $config_id"
288
+ done
289
+ cleanup_failed=1
290
+ fi
291
+ fi
292
+
293
+ if [ $cleanup_failed -eq 1 ]; then
294
+ print_fail "Cleanup completed with errors - some resources may need manual cleanup"
295
+ else
296
+ print_success "Cleanup completed successfully"
297
+ fi
298
+ }
299
+
300
+ # Test failure tracking
301
+ TEST_FAILED=0
302
+
303
+ # Function to track test failures
304
+ track_test_failure() {
305
+ TEST_FAILED=1
306
+ }
307
+
308
+ # Function to exit with proper code
309
+ exit_with_status() {
310
+ if [ $TEST_FAILED -eq 1 ]; then
311
+ exit 1
312
+ else
313
+ exit 0
314
+ fi
315
+ }
316
+
317
+ # Set error handling
318
+ set -E # Inherit ERR trap in functions
319
+
320
+ # Function to handle script termination
321
+ handle_exit() {
322
+ local exit_code=$?
323
+
324
+ # Run cleanup
325
+ cleanup_test_data
326
+
327
+ # Exit with the original exit code or our tracked failure status
328
+ if [ $TEST_FAILED -eq 1 ] || [ $exit_code -ne 0 ]; then
329
+ exit 1
330
+ else
331
+ exit 0
332
+ fi
333
+ }
334
+
335
+ # Trap to ensure cleanup runs on any exit condition
336
+ trap handle_exit EXIT
337
+ trap handle_exit ERR
338
+ trap handle_exit INT
303
339
  trap handle_exit TERM