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,209 +1,209 @@
1
- #!/bin/bash
2
-
3
- # Test Traditional REST Response Format
4
- # This script tests various API endpoints to ensure they follow traditional REST conventions
5
-
6
- # Get the directory where this script is located
7
- SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
8
-
9
- # Source the test configuration
10
- source "$SCRIPT_DIR/../test-config.sh"
11
-
12
- # Check requirements
13
- check_requirements
14
-
15
- print_blue "🧪 Testing Traditional REST Response Format..."
16
-
17
- # API Configuration
18
- API_BASE="$TEST_API_BASE"
19
- TEST_USER_EMAIL="testuser_rest_$(date +%s)@example.com"
20
- TEST_USER_PASSWORD="TestPass123!"
21
- AUTH_TOKEN=""
22
-
23
- # Function to test response format
24
- test_response_format() {
25
- local test_name="$1"
26
- local response="$2"
27
- local expected_pattern="$3"
28
- local should_not_exist="${4:-false}"
29
-
30
- if [ "$should_not_exist" == "true" ]; then
31
- # Check that pattern does NOT exist
32
- if ! echo "$response" | grep -q "$expected_pattern"; then
33
- print_success "$test_name"
34
- return 0
35
- else
36
- print_fail "$test_name - found unwanted pattern: $expected_pattern"
37
- track_test_failure
38
- return 1
39
- fi
40
- else
41
- # Check that pattern exists
42
- if echo "$response" | grep -q "$expected_pattern"; then
43
- print_success "$test_name"
44
- return 0
45
- else
46
- print_fail "$test_name - missing pattern: $expected_pattern"
47
- echo " Response: $(echo "$response" | head -c 200)..."
48
- track_test_failure
49
- return 1
50
- fi
51
- fi
52
- }
53
-
54
- # 1. Test Health Endpoint
55
- print_info "1. Testing Health Endpoint (Success Response)"
56
- response=$(curl -s "$API_BASE/health")
57
- test_response_format "Direct data response" "$response" '"status":"ok"'
58
- test_response_format "No success wrapper" "$response" '"success":true' "true"
59
- test_response_format "No data wrapper" "$response" '"data":{' "true"
60
-
61
- # 2. Test Authentication Errors
62
- print_info "2. Testing Authentication Errors"
63
- response=$(curl -s "$API_BASE/auth/sessions/current")
64
- test_response_format "Error format" "$response" '"error":"AUTH_INVALID_CREDENTIALS"'
65
- test_response_format "Message field" "$response" '"message":"No token provided"'
66
- # JWT auth includes error and message fields
67
-
68
- # 3. Test Login Endpoint (Missing Credentials)
69
- print_info "3. Testing Login Endpoint (Missing Credentials)"
70
- response=$(curl -s -X POST "$API_BASE/auth/sessions" \
71
- -H "Content-Type: application/json" \
72
- -d '{}')
73
- test_response_format "Error response" "$response" '"error":"INVALID_INPUT"'
74
- test_response_format "Message field" "$response" '"message":"email: Required, password: Required"'
75
-
76
- # 4. Test Invalid Endpoint (404)
77
- print_info "4. Testing Invalid Endpoint (404)"
78
- response=$(curl -s "$API_BASE/nonexistent")
79
- test_response_format "404 error" "$response" '"statusCode":404'
80
- test_response_format "Not found message" "$response" '"error":"NOT_FOUND"'
81
-
82
- ADMIN_TOKEN=$(get_admin_token)
83
-
84
- # 5. Test with Authentication
85
- print_info "5. Creating test user for authenticated tests"
86
- auth_response=$(curl -s -X POST "$API_BASE/auth/users" \
87
- -H "Content-Type: application/json" \
88
- -d "{
89
- \"email\": \"$TEST_USER_EMAIL\",
90
- \"password\": \"$TEST_USER_PASSWORD\",
91
- \"name\": \"Test User\"
92
- }")
93
-
94
- # Check if registration was successful
95
- if echo "$auth_response" | grep -q '"accessToken"'; then
96
- AUTH_TOKEN=$(echo "$auth_response" | grep -o '"accessToken":"[^"]*' | cut -d'"' -f4)
97
- print_success "User registered successfully"
98
- register_test_user "$TEST_USER_EMAIL"
99
-
100
- # Test authenticated endpoints
101
- print_info "6. Testing Database Tables List (Authenticated)"
102
- response=$(curl -s "$API_BASE/database/tables" \
103
- -H "Authorization: Bearer $ADMIN_TOKEN")
104
- test_response_format "Direct array response" "$response" '^\['
105
- test_response_format "No wrapper object" "$response" '"data":\[' "true"
106
-
107
- # Test table creation
108
- print_info "7. Testing Create Table (Success Response)"
109
- TABLE_NAME="test_rest_table_$(date +%s)"
110
- response=$(curl -s -X POST "$API_BASE/database/tables" \
111
- -H "Authorization: Bearer $ADMIN_TOKEN" \
112
- -H "Content-Type: application/json" \
113
- -d "{
114
- \"tableName\": \"$TABLE_NAME\",
115
- \"rlsEnabled\": false,
116
- \"columns\": [
117
- {\"columnName\": \"id\", \"type\": \"uuid\", \"isNullable\": false, \"isUnique\": false, \"defaultValue\": \"gen_random_uuid()\"},
118
- {\"columnName\": \"title\", \"type\": \"string\", \"isNullable\": false, \"isUnique\": false}
119
- ]
120
- }")
121
-
122
- if echo "$response" | grep -q '"tableName"'; then
123
- print_success "Table created"
124
- register_test_table "$TABLE_NAME"
125
- test_response_format "Direct object response" "$response" "\"tableName\":\"$TABLE_NAME\""
126
- test_response_format "No success wrapper" "$response" '"success":true' "true"
127
- else
128
- print_fail "Table creation failed"
129
- echo "Response: $response"
130
- track_test_failure
131
- fi
132
-
133
- # Test pagination headers
134
- print_info "8. Testing Pagination Headers"
135
- # Use -I for headers, but we need both headers and body
136
- full_response=$(curl -s -i "$API_BASE/logs/audits?limit=10" \
137
- -H "Authorization: Bearer $ADMIN_TOKEN")
138
-
139
- # Extract headers (everything before empty line)
140
- headers=$(echo "$full_response" | awk 'BEGIN{RS="\r\n\r\n"} NR==1')
141
-
142
- # Test for PostgREST-style Content-Range header (format: start-end/total)
143
- test_response_format "Content-Range header" "$headers" 'Content-Range:'
144
- test_response_format "Preference-Applied header" "$headers" 'Preference-Applied:'
145
-
146
- else
147
- print_fail "Failed to register user"
148
- echo "Response: $auth_response"
149
- track_test_failure
150
- fi
151
-
152
- # 9. Test Storage API (requires API key)
153
- print_info "9. Testing Storage API Format"
154
- # First get admin token if we don't have it
155
- if [ -z "$AUTH_TOKEN" ]; then
156
- admin_token=$(get_admin_token)
157
- else
158
- admin_token="$AUTH_TOKEN"
159
- fi
160
-
161
- # Try to get API key from the API endpoint first
162
- if [ -n "$admin_token" ]; then
163
- api_key_response=$(curl -s "$API_BASE/metadata/api-key" \
164
- -H "Authorization: Bearer $admin_token")
165
- API_KEY=$(echo "$api_key_response" | grep -o '"apiKey":"[^"]*' | cut -d'"' -f4)
166
- fi
167
-
168
- # If that fails, try the helper function
169
- if [ -z "$API_KEY" ]; then
170
- API_KEY=$(get_admin_api_key)
171
- fi
172
-
173
- # Export for cleanup
174
- if [ -n "$API_KEY" ]; then
175
- export ACCESS_API_KEY="$API_KEY"
176
- # List buckets
177
- response=$(curl -s "$API_BASE/storage/buckets" \
178
- -H "Authorization: Bearer $API_KEY")
179
- test_response_format "Direct array for buckets" "$response" '^\['
180
-
181
- # Create a test bucket
182
- BUCKET_NAME="test-rest-bucket-$(date +%s)"
183
- response=$(curl -s -X POST "$API_BASE/storage/buckets" \
184
- -H "Content-Type: application/json" \
185
- -H "Authorization: Bearer $API_KEY" \
186
- -d "{\"bucketName\": \"$BUCKET_NAME\", \"isPublic\": true}")
187
-
188
- if echo "$response" | grep -q '"bucketName"'; then
189
- print_success "Bucket created"
190
- register_test_bucket "$BUCKET_NAME"
191
- test_response_format "Success message field" "$response" '"message":"Bucket created successfully"'
192
- test_response_format "NextAction guidance" "$response" '"nextActions":'
193
- else
194
- print_fail "Bucket creation failed"
195
- echo "Response: $response"
196
- track_test_failure
197
- fi
198
- else
199
- print_info "Skipping storage tests (no API key available)"
200
- fi
201
-
202
- # Summary
203
- echo ""
204
- print_blue "=========================================="
205
- print_blue "Traditional REST Format Test Complete"
206
- print_blue "=========================================="
207
-
208
- # Exit with proper status
1
+ #!/bin/bash
2
+
3
+ # Test Traditional REST Response Format
4
+ # This script tests various API endpoints to ensure they follow traditional REST conventions
5
+
6
+ # Get the directory where this script is located
7
+ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
8
+
9
+ # Source the test configuration
10
+ source "$SCRIPT_DIR/../test-config.sh"
11
+
12
+ # Check requirements
13
+ check_requirements
14
+
15
+ print_blue "🧪 Testing Traditional REST Response Format..."
16
+
17
+ # API Configuration
18
+ API_BASE="$TEST_API_BASE"
19
+ TEST_USER_EMAIL="testuser_rest_$(date +%s)@example.com"
20
+ TEST_USER_PASSWORD="TestPass123!"
21
+ AUTH_TOKEN=""
22
+
23
+ # Function to test response format
24
+ test_response_format() {
25
+ local test_name="$1"
26
+ local response="$2"
27
+ local expected_pattern="$3"
28
+ local should_not_exist="${4:-false}"
29
+
30
+ if [ "$should_not_exist" == "true" ]; then
31
+ # Check that pattern does NOT exist
32
+ if ! echo "$response" | grep -q "$expected_pattern"; then
33
+ print_success "$test_name"
34
+ return 0
35
+ else
36
+ print_fail "$test_name - found unwanted pattern: $expected_pattern"
37
+ track_test_failure
38
+ return 1
39
+ fi
40
+ else
41
+ # Check that pattern exists
42
+ if echo "$response" | grep -q "$expected_pattern"; then
43
+ print_success "$test_name"
44
+ return 0
45
+ else
46
+ print_fail "$test_name - missing pattern: $expected_pattern"
47
+ echo " Response: $(echo "$response" | head -c 200)..."
48
+ track_test_failure
49
+ return 1
50
+ fi
51
+ fi
52
+ }
53
+
54
+ # 1. Test Health Endpoint
55
+ print_info "1. Testing Health Endpoint (Success Response)"
56
+ response=$(curl -s "$API_BASE/health")
57
+ test_response_format "Direct data response" "$response" '"status":"ok"'
58
+ test_response_format "No success wrapper" "$response" '"success":true' "true"
59
+ test_response_format "No data wrapper" "$response" '"data":{' "true"
60
+
61
+ # 2. Test Authentication Errors
62
+ print_info "2. Testing Authentication Errors"
63
+ response=$(curl -s "$API_BASE/auth/sessions/current")
64
+ test_response_format "Error format" "$response" '"error":"AUTH_INVALID_CREDENTIALS"'
65
+ test_response_format "Message field" "$response" '"message":"No token provided"'
66
+ # JWT auth includes error and message fields
67
+
68
+ # 3. Test Login Endpoint (Missing Credentials)
69
+ print_info "3. Testing Login Endpoint (Missing Credentials)"
70
+ response=$(curl -s -X POST "$API_BASE/auth/sessions" \
71
+ -H "Content-Type: application/json" \
72
+ -d '{}')
73
+ test_response_format "Error response" "$response" '"error":"INVALID_INPUT"'
74
+ test_response_format "Message field" "$response" '"message":"email: Required, password: Required"'
75
+
76
+ # 4. Test Invalid Endpoint (404)
77
+ print_info "4. Testing Invalid Endpoint (404)"
78
+ response=$(curl -s "$API_BASE/nonexistent")
79
+ test_response_format "404 error" "$response" '"statusCode":404'
80
+ test_response_format "Not found message" "$response" '"error":"NOT_FOUND"'
81
+
82
+ ADMIN_TOKEN=$(get_admin_token)
83
+
84
+ # 5. Test with Authentication
85
+ print_info "5. Creating test user for authenticated tests"
86
+ auth_response=$(curl -s -X POST "$API_BASE/auth/users" \
87
+ -H "Content-Type: application/json" \
88
+ -d "{
89
+ \"email\": \"$TEST_USER_EMAIL\",
90
+ \"password\": \"$TEST_USER_PASSWORD\",
91
+ \"name\": \"Test User\"
92
+ }")
93
+
94
+ # Check if registration was successful
95
+ if echo "$auth_response" | grep -q '"accessToken"'; then
96
+ AUTH_TOKEN=$(echo "$auth_response" | grep -o '"accessToken":"[^"]*' | cut -d'"' -f4)
97
+ print_success "User registered successfully"
98
+ register_test_user "$TEST_USER_EMAIL"
99
+
100
+ # Test authenticated endpoints
101
+ print_info "6. Testing Database Tables List (Authenticated)"
102
+ response=$(curl -s "$API_BASE/database/tables" \
103
+ -H "Authorization: Bearer $ADMIN_TOKEN")
104
+ test_response_format "Direct array response" "$response" '^\['
105
+ test_response_format "No wrapper object" "$response" '"data":\[' "true"
106
+
107
+ # Test table creation
108
+ print_info "7. Testing Create Table (Success Response)"
109
+ TABLE_NAME="test_rest_table_$(date +%s)"
110
+ response=$(curl -s -X POST "$API_BASE/database/tables" \
111
+ -H "Authorization: Bearer $ADMIN_TOKEN" \
112
+ -H "Content-Type: application/json" \
113
+ -d "{
114
+ \"tableName\": \"$TABLE_NAME\",
115
+ \"rlsEnabled\": false,
116
+ \"columns\": [
117
+ {\"columnName\": \"id\", \"type\": \"uuid\", \"isNullable\": false, \"isUnique\": false, \"defaultValue\": \"gen_random_uuid()\"},
118
+ {\"columnName\": \"title\", \"type\": \"string\", \"isNullable\": false, \"isUnique\": false}
119
+ ]
120
+ }")
121
+
122
+ if echo "$response" | grep -q '"tableName"'; then
123
+ print_success "Table created"
124
+ register_test_table "$TABLE_NAME"
125
+ test_response_format "Direct object response" "$response" "\"tableName\":\"$TABLE_NAME\""
126
+ test_response_format "No success wrapper" "$response" '"success":true' "true"
127
+ else
128
+ print_fail "Table creation failed"
129
+ echo "Response: $response"
130
+ track_test_failure
131
+ fi
132
+
133
+ # Test pagination headers
134
+ print_info "8. Testing Pagination Headers"
135
+ # Use -I for headers, but we need both headers and body
136
+ full_response=$(curl -s -i "$API_BASE/logs/audits?limit=10" \
137
+ -H "Authorization: Bearer $ADMIN_TOKEN")
138
+
139
+ # Extract headers (everything before empty line)
140
+ headers=$(echo "$full_response" | awk 'BEGIN{RS="\r\n\r\n"} NR==1')
141
+
142
+ # Test for PostgREST-style Content-Range header (format: start-end/total)
143
+ test_response_format "Content-Range header" "$headers" 'Content-Range:'
144
+ test_response_format "Preference-Applied header" "$headers" 'Preference-Applied:'
145
+
146
+ else
147
+ print_fail "Failed to register user"
148
+ echo "Response: $auth_response"
149
+ track_test_failure
150
+ fi
151
+
152
+ # 9. Test Storage API (requires API key)
153
+ print_info "9. Testing Storage API Format"
154
+ # First get admin token if we don't have it
155
+ if [ -z "$AUTH_TOKEN" ]; then
156
+ admin_token=$(get_admin_token)
157
+ else
158
+ admin_token="$AUTH_TOKEN"
159
+ fi
160
+
161
+ # Try to get API key from the API endpoint first
162
+ if [ -n "$admin_token" ]; then
163
+ api_key_response=$(curl -s "$API_BASE/metadata/api-key" \
164
+ -H "Authorization: Bearer $admin_token")
165
+ API_KEY=$(echo "$api_key_response" | grep -o '"apiKey":"[^"]*' | cut -d'"' -f4)
166
+ fi
167
+
168
+ # If that fails, try the helper function
169
+ if [ -z "$API_KEY" ]; then
170
+ API_KEY=$(get_admin_api_key)
171
+ fi
172
+
173
+ # Export for cleanup
174
+ if [ -n "$API_KEY" ]; then
175
+ export ACCESS_API_KEY="$API_KEY"
176
+ # List buckets
177
+ response=$(curl -s "$API_BASE/storage/buckets" \
178
+ -H "Authorization: Bearer $API_KEY")
179
+ test_response_format "Direct array for buckets" "$response" '^\['
180
+
181
+ # Create a test bucket
182
+ BUCKET_NAME="test-rest-bucket-$(date +%s)"
183
+ response=$(curl -s -X POST "$API_BASE/storage/buckets" \
184
+ -H "Content-Type: application/json" \
185
+ -H "Authorization: Bearer $API_KEY" \
186
+ -d "{\"bucketName\": \"$BUCKET_NAME\", \"isPublic\": true}")
187
+
188
+ if echo "$response" | grep -q '"bucketName"'; then
189
+ print_success "Bucket created"
190
+ register_test_bucket "$BUCKET_NAME"
191
+ test_response_format "Success message field" "$response" '"message":"Bucket created successfully"'
192
+ test_response_format "NextAction guidance" "$response" '"nextActions":'
193
+ else
194
+ print_fail "Bucket creation failed"
195
+ echo "Response: $response"
196
+ track_test_failure
197
+ fi
198
+ else
199
+ print_info "Skipping storage tests (no API key available)"
200
+ fi
201
+
202
+ # Summary
203
+ echo ""
204
+ print_blue "=========================================="
205
+ print_blue "Traditional REST Format Test Complete"
206
+ print_blue "=========================================="
207
+
208
+ # Exit with proper status
209
209
  exit_with_status
@@ -1,51 +1,51 @@
1
- # Manual Tests
2
-
3
- This directory contains tests that need to be run manually and are not included in the automated test suite.
4
-
5
- ## Better Auth Tests
6
-
7
- These tests are for the Better Auth v2 implementation.
8
-
9
- ### Running Better Auth Tests
10
-
11
- Run the Better Auth test:
12
- ```bash
13
- ./tests/manual/test-better-auth.sh
14
- ```
15
-
16
- ### Prerequisites
17
-
18
- - Docker must be running with the InsForge backend on port 7130
19
- - Admin credentials should be configured in environment variables:
20
- - `ADMIN_EMAIL` (default: admin@example.com)
21
- - `ADMIN_PASSWORD` (default: change-this-password)
22
-
23
- ### Example Commands
24
-
25
- ```bash
26
- # Run from the backend directory
27
- cd backend
28
-
29
- # Run Better Auth test
30
- ./tests/manual/test-better-auth.sh
31
-
32
- # Run with custom admin credentials
33
- ADMIN_EMAIL=admin@mycompany.com ADMIN_PASSWORD=mysecurepass ./tests/manual/test-better-auth.sh
34
- ```
35
-
36
- ### Test Coverage
37
-
38
- The test covers:
39
- - Admin authentication (sign-in, wrong password, non-admin email)
40
- - User registration and sign-in
41
- - Admin user management (list users with pagination)
42
- - JWT token verification (admin role and type claims)
43
- - Authorization checks (admin-only endpoints)
44
- - Error handling (invalid email format, missing fields)
45
-
46
- ### Why These Tests Are Manual
47
-
48
- These tests are kept separate because:
49
- 1. They use authentication endpoints (`/api/auth/v2/*`) that require specific setup
50
- 2. They test admin-specific functionality that needs manual verification
1
+ # Manual Tests
2
+
3
+ This directory contains tests that need to be run manually and are not included in the automated test suite.
4
+
5
+ ## Better Auth Tests
6
+
7
+ These tests are for the Better Auth v2 implementation.
8
+
9
+ ### Running Better Auth Tests
10
+
11
+ Run the Better Auth test:
12
+ ```bash
13
+ ./tests/manual/test-better-auth.sh
14
+ ```
15
+
16
+ ### Prerequisites
17
+
18
+ - Docker must be running with the InsForge backend on port 7130
19
+ - Admin credentials should be configured in environment variables:
20
+ - `ADMIN_EMAIL` (default: admin@example.com)
21
+ - `ADMIN_PASSWORD` (default: change-this-password)
22
+
23
+ ### Example Commands
24
+
25
+ ```bash
26
+ # Run from the backend directory
27
+ cd backend
28
+
29
+ # Run Better Auth test
30
+ ./tests/manual/test-better-auth.sh
31
+
32
+ # Run with custom admin credentials
33
+ ADMIN_EMAIL=admin@mycompany.com ADMIN_PASSWORD=mysecurepass ./tests/manual/test-better-auth.sh
34
+ ```
35
+
36
+ ### Test Coverage
37
+
38
+ The test covers:
39
+ - Admin authentication (sign-in, wrong password, non-admin email)
40
+ - User registration and sign-in
41
+ - Admin user management (list users with pagination)
42
+ - JWT token verification (admin role and type claims)
43
+ - Authorization checks (admin-only endpoints)
44
+ - Error handling (invalid email format, missing fields)
45
+
46
+ ### Why These Tests Are Manual
47
+
48
+ These tests are kept separate because:
49
+ 1. They use authentication endpoints (`/api/auth/v2/*`) that require specific setup
50
+ 2. They test admin-specific functionality that needs manual verification
51
51
  3. They verify JWT token structure and claims that may vary between environments
@@ -1,11 +1,11 @@
1
- -- Create large_table with basic structure
2
- CREATE TABLE IF NOT EXISTS large_table (
3
- id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
4
- user_id UUID NOT NULL,
5
- title TEXT NOT NULL,
6
- content TEXT,
7
- status VARCHAR(50) DEFAULT 'active',
8
- metadata JSONB DEFAULT '{}',
9
- created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
10
- updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
1
+ -- Create large_table with basic structure
2
+ CREATE TABLE IF NOT EXISTS large_table (
3
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
4
+ user_id UUID NOT NULL,
5
+ title TEXT NOT NULL,
6
+ content TEXT,
7
+ status VARCHAR(50) DEFAULT 'active',
8
+ metadata JSONB DEFAULT '{}',
9
+ created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
10
+ updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
11
11
  );