insforge 1.2.10 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) 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 +44 -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 +28 -28
  25. package/auth/src/lib/broadcastService.ts +117 -115
  26. package/auth/src/pages/SignInPage.tsx +60 -57
  27. package/auth/src/pages/SignUpPage.tsx +60 -57
  28. package/auth/tsconfig.json +32 -32
  29. package/auth/tsconfig.node.json +11 -11
  30. package/backend/package.json +78 -75
  31. package/backend/src/api/routes/ai/index.routes.ts +3 -3
  32. package/backend/src/api/routes/auth/index.routes.ts +667 -570
  33. package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
  34. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  35. package/backend/src/api/routes/database/index.routes.ts +78 -1
  36. package/backend/src/api/routes/database/records.routes.ts +10 -10
  37. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  38. package/backend/src/api/routes/docs/index.routes.ts +75 -76
  39. package/backend/src/api/routes/email/index.routes.ts +35 -0
  40. package/backend/src/api/routes/functions/index.routes.ts +18 -12
  41. package/backend/src/api/routes/metadata/index.routes.ts +12 -0
  42. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  43. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  44. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  45. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  46. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  47. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  48. package/backend/src/infra/database/database.manager.ts +14 -1
  49. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  50. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  51. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  52. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  53. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  54. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  55. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  56. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  57. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  58. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  59. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  60. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  61. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  62. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  63. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  64. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  65. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  66. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  67. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  68. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  69. package/backend/src/infra/security/token.manager.ts +219 -125
  70. package/backend/src/infra/socket/socket.manager.ts +198 -64
  71. package/backend/src/providers/ai/openrouter.provider.ts +12 -9
  72. package/backend/src/providers/email/base.provider.ts +4 -7
  73. package/backend/src/providers/email/cloud.provider.ts +84 -0
  74. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  75. package/backend/src/providers/oauth/index.ts +1 -0
  76. package/backend/src/server.ts +317 -284
  77. package/backend/src/services/ai/ai-model.service.ts +5 -5
  78. package/backend/src/services/ai/chat-completion.service.ts +4 -4
  79. package/backend/src/services/ai/image-generation.service.ts +3 -3
  80. package/backend/src/services/auth/auth.service.ts +14 -0
  81. package/backend/src/services/database/database-table.service.ts +0 -9
  82. package/backend/src/services/database/database.service.ts +127 -0
  83. package/backend/src/services/email/email.service.ts +5 -7
  84. package/backend/src/services/realtime/index.ts +3 -0
  85. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  86. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  87. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  88. package/backend/src/types/auth.ts +11 -0
  89. package/backend/src/types/realtime.ts +18 -0
  90. package/backend/src/types/socket.ts +7 -31
  91. package/backend/src/utils/cookies.ts +35 -0
  92. package/backend/src/utils/s3-config-loader.ts +64 -0
  93. package/backend/src/utils/seed.ts +301 -298
  94. package/backend/src/utils/sql-parser.ts +90 -0
  95. package/backend/tests/README.md +133 -133
  96. package/backend/tests/cleanup-all-test-data.sh +230 -230
  97. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  98. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  99. package/backend/tests/local/test-ai-config.sh +129 -129
  100. package/backend/tests/local/test-ai-usage.sh +80 -80
  101. package/backend/tests/local/test-auth-router.sh +143 -143
  102. package/backend/tests/local/test-database-router.sh +222 -222
  103. package/backend/tests/local/test-e2e.sh +240 -240
  104. package/backend/tests/local/test-fk-errors.sh +96 -96
  105. package/backend/tests/local/test-functions.sh +123 -123
  106. package/backend/tests/local/test-id-field.sh +200 -200
  107. package/backend/tests/local/test-logs.sh +132 -132
  108. package/backend/tests/local/test-public-bucket.sh +264 -264
  109. package/backend/tests/local/test-secrets.sh +249 -249
  110. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  111. package/backend/tests/local/test-traditional-rest.sh +208 -208
  112. package/backend/tests/manual/README.md +50 -50
  113. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  114. package/backend/tests/manual/seed-large-table.sql +100 -100
  115. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  116. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  117. package/backend/tests/manual/test-database-advance.sh +296 -296
  118. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  119. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  120. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  121. package/backend/tests/manual/test-universal-storage.sh +263 -263
  122. package/backend/tests/manual/test-users.sql +17 -17
  123. package/backend/tests/run-all-tests.sh +139 -139
  124. package/backend/tests/setup.ts +0 -0
  125. package/backend/tests/test-config.sh +338 -338
  126. package/backend/tests/unit/analyze-query.test.ts +697 -0
  127. package/backend/tsconfig.json +22 -22
  128. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  129. package/claude-plugin/README.md +133 -133
  130. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
  131. package/docker-compose.prod.yml +204 -200
  132. package/docker-compose.yml +232 -228
  133. package/docker-init/db/db-init.sql +97 -97
  134. package/docker-init/db/jwt.sql +5 -5
  135. package/docker-init/db/postgresql.conf +16 -16
  136. package/docker-init/logs/vector.yml +236 -236
  137. package/docs/README.md +44 -44
  138. package/docs/agent-docs/real-time.md +269 -0
  139. package/docs/changelog.mdx +119 -67
  140. package/docs/core-concepts/ai/architecture.mdx +372 -372
  141. package/docs/core-concepts/ai/sdk.mdx +213 -213
  142. package/docs/core-concepts/authentication/architecture.mdx +278 -278
  143. package/docs/core-concepts/authentication/sdk.mdx +414 -414
  144. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
  145. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
  146. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
  147. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
  148. package/docs/core-concepts/database/architecture.mdx +255 -255
  149. package/docs/core-concepts/database/sdk.mdx +382 -382
  150. package/docs/core-concepts/email/architecture.mdx +101 -0
  151. package/docs/core-concepts/email/sdk.mdx +53 -0
  152. package/docs/core-concepts/functions/architecture.mdx +105 -105
  153. package/docs/core-concepts/functions/sdk.mdx +184 -184
  154. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  155. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  156. package/docs/core-concepts/storage/architecture.mdx +243 -243
  157. package/docs/core-concepts/storage/sdk.mdx +253 -253
  158. package/docs/deployment/README.md +94 -94
  159. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  160. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  161. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  162. package/docs/deployment/deploy-to-render.md +441 -441
  163. package/docs/deprecated/insforge-auth-api.md +214 -214
  164. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  165. package/docs/deprecated/insforge-db-api.md +358 -358
  166. package/docs/deprecated/insforge-db-sdk.md +139 -139
  167. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  168. package/docs/deprecated/insforge-debug.md +64 -64
  169. package/docs/deprecated/insforge-instructions.md +123 -123
  170. package/docs/deprecated/insforge-project.md +117 -117
  171. package/docs/deprecated/insforge-storage-api.md +278 -278
  172. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  173. package/docs/docs.json +232 -210
  174. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  175. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  176. package/docs/examples/framework-guides/react.mdx +165 -165
  177. package/docs/examples/framework-guides/svelte.mdx +153 -153
  178. package/docs/examples/framework-guides/vue.mdx +159 -159
  179. package/docs/examples/overview.mdx +67 -67
  180. package/docs/favicon.svg +19 -19
  181. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  182. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  183. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  184. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  185. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  186. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  187. package/docs/images/icons/ai.svg +4 -4
  188. package/docs/images/logos/nextjs.svg +4 -4
  189. package/docs/images/logos/nuxt.svg +4 -4
  190. package/docs/images/logos/react.svg +5 -5
  191. package/docs/images/logos/svelte.svg +4 -4
  192. package/docs/images/logos/vue.svg +5 -5
  193. package/docs/insforge-instructions-sdk.md +89 -88
  194. package/docs/introduction.mdx +45 -45
  195. package/docs/logo/dark.svg +22 -22
  196. package/docs/logo/light.svg +20 -20
  197. package/docs/partnership.mdx +651 -646
  198. package/docs/quickstart.mdx +82 -82
  199. package/docs/showcase.mdx +52 -52
  200. package/docs/snippets/sdk-installation.mdx +21 -21
  201. package/docs/snippets/service-icons.mdx +27 -27
  202. package/examples/oauth/frontend-oauth-example.html +250 -250
  203. package/examples/response-examples.md +443 -443
  204. package/frontend/components.json +17 -17
  205. package/frontend/package.json +69 -69
  206. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  207. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  208. package/frontend/src/assets/icons/checked.svg +3 -3
  209. package/frontend/src/assets/icons/connected.svg +3 -3
  210. package/frontend/src/assets/icons/error.svg +3 -3
  211. package/frontend/src/assets/icons/loader.svg +9 -9
  212. package/frontend/src/assets/icons/pencil.svg +4 -4
  213. package/frontend/src/assets/icons/refresh.svg +4 -4
  214. package/frontend/src/assets/icons/step_active.svg +3 -3
  215. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  216. package/frontend/src/assets/icons/warning.svg +3 -3
  217. package/frontend/src/assets/logos/apple.svg +3 -3
  218. package/frontend/src/assets/logos/claude_code.svg +3 -3
  219. package/frontend/src/assets/logos/cline.svg +6 -6
  220. package/frontend/src/assets/logos/cursor.svg +20 -20
  221. package/frontend/src/assets/logos/discord.svg +8 -8
  222. package/frontend/src/assets/logos/facebook.svg +3 -3
  223. package/frontend/src/assets/logos/gemini.svg +19 -19
  224. package/frontend/src/assets/logos/github.svg +5 -5
  225. package/frontend/src/assets/logos/google.svg +13 -13
  226. package/frontend/src/assets/logos/grok.svg +10 -10
  227. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  228. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  229. package/frontend/src/assets/logos/instagram.svg +1 -1
  230. package/frontend/src/assets/logos/linkedin.svg +3 -3
  231. package/frontend/src/assets/logos/openai.svg +10 -10
  232. package/frontend/src/assets/logos/roo_code.svg +9 -9
  233. package/frontend/src/assets/logos/spotify.svg +16 -16
  234. package/frontend/src/assets/logos/tiktok.svg +5 -5
  235. package/frontend/src/assets/logos/trae.svg +3 -3
  236. package/frontend/src/assets/logos/windsurf.svg +10 -10
  237. package/frontend/src/assets/logos/x.svg +3 -3
  238. package/frontend/src/components/layout/AppHeader.tsx +9 -10
  239. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  240. package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
  241. package/frontend/src/features/auth/helpers.tsx +8 -0
  242. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  243. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  244. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  245. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  246. package/frontend/src/features/database/hooks/useTables.ts +32 -28
  247. package/frontend/src/features/database/index.ts +1 -0
  248. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -37
  249. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +35 -47
  250. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +43 -54
  251. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  252. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +35 -47
  253. package/frontend/src/features/database/services/advance.service.ts +0 -26
  254. package/frontend/src/features/database/services/database.service.ts +55 -0
  255. package/frontend/src/features/database/services/table.service.ts +0 -6
  256. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  257. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +11 -9
  258. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  259. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  260. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  261. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  262. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  263. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  264. package/frontend/src/features/realtime/index.ts +11 -0
  265. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  266. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  267. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  268. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  269. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  270. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
  271. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +1 -35
  272. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  273. package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
  274. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  275. package/frontend/src/lib/utils/menuItems.ts +24 -0
  276. package/frontend/src/lib/utils/utils.ts +14 -1
  277. package/frontend/tsconfig.json +25 -25
  278. package/frontend/tsconfig.node.json +9 -9
  279. package/functions/deno.json +24 -24
  280. package/functions/server.ts +315 -315
  281. package/i18n/README.ar.md +130 -130
  282. package/i18n/README.de.md +130 -130
  283. package/i18n/README.es.md +154 -154
  284. package/i18n/README.fr.md +134 -134
  285. package/i18n/README.hi.md +129 -129
  286. package/i18n/README.ja.md +174 -174
  287. package/i18n/README.ko.md +136 -136
  288. package/i18n/README.pt-BR.md +131 -131
  289. package/i18n/README.ru.md +129 -129
  290. package/i18n/README.zh-CN.md +133 -133
  291. package/openapi/ai.yaml +715 -715
  292. package/openapi/auth.yaml +1244 -1244
  293. package/openapi/email.yaml +158 -0
  294. package/openapi/functions.yaml +475 -475
  295. package/openapi/health.yaml +29 -29
  296. package/openapi/logs.yaml +223 -223
  297. package/openapi/metadata.yaml +177 -177
  298. package/openapi/realtime.yaml +699 -0
  299. package/openapi/records.yaml +381 -381
  300. package/openapi/secrets.yaml +370 -370
  301. package/openapi/storage.yaml +875 -875
  302. package/openapi/tables.yaml +463 -463
  303. package/package.json +97 -97
  304. package/shared-schemas/package.json +31 -31
  305. package/shared-schemas/src/ai.schema.ts +63 -59
  306. package/shared-schemas/src/auth-api.schema.ts +352 -339
  307. package/shared-schemas/src/auth.schema.ts +1 -1
  308. package/shared-schemas/src/database-api.schema.ts +32 -1
  309. package/shared-schemas/src/database.schema.ts +39 -0
  310. package/shared-schemas/src/docs.schema.ts +26 -0
  311. package/shared-schemas/src/email-api.schema.ts +30 -0
  312. package/shared-schemas/src/index.ts +4 -0
  313. package/shared-schemas/src/metadata.schema.ts +9 -0
  314. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  315. package/shared-schemas/src/realtime.schema.ts +143 -0
  316. package/shared-schemas/tsconfig.json +21 -21
  317. package/tsconfig.json +7 -7
  318. package/zeabur/README.md +13 -13
  319. package/zeabur/template.yml +1032 -1032
  320. package/.cursor/rules/cursor-rules.mdc +0 -94
  321. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  322. package/test-gemini.sh +0 -35
  323. package/test-usage-admin.sh +0 -57
  324. package/test-usage.sh +0 -50
  325. /package/frontend/src/features/ai/{page → pages}/AIPage.tsx +0 -0
  326. /package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +0 -0
  327. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  328. /package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +0 -0
  329. /package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +0 -0
  330. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  331. /package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +0 -0
  332. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  333. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  334. /package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +0 -0
  335. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
@@ -1,65 +1,65 @@
1
- # Insforge Debug Guide
2
-
3
- ## When Your API Code Fails
4
-
5
- **Start here** → `get-instructions` and `get-backend-metadata` (understand system state)
6
- **Read docs** → `get-db-api`, `get-auth-api`, `get-storage-api` (read ALL of them)
7
- **Check table** → `get-table-schema` with your table name
8
- **Test endpoint** → Use curl with exact API format from docs
9
-
10
- ## Critical Rule: Read Documentation First
11
-
12
- Before debugging, you MUST read all documentation to understand how the API works.
13
-
14
- ## Common API Issues
15
-
16
- **Table created but API fails** → Check field names match schema exactly
17
- **Array required** → PostgREST requires POST requests as arrays `[{...}]`
18
- **Foreign key error** → Parent record must exist before child
19
- **Permission denied** → Write operations need `Authorization: Bearer <accessToken>`
20
- **JWSError** → JWT token expired or invalid - user needs to login again
21
- **PATCH increment fails** → PostgREST doesn't support SQL expressions like `count + 1`
22
-
23
- ## Debug Workflow
24
-
25
- 1. **Always** call `get-backend-metadata` first
26
- 2. Read the relevant API documentation completely
27
- 3. Check your table schema matches your API calls
28
- 4. Test with curl using exact format from docs
29
- 5. Verify response matches documentation
30
-
31
- ### Example Debug Tests
32
-
33
- ```bash
34
- # Test GET endpoint
35
- # Windows PowerShell: use curl.exe
36
- curl -X GET http://localhost:7130/api/database/records/your_table \
37
- -H "Authorization: Bearer YOUR_TOKEN" | jq .
38
-
39
- # Test POST with array format
40
- # Mac/Linux
41
- curl -X POST http://localhost:7130/api/database/records/your_table \
42
- -H 'Content-Type: application/json' \
43
- -H 'Authorization: Bearer YOUR_TOKEN' \
44
- -H 'Prefer: return=representation' \
45
- -d '[{"field": "value"}]' | jq .
46
-
47
- # Windows PowerShell (use curl.exe) - different quotes for nested JSON
48
- curl.exe -X POST http://localhost:7130/api/database/records/your_table \
49
- -H "Content-Type: application/json" \
50
- -H "Authorization: Bearer YOUR_TOKEN" \
51
- -H "Prefer: return=representation" \
52
- -d '[{\"field\": \"value\"}]' | jq .
53
- ```
54
-
55
- ## Key Rules
56
-
57
- - Backend runs on port 7130
58
- - **READ operations**: No authentication required
59
- - **WRITE operations**: Need `Authorization: Bearer <accessToken>` header
60
- - POST requests must be arrays `[{...}]`
61
- - System tables (prefixed with _) need special APIs
62
- - No escaped characters in JSON
63
- - Login/register returns JWT tokens directly in `accessToken` field
64
-
1
+ # Insforge Debug Guide
2
+
3
+ ## When Your API Code Fails
4
+
5
+ **Start here** → `get-instructions` and `get-backend-metadata` (understand system state)
6
+ **Read docs** → `get-db-api`, `get-auth-api`, `get-storage-api` (read ALL of them)
7
+ **Check table** → `get-table-schema` with your table name
8
+ **Test endpoint** → Use curl with exact API format from docs
9
+
10
+ ## Critical Rule: Read Documentation First
11
+
12
+ Before debugging, you MUST read all documentation to understand how the API works.
13
+
14
+ ## Common API Issues
15
+
16
+ **Table created but API fails** → Check field names match schema exactly
17
+ **Array required** → PostgREST requires POST requests as arrays `[{...}]`
18
+ **Foreign key error** → Parent record must exist before child
19
+ **Permission denied** → Write operations need `Authorization: Bearer <accessToken>`
20
+ **JWSError** → JWT token expired or invalid - user needs to login again
21
+ **PATCH increment fails** → PostgREST doesn't support SQL expressions like `count + 1`
22
+
23
+ ## Debug Workflow
24
+
25
+ 1. **Always** call `get-backend-metadata` first
26
+ 2. Read the relevant API documentation completely
27
+ 3. Check your table schema matches your API calls
28
+ 4. Test with curl using exact format from docs
29
+ 5. Verify response matches documentation
30
+
31
+ ### Example Debug Tests
32
+
33
+ ```bash
34
+ # Test GET endpoint
35
+ # Windows PowerShell: use curl.exe
36
+ curl -X GET http://localhost:7130/api/database/records/your_table \
37
+ -H "Authorization: Bearer YOUR_TOKEN" | jq .
38
+
39
+ # Test POST with array format
40
+ # Mac/Linux
41
+ curl -X POST http://localhost:7130/api/database/records/your_table \
42
+ -H 'Content-Type: application/json' \
43
+ -H 'Authorization: Bearer YOUR_TOKEN' \
44
+ -H 'Prefer: return=representation' \
45
+ -d '[{"field": "value"}]' | jq .
46
+
47
+ # Windows PowerShell (use curl.exe) - different quotes for nested JSON
48
+ curl.exe -X POST http://localhost:7130/api/database/records/your_table \
49
+ -H "Content-Type: application/json" \
50
+ -H "Authorization: Bearer YOUR_TOKEN" \
51
+ -H "Prefer: return=representation" \
52
+ -d '[{\"field\": \"value\"}]' | jq .
53
+ ```
54
+
55
+ ## Key Rules
56
+
57
+ - Backend runs on port 7130
58
+ - **READ operations**: No authentication required
59
+ - **WRITE operations**: Need `Authorization: Bearer <accessToken>` header
60
+ - POST requests must be arrays `[{...}]`
61
+ - System tables (prefixed with _) need special APIs
62
+ - No escaped characters in JSON
63
+ - Login/register returns JWT tokens directly in `accessToken` field
64
+
65
65
  **Remember**: MCP creates the structure, but you must follow API documentation exactly to use it.
@@ -1,124 +1,124 @@
1
- # Insforge OSS Instructions
2
-
3
- ## What Insforge OSS Does
4
-
5
- Backend-as-a-service with database, authentication, and file storage.
6
-
7
- **Key Concept**: InsForge replaces your traditional backend - implement business logic by calling database operations directly. Instead of building API endpoints, use our database API as your application's backend.
8
-
9
- ## 🚨 Project Setup
10
-
11
- **Create your app in a NEW directory, not inside `insforge/`**
12
-
13
- The `insforge/` directory is the BaaS platform. Your app should live elsewhere:
14
- ```
15
- ~/projects/
16
- ├── insforge/ # ← BaaS platform (don't work here)
17
- └── my-app/ # ← Your new app (work here)
18
- ```
19
-
20
- ## When to Use Tools
21
-
22
- **MUST DO FIRST** → Download project rules: `download-project-rules`
23
- **Start here** → `get-backend-metadata` (shows current database state)
24
- **Need docs** → `get-db-api`, `get-auth-api`, or `get-storage-api`
25
- **Create table** → `create-table` with explicit schema
26
- **Work with data** → Use database API endpoints directly
27
-
28
- ## Critical Rule:
29
- **MUST DO FIRST** → Call`download-project-rules` to download project ruless
30
-
31
- ## Critical Rule: Check Metadata First
32
-
33
- Before ANY database operation, call `get-backend-metadata` to get the current database state.
34
-
35
- ## Standard Workflow
36
-
37
- 1. **Always** call `get-backend-metadata` first
38
- 2. Check `get-instructions` if unfamiliar with the system
39
- 3. Create tables with `create-table` if needed
40
- 4. Use database API to insert/query/update/delete records
41
- 5. Call `get-backend-metadata` again to verify changes
42
-
43
- ## Key Rules
44
-
45
- - Frequently check `get-instructions` and `get-backend-metadata`
46
- - Always define explicit table schemas (no assumptions)
47
- - Every table gets auto ID, created_at, updated_at fields
48
- - **Database operations require**: JWT token (Authorization: Bearer header)
49
- - **API keys are for MCP testing** (use tokens for production)
50
- - File uploads work automatically with multipart/form-data
51
-
52
- ## Authentication Requirements
53
-
54
- ### Database Operations Need Authentication Token:
55
- 1. **JWT Token**: `Authorization: Bearer your-jwt-token` - Authenticates the user
56
-
57
- **Important Note about API Keys:**
58
- - The `x-api-key` header is ONLY used for MCP (Model Context Protocol) testing
59
- - Production applications should NEVER use API keys
60
- - Always use JWT tokens from user/admin authentication for real applications
61
-
62
- Without the Bearer token, you'll get "permission denied" errors when trying to insert, update, or delete records.
63
-
64
- ### Getting Authentication:
65
- ```bash
66
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
67
- # 1. First login to get JWT token
68
- curl -X POST http://localhost:7130/api/auth/admin/sessions \
69
- -H "Content-Type: application/json" \
70
- -d "{\"email\":\"admin@example.com\",\"password\":\"your-password\"}"
71
-
72
- # Response includes token: {"accessToken": "eyJ...", "user": {...}}
73
-
74
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
75
- # 2. Use the auth token for database operations
76
- curl -X POST http://localhost:7130/api/database/records/products \
77
- -H "Authorization: Bearer eyJ..." \
78
- -H "Content-Type: application/json" \
79
- -d "[{\"name\": \"Product\", \"price\": 99.99}]"
80
- ```
81
-
82
- ## Example: Comment Upvoting Feature
83
-
84
- - Check current tables: `get-backend-metadata`
85
- - Create comment_votes table: `create-table` with user_id, comment_id, vote_type fields
86
- - Frontend upvote action: `POST /api/database/records/comment_votes` with vote data
87
- - Frontend display scores: `GET /api/database/records/comment_votes?comment_id=eq.123` to count votes
88
- - No separate backend needed - frontend calls InsForge database API directly
89
-
90
-
91
- ## Critical Rule: Test API Endpoints with curl
92
-
93
- After creating or modifying any API endpoint, always test it with curl to verify it works correctly.
94
-
95
- **Note:** Avoid special characters (!,$,`,\) in curl command data - they can cause bash interpretation issues. Use simple text for testing:
96
-
97
- ```bash
98
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
99
- # Example: Test creating a record (requires JWT token)
100
- curl -X POST http://localhost:7130/api/database/records/posts \
101
- -H "x-api-key: your-api-key" \
102
- -H "Authorization: Bearer your-jwt-token" \
103
- -H "Content-Type: application/json" \
104
- -d '[{\"title\": \"Test Post\", \"content\": \"Test content\"}]'
105
-
106
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
107
- # Example: Test querying records (requires both API key and JWT token)
108
- curl http://localhost:7130/api/database/records/posts?id=eq.123 \
109
- -H "x-api-key: your-api-key" \
110
- -H "Authorization: Bearer your-jwt-token"
111
-
112
- # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
113
- # Example: Test authentication
114
- curl -X POST http://localhost:7130/api/auth/users \
115
- -H "Content-Type: application/json" \
116
- -d '{\"email\": \"test@example.com\", \"password\": \"testpass123\"}'
117
- ```
118
-
119
- Always include:
120
- - **Both headers for database operations**: x-api-key AND Authorization: Bearer token
121
- - Correct HTTP method (GET, POST, PATCH, DELETE)
122
- - Valid JSON payload for POST/PATCH requests (remember: POST requires array format `[{...}]`)
123
- - Query parameters for filtering GET requests
1
+ # Insforge OSS Instructions
2
+
3
+ ## What Insforge OSS Does
4
+
5
+ Backend-as-a-service with database, authentication, and file storage.
6
+
7
+ **Key Concept**: InsForge replaces your traditional backend - implement business logic by calling database operations directly. Instead of building API endpoints, use our database API as your application's backend.
8
+
9
+ ## 🚨 Project Setup
10
+
11
+ **Create your app in a NEW directory, not inside `insforge/`**
12
+
13
+ The `insforge/` directory is the BaaS platform. Your app should live elsewhere:
14
+ ```
15
+ ~/projects/
16
+ ├── insforge/ # ← BaaS platform (don't work here)
17
+ └── my-app/ # ← Your new app (work here)
18
+ ```
19
+
20
+ ## When to Use Tools
21
+
22
+ **MUST DO FIRST** → Download project rules: `download-project-rules`
23
+ **Start here** → `get-backend-metadata` (shows current database state)
24
+ **Need docs** → `get-db-api`, `get-auth-api`, or `get-storage-api`
25
+ **Create table** → `create-table` with explicit schema
26
+ **Work with data** → Use database API endpoints directly
27
+
28
+ ## Critical Rule:
29
+ **MUST DO FIRST** → Call`download-project-rules` to download project ruless
30
+
31
+ ## Critical Rule: Check Metadata First
32
+
33
+ Before ANY database operation, call `get-backend-metadata` to get the current database state.
34
+
35
+ ## Standard Workflow
36
+
37
+ 1. **Always** call `get-backend-metadata` first
38
+ 2. Check `get-instructions` if unfamiliar with the system
39
+ 3. Create tables with `create-table` if needed
40
+ 4. Use database API to insert/query/update/delete records
41
+ 5. Call `get-backend-metadata` again to verify changes
42
+
43
+ ## Key Rules
44
+
45
+ - Frequently check `get-instructions` and `get-backend-metadata`
46
+ - Always define explicit table schemas (no assumptions)
47
+ - Every table gets auto ID, created_at, updated_at fields
48
+ - **Database operations require**: JWT token (Authorization: Bearer header)
49
+ - **API keys are for MCP testing** (use tokens for production)
50
+ - File uploads work automatically with multipart/form-data
51
+
52
+ ## Authentication Requirements
53
+
54
+ ### Database Operations Need Authentication Token:
55
+ 1. **JWT Token**: `Authorization: Bearer your-jwt-token` - Authenticates the user
56
+
57
+ **Important Note about API Keys:**
58
+ - The `x-api-key` header is ONLY used for MCP (Model Context Protocol) testing
59
+ - Production applications should NEVER use API keys
60
+ - Always use JWT tokens from user/admin authentication for real applications
61
+
62
+ Without the Bearer token, you'll get "permission denied" errors when trying to insert, update, or delete records.
63
+
64
+ ### Getting Authentication:
65
+ ```bash
66
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
67
+ # 1. First login to get JWT token
68
+ curl -X POST http://localhost:7130/api/auth/admin/sessions \
69
+ -H "Content-Type: application/json" \
70
+ -d "{\"email\":\"admin@example.com\",\"password\":\"your-password\"}"
71
+
72
+ # Response includes token: {"accessToken": "eyJ...", "user": {...}}
73
+
74
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
75
+ # 2. Use the auth token for database operations
76
+ curl -X POST http://localhost:7130/api/database/records/products \
77
+ -H "Authorization: Bearer eyJ..." \
78
+ -H "Content-Type: application/json" \
79
+ -d "[{\"name\": \"Product\", \"price\": 99.99}]"
80
+ ```
81
+
82
+ ## Example: Comment Upvoting Feature
83
+
84
+ - Check current tables: `get-backend-metadata`
85
+ - Create comment_votes table: `create-table` with user_id, comment_id, vote_type fields
86
+ - Frontend upvote action: `POST /api/database/records/comment_votes` with vote data
87
+ - Frontend display scores: `GET /api/database/records/comment_votes?comment_id=eq.123` to count votes
88
+ - No separate backend needed - frontend calls InsForge database API directly
89
+
90
+
91
+ ## Critical Rule: Test API Endpoints with curl
92
+
93
+ After creating or modifying any API endpoint, always test it with curl to verify it works correctly.
94
+
95
+ **Note:** Avoid special characters (!,$,`,\) in curl command data - they can cause bash interpretation issues. Use simple text for testing:
96
+
97
+ ```bash
98
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
99
+ # Example: Test creating a record (requires JWT token)
100
+ curl -X POST http://localhost:7130/api/database/records/posts \
101
+ -H "x-api-key: your-api-key" \
102
+ -H "Authorization: Bearer your-jwt-token" \
103
+ -H "Content-Type: application/json" \
104
+ -d '[{\"title\": \"Test Post\", \"content\": \"Test content\"}]'
105
+
106
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
107
+ # Example: Test querying records (requires both API key and JWT token)
108
+ curl http://localhost:7130/api/database/records/posts?id=eq.123 \
109
+ -H "x-api-key: your-api-key" \
110
+ -H "Authorization: Bearer your-jwt-token"
111
+
112
+ # Works on both Windows and Unix (Windows PowerShell: use curl.exe)
113
+ # Example: Test authentication
114
+ curl -X POST http://localhost:7130/api/auth/users \
115
+ -H "Content-Type: application/json" \
116
+ -d '{\"email\": \"test@example.com\", \"password\": \"testpass123\"}'
117
+ ```
118
+
119
+ Always include:
120
+ - **Both headers for database operations**: x-api-key AND Authorization: Bearer token
121
+ - Correct HTTP method (GET, POST, PATCH, DELETE)
122
+ - Valid JSON payload for POST/PATCH requests (remember: POST requires array format `[{...}]`)
123
+ - Query parameters for filtering GET requests
124
124
  - Prefer: return=representation header if you want to see the created/updated records
@@ -1,118 +1,118 @@
1
- ---
2
- description: Insforge AI Development Rules - Essential guidelines for BaaS platform development
3
- globs:
4
- alwaysApply: true
5
- ---
6
-
7
- # Insforge Development Rules
8
-
9
- ## Core Identity
10
- You are an exceptional software developer using Insforge Backend to assist building the product. Make it visually stunning, content-rich, professional-grade UIs.
11
-
12
- ## 🔴 MANDATORY: cURL Test at EVERY Step
13
-
14
- **For AI Agents: Test with cURL repeatedly throughout development:**
15
-
16
- 1. **Before coding** → Test endpoint exists, check response format
17
- 2. **During coding** → Test when confused about any API behavior
18
- 3. **After coding** → Test complete user journey end-to-end
19
- 4. **When debugging** → Test to see actual vs expected responses
20
-
21
- ```bash
22
- # Mac/Linux
23
- curl -X POST http://localhost:7130/api/[endpoint] \
24
- -H 'Content-Type: application/json' \
25
- -d '[{"key": "value"}]' | jq .
26
-
27
- # Windows PowerShell (use curl.exe) - different quotes for nested JSON
28
- curl.exe -X POST http://localhost:7130/api/[endpoint] \
29
- -H "Content-Type: application/json" \
30
- -d '[{\"key\": \"value\"}]' | jq .
31
- ```
32
-
33
- **You WILL get it wrong without testing. Test early, test often.**
34
-
35
- ## Critical Architecture Points
36
-
37
- When in doubt, read instructions documents again.
38
-
39
- ## 🚨 CRUD Operations - PostgREST NOT RESTful
40
- ### PostgREST Database API Behavior
41
-
42
- **Critical PostgREST Rules:**
43
-
44
- 1. **POST requires array**: `[{...}]` even for single record
45
- 2. **Empty responses without `Prefer: return=representation`**:
46
- - POST → `[]` (empty array)
47
- - PATCH → 204 No Content
48
- - DELETE → 204 No Content
49
- - **DELETE is idempotent** - no error if record doesn't exist
50
- 3. **With `Prefer: return=representation`**:
51
- - Returns affected records as array
52
- - DELETE and PATCH returns `[]` if record didn't exist
53
- 4. **Pagination**:
54
- - Request: `Range: 0-9` + `Prefer: count=exact`
55
- - Response: `Content-Range: 0-9/100` header (shows total)
56
- - Without `Prefer: count=exact`: `Content-Range: 0-9/*` (no total)
57
- 5. **Query syntax**: `?field=operator.value`
58
- - `?id=eq.123` (equals)
59
- - `?age=gt.30` (greater than)
60
- - `?name=like.*john*` (pattern match)
61
-
62
- ## Auth Operations:
63
-
64
- ### 🚨 IMPORTANT: Correct Auth Endpoints
65
- - **Register**: `POST /api/auth/users` - Create new user account
66
- - **Login**: `POST /api/auth/sessions` - Authenticate existing user
67
- - **Admin Login**: `POST /api/auth/admin/sessions` - Admin authentication
68
- - **Current User**: `GET /api/auth/sessions/current` - Get authenticated user info
69
- - `/api/auth/sessions/current` returns `{"user": {...}}` - nested structure
70
- - Store JWT tokens and include as `Authorization: Bearer {accessToken}` header
71
- - **Note**: Login/register returns `{accessToken, user}` with JWT token
72
-
73
- ### Regular API Response Format
74
-
75
- **⚠️ IMPORTANT: Frontend Error Handling**
76
- - **PARSE** backend responses and display user-friendly messages
77
- - **DO NOT** show raw API responses directly to users
78
- - **TRANSFORM** error details into readable, actionable messages
79
-
80
- - Success: Data directly (object/array)
81
- - Error: `{error, message, statusCode}`
82
- - Empty POST/PATCH/DELETE: Add `Prefer: return=representation`
83
-
84
- ### 🚨 Storage API Rules
85
- - **Upload Methods**:
86
- - **PUT** `/api/storage/buckets/{bucket}/objects/{filename}` - Upload with specific key
87
- - **POST** `/api/storage/buckets/{bucket}/objects` - Upload with auto-generated key
88
- - **Authentication**: Upload operations require `Authorization: Bearer {accessToken}`
89
- - **Generate Unique Filenames**: Use POST for auto-generated keys to prevent overwrites
90
- - **Multipart Form**: Use FormData for file uploads
91
- - **URL Format**: Storage returns **ABSOLUTE URLs** (e.g., `http://localhost:7130/api/storage/buckets/{bucket}/objects/{filename}`)
92
- - **IMPORTANT**: URLs are complete and ready to use - no need to prepend host or path
93
- - Use the URL directly in `<img src>` or fetch requests
94
-
95
- ## 🔥 Test EVERY Endpoint
96
-
97
- **Backend runs on port 7130**
98
-
99
- Always test with cURL before UI integration:
100
- - Include `Authorization: Bearer {accessToken}` for auth
101
- - Add `Prefer: return=representation` to see created data
102
- - Windows PowerShell: use curl.exe
103
-
104
- ```bash
105
- # Mac/Linux
106
- curl -X POST http://localhost:7130/api/database/records/posts \
107
- -H 'Authorization: Bearer TOKEN' \
108
- -H 'Content-Type: application/json' \
109
- -H 'Prefer: return=representation' \
110
- -d '[{"user_id": "from-localStorage", "caption": "Test"}]'
111
-
112
- # Windows PowerShell (use curl.exe) - different quotes for nested JSON
113
- curl.exe -X POST http://localhost:7130/api/database/records/posts \
114
- -H "Authorization: Bearer TOKEN" \
115
- -H "Content-Type: application/json" \
116
- -H "Prefer: return=representation" \
117
- -d '[{\"user_id\": \"from-localStorage\", \"caption\": \"Test\"}]'
1
+ ---
2
+ description: Insforge AI Development Rules - Essential guidelines for BaaS platform development
3
+ globs:
4
+ alwaysApply: true
5
+ ---
6
+
7
+ # Insforge Development Rules
8
+
9
+ ## Core Identity
10
+ You are an exceptional software developer using Insforge Backend to assist building the product. Make it visually stunning, content-rich, professional-grade UIs.
11
+
12
+ ## 🔴 MANDATORY: cURL Test at EVERY Step
13
+
14
+ **For AI Agents: Test with cURL repeatedly throughout development:**
15
+
16
+ 1. **Before coding** → Test endpoint exists, check response format
17
+ 2. **During coding** → Test when confused about any API behavior
18
+ 3. **After coding** → Test complete user journey end-to-end
19
+ 4. **When debugging** → Test to see actual vs expected responses
20
+
21
+ ```bash
22
+ # Mac/Linux
23
+ curl -X POST http://localhost:7130/api/[endpoint] \
24
+ -H 'Content-Type: application/json' \
25
+ -d '[{"key": "value"}]' | jq .
26
+
27
+ # Windows PowerShell (use curl.exe) - different quotes for nested JSON
28
+ curl.exe -X POST http://localhost:7130/api/[endpoint] \
29
+ -H "Content-Type: application/json" \
30
+ -d '[{\"key\": \"value\"}]' | jq .
31
+ ```
32
+
33
+ **You WILL get it wrong without testing. Test early, test often.**
34
+
35
+ ## Critical Architecture Points
36
+
37
+ When in doubt, read instructions documents again.
38
+
39
+ ## 🚨 CRUD Operations - PostgREST NOT RESTful
40
+ ### PostgREST Database API Behavior
41
+
42
+ **Critical PostgREST Rules:**
43
+
44
+ 1. **POST requires array**: `[{...}]` even for single record
45
+ 2. **Empty responses without `Prefer: return=representation`**:
46
+ - POST → `[]` (empty array)
47
+ - PATCH → 204 No Content
48
+ - DELETE → 204 No Content
49
+ - **DELETE is idempotent** - no error if record doesn't exist
50
+ 3. **With `Prefer: return=representation`**:
51
+ - Returns affected records as array
52
+ - DELETE and PATCH returns `[]` if record didn't exist
53
+ 4. **Pagination**:
54
+ - Request: `Range: 0-9` + `Prefer: count=exact`
55
+ - Response: `Content-Range: 0-9/100` header (shows total)
56
+ - Without `Prefer: count=exact`: `Content-Range: 0-9/*` (no total)
57
+ 5. **Query syntax**: `?field=operator.value`
58
+ - `?id=eq.123` (equals)
59
+ - `?age=gt.30` (greater than)
60
+ - `?name=like.*john*` (pattern match)
61
+
62
+ ## Auth Operations:
63
+
64
+ ### 🚨 IMPORTANT: Correct Auth Endpoints
65
+ - **Register**: `POST /api/auth/users` - Create new user account
66
+ - **Login**: `POST /api/auth/sessions` - Authenticate existing user
67
+ - **Admin Login**: `POST /api/auth/admin/sessions` - Admin authentication
68
+ - **Current User**: `GET /api/auth/sessions/current` - Get authenticated user info
69
+ - `/api/auth/sessions/current` returns `{"user": {...}}` - nested structure
70
+ - Store JWT tokens and include as `Authorization: Bearer {accessToken}` header
71
+ - **Note**: Login/register returns `{accessToken, user}` with JWT token
72
+
73
+ ### Regular API Response Format
74
+
75
+ **⚠️ IMPORTANT: Frontend Error Handling**
76
+ - **PARSE** backend responses and display user-friendly messages
77
+ - **DO NOT** show raw API responses directly to users
78
+ - **TRANSFORM** error details into readable, actionable messages
79
+
80
+ - Success: Data directly (object/array)
81
+ - Error: `{error, message, statusCode}`
82
+ - Empty POST/PATCH/DELETE: Add `Prefer: return=representation`
83
+
84
+ ### 🚨 Storage API Rules
85
+ - **Upload Methods**:
86
+ - **PUT** `/api/storage/buckets/{bucket}/objects/{filename}` - Upload with specific key
87
+ - **POST** `/api/storage/buckets/{bucket}/objects` - Upload with auto-generated key
88
+ - **Authentication**: Upload operations require `Authorization: Bearer {accessToken}`
89
+ - **Generate Unique Filenames**: Use POST for auto-generated keys to prevent overwrites
90
+ - **Multipart Form**: Use FormData for file uploads
91
+ - **URL Format**: Storage returns **ABSOLUTE URLs** (e.g., `http://localhost:7130/api/storage/buckets/{bucket}/objects/{filename}`)
92
+ - **IMPORTANT**: URLs are complete and ready to use - no need to prepend host or path
93
+ - Use the URL directly in `<img src>` or fetch requests
94
+
95
+ ## 🔥 Test EVERY Endpoint
96
+
97
+ **Backend runs on port 7130**
98
+
99
+ Always test with cURL before UI integration:
100
+ - Include `Authorization: Bearer {accessToken}` for auth
101
+ - Add `Prefer: return=representation` to see created data
102
+ - Windows PowerShell: use curl.exe
103
+
104
+ ```bash
105
+ # Mac/Linux
106
+ curl -X POST http://localhost:7130/api/database/records/posts \
107
+ -H 'Authorization: Bearer TOKEN' \
108
+ -H 'Content-Type: application/json' \
109
+ -H 'Prefer: return=representation' \
110
+ -d '[{"user_id": "from-localStorage", "caption": "Test"}]'
111
+
112
+ # Windows PowerShell (use curl.exe) - different quotes for nested JSON
113
+ curl.exe -X POST http://localhost:7130/api/database/records/posts \
114
+ -H "Authorization: Bearer TOKEN" \
115
+ -H "Content-Type: application/json" \
116
+ -H "Prefer: return=representation" \
117
+ -d '[{\"user_id\": \"from-localStorage\", \"caption\": \"Test\"}]'
118
118
  ```