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,215 +1,215 @@
1
- # Insforge OSS Authentication API Documentation
2
-
3
- ## Overview
4
-
5
- Insforge uses JWT tokens and API keys for authentication. Store tokens in localStorage after login.
6
- **All requests**: Use `Authorization: Bearer <token>` header (for both JWT tokens and API keys)
7
-
8
- ## Base URL
9
- `http://localhost:7130`
10
-
11
- ## User Authentication
12
-
13
- ### Register New User
14
- **POST** `/api/auth/users`
15
-
16
- Body: `{"email": "user@example.com", "password": "password", "name": "User Name"}`
17
-
18
- Returns: `{"accessToken": "...", "user": {"id": "...", "email": "...", "name": "...", "emailVerified": false, "createdAt": "...", "updatedAt": "..."}}`
19
-
20
- **Note:** This creates an entry in the `users` table with the same `id` for profile data
21
-
22
- ### Login User
23
- **POST** `/api/auth/sessions`
24
-
25
- Body: `{"email": "user@example.com", "password": "password"}`
26
-
27
- Returns: `{"accessToken": "...", "user": {"id": "...", "email": "...", "name": "...", "emailVerified": false, "createdAt": "...", "updatedAt": "..."}}`
28
-
29
- ### Get Current User
30
- **GET** `/api/auth/sessions/current`
31
-
32
- Headers: `Authorization: Bearer <accessToken>`
33
-
34
- Returns: `{"user": {"id": "...", "email": "...", "role": "authenticated"}}`
35
-
36
- **Note**: Returns LIMITED fields (id, email, role). For user profile data (nickname, avatar, bio, etc.), query `/api/database/records/users?id=eq.<user_id>`
37
-
38
- **Common errors:**
39
- - `401` with `"code": "MISSING_AUTHORIZATION_HEADER"` → No token provided
40
- - `401` with `"code": "INVALID_TOKEN"` → Token expired or invalid
41
-
42
- ## Admin Authentication
43
-
44
- ### Admin Login
45
- **POST** `/api/auth/admin/sessions`
46
-
47
- Request:
48
- ```json
49
- {
50
- "email": "admin@example.com",
51
- "password": "change-this-password"
52
- }
53
- ```
54
-
55
- Response:
56
- ```json
57
- {
58
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
59
- "user": {
60
- "id": "admin-id",
61
- "email": "admin@example.com",
62
- "name": "Administrator",
63
- "role": "project_admin"
64
- }
65
- }
66
- ```
67
-
68
- ```bash
69
- # Mac/Linux
70
- curl -X POST http://localhost:7130/api/auth/admin/sessions \
71
- -H 'Content-Type: application/json' \
72
- -d '{"email":"admin@example.com","password":"change-this-password"}'
73
-
74
- # Windows PowerShell (use curl.exe)
75
- curl.exe -X POST http://localhost:7130/api/auth/admin/sessions \
76
- -H "Content-Type: application/json" \
77
- -d '{\"email\":\"admin@example.com\",\"password\":\"change-this-password\"}'
78
- ```
79
-
80
- ## Error Response Format
81
-
82
- All error responses follow this format:
83
- ```json
84
- {
85
- "code": "ERROR_CODE",
86
- "message": "Human-readable error message"
87
- }
88
- ```
89
-
90
- Example error:
91
- ```json
92
- {
93
- "code": "INVALID_EMAIL",
94
- "message": "Please provide a valid email"
95
- }
96
- ```
97
-
98
- ## OAuth Support
99
-
100
- Insforge supports Google and GitHub OAuth when configured with environment variables.
101
-
102
- OAuth workflow:
103
- 1. End user initiates OAuth login and receives authorization URL from backend
104
- 2. After successful user authorization, Google/GitHub redirects to backend callback
105
- 3. Backend generates JWT token and redirects to the application page
106
-
107
- Prerequisites:
108
- 1. Create Google or GitHub OAuth Application and obtain Client ID and Client Secret
109
- 2. Configure each platform's Client ID/Client Secret in InsForge backend (via Environment Variables)
110
-
111
- ### OAuth Endpoints
112
-
113
- #### Get OAuth URL (Google/GitHub)
114
- **GET** `/api/auth/oauth/:provider`
115
-
116
- Parameters:
117
- - `provider`: "google" or "github" in the URL path
118
- - Query params: `?redirect_uri=http://localhost:3000/dashboard`
119
-
120
- Returns: `{"authUrl": "https://accounts.google.com/..."}` - URL to redirect user to provider's OAuth page.
121
-
122
- ```bash
123
- # Mac/Linux
124
- curl -X GET "http://localhost:7130/api/auth/oauth/google?redirect_uri=http://localhost:3000/dashboard"
125
-
126
- # Windows PowerShell (use curl.exe)
127
- curl.exe -X GET "http://localhost:7130/api/auth/oauth/google?redirect_uri=http://localhost:3000/dashboard"
128
- ```
129
-
130
- Example response:
131
- ```json
132
- {
133
- "authUrl": "https://accounts.google.com/o/oauth2/v2/auth?client_id=..."
134
- }
135
- ```
136
-
137
- #### OAuth Callback
138
- The OAuth provider will redirect to:
139
- - Google: `http://localhost:7130/api/auth/oauth/google/callback`
140
- - GitHub: `http://localhost:7130/api/auth/oauth/github/callback`
141
-
142
- After processing, backend redirects to your specified `redirect_uri` with JWT token in URL parameters:
143
- - `access_token` - JWT authentication token
144
- - `user_id` - User's unique ID
145
- - `email` - User's email address
146
- - `name` - User's display name
147
-
148
- ## User Profile Table
149
-
150
- ### Users Table
151
- The `users` table stores **user profile data**:
152
- - **✅ READ** via: `GET /api/database/records/users`
153
- - **✅ WRITE** via: `PATCH /api/database/records/users?id=eq.<user_id>`
154
- - **✅ Foreign keys allowed** - reference `users.id`
155
- - **IMPORTANT**: Add columns to this table for profile data instead of creating separate profile tables
156
-
157
- **Schema:**
158
- - `id` - User ID (UUID, primary key)
159
- - `nickname` - Display name (text, nullable)
160
- - `avatar_url` - Profile picture URL (text, nullable)
161
- - `bio` - User biography (text, nullable)
162
- - `birthday` - Birth date (date, nullable)
163
- - `created_at` - Account creation timestamp
164
- - `updated_at` - Last update timestamp
165
-
166
- **Note:** Email and name from auth are returned by Auth API, not stored in users table
167
-
168
- Example - Create table with user reference:
169
- ```json
170
- {
171
- "table_name": "posts",
172
- "columns": [
173
- {
174
- "name": "title",
175
- "type": "string",
176
- "nullable": false,
177
- "is_unique": false
178
- },
179
- {
180
- "name": "user_id",
181
- "type": "string",
182
- "nullable": false,
183
- "is_unique": false,
184
- "foreign_key": {
185
- "reference_table": "users",
186
- "reference_column": "id",
187
- "on_delete": "CASCADE",
188
- "on_update": "CASCADE"
189
- }
190
- }
191
- ]
192
- }
193
- ```
194
-
195
- ### Available Tables
196
- - **users** - User profile data (read/write access)
197
- - Use this table for foreign key references
198
- - Update profiles with PATCH requests
199
-
200
- ## Headers Summary
201
-
202
- | API Type | Header Required |
203
- |----------|----------------|
204
- | Auth endpoints | None |
205
- | Database/Storage | `Authorization: Bearer <accessToken>` |
206
- | MCP testing only | `x-api-key: <key>` |
207
-
208
- ## Critical Notes
209
-
210
- 1. `/api/auth/sessions/current` returns `{"user": {...}}` - nested, not root level
211
- 2. `/api/auth/sessions/current` only has: id, email, role (limited fields)
212
- 3. Full user profile: `GET /api/database/records/users?id=eq.<id>`
213
- 4. POST to database requires `[{...}]` array format always
214
- 5. Auth endpoints (register/login): no headers needed
1
+ # Insforge OSS Authentication API Documentation
2
+
3
+ ## Overview
4
+
5
+ Insforge uses JWT tokens and API keys for authentication. Store tokens in localStorage after login.
6
+ **All requests**: Use `Authorization: Bearer <token>` header (for both JWT tokens and API keys)
7
+
8
+ ## Base URL
9
+ `http://localhost:7130`
10
+
11
+ ## User Authentication
12
+
13
+ ### Register New User
14
+ **POST** `/api/auth/users`
15
+
16
+ Body: `{"email": "user@example.com", "password": "password", "name": "User Name"}`
17
+
18
+ Returns: `{"accessToken": "...", "user": {"id": "...", "email": "...", "name": "...", "emailVerified": false, "createdAt": "...", "updatedAt": "..."}}`
19
+
20
+ **Note:** This creates an entry in the `users` table with the same `id` for profile data
21
+
22
+ ### Login User
23
+ **POST** `/api/auth/sessions`
24
+
25
+ Body: `{"email": "user@example.com", "password": "password"}`
26
+
27
+ Returns: `{"accessToken": "...", "user": {"id": "...", "email": "...", "name": "...", "emailVerified": false, "createdAt": "...", "updatedAt": "..."}}`
28
+
29
+ ### Get Current User
30
+ **GET** `/api/auth/sessions/current`
31
+
32
+ Headers: `Authorization: Bearer <accessToken>`
33
+
34
+ Returns: `{"user": {"id": "...", "email": "...", "role": "authenticated"}}`
35
+
36
+ **Note**: Returns LIMITED fields (id, email, role). For user profile data (nickname, avatar, bio, etc.), query `/api/database/records/users?id=eq.<user_id>`
37
+
38
+ **Common errors:**
39
+ - `401` with `"code": "MISSING_AUTHORIZATION_HEADER"` → No token provided
40
+ - `401` with `"code": "INVALID_TOKEN"` → Token expired or invalid
41
+
42
+ ## Admin Authentication
43
+
44
+ ### Admin Login
45
+ **POST** `/api/auth/admin/sessions`
46
+
47
+ Request:
48
+ ```json
49
+ {
50
+ "email": "admin@example.com",
51
+ "password": "change-this-password"
52
+ }
53
+ ```
54
+
55
+ Response:
56
+ ```json
57
+ {
58
+ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
59
+ "user": {
60
+ "id": "admin-id",
61
+ "email": "admin@example.com",
62
+ "name": "Administrator",
63
+ "role": "project_admin"
64
+ }
65
+ }
66
+ ```
67
+
68
+ ```bash
69
+ # Mac/Linux
70
+ curl -X POST http://localhost:7130/api/auth/admin/sessions \
71
+ -H 'Content-Type: application/json' \
72
+ -d '{"email":"admin@example.com","password":"change-this-password"}'
73
+
74
+ # Windows PowerShell (use curl.exe)
75
+ curl.exe -X POST http://localhost:7130/api/auth/admin/sessions \
76
+ -H "Content-Type: application/json" \
77
+ -d '{\"email\":\"admin@example.com\",\"password\":\"change-this-password\"}'
78
+ ```
79
+
80
+ ## Error Response Format
81
+
82
+ All error responses follow this format:
83
+ ```json
84
+ {
85
+ "code": "ERROR_CODE",
86
+ "message": "Human-readable error message"
87
+ }
88
+ ```
89
+
90
+ Example error:
91
+ ```json
92
+ {
93
+ "code": "INVALID_EMAIL",
94
+ "message": "Please provide a valid email"
95
+ }
96
+ ```
97
+
98
+ ## OAuth Support
99
+
100
+ Insforge supports Google and GitHub OAuth when configured with environment variables.
101
+
102
+ OAuth workflow:
103
+ 1. End user initiates OAuth login and receives authorization URL from backend
104
+ 2. After successful user authorization, Google/GitHub redirects to backend callback
105
+ 3. Backend generates JWT token and redirects to the application page
106
+
107
+ Prerequisites:
108
+ 1. Create Google or GitHub OAuth Application and obtain Client ID and Client Secret
109
+ 2. Configure each platform's Client ID/Client Secret in InsForge backend (via Environment Variables)
110
+
111
+ ### OAuth Endpoints
112
+
113
+ #### Get OAuth URL (Google/GitHub)
114
+ **GET** `/api/auth/oauth/:provider`
115
+
116
+ Parameters:
117
+ - `provider`: "google" or "github" in the URL path
118
+ - Query params: `?redirect_uri=http://localhost:3000/dashboard`
119
+
120
+ Returns: `{"authUrl": "https://accounts.google.com/..."}` - URL to redirect user to provider's OAuth page.
121
+
122
+ ```bash
123
+ # Mac/Linux
124
+ curl -X GET "http://localhost:7130/api/auth/oauth/google?redirect_uri=http://localhost:3000/dashboard"
125
+
126
+ # Windows PowerShell (use curl.exe)
127
+ curl.exe -X GET "http://localhost:7130/api/auth/oauth/google?redirect_uri=http://localhost:3000/dashboard"
128
+ ```
129
+
130
+ Example response:
131
+ ```json
132
+ {
133
+ "authUrl": "https://accounts.google.com/o/oauth2/v2/auth?client_id=..."
134
+ }
135
+ ```
136
+
137
+ #### OAuth Callback
138
+ The OAuth provider will redirect to:
139
+ - Google: `http://localhost:7130/api/auth/oauth/google/callback`
140
+ - GitHub: `http://localhost:7130/api/auth/oauth/github/callback`
141
+
142
+ After processing, backend redirects to your specified `redirect_uri` with JWT token in URL parameters:
143
+ - `access_token` - JWT authentication token
144
+ - `user_id` - User's unique ID
145
+ - `email` - User's email address
146
+ - `name` - User's display name
147
+
148
+ ## User Profile Table
149
+
150
+ ### Users Table
151
+ The `users` table stores **user profile data**:
152
+ - **✅ READ** via: `GET /api/database/records/users`
153
+ - **✅ WRITE** via: `PATCH /api/database/records/users?id=eq.<user_id>`
154
+ - **✅ Foreign keys allowed** - reference `users.id`
155
+ - **IMPORTANT**: Add columns to this table for profile data instead of creating separate profile tables
156
+
157
+ **Schema:**
158
+ - `id` - User ID (UUID, primary key)
159
+ - `nickname` - Display name (text, nullable)
160
+ - `avatar_url` - Profile picture URL (text, nullable)
161
+ - `bio` - User biography (text, nullable)
162
+ - `birthday` - Birth date (date, nullable)
163
+ - `created_at` - Account creation timestamp
164
+ - `updated_at` - Last update timestamp
165
+
166
+ **Note:** Email and name from auth are returned by Auth API, not stored in users table
167
+
168
+ Example - Create table with user reference:
169
+ ```json
170
+ {
171
+ "table_name": "posts",
172
+ "columns": [
173
+ {
174
+ "name": "title",
175
+ "type": "string",
176
+ "nullable": false,
177
+ "is_unique": false
178
+ },
179
+ {
180
+ "name": "user_id",
181
+ "type": "string",
182
+ "nullable": false,
183
+ "is_unique": false,
184
+ "foreign_key": {
185
+ "reference_table": "users",
186
+ "reference_column": "id",
187
+ "on_delete": "CASCADE",
188
+ "on_update": "CASCADE"
189
+ }
190
+ }
191
+ ]
192
+ }
193
+ ```
194
+
195
+ ### Available Tables
196
+ - **users** - User profile data (read/write access)
197
+ - Use this table for foreign key references
198
+ - Update profiles with PATCH requests
199
+
200
+ ## Headers Summary
201
+
202
+ | API Type | Header Required |
203
+ |----------|----------------|
204
+ | Auth endpoints | None |
205
+ | Database/Storage | `Authorization: Bearer <accessToken>` |
206
+ | MCP testing only | `x-api-key: <key>` |
207
+
208
+ ## Critical Notes
209
+
210
+ 1. `/api/auth/sessions/current` returns `{"user": {...}}` - nested, not root level
211
+ 2. `/api/auth/sessions/current` only has: id, email, role (limited fields)
212
+ 3. Full user profile: `GET /api/database/records/users?id=eq.<id>`
213
+ 4. POST to database requires `[{...}]` array format always
214
+ 5. Auth endpoints (register/login): no headers needed
215
215
  6. Protected endpoints: `Authorization: Bearer <accessToken>`
@@ -1,100 +1,100 @@
1
- # InsForge Auth SDK
2
-
3
- ## Setup
4
- ```javascript
5
- import { createClient } from '@insforge/sdk';
6
- const client = createClient({ baseUrl: 'http://localhost:7130' });
7
- ```
8
-
9
- ## Methods
10
-
11
- ### signUp
12
- ```javascript
13
- await client.auth.signUp({ email, password, name? })
14
- // Returns: { data: { accessToken, user }, error }
15
- // user: { id, email, name, emailVerified, createdAt, updatedAt }
16
- // Token auto-stored
17
- ```
18
-
19
- ### signInWithPassword
20
- ```javascript
21
- await client.auth.signInWithPassword({ email, password })
22
- // Returns: { data: { accessToken, user }, error }
23
- // Token auto-stored
24
- ```
25
-
26
- ### signInWithOAuth
27
- ```javascript
28
- const { data, error } = await client.auth.signInWithOAuth({
29
- provider: 'google'|'github',
30
- redirectTo: window.location.origin,
31
- skipBrowserRedirect: true
32
- })
33
- // Returns: { data: { url, provider }, error }
34
-
35
- // Manual redirect required
36
- if (data?.url) {
37
- window.location.href = data.url
38
- }
39
-
40
- // ⚠️ IMPORTANT: No callback handling needed!
41
- // After OAuth, user returns to redirectTo URL already authenticated
42
- // The SDK automatically:
43
- // - Handles the OAuth callback
44
- // - Stores the JWT token
45
- // - Makes user available via getCurrentUser()
46
-
47
- // ❌ DON'T DO THIS (not needed):
48
- // const accessToken = urlParams.get('access_token')
49
- // const userId = urlParams.get('user_id')
50
-
51
- // ✅ DO THIS INSTEAD (after redirect back):
52
- const { data: userData } = await client.auth.getCurrentUser()
53
- ```
54
-
55
- ### getCurrentUser
56
- ```javascript
57
- await client.auth.getCurrentUser()
58
- // Returns: { data: { user: { id, email, role }, profile: {...} }, error }
59
- // Makes API call to validate token and fetch profile
60
- ```
61
-
62
- ### getCurrentSession
63
- ```javascript
64
- await client.auth.getCurrentSession()
65
- // Returns: { data: { session: { accessToken, user } }, error }
66
- // From localStorage, no API call
67
- ```
68
-
69
- ### getProfile
70
- ```javascript
71
- await client.auth.getProfile(userId)
72
- // Returns: { data: { id, nickname, bio, ... }, error }
73
- // Returns single object, not array!
74
- ```
75
-
76
- ### setProfile
77
- ```javascript
78
- await client.auth.setProfile({ nickname, bio, avatar_url })
79
- // Returns: { data: { id, nickname, bio, ... }, error }
80
- // Returns single object, not array!
81
- ```
82
-
83
- ### signOut
84
- ```javascript
85
- await client.auth.signOut()
86
- // Returns: { error }
87
- // Clears token from storage
88
- ```
89
-
90
- ## Error Codes
91
- - `INVALID_EMAIL`
92
- - `WEAK_PASSWORD`
93
- - `USER_ALREADY_EXISTS`
94
- - `INVALID_CREDENTIALS`
95
- - `INVALID_TOKEN`
96
-
97
- ## Notes
98
- - Tokens stored in localStorage (browser) or memory (Node.js)
99
- - All requests after login automatically include token
1
+ # InsForge Auth SDK
2
+
3
+ ## Setup
4
+ ```javascript
5
+ import { createClient } from '@insforge/sdk';
6
+ const client = createClient({ baseUrl: 'http://localhost:7130' });
7
+ ```
8
+
9
+ ## Methods
10
+
11
+ ### signUp
12
+ ```javascript
13
+ await client.auth.signUp({ email, password, name? })
14
+ // Returns: { data: { accessToken, user }, error }
15
+ // user: { id, email, name, emailVerified, createdAt, updatedAt }
16
+ // Token auto-stored
17
+ ```
18
+
19
+ ### signInWithPassword
20
+ ```javascript
21
+ await client.auth.signInWithPassword({ email, password })
22
+ // Returns: { data: { accessToken, user }, error }
23
+ // Token auto-stored
24
+ ```
25
+
26
+ ### signInWithOAuth
27
+ ```javascript
28
+ const { data, error } = await client.auth.signInWithOAuth({
29
+ provider: 'google'|'github',
30
+ redirectTo: window.location.origin,
31
+ skipBrowserRedirect: true
32
+ })
33
+ // Returns: { data: { url, provider }, error }
34
+
35
+ // Manual redirect required
36
+ if (data?.url) {
37
+ window.location.href = data.url
38
+ }
39
+
40
+ // ⚠️ IMPORTANT: No callback handling needed!
41
+ // After OAuth, user returns to redirectTo URL already authenticated
42
+ // The SDK automatically:
43
+ // - Handles the OAuth callback
44
+ // - Stores the JWT token
45
+ // - Makes user available via getCurrentUser()
46
+
47
+ // ❌ DON'T DO THIS (not needed):
48
+ // const accessToken = urlParams.get('access_token')
49
+ // const userId = urlParams.get('user_id')
50
+
51
+ // ✅ DO THIS INSTEAD (after redirect back):
52
+ const { data: userData } = await client.auth.getCurrentUser()
53
+ ```
54
+
55
+ ### getCurrentUser
56
+ ```javascript
57
+ await client.auth.getCurrentUser()
58
+ // Returns: { data: { user: { id, email, role }, profile: {...} }, error }
59
+ // Makes API call to validate token and fetch profile
60
+ ```
61
+
62
+ ### getCurrentSession
63
+ ```javascript
64
+ await client.auth.getCurrentSession()
65
+ // Returns: { data: { session: { accessToken, user } }, error }
66
+ // From localStorage, no API call
67
+ ```
68
+
69
+ ### getProfile
70
+ ```javascript
71
+ await client.auth.getProfile(userId)
72
+ // Returns: { data: { id, nickname, bio, ... }, error }
73
+ // Returns single object, not array!
74
+ ```
75
+
76
+ ### setProfile
77
+ ```javascript
78
+ await client.auth.setProfile({ nickname, bio, avatar_url })
79
+ // Returns: { data: { id, nickname, bio, ... }, error }
80
+ // Returns single object, not array!
81
+ ```
82
+
83
+ ### signOut
84
+ ```javascript
85
+ await client.auth.signOut()
86
+ // Returns: { error }
87
+ // Clears token from storage
88
+ ```
89
+
90
+ ## Error Codes
91
+ - `INVALID_EMAIL`
92
+ - `WEAK_PASSWORD`
93
+ - `USER_ALREADY_EXISTS`
94
+ - `INVALID_CREDENTIALS`
95
+ - `INVALID_TOKEN`
96
+
97
+ ## Notes
98
+ - Tokens stored in localStorage (browser) or memory (Node.js)
99
+ - All requests after login automatically include token
100
100
  - User profile data in `users` table, not auth