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,414 +1,710 @@
1
- ---
2
- title: Authentication SDK Reference
3
- description: User authentication and profile management with the InsForge SDK
4
- ---
5
-
6
- import Installation from '/snippets/sdk-installation.mdx';
7
-
8
- <Installation />
9
-
10
- ## signUp()
11
-
12
- Create a new user account with email and password.
13
-
14
- ### Parameters
15
-
16
- - `email` (string, required) - User's email address
17
- - `password` (string, required) - User's password
18
- - `name` (string, optional) - User's display name
19
-
20
- ### Returns
21
-
22
- ```typescript
23
- {
24
- data: {
25
- user: { id, email, name, emailVerified, createdAt, updatedAt },
26
- accessToken: string
27
- } | null,
28
- error: Error | null
29
- }
30
- ```
31
-
32
- ### Example
33
-
34
- ```javascript
35
- const { data, error } = await insforge.auth.signUp({
36
- email: 'user@example.com',
37
- password: 'secure_password123',
38
- name: 'John Doe'
39
- })
40
- ```
41
-
42
- ### Output
43
-
44
- ```json
45
- {
46
- "data": {
47
- "user": {
48
- "id": "usr_abc123",
49
- "email": "user@example.com",
50
- "name": "John Doe",
51
- "emailVerified": false,
52
- "createdAt": "2024-01-15T10:00:00Z",
53
- "updatedAt": "2024-01-15T10:00:00Z"
54
- },
55
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
56
- },
57
- "error": null
58
- }
59
- ```
60
-
61
- ---
62
-
63
- ## signInWithPassword()
64
-
65
- Sign in an existing user with email and password.
66
-
67
- ### Parameters
68
-
69
- - `email` (string, required) - User's email address
70
- - `password` (string, required) - User's password
71
-
72
- ### Returns
73
-
74
- ```typescript
75
- {
76
- data: {
77
- user: { id, email, name, emailVerified, createdAt, updatedAt },
78
- accessToken: string
79
- } | null,
80
- error: Error | null
81
- }
82
- ```
83
-
84
- ### Example
85
-
86
- ```javascript
87
- const { data, error } = await insforge.auth.signInWithPassword({
88
- email: 'user@example.com',
89
- password: 'secure_password123'
90
- })
91
- ```
92
-
93
- ### Output
94
-
95
- ```json
96
- {
97
- "data": {
98
- "user": {
99
- "id": "usr_abc123",
100
- "email": "user@example.com",
101
- "name": "John Doe",
102
- "emailVerified": true,
103
- "createdAt": "2024-01-15T10:00:00Z",
104
- "updatedAt": "2024-01-15T10:00:00Z"
105
- },
106
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
107
- },
108
- "error": null
109
- }
110
- ```
111
-
112
- ---
113
-
114
- ## signInWithOAuth()
115
-
116
- Start OAuth authentication flow with supported providers (Google, GitHub, Microsoft, Discord, and more).
117
-
118
- ### Parameters
119
-
120
- - `provider` (string, required) - OAuth provider name (e.g., 'google', 'github', 'microsoft', 'discord')
121
- - `redirectTo` (string, optional) - URL to redirect after authentication
122
- - `skipBrowserRedirect` (boolean, optional) - If true, returns OAuth URL without auto-redirecting (for mobile apps)
123
-
124
- ### Returns
125
-
126
- ```typescript
127
- {
128
- data: { url?: string, provider?: string },
129
- error: Error | null
130
- }
131
- ```
132
-
133
- <Note>
134
- After OAuth redirect, SDK automatically detects callback parameters and saves session. No manual handling needed.
135
- </Note>
136
-
137
- ### Example
138
-
139
- ```javascript
140
- // Default: auto-redirect
141
- await insforge.auth.signInWithOAuth({
142
- provider: 'google',
143
- redirectTo: 'http://localhost:3000/dashboard'
144
- })
145
- // Browser immediately redirects to Google
146
-
147
- // skipBrowserRedirect: get URL for manual handling
148
- const { data } = await insforge.auth.signInWithOAuth({
149
- provider: 'google',
150
- skipBrowserRedirect: true
151
- })
152
-
153
- window.location.href = data.url // Redirect when ready
154
- ```
155
-
156
- ### Output
157
-
158
- ```json
159
- {
160
- "data": {
161
- "url": "https://accounts.google.com/o/oauth2/v2/auth?client_id=...",
162
- "provider": "google"
163
- },
164
- "error": null
165
- }
166
- ```
167
-
168
- ---
169
-
170
- ## signOut()
171
-
172
- Sign out the current user and clear session.
173
-
174
- ### Parameters
175
-
176
- None
177
-
178
- ### Returns
179
-
180
- ```typescript
181
- {
182
- error: Error | null
183
- }
184
- ```
185
-
186
- ### Example
187
-
188
- ```javascript
189
- const { error } = await insforge.auth.signOut()
190
- ```
191
-
192
- ### Output
193
-
194
- ```json
195
- {
196
- "error": null
197
- }
198
- ```
199
-
200
- ---
201
-
202
- ## getCurrentUser()
203
-
204
- Get authenticated user with profile data from users table.
205
-
206
- ### Parameters
207
-
208
- None
209
-
210
- ### Returns
211
-
212
- ```typescript
213
- {
214
- data: {
215
- user: { id, email, role },
216
- profile: { id, nickname, avatar_url, bio, birthday, ... }
217
- } | null,
218
- error: Error | null
219
- }
220
- ```
221
-
222
- ### Example
223
-
224
- ```javascript
225
- const { data, error } = await insforge.auth.getCurrentUser()
226
-
227
- if (data) {
228
- console.log(data.user.email) // Auth info
229
- console.log(data.profile.nickname) // Profile from users table
230
- }
231
- ```
232
-
233
- ### Output
234
-
235
- ```json
236
- {
237
- "data": {
238
- "user": {
239
- "id": "usr_abc123",
240
- "email": "user@example.com",
241
- "role": "authenticated"
242
- },
243
- "profile": {
244
- "id": "usr_abc123",
245
- "nickname": "JohnDoe",
246
- "avatar_url": "https://example.com/avatar.jpg",
247
- "bio": "Full-stack developer",
248
- "birthday": "1990-01-01"
249
- }
250
- },
251
- "error": null
252
- }
253
- ```
254
-
255
- ---
256
-
257
- ## getCurrentSession()
258
-
259
- Get current session from local storage (no API call).
260
-
261
- ### Parameters
262
-
263
- None
264
-
265
- ### Returns
266
-
267
- ```typescript
268
- {
269
- data: {
270
- session: {
271
- accessToken: string,
272
- user: { id, email, name, ... }
273
- } | null
274
- },
275
- error: Error | null
276
- }
277
- ```
278
-
279
- ### Example
280
-
281
- ```javascript
282
- const { data, error } = await insforge.auth.getCurrentSession()
283
-
284
- if (data.session) {
285
- console.log('Token:', data.session.accessToken)
286
- }
287
- ```
288
-
289
- ### Output
290
-
291
- ```json
292
- {
293
- "data": {
294
- "session": {
295
- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
296
- "user": {
297
- "id": "usr_abc123",
298
- "email": "user@example.com",
299
- "name": "John Doe"
300
- }
301
- }
302
- },
303
- "error": null
304
- }
305
- ```
306
-
307
- ---
308
-
309
- ## getProfile()
310
-
311
- Get any user's public profile by ID.
312
-
313
- ### Parameters
314
-
315
- - `userId` (string, required) - User ID to fetch profile for
316
-
317
- ### Returns
318
-
319
- ```typescript
320
- {
321
- data: { id, nickname, avatar_url, bio, birthday, ... } | null,
322
- error: Error | null
323
- }
324
- ```
325
-
326
- ### Example
327
-
328
- ```javascript
329
- const { data: profile, error } = await insforge.auth.getProfile('usr_xyz789')
330
-
331
- console.log(profile.nickname)
332
- ```
333
-
334
- ### Output
335
-
336
- ```json
337
- {
338
- "data": {
339
- "id": "usr_xyz789",
340
- "nickname": "JaneDoe",
341
- "avatar_url": "https://example.com/jane.jpg",
342
- "bio": "Designer and developer",
343
- "birthday": "1992-05-15"
344
- },
345
- "error": null
346
- }
347
- ```
348
-
349
- ---
350
-
351
- ## setProfile()
352
-
353
- Update current user's profile in users table.
354
-
355
- ### Parameters
356
-
357
- - `nickname` (string, optional) - User's display name
358
- - `avatar_url` (string, optional) - Profile picture URL
359
- - `bio` (string, optional) - User biography
360
- - `birthday` (string, optional) - Birth date (YYYY-MM-DD format)
361
-
362
- ### Returns
363
-
364
- ```typescript
365
- {
366
- data: { id, nickname, avatar_url, bio, birthday, ... } | null,
367
- error: Error | null
368
- }
369
- ```
370
-
371
- ### Example
372
-
373
- ```javascript
374
- const { data: profile, error } = await insforge.auth.setProfile({
375
- nickname: 'JohnDev',
376
- bio: 'Full-stack developer',
377
- avatar_url: 'https://example.com/avatar.jpg'
378
- })
379
- ```
380
-
381
- ### Output
382
-
383
- ```json
384
- {
385
- "data": {
386
- "id": "usr_abc123",
387
- "nickname": "JohnDev",
388
- "avatar_url": "https://example.com/avatar.jpg",
389
- "bio": "Full-stack developer",
390
- "birthday": null
391
- },
392
- "error": null
393
- }
394
- ```
395
-
396
- ---
397
-
398
- ## Error Handling
399
-
400
- All auth methods return structured errors:
401
-
402
- ```javascript
403
- const { data, error } = await insforge.auth.signInWithPassword({
404
- email: 'user@example.com',
405
- password: 'wrong_password'
406
- })
407
-
408
- if (error) {
409
- console.error(error.statusCode) // 401
410
- console.error(error.error) // 'INVALID_CREDENTIALS'
411
- console.error(error.message) // 'Invalid login credentials'
412
- console.error(error.nextActions) // 'Check email and password'
413
- }
414
- ```
1
+ ---
2
+ title: Authentication SDK Reference
3
+ description: User authentication and profile management with the InsForge SDK
4
+ ---
5
+
6
+ import Installation from '/snippets/sdk-installation.mdx';
7
+
8
+ <Installation />
9
+
10
+ ## signUp()
11
+
12
+ Create a new user account with email and password.
13
+
14
+ ### Parameters
15
+
16
+ - `email` (string, required) - User's email address
17
+ - `password` (string, required) - User's password
18
+ - `name` (string, optional) - User's display name
19
+ - `options` (object, optional) - Additional options
20
+ - `emailRedirectTo` (string, optional) - Custom URL to redirect to after email verification. It's a fallback if you didn't set default redirect URL configured in your dashboard.
21
+
22
+ ### Returns
23
+
24
+ ```typescript
25
+ {
26
+ data: {
27
+ user?: { id, email, emailVerified, providers, createdAt, updatedAt, profile, metadata },
28
+ accessToken: string | null,
29
+ requireEmailVerification?: boolean,
30
+ redirectTo?: string,
31
+ csrfToken?: string | null
32
+ } | null,
33
+ error: Error | null
34
+ }
35
+ ```
36
+
37
+ <Note>
38
+ When `requireEmailVerification` is true, `accessToken` will be null until the user verifies their email. InsForge sends a verification email with either a link or a 6-digit code, based on your dashboard configuration (`verifyEmailMethod`). For code verification, implement a page that prompts the user to enter the code (see [verifyEmail()](#verifyemail)). For link verification, redirect users to the sign-in page—the insforge backend handles verification automatically when the link is clicked.
39
+ </Note>
40
+
41
+ ### Example
42
+
43
+ ```javascript
44
+ const { data, error } = await insforge.auth.signUp({
45
+ email: 'user@example.com',
46
+ password: 'secure_password123',
47
+ name: 'John Doe',
48
+ });
49
+
50
+ if (data?.requireEmailVerification) {
51
+ // For code verification: redirect to page where user enters the 6-digit code
52
+ // For link verification: redirect to sign-in page to await email link click
53
+ console.log('Please verify your email');
54
+ } else if (data?.accessToken) {
55
+ // User is signed in (email verification disabled)
56
+ console.log('Welcome!', data.user.email);
57
+ }
58
+ ```
59
+
60
+ ### Output
61
+
62
+ ```json
63
+ {
64
+ "data": {
65
+ "user": {
66
+ "id": "usr_abc123",
67
+ "email": "user@example.com",
68
+ "emailVerified": false,
69
+ "providers": ["email"],
70
+ "createdAt": "2024-01-15T10:00:00Z",
71
+ "updatedAt": "2024-01-15T10:00:00Z",
72
+ "profile": {
73
+ "name": "John Doe",
74
+ "avatar_url": null
75
+ },
76
+ "metadata": {}
77
+ },
78
+ "requireEmailVerification": true,
79
+ "accessToken": null,
80
+ "redirectTo": "https://app.example.com/verify-email",
81
+ "csrfToken": null
82
+ },
83
+ "error": null
84
+ }
85
+ ```
86
+
87
+ ---
88
+
89
+ ## signInWithPassword()
90
+
91
+ Sign in an existing user with email and password.
92
+
93
+ ### Parameters
94
+
95
+ - `email` (string, required) - User's email address
96
+ - `password` (string, required) - User's password
97
+
98
+ ### Returns
99
+
100
+ ```typescript
101
+ {
102
+ data: {
103
+ user: { id, email, emailVerified, providers, createdAt, updatedAt, profile, metadata },
104
+ accessToken: string,
105
+ redirectTo?: string,
106
+ csrfToken?: string | null
107
+ } | null,
108
+ error: Error | null
109
+ }
110
+ ```
111
+
112
+ ### Example
113
+
114
+ ```javascript
115
+ const { data, error } = await insforge.auth.signInWithPassword({
116
+ email: 'user@example.com',
117
+ password: 'secure_password123',
118
+ });
119
+
120
+ if (data) {
121
+ console.log('Signed in as:', data.user.email);
122
+ // Optional: redirect to configured URL
123
+ if (data.redirectTo) {
124
+ window.location.href = data.redirectTo;
125
+ }
126
+ }
127
+ ```
128
+
129
+ ### Output
130
+
131
+ ```json
132
+ {
133
+ "data": {
134
+ "user": {
135
+ "id": "usr_abc123",
136
+ "email": "user@example.com",
137
+ "emailVerified": true,
138
+ "providers": ["email"],
139
+ "createdAt": "2024-01-15T10:00:00Z",
140
+ "updatedAt": "2024-01-15T10:00:00Z",
141
+ "profile": {
142
+ "name": "John Doe",
143
+ "avatar_url": "https://example.com/avatar.jpg"
144
+ },
145
+ "metadata": {}
146
+ },
147
+ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
148
+ "redirectTo": "https://app.example.com/dashboard",
149
+ "csrfToken": "5758d38259fb..."
150
+ },
151
+ "error": null
152
+ }
153
+ ```
154
+
155
+ ---
156
+
157
+ ## signInWithOAuth()
158
+
159
+ Start OAuth authentication flow with supported providers (Google, GitHub, Microsoft, Discord, and more).
160
+
161
+ ### Parameters
162
+
163
+ - `provider` (string, required) - OAuth provider name (e.g., 'google', 'github', 'microsoft', 'discord')
164
+ - `redirectTo` (string, optional) - URL to redirect after authentication
165
+ - `skipBrowserRedirect` (boolean, optional) - If true, returns OAuth URL without auto-redirecting (for mobile apps)
166
+
167
+ ### Returns
168
+
169
+ ```typescript
170
+ {
171
+ data: { url?: string, provider?: string },
172
+ error: Error | null
173
+ }
174
+ ```
175
+
176
+ <Note>
177
+ After OAuth redirect, SDK automatically detects callback parameters and saves session. No manual
178
+ handling needed.
179
+ </Note>
180
+
181
+ ### Example
182
+
183
+ ```javascript
184
+ // Default: auto-redirect
185
+ await insforge.auth.signInWithOAuth({
186
+ provider: 'google',
187
+ redirectTo: 'http://localhost:3000/dashboard',
188
+ });
189
+ // Browser immediately redirects to Google
190
+
191
+ // skipBrowserRedirect: get URL for manual handling
192
+ const { data } = await insforge.auth.signInWithOAuth({
193
+ provider: 'google',
194
+ skipBrowserRedirect: true,
195
+ });
196
+
197
+ window.location.href = data.url; // Redirect when ready
198
+ ```
199
+
200
+ ### Output
201
+
202
+ ```json
203
+ {
204
+ "data": {
205
+ "url": "https://accounts.google.com/o/oauth2/v2/auth?client_id=...",
206
+ "provider": "google"
207
+ },
208
+ "error": null
209
+ }
210
+ ```
211
+
212
+ ---
213
+
214
+ ## signOut()
215
+
216
+ Sign out the current user and clear session.
217
+
218
+ ### Parameters
219
+
220
+ None
221
+
222
+ ### Returns
223
+
224
+ ```typescript
225
+ {
226
+ error: Error | null;
227
+ }
228
+ ```
229
+
230
+ ### Example
231
+
232
+ ```javascript
233
+ const { error } = await insforge.auth.signOut();
234
+ ```
235
+
236
+ ### Output
237
+
238
+ ```json
239
+ {
240
+ "error": null
241
+ }
242
+ ```
243
+
244
+ ---
245
+
246
+ ## getCurrentSession()
247
+
248
+ Get the current session. If no active session exists, attempts to refresh using the httpOnly cookie. Call this on app initialization to restore user sessions automatically.
249
+
250
+ ### Parameters
251
+
252
+ None
253
+
254
+ ### Returns
255
+
256
+ ```typescript
257
+ {
258
+ data: {
259
+ session: {
260
+ accessToken: string,
261
+ user: { id, email, emailVerified, providers, createdAt, updatedAt, profile, metadata },
262
+ expiresAt?: Date
263
+ } | null
264
+ },
265
+ error: Error | null
266
+ }
267
+ ```
268
+
269
+ ### Example
270
+
271
+ ```javascript
272
+ const { data, error } = await insforge.auth.getCurrentSession();
273
+
274
+ if (data.session) {
275
+ console.log('Token:', data.session.accessToken);
276
+ console.log('User:', data.session.user.email);
277
+
278
+ // Check if session is expired
279
+ if (data.session.expiresAt && new Date() > data.session.expiresAt) {
280
+ console.log('Session expired');
281
+ }
282
+ }
283
+ ```
284
+
285
+ ### Output
286
+
287
+ ```json
288
+ {
289
+ "data": {
290
+ "session": {
291
+ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
292
+ "expiresAt": "2024-01-22T10:00:00.000Z",
293
+ "user": {
294
+ "id": "usr_abc123",
295
+ "email": "user@example.com",
296
+ "emailVerified": true,
297
+ "createdAt": "2024-01-15T10:00:00Z",
298
+ "updatedAt": "2024-01-15T10:00:00Z",
299
+ "providers": ["email"],
300
+ "profile": {
301
+ "name": "John Doe",
302
+ "avatar_url": "https://example.com/avatar.jpg"
303
+ },
304
+ "metadata": {}
305
+ }
306
+ }
307
+ },
308
+ "error": null
309
+ }
310
+ ```
311
+
312
+ ---
313
+
314
+ ## getProfile()
315
+
316
+ Get any user's public profile by ID. Returns a flat profile object with all fields at the top level.
317
+
318
+ ### Parameters
319
+
320
+ - `userId` (string, required) - User ID to fetch profile for
321
+
322
+ ### Returns
323
+
324
+ ```typescript
325
+ {
326
+ data: {
327
+ id: string,
328
+ name?: string,
329
+ avatar_url?: string,
330
+ createdAt?: string,
331
+ updatedAt?: string,
332
+ ...customFields
333
+ } | null,
334
+ error: Error | null
335
+ }
336
+ ```
337
+
338
+ ### Example
339
+
340
+ ```javascript
341
+ const { data, error } = await insforge.auth.getProfile('usr_xyz789');
342
+
343
+ if (data) {
344
+ console.log(data.name);
345
+ console.log(data.avatar_url);
346
+ }
347
+ ```
348
+
349
+ ### Output
350
+
351
+ ```json
352
+ {
353
+ "data": {
354
+ "id": "usr_xyz789",
355
+ "name": "John Doe",
356
+ "avatar_url": "https://example.com/avatar.jpg",
357
+ "bio": "Full-stack developer",
358
+ "createdAt": "2024-01-15T10:00:00Z",
359
+ "updatedAt": "2024-01-15T10:00:00Z"
360
+ },
361
+ "error": null
362
+ }
363
+ ```
364
+
365
+ ---
366
+
367
+ ## setProfile()
368
+
369
+ Update current user's profile in users table. Supports any dynamic fields and returns the updated profile as a flat object.
370
+
371
+ ### Parameters
372
+
373
+ - `profile` (object) - A key-value map of profile fields to update. Any fields are accepted.
374
+
375
+ **Common fields:**
376
+
377
+ - `name` (predefined, string) - User's display name
378
+ - `avatar_url` (predefined, string) - Profile picture URL
379
+
380
+ ### Returns
381
+
382
+ ```typescript
383
+ {
384
+ data: {
385
+ id: string,
386
+ name?: string,
387
+ avatar_url?: string,
388
+ createdAt?: string,
389
+ updatedAt?: string,
390
+ ...customFields
391
+ } | null,
392
+ error: Error | null
393
+ }
394
+ ```
395
+
396
+ ### Example
397
+
398
+ ```javascript
399
+ const { data, error } = await insforge.auth.setProfile({
400
+ name: 'JohnDev',
401
+ bio: 'Full-stack developer',
402
+ avatar_url: 'https://example.com/avatar.jpg',
403
+ custom_field: 'any value', // Any custom fields are supported
404
+ });
405
+ ```
406
+
407
+ ### Output
408
+
409
+ ```json
410
+ {
411
+ "data": {
412
+ "id": "usr_abc123",
413
+ "name": "JohnDev",
414
+ "avatar_url": "https://example.com/avatar.jpg",
415
+ "bio": "Full-stack developer",
416
+ "custom_field": "any value",
417
+ "createdAt": "2024-01-15T10:00:00Z",
418
+ "updatedAt": "2024-01-15T12:30:00Z"
419
+ },
420
+ "error": null
421
+ }
422
+ ```
423
+
424
+ ---
425
+
426
+ ## resendVerificationEmail()
427
+
428
+ Resend email verification when the previous OTP has expired or was not received. Uses the method configured in auth settings (`verifyEmailMethod`). When method is `code`, sends a 6-digit numeric code. When method is `link`, sends a magic link.
429
+
430
+ <Note>
431
+ This endpoint prevents user enumeration by returning success even if the email doesn't exist.
432
+ </Note>
433
+
434
+ ### Parameters
435
+
436
+ - `email` (string, required) - User's email address
437
+ - `options` (object, optional) - Additional options
438
+ - `emailRedirectTo` (string, optional) - Custom URL to redirect to after email verification. It's a fallback if you didn't set default redirect URL configured in your dashboard.
439
+
440
+ ### Returns
441
+
442
+ ```typescript
443
+ {
444
+ data: { success: boolean, message: string } | null,
445
+ error: Error | null
446
+ }
447
+ ```
448
+
449
+ ### Example
450
+
451
+ ```javascript
452
+ const { data, error } = await insforge.auth.resendVerificationEmail({
453
+ email: 'user@example.com',
454
+ });
455
+
456
+ if (data?.success) {
457
+ console.log('Verification email sent!');
458
+ }
459
+ ```
460
+
461
+ ### Output
462
+
463
+ ```json
464
+ {
465
+ "data": {
466
+ "success": true,
467
+ "message": "Verification email sent"
468
+ },
469
+ "error": null
470
+ }
471
+ ```
472
+
473
+ ---
474
+
475
+ ## verifyEmail()
476
+
477
+ Verify email address using the method configured in auth settings (`verifyEmailMethod`):
478
+ - **Code verification**: Provide both `email` and `otp` (6-digit numeric code)
479
+ - **Link verification**: Provide only `otp` (64-character hex token from magic link)
480
+
481
+ Successfully verified users will receive a session token.
482
+
483
+ ### Parameters
484
+
485
+ - `email` (string, optional) - User's email address (required for code verification)
486
+ - `otp` (string, required) - 6-digit code or 64-character token from magic link
487
+
488
+ ### Returns
489
+
490
+ ```typescript
491
+ {
492
+ data: {
493
+ accessToken: string,
494
+ user: { id, email, emailVerified, ... },
495
+ redirectTo?: string
496
+ } | null,
497
+ error: Error | null
498
+ }
499
+ ```
500
+
501
+ ### Example
502
+
503
+ ```javascript
504
+ // Code verification (when verifyEmailMethod is 'code')
505
+ const { data, error } = await insforge.auth.verifyEmail({
506
+ email: 'user@example.com',
507
+ otp: '123456',
508
+ });
509
+
510
+ // Link verification (when verifyEmailMethod is 'link')
511
+ // Token is extracted from the magic link URL
512
+ const { data, error } = await insforge.auth.verifyEmail({
513
+ otp: 'a1b2c3d4e5f6...', // 64-character token from URL
514
+ });
515
+
516
+ if (data) {
517
+ console.log('Email verified!', data.accessToken);
518
+ }
519
+ ```
520
+
521
+ ### Output
522
+
523
+ ```json
524
+ {
525
+ "data": {
526
+ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
527
+ "user": {
528
+ "id": "usr_abc123",
529
+ "email": "user@example.com",
530
+ "emailVerified": true
531
+ },
532
+ "redirectTo": "https://app.example.com/dashboard"
533
+ },
534
+ "error": null
535
+ }
536
+ ```
537
+
538
+ ---
539
+
540
+ ## sendResetPasswordEmail()
541
+
542
+ Send password reset email using the method configured in auth settings (`resetPasswordMethod`). When method is `code`, sends a 6-digit numeric code for two-step flow. When method is `link`, sends a magic link.
543
+
544
+ <Note>
545
+ This endpoint prevents user enumeration by returning success even if the email doesn't exist.
546
+ </Note>
547
+
548
+ ### Parameters
549
+
550
+ - `email` (string, required) - User's email address
551
+
552
+ ### Returns
553
+
554
+ ```typescript
555
+ {
556
+ data: { success: boolean, message: string } | null,
557
+ error: Error | null
558
+ }
559
+ ```
560
+
561
+ ### Example
562
+
563
+ ```javascript
564
+ const { data, error } = await insforge.auth.sendResetPasswordEmail({
565
+ email: 'user@example.com',
566
+ });
567
+
568
+ if (data?.success) {
569
+ console.log('Password reset email sent!');
570
+ }
571
+ ```
572
+
573
+ ### Output
574
+
575
+ ```json
576
+ {
577
+ "data": {
578
+ "success": true,
579
+ "message": "Password reset email sent"
580
+ },
581
+ "error": null
582
+ }
583
+ ```
584
+
585
+ ---
586
+
587
+ ## exchangeResetPasswordToken()
588
+
589
+ Exchange a 6-digit reset password code for a reset token. This is step 1 of the two-step password reset flow (only used when `resetPasswordMethod` is `code`).
590
+
591
+ <Note>
592
+ This endpoint is not used when `resetPasswordMethod` is `link` (magic link flow is direct).
593
+ </Note>
594
+
595
+ ### Parameters
596
+
597
+ - `email` (string, required) - User's email address
598
+ - `code` (string, required) - 6-digit code from the email
599
+
600
+ ### Returns
601
+
602
+ ```typescript
603
+ {
604
+ data: { token: string, expiresAt: string } | null,
605
+ error: Error | null
606
+ }
607
+ ```
608
+
609
+ ### Example
610
+
611
+ ```javascript
612
+ const { data, error } = await insforge.auth.exchangeResetPasswordToken({
613
+ email: 'user@example.com',
614
+ code: '123456',
615
+ });
616
+
617
+ if (data) {
618
+ // Use token to reset password
619
+ await insforge.auth.resetPassword({
620
+ newPassword: 'newSecurePassword123',
621
+ otp: data.token,
622
+ });
623
+ }
624
+ ```
625
+
626
+ ### Output
627
+
628
+ ```json
629
+ {
630
+ "data": {
631
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
632
+ "expiresAt": "2024-01-15T11:00:00Z"
633
+ },
634
+ "error": null
635
+ }
636
+ ```
637
+
638
+ ---
639
+
640
+ ## resetPassword()
641
+
642
+ Reset user password with a token. The token can be:
643
+ - **Magic link token**: 64-character hex token from `sendResetPasswordEmail` when method is `link`
644
+ - **Reset token**: From `exchangeResetPasswordToken` after code verification when method is `code`
645
+
646
+ ### Parameters
647
+
648
+ - `newPassword` (string, required) - New password for the user
649
+ - `otp` (string, required) - Reset token or magic link token
650
+
651
+ ### Returns
652
+
653
+ ```typescript
654
+ {
655
+ data: { message: string, redirectTo?: string } | null,
656
+ error: Error | null
657
+ }
658
+ ```
659
+
660
+ ### Example
661
+
662
+ ```javascript
663
+ // Code method flow: after exchangeResetPasswordToken
664
+ const { data, error } = await insforge.auth.resetPassword({
665
+ newPassword: 'newSecurePassword123',
666
+ otp: resetToken, // Token from exchangeResetPasswordToken
667
+ });
668
+
669
+ // Link method flow: token from URL params
670
+ const { data, error } = await insforge.auth.resetPassword({
671
+ newPassword: 'newSecurePassword123',
672
+ otp: 'a1b2c3d4e5f6...', // 64-character token from magic link URL
673
+ });
674
+
675
+ if (data) {
676
+ console.log('Password reset successful!');
677
+ }
678
+ ```
679
+
680
+ ### Output
681
+
682
+ ```json
683
+ {
684
+ "data": {
685
+ "message": "Password reset successfully",
686
+ "redirectTo": "https://app.example.com/login"
687
+ },
688
+ "error": null
689
+ }
690
+ ```
691
+
692
+ ---
693
+
694
+ ## Error Handling
695
+
696
+ All auth methods return structured errors:
697
+
698
+ ```javascript
699
+ const { data, error } = await insforge.auth.signInWithPassword({
700
+ email: 'user@example.com',
701
+ password: 'wrong_password',
702
+ });
703
+
704
+ if (error) {
705
+ console.error(error.statusCode); // 401
706
+ console.error(error.error); // 'INVALID_CREDENTIALS'
707
+ console.error(error.message); // 'Invalid login credentials'
708
+ console.error(error.nextActions); // 'Check email and password'
709
+ }
710
+ ```