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
@@ -1,297 +1,297 @@
1
- #!/bin/bash
2
-
3
- # Test script for database advance functionality
4
- # Tests rawSQL, export, and import operations
5
-
6
- # Configuration
7
- BASE_URL="http://localhost:7130/api/database/advance"
8
- TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDEiLCJlbWFpbCI6ImFkbWluQGV4YW1wbGUuY29tIiwicm9sZSI6InByb2plY3RfYWRtaW4iLCJpYXQiOjE3NTY0MDM2NTUsImV4cCI6MTc1NzAwODQ1NX0.UhLvS5f4vdzsR0bZLmHvQ-MX6WPoPieTZ4H7sxjRYGM"
9
-
10
- # Colors for output
11
- RED='\033[0;31m'
12
- GREEN='\033[0;32m'
13
- YELLOW='\033[1;33m'
14
- BLUE='\033[0;34m'
15
- NC='\033[0m' # No Color
16
-
17
- echo "========================================="
18
- echo "Database Advance Operations Test Script"
19
- echo "========================================="
20
- echo "Base URL: $BASE_URL"
21
- echo "Testing rawSQL, export, and import operations..."
22
- echo "========================================="
23
- echo ""
24
-
25
- # Function to test rawSQL endpoint
26
- test_rawsql() {
27
- local test_name="$1"
28
- local request_body="$2"
29
- local description="$3"
30
-
31
- echo -e "${BLUE}Test: $test_name${NC}"
32
- echo -e "${YELLOW}Description: $description${NC}"
33
- echo "Request body: $request_body"
34
- echo ""
35
-
36
- # Make the API request
37
- RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/rawsql" \
38
- -H "Content-Type: application/json" \
39
- -H "Authorization: Bearer $TOKEN" \
40
- -d "$request_body" 2>&1)
41
-
42
- # Extract HTTP code and response body
43
- HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
44
- RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
45
-
46
- echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
47
-
48
- if [ "$HTTP_CODE" = "200" ]; then
49
- echo -e "${GREEN}✓ Request successful${NC}"
50
- echo ""
51
- echo -e "${BLUE}Response:${NC}"
52
- echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
53
- else
54
- echo -e "${RED}✗ Request failed${NC}"
55
- echo ""
56
- echo -e "${RED}Response:${NC}"
57
- echo "$RESPONSE_BODY"
58
- fi
59
-
60
- echo ""
61
- echo "----------------------------------------"
62
- echo ""
63
- }
64
-
65
- # Function to make API request and show results
66
- test_export() {
67
- local test_name="$1"
68
- local request_body="$2"
69
- local description="$3"
70
-
71
- echo -e "${BLUE}Test: $test_name${NC}"
72
- echo -e "${YELLOW}Description: $description${NC}"
73
- echo "Request body: $request_body"
74
- echo ""
75
-
76
- # Make the API request
77
- RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/export" \
78
- -H "Content-Type: application/json" \
79
- -H "Authorization: Bearer $TOKEN" \
80
- -d "$request_body" 2>&1)
81
-
82
- # Extract HTTP code and response body
83
- HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
84
- RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
85
-
86
- echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
87
-
88
- if [ "$HTTP_CODE" = "200" ]; then
89
- echo -e "${GREEN}✓ Request successful${NC}"
90
- echo ""
91
- echo -e "${BLUE}Response:${NC}"
92
- echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
93
- else
94
- echo -e "${RED}✗ Request failed${NC}"
95
- echo ""
96
- echo -e "${RED}Response:${NC}"
97
- echo "$RESPONSE_BODY"
98
- fi
99
-
100
- echo ""
101
- echo "----------------------------------------"
102
- echo ""
103
- }
104
-
105
- # Function to test import endpoint with file upload
106
- test_import() {
107
- local test_name="$1"
108
- local file_path="$2"
109
- local truncate_option="$3"
110
- local description="$4"
111
-
112
- echo -e "${BLUE}Test: $test_name${NC}"
113
- echo -e "${YELLOW}Description: $description${NC}"
114
- echo "File: $file_path"
115
- echo "Truncate: $truncate_option"
116
- echo ""
117
-
118
- # Check if file exists
119
- if [ ! -f "$file_path" ]; then
120
- echo -e "${RED}✗ File not found: $file_path${NC}"
121
- echo ""
122
- echo "----------------------------------------"
123
- echo ""
124
- return 1
125
- fi
126
-
127
- # Make the API request with file upload
128
- RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/import" \
129
- -H "Authorization: Bearer $TOKEN" \
130
- -F "file=@$file_path" \
131
- -F "truncate=$truncate_option" 2>&1)
132
-
133
- # Extract HTTP code and response body
134
- HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
135
- RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
136
-
137
- echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
138
-
139
- if [ "$HTTP_CODE" = "200" ]; then
140
- echo -e "${GREEN}✓ Request successful${NC}"
141
- echo ""
142
- echo -e "${BLUE}Response:${NC}"
143
- echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
144
- else
145
- echo -e "${RED}✗ Request failed${NC}"
146
- echo ""
147
- echo -e "${RED}Response:${NC}"
148
- echo "$RESPONSE_BODY"
149
- fi
150
-
151
- echo ""
152
- echo "----------------------------------------"
153
- echo ""
154
- }
155
-
156
- # ===========================================
157
- # RAW SQL TESTS
158
- # ===========================================
159
-
160
- echo -e "${GREEN}=== RAW SQL TESTS ===${NC}"
161
- echo ""
162
-
163
- # Test 1: Check if posts table exists
164
- test_rawsql \
165
- "Check Posts Table Existence" \
166
- '{"query": "SELECT tablename FROM pg_tables WHERE schemaname = '\''public'\'' AND tablename = '\''posts'\'';"}' \
167
- "Verify that the posts table exists before creating index"
168
-
169
- # Test 2: Check existing indexes on posts table
170
- test_rawsql \
171
- "Check Existing Indexes on Posts" \
172
- '{"query": "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '\''posts'\'';"}' \
173
- "List all existing indexes on the posts table"
174
-
175
- # Test 3: Create index on posts.title column
176
- test_rawsql \
177
- "Create Title Index on Posts" \
178
- '{"query": "CREATE INDEX IF NOT EXISTS idx_posts_title ON posts(title);"}' \
179
- "Create an index on the title column of the posts table for better query performance"
180
-
181
- # Test 4: Verify the index was created
182
- test_rawsql \
183
- "Verify Title Index Creation" \
184
- '{"query": "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '\''posts'\'' AND indexname = '\''idx_posts_title'\'';"}' \
185
- "Confirm that the title index was successfully created"
186
-
187
- # Test 5: Test a simple SELECT query
188
- test_rawsql \
189
- "Simple Select Query" \
190
- '{"query": "SELECT COUNT(*) as total_posts FROM posts;"}' \
191
- "Count total number of posts in the table"
192
-
193
- echo -e "${GREEN}=== EXPORT TESTS ===${NC}"
194
- echo ""
195
-
196
- # Test 6: Export users table in SQL format with data
197
- test_export \
198
- "Users Table - SQL with Data" \
199
- '{"tables": ["users"], "format": "sql", "includeData": true}' \
200
- "Export users table as SQL with both schema and data"
201
-
202
- # Test 7: Export users table in SQL format without data (schema only)
203
- test_export \
204
- "Users Table - SQL Schema Only" \
205
- '{"tables": ["users"], "format": "sql", "includeData": false}' \
206
- "Export users table as SQL with schema only, no data"
207
-
208
- # Test 8: Export users table in JSON format with data
209
- test_export \
210
- "Users Table - JSON with Data" \
211
- '{"tables": ["users"], "format": "json", "includeData": true}' \
212
- "Export users table as JSON with both schema and data"
213
-
214
- # Test 9: Export users table in JSON format without data (schema only)
215
- test_export \
216
- "Users Table - JSON Schema Only" \
217
- '{"tables": ["users"], "format": "json", "includeData": false}' \
218
- "Export users table as JSON with schema only, no data"
219
-
220
- # Test 10: Export all tables in SQL format (default behavior)
221
- test_export \
222
- "All Tables - SQL Format" \
223
- '{"format": "sql"}' \
224
- "Export all tables as SQL with default settings"
225
-
226
- # Test 11: Test with invalid table name
227
- test_export \
228
- "Invalid Table Name" \
229
- '{"tables": ["nonexistent_table"], "format": "sql"}' \
230
- "Test error handling with non-existent table"
231
-
232
- # Test 12: Test with invalid format
233
- test_export \
234
- "Invalid Format" \
235
- '{"tables": ["users"], "format": "xml"}' \
236
- "Test validation with invalid format"
237
-
238
- # Test 12.5: Export posts table in SQL format with data
239
- test_export \
240
- "All Tables - SQL with Data" \
241
- '{"format": "sql", "includeData": false}' \
242
- "Export all tables as SQL with both schema and data"
243
-
244
- echo -e "${GREEN}=== IMPORT TESTS ===${NC}"
245
- echo ""
246
-
247
- # Define the path to the SQL file
248
- SQL_FILE_PATH="$(dirname "$0")/test-users.sql"
249
-
250
- # Test 13: Import users.sql without truncate
251
- test_import \
252
- "Import Users SQL - No Truncate" \
253
- "$SQL_FILE_PATH" \
254
- "false" \
255
- "Import users table structure from SQL file without truncating existing data"
256
-
257
- # Test 14: Import users.sql with truncate
258
- test_import \
259
- "Import Users SQL - With Truncate" \
260
- "$SQL_FILE_PATH" \
261
- "true" \
262
- "Import users table structure from SQL file with truncating existing data"
263
-
264
- # Test 15: Test with non-existent file
265
- test_import \
266
- "Import Non-existent File" \
267
- "$(dirname "$0")/nonexistent.sql" \
268
- "false" \
269
- "Test error handling with non-existent SQL file"
270
-
271
- echo "========================================="
272
- echo "Database Advance Tests Complete"
273
- echo "========================================="
274
- echo ""
275
- echo -e "${GREEN}All tests have been executed.${NC}"
276
- echo "Check the responses above to verify all functionality."
277
- echo ""
278
- echo "Key things to verify:"
279
- echo ""
280
- echo -e "${BLUE}Raw SQL Tests:${NC}"
281
- echo "- Posts table existence check"
282
- echo "- Index creation and verification"
283
- echo "- SQL execution with proper responses"
284
- echo ""
285
- echo -e "${BLUE}Export Tests:${NC}"
286
- echo "- SQL exports should contain CREATE TABLE statements"
287
- echo "- When includeData=true, INSERT statements should be present"
288
- echo "- When includeData=false, only schema should be exported"
289
- echo "- JSON exports should have 'schema' and 'rows' properties"
290
- echo "- Invalid requests should return appropriate error messages"
291
- echo ""
292
- echo -e "${BLUE}Import Tests:${NC}"
293
- echo "- File uploads should be processed correctly"
294
- echo "- SQL files should be executed and tables created"
295
- echo "- Truncate option should control data preservation"
296
- echo "- Error handling should work for missing files"
1
+ #!/bin/bash
2
+
3
+ # Test script for database advance functionality
4
+ # Tests rawSQL, export, and import operations
5
+
6
+ # Configuration
7
+ BASE_URL="http://localhost:7130/api/database/advance"
8
+ TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDEiLCJlbWFpbCI6ImFkbWluQGV4YW1wbGUuY29tIiwicm9sZSI6InByb2plY3RfYWRtaW4iLCJpYXQiOjE3NTY0MDM2NTUsImV4cCI6MTc1NzAwODQ1NX0.UhLvS5f4vdzsR0bZLmHvQ-MX6WPoPieTZ4H7sxjRYGM"
9
+
10
+ # Colors for output
11
+ RED='\033[0;31m'
12
+ GREEN='\033[0;32m'
13
+ YELLOW='\033[1;33m'
14
+ BLUE='\033[0;34m'
15
+ NC='\033[0m' # No Color
16
+
17
+ echo "========================================="
18
+ echo "Database Advance Operations Test Script"
19
+ echo "========================================="
20
+ echo "Base URL: $BASE_URL"
21
+ echo "Testing rawSQL, export, and import operations..."
22
+ echo "========================================="
23
+ echo ""
24
+
25
+ # Function to test rawSQL endpoint
26
+ test_rawsql() {
27
+ local test_name="$1"
28
+ local request_body="$2"
29
+ local description="$3"
30
+
31
+ echo -e "${BLUE}Test: $test_name${NC}"
32
+ echo -e "${YELLOW}Description: $description${NC}"
33
+ echo "Request body: $request_body"
34
+ echo ""
35
+
36
+ # Make the API request
37
+ RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/rawsql" \
38
+ -H "Content-Type: application/json" \
39
+ -H "Authorization: Bearer $TOKEN" \
40
+ -d "$request_body" 2>&1)
41
+
42
+ # Extract HTTP code and response body
43
+ HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
44
+ RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
45
+
46
+ echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
47
+
48
+ if [ "$HTTP_CODE" = "200" ]; then
49
+ echo -e "${GREEN}✓ Request successful${NC}"
50
+ echo ""
51
+ echo -e "${BLUE}Response:${NC}"
52
+ echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
53
+ else
54
+ echo -e "${RED}✗ Request failed${NC}"
55
+ echo ""
56
+ echo -e "${RED}Response:${NC}"
57
+ echo "$RESPONSE_BODY"
58
+ fi
59
+
60
+ echo ""
61
+ echo "----------------------------------------"
62
+ echo ""
63
+ }
64
+
65
+ # Function to make API request and show results
66
+ test_export() {
67
+ local test_name="$1"
68
+ local request_body="$2"
69
+ local description="$3"
70
+
71
+ echo -e "${BLUE}Test: $test_name${NC}"
72
+ echo -e "${YELLOW}Description: $description${NC}"
73
+ echo "Request body: $request_body"
74
+ echo ""
75
+
76
+ # Make the API request
77
+ RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/export" \
78
+ -H "Content-Type: application/json" \
79
+ -H "Authorization: Bearer $TOKEN" \
80
+ -d "$request_body" 2>&1)
81
+
82
+ # Extract HTTP code and response body
83
+ HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
84
+ RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
85
+
86
+ echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
87
+
88
+ if [ "$HTTP_CODE" = "200" ]; then
89
+ echo -e "${GREEN}✓ Request successful${NC}"
90
+ echo ""
91
+ echo -e "${BLUE}Response:${NC}"
92
+ echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
93
+ else
94
+ echo -e "${RED}✗ Request failed${NC}"
95
+ echo ""
96
+ echo -e "${RED}Response:${NC}"
97
+ echo "$RESPONSE_BODY"
98
+ fi
99
+
100
+ echo ""
101
+ echo "----------------------------------------"
102
+ echo ""
103
+ }
104
+
105
+ # Function to test import endpoint with file upload
106
+ test_import() {
107
+ local test_name="$1"
108
+ local file_path="$2"
109
+ local truncate_option="$3"
110
+ local description="$4"
111
+
112
+ echo -e "${BLUE}Test: $test_name${NC}"
113
+ echo -e "${YELLOW}Description: $description${NC}"
114
+ echo "File: $file_path"
115
+ echo "Truncate: $truncate_option"
116
+ echo ""
117
+
118
+ # Check if file exists
119
+ if [ ! -f "$file_path" ]; then
120
+ echo -e "${RED}✗ File not found: $file_path${NC}"
121
+ echo ""
122
+ echo "----------------------------------------"
123
+ echo ""
124
+ return 1
125
+ fi
126
+
127
+ # Make the API request with file upload
128
+ RESPONSE=$(curl -s -w "\n:HTTP_CODE:%{http_code}" -X POST "$BASE_URL/import" \
129
+ -H "Authorization: Bearer $TOKEN" \
130
+ -F "file=@$file_path" \
131
+ -F "truncate=$truncate_option" 2>&1)
132
+
133
+ # Extract HTTP code and response body
134
+ HTTP_CODE=$(echo "$RESPONSE" | grep ":HTTP_CODE:" | cut -d: -f3)
135
+ RESPONSE_BODY=$(echo "$RESPONSE" | sed '/^:HTTP_CODE:/d')
136
+
137
+ echo -e "${BLUE}HTTP Status: $HTTP_CODE${NC}"
138
+
139
+ if [ "$HTTP_CODE" = "200" ]; then
140
+ echo -e "${GREEN}✓ Request successful${NC}"
141
+ echo ""
142
+ echo -e "${BLUE}Response:${NC}"
143
+ echo "$RESPONSE_BODY" | jq . 2>/dev/null || echo "$RESPONSE_BODY"
144
+ else
145
+ echo -e "${RED}✗ Request failed${NC}"
146
+ echo ""
147
+ echo -e "${RED}Response:${NC}"
148
+ echo "$RESPONSE_BODY"
149
+ fi
150
+
151
+ echo ""
152
+ echo "----------------------------------------"
153
+ echo ""
154
+ }
155
+
156
+ # ===========================================
157
+ # RAW SQL TESTS
158
+ # ===========================================
159
+
160
+ echo -e "${GREEN}=== RAW SQL TESTS ===${NC}"
161
+ echo ""
162
+
163
+ # Test 1: Check if posts table exists
164
+ test_rawsql \
165
+ "Check Posts Table Existence" \
166
+ '{"query": "SELECT tablename FROM pg_tables WHERE schemaname = '\''public'\'' AND tablename = '\''posts'\'';"}' \
167
+ "Verify that the posts table exists before creating index"
168
+
169
+ # Test 2: Check existing indexes on posts table
170
+ test_rawsql \
171
+ "Check Existing Indexes on Posts" \
172
+ '{"query": "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '\''posts'\'';"}' \
173
+ "List all existing indexes on the posts table"
174
+
175
+ # Test 3: Create index on posts.title column
176
+ test_rawsql \
177
+ "Create Title Index on Posts" \
178
+ '{"query": "CREATE INDEX IF NOT EXISTS idx_posts_title ON posts(title);"}' \
179
+ "Create an index on the title column of the posts table for better query performance"
180
+
181
+ # Test 4: Verify the index was created
182
+ test_rawsql \
183
+ "Verify Title Index Creation" \
184
+ '{"query": "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '\''posts'\'' AND indexname = '\''idx_posts_title'\'';"}' \
185
+ "Confirm that the title index was successfully created"
186
+
187
+ # Test 5: Test a simple SELECT query
188
+ test_rawsql \
189
+ "Simple Select Query" \
190
+ '{"query": "SELECT COUNT(*) as total_posts FROM posts;"}' \
191
+ "Count total number of posts in the table"
192
+
193
+ echo -e "${GREEN}=== EXPORT TESTS ===${NC}"
194
+ echo ""
195
+
196
+ # Test 6: Export users table in SQL format with data
197
+ test_export \
198
+ "Users Table - SQL with Data" \
199
+ '{"tables": ["users"], "format": "sql", "includeData": true}' \
200
+ "Export users table as SQL with both schema and data"
201
+
202
+ # Test 7: Export users table in SQL format without data (schema only)
203
+ test_export \
204
+ "Users Table - SQL Schema Only" \
205
+ '{"tables": ["users"], "format": "sql", "includeData": false}' \
206
+ "Export users table as SQL with schema only, no data"
207
+
208
+ # Test 8: Export users table in JSON format with data
209
+ test_export \
210
+ "Users Table - JSON with Data" \
211
+ '{"tables": ["users"], "format": "json", "includeData": true}' \
212
+ "Export users table as JSON with both schema and data"
213
+
214
+ # Test 9: Export users table in JSON format without data (schema only)
215
+ test_export \
216
+ "Users Table - JSON Schema Only" \
217
+ '{"tables": ["users"], "format": "json", "includeData": false}' \
218
+ "Export users table as JSON with schema only, no data"
219
+
220
+ # Test 10: Export all tables in SQL format (default behavior)
221
+ test_export \
222
+ "All Tables - SQL Format" \
223
+ '{"format": "sql"}' \
224
+ "Export all tables as SQL with default settings"
225
+
226
+ # Test 11: Test with invalid table name
227
+ test_export \
228
+ "Invalid Table Name" \
229
+ '{"tables": ["nonexistent_table"], "format": "sql"}' \
230
+ "Test error handling with non-existent table"
231
+
232
+ # Test 12: Test with invalid format
233
+ test_export \
234
+ "Invalid Format" \
235
+ '{"tables": ["users"], "format": "xml"}' \
236
+ "Test validation with invalid format"
237
+
238
+ # Test 12.5: Export posts table in SQL format with data
239
+ test_export \
240
+ "All Tables - SQL with Data" \
241
+ '{"format": "sql", "includeData": false}' \
242
+ "Export all tables as SQL with both schema and data"
243
+
244
+ echo -e "${GREEN}=== IMPORT TESTS ===${NC}"
245
+ echo ""
246
+
247
+ # Define the path to the SQL file
248
+ SQL_FILE_PATH="$(dirname "$0")/test-users.sql"
249
+
250
+ # Test 13: Import users.sql without truncate
251
+ test_import \
252
+ "Import Users SQL - No Truncate" \
253
+ "$SQL_FILE_PATH" \
254
+ "false" \
255
+ "Import users table structure from SQL file without truncating existing data"
256
+
257
+ # Test 14: Import users.sql with truncate
258
+ test_import \
259
+ "Import Users SQL - With Truncate" \
260
+ "$SQL_FILE_PATH" \
261
+ "true" \
262
+ "Import users table structure from SQL file with truncating existing data"
263
+
264
+ # Test 15: Test with non-existent file
265
+ test_import \
266
+ "Import Non-existent File" \
267
+ "$(dirname "$0")/nonexistent.sql" \
268
+ "false" \
269
+ "Test error handling with non-existent SQL file"
270
+
271
+ echo "========================================="
272
+ echo "Database Advance Tests Complete"
273
+ echo "========================================="
274
+ echo ""
275
+ echo -e "${GREEN}All tests have been executed.${NC}"
276
+ echo "Check the responses above to verify all functionality."
277
+ echo ""
278
+ echo "Key things to verify:"
279
+ echo ""
280
+ echo -e "${BLUE}Raw SQL Tests:${NC}"
281
+ echo "- Posts table existence check"
282
+ echo "- Index creation and verification"
283
+ echo "- SQL execution with proper responses"
284
+ echo ""
285
+ echo -e "${BLUE}Export Tests:${NC}"
286
+ echo "- SQL exports should contain CREATE TABLE statements"
287
+ echo "- When includeData=true, INSERT statements should be present"
288
+ echo "- When includeData=false, only schema should be exported"
289
+ echo "- JSON exports should have 'schema' and 'rows' properties"
290
+ echo "- Invalid requests should return appropriate error messages"
291
+ echo ""
292
+ echo -e "${BLUE}Import Tests:${NC}"
293
+ echo "- File uploads should be processed correctly"
294
+ echo "- SQL files should be executed and tables created"
295
+ echo "- Truncate option should control data preservation"
296
+ echo "- Error handling should work for missing files"
297
297
  echo "- Response should include import statistics"