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,647 +1,721 @@
1
- ---
2
- title: Partner Integration
3
- description: Learn how to integrate InsForge as a partner platform through co-branded or white-label partnerships
4
- ---
5
-
6
- ## Overview
7
-
8
- InsForge provides two partnership models that enable seamless integration of our Backend-as-a-Service platform into your applications. Whether you're looking for a co-branded solution or a fully white-labeled experience, we have the right partnership model for you.
9
-
10
- ## Partnership Models
11
-
12
- <CardGroup cols={2}>
13
- <Card title="Co-Branded Partnership" icon="handshake">
14
- Perfect for platforms that want to offer InsForge alongside their services.
15
- The integration process is remarkably simple - developers can connect to the InsForge platform with just one click, without complicated OAuth flows.
16
- </Card>
17
- <Card title="White-Label Partnership" icon="tag">
18
- Ideal for platforms seeking complete control over the user experience.
19
- Offers full project lifecycle management, including project dashboard integration. Developers can complete all operations without ever leaving your partner platform.
20
- </Card>
21
- </CardGroup>
22
-
23
- ## Partnership Benefits
24
-
25
- <CardGroup cols={2}>
26
- <Card title="Scalable Infrastructure" icon="server">
27
- Leverage our robust backend infrastructure without the overhead of maintenance and scaling
28
- </Card>
29
- <Card title="Flexible Integration" icon="plug">
30
- Choose from multiple integration options that best suit your application needs
31
- </Card>
32
- <Card title="Revenue Sharing" icon="handshake">
33
- Benefit from our competitive revenue sharing model for partner applications
34
- </Card>
35
- <Card title="Technical Support" icon="headset">
36
- Get dedicated technical support and resources to ensure smooth integration
37
- </Card>
38
- </CardGroup>
39
-
40
- ## Getting Started
41
-
42
- <Steps>
43
- <Step title="Apply for Partnership">
44
- Submit your partnership application through our [partner email](mailto:partnerships@insforge.dev).
45
- Specify whether you're interested in co-branded or white-label partnership.
46
- </Step>
47
-
48
- <Step title="Receive Partner Credentials">
49
- Once approved, you'll receive:
50
- - **Partner ID**: Your unique partner identifier
51
- - **Secret Key**: Your authentication key for API access
52
- - Integration documentation and support
53
- </Step>
54
-
55
- <Step title="Configure Authentication">
56
- All API requests must include your secret key for authentication:
57
-
58
- ```bash
59
- curl -X POST https://api.insforge.dev/partnership/v1/YOUR_PARTNER_ID/endpoint \
60
- -H "Content-Type: application/json" \
61
- -H "X-Partnership-Secret: YOUR_SECRET_KEY"
62
- ```
63
- </Step>
64
-
65
- <Step title="Start Integration">
66
- Begin integrating based on your partnership model using our API endpoints.
67
- </Step>
68
- </Steps>
69
-
70
- ## Features by Partnership Type
71
-
72
- ### Co-Branded Features
73
- In co-branded mode, developers explicitly know they are InsForge platform users (linked through the same email address). After logging into the InsForge platform, developers have full management rights for projects created through partners and need to pay according to InsForge's billing plans.
74
-
75
- Partner platforms can:
76
- - ✅ Sync user accounts (name, email) with InsForge
77
- - ✅ Sync projects to InsForge
78
- - ✅ Query project connection information to leverage the completed backend capabilities.
79
-
80
- ### White-Label Features
81
- In white-label mode, developers are not aware of InsForge's existence and cannot see partner-created projects on the InsForge platform.
82
-
83
- Partner platforms can:
84
- - ✅ Create embedded projects
85
- - ✅ Query project metadata to leverage the completed backend capabilities.
86
- - ✅ Pause projects
87
- - ✅ Restore projects
88
- - ✅ Delete projects
89
- - ✅ Get project's authorization token for access
90
- - ✅ Get project's usage
91
-
92
- ## API Reference
93
-
94
- <Tabs>
95
- <Tab title="Co-Branded APIs">
96
-
97
- ### Connect User Account
98
- Synchronize user account information with InsForge.
99
-
100
- ```bash
101
- POST /partnership/v1/:partnerId/connect-user
102
- ```
103
-
104
- **Request Body:**
105
- ```json
106
- {
107
- "name": "John Doe", // required
108
- "email": "john@example.com" // required
109
- }
110
- ```
111
-
112
- **Response:**
113
- ```json
114
- {
115
- "account": {
116
- "id": "uuid-string"
117
- }
118
- }
119
- ```
120
-
121
- ### Sync Project
122
- Create or synchronize a project for a specific user.
123
-
124
- ```bash
125
- POST /partnership/v1/:partnerId/:userId/sync-project
126
- ```
127
-
128
- **Request Body:**
129
- ```json
130
- {
131
- "project_name": "my-project", // required
132
- "region": "us-east", // optional
133
- "instance_type": "nano" // optional
134
- }
135
- ```
136
-
137
- **Response:**
138
- ```json
139
- {
140
- "success": true,
141
- "project": {
142
- "id": "uuid-string",
143
- "access_host": "https://project.us-east.insforge.app",
144
- "api_key": "project-api-key",
145
- "status": "active"
146
- }
147
- }
148
- ```
149
-
150
- #### Handling Project Limits
151
- Note: Due to project limits on the InsForge free plan, project synchronization from partner platforms may fail. In such cases, the response will be:
152
-
153
- ```json
154
- {
155
- "success": false,
156
- "message": "Free plan allows up to 2 active projects. Please upgrade your plan to create more projects.",
157
- "candidate_projects": [
158
- {
159
- "id": "uuid-string",
160
- "access_host": "https://project2.us-east.insforge.app",
161
- "api_key": "project-api-key",
162
- "status": "active"
163
- }
164
- ]
165
- }
166
- ```
167
-
168
- Partners can guide users to select existing projects for connection rather than always creating new ones.
169
-
170
- ### Get Project Metadata
171
- Retrieve connection information for a specific project.
172
-
173
- ```bash
174
- GET /partnership/v1/:partnerId/:userId/:projectId/metadata
175
- ```
176
-
177
- **Response:**
178
- ```json
179
- {
180
- "project": {
181
- "id": "uuid-string",
182
- "access_host": "https://project.us-east.insforge.app",
183
- "api_key": "project-api-key",
184
- "status": "active"
185
- }
186
- }
187
- ```
188
-
189
- </Tab>
190
- <Tab title="White-Label APIs">
191
-
192
- ### Sync Embedded Project
193
- Create an embedded project for white-label partners.
194
-
195
- ```bash
196
- POST /partnership/v1/:partnerId/sync-embedded-project
197
- ```
198
-
199
- **Request Body:**
200
- ```json
201
- {
202
- "project_name": "embedded-project", // required
203
- "region": "us-east", // optional
204
- "instance_type": "nano" // optional
205
- }
206
- ```
207
-
208
- **Response:**
209
- ```json
210
- {
211
- "success": true,
212
- "project": {
213
- "id": "uuid-string",
214
- "access_host": "https://project.us-east.insforge.app",
215
- "api_key": "project-api-key",
216
- "status": "active"
217
- }
218
- }
219
- ```
220
-
221
- ### Get Project Metadata
222
- Retrieve metadata for a specific project.
223
-
224
- ```bash
225
- GET /partnership/v1/:partnerId/:projectId/metadata
226
- ```
227
-
228
- **Response:**
229
- ```json
230
- {
231
- "project": {
232
- "id": "uuid-string",
233
- "access_host": "https://project.us-east.insforge.app",
234
- "api_key": "project-api-key",
235
- "status": "active"
236
- }
237
- }
238
- ```
239
-
240
- ### Pause Project
241
- Pause an active project to save resources.
242
-
243
- ```bash
244
- POST /partnership/v1/:partnerId/:projectId/pause
245
- ```
246
-
247
- **Request Body:**
248
- ```json
249
- {
250
- "wait_for_completion": true // optional
251
- }
252
- ```
253
-
254
- **Response:**
255
- ```json
256
- {
257
- "project": {
258
- "id": "uuid-string",
259
- "status": "paused"
260
- }
261
- }
262
- ```
263
-
264
- ### Restore Project
265
- Restore a paused project back to active state.
266
-
267
- ```bash
268
- POST /partnership/v1/:partnerId/:projectId/restore
269
- ```
270
-
271
- **Request Body:**
272
- ```json
273
- {
274
- "wait_for_completion": true // optional
275
- }
276
- ```
277
-
278
- **Response:**
279
- ```json
280
- {
281
- "project": {
282
- "id": "uuid-string",
283
- "status": "active"
284
- }
285
- }
286
- ```
287
-
288
- ### Delete Project
289
- Permanently delete a project. This operation cannot be undone.
290
-
291
- ```bash
292
- DELETE /partnership/v1/:partnerId/:projectId
293
- ```
294
-
295
- **Response (200 OK):**
296
- ```json
297
- {
298
- "message": "Project deleted successfully",
299
- "requestId": "xhiahif-fehfe-feae"
300
- }
301
- ```
302
-
303
- ### Generate Project Authorization
304
- Generate a short-lived asymmetric JWT token for project access. The token is signed with RSA private key and can be verified using the public JWKS endpoint. Token expires in 10 minutes.
305
-
306
- ```bash
307
- POST /partnership/v1/:partnerId/:projectId/authorization
308
- ```
309
-
310
- **Response:**
311
- ```json
312
- {
313
- "code": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Imluc2ZvcmdlLWtleS0yMDI1LTA4LTEzIn0...",
314
- "expires_in": 600,
315
- "type": "Bearer"
316
- }
317
- ```
318
-
319
- ### Get Project Usage
320
- Retrieve usage metrics for a specific project over a date range. Returns both summary statistics and daily breakdown of usage metrics. If dates are not specified, returns data for the last 7 days.
321
-
322
- ```bash
323
- GET /partnership/v1/:partnerId/:projectId/usage?start_date=2025-11-10&end_date=2025-11-18
324
- ```
325
-
326
- **Query Parameters:**
327
- - `start_date` (optional): Start date in YYYY-MM-DD format (defaults to 7 days ago)
328
- - `end_date` (optional): End date in YYYY-MM-DD format (defaults to today)
329
-
330
- **Response:**
331
- ```json
332
- {
333
- "project": {
334
- "id": "uuid-string",
335
- "name": "project-name",
336
- "status": "active"
337
- },
338
- "period": {
339
- "start": "2025-11-10T00:00:00Z",
340
- "end": "2025-11-18T23:59:59Z"
341
- },
342
- "summary": {
343
- "max_database_size_bytes": 1048576,
344
- "max_file_storage_bytes": 5242880,
345
- "total_ai_tokens": 15000,
346
- "total_mcp_calls": 120,
347
- "total_egress_bytes": 2097152,
348
- "total_ai_credits": 1.5,
349
- "total_email_requests": 50,
350
- "total_function_calls": 300,
351
- "total_ec2_compute": 3600
352
- },
353
- "daily_usage": [
354
- {
355
- "usage_date": "2025-11-10",
356
- "database_size_bytes": 1048576,
357
- "file_storage_bytes": 5242880,
358
- "ai_tokens": 1500,
359
- "mcp_calls": 12,
360
- "egress_bytes": 204800,
361
- "ai_credits": 0.15,
362
- "email_requests": 5,
363
- "function_calls": 30,
364
- "ec2_compute": 3600
365
- }
366
- ]
367
- }
368
- ```
369
-
370
- </Tab>
371
- </Tabs>
372
-
373
- ## Integration Examples
374
-
375
- ### Co-Branded Integration Flow
376
-
377
- The following sequence diagram illustrates the integration flow for co-branded partnerships:
378
-
379
- ```mermaid
380
- sequenceDiagram
381
- participant User as End User
382
- participant Partner as Partner Platform
383
- participant InsForge as InsForge API
384
- participant Dashboard as InsForge Dashboard
385
-
386
- User->>Partner: Sign up/Login
387
- Partner->>InsForge: POST /connect-user<br/>(name, email)
388
- InsForge-->>Partner: Return user account ID
389
-
390
- User->>Partner: Create new project
391
- Partner->>InsForge: POST /sync-project<br/>(userId, project_name)
392
-
393
- alt Success
394
- InsForge-->>Partner: Return project details<br/>(id, access_host, api_key)
395
- Partner->>Partner: Store project credentials
396
- Partner->>User: Show project ready
397
- else Project Limit Reached
398
- InsForge-->>Partner: Return error + candidate projects
399
- Partner->>User: Show existing projects to choose
400
- User->>Partner: Select existing project
401
- Partner->>InsForge: GET /metadata<br/>(projectId)
402
- InsForge-->>Partner: Return project details
403
- end
404
-
405
- User->>Partner: Use application features
406
- Partner->>InsForge: API calls using project credentials
407
- InsForge-->>Partner: Return data
408
- Partner-->>User: Display results
409
-
410
- Note over User,Dashboard: User can also access InsForge Dashboard directly
411
- User->>Dashboard: Login with same email
412
- Dashboard->>User: Full project management access
413
- ```
414
-
415
- ```typescript
416
- // 1. Connect user account
417
- const connectUser = async (name: string, email: string) => {
418
- const response = await fetch(
419
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/connect-user`,
420
- {
421
- method: 'POST',
422
- headers: {
423
- 'X-Partnership-Secret': `${SECRET_KEY}`,
424
- 'Content-Type': 'application/json'
425
- },
426
- body: JSON.stringify({ name, email })
427
- }
428
- );
429
-
430
- const { account } = await response.json();
431
- return account.id;
432
- };
433
-
434
- // 2. Create project for user
435
- const createProject = async (userId: string, projectName: string) => {
436
- const response = await fetch(
437
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${userId}/sync-project`,
438
- {
439
- method: 'POST',
440
- headers: {
441
- 'X-Partnership-Secret': `${SECRET_KEY}`,
442
- 'Content-Type': 'application/json'
443
- },
444
- body: JSON.stringify({
445
- project_name: projectName,
446
- region: 'us-east',
447
- instance_type: 'nano'
448
- })
449
- }
450
- );
451
-
452
- const data = await response.json();
453
- if (data.success) {
454
- return data.project;
455
- }
456
- throw new Error(data.message);
457
- };
458
-
459
- // 3. Use project credentials
460
- const useProject = async (project: any) => {
461
- // Connect to InsForge project using returned credentials
462
- const insForgeClient = new InsForgeClient({
463
- baseUrl: project.access_host,
464
- apiKey: project.api_key
465
- });
466
-
467
- // Now you can use all InsForge features
468
- await insForgeClient.database.query('SELECT * FROM users');
469
- };
470
- ```
471
-
472
- ### White-Label Integration Flow
473
-
474
- The following sequence diagram illustrates the integration flow for white-label partnerships:
475
-
476
- ```mermaid
477
- sequenceDiagram
478
- participant User as End User
479
- participant Partner as Partner Platform
480
- participant InsForge as InsForge API
481
-
482
- Note over User,InsForge: User never interacts with InsForge directly
483
-
484
- User->>Partner: Sign up/Login to partner platform
485
-
486
- User->>Partner: Create new project
487
- Partner->>InsForge: POST /sync-embedded-project<br/>(project_name, region, instance_type)
488
- InsForge-->>Partner: Return project details<br/>(id, access_host, api_key, status)
489
- Partner->>Partner: Store project credentials
490
- Partner->>User: Show project ready
491
-
492
- User->>Partner: Use application features
493
- Partner->>InsForge: API calls using project credentials
494
- InsForge-->>Partner: Return data
495
- Partner-->>User: Display results
496
-
497
- User->>Partner: Request to pause project
498
- Partner->>InsForge: POST /pause<br/>(projectId)
499
- InsForge-->>Partner: Return status: paused
500
- Partner->>User: Confirm project paused
501
-
502
- User->>Partner: Request to restore project
503
- Partner->>InsForge: POST /restore<br/>(projectId)
504
- InsForge-->>Partner: Return status: active
505
- Partner->>User: Confirm project active
506
-
507
- Partner->>InsForge: GET /metadata<br/>(projectId)
508
- InsForge-->>Partner: Return current project status
509
- ```
510
-
511
- ```typescript
512
- // 1. Create embedded project
513
- const createEmbeddedProject = async (projectName: string) => {
514
- const response = await fetch(
515
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/sync-embedded-project`,
516
- {
517
- method: 'POST',
518
- headers: {
519
- 'X-Partnership-Secret': `${SECRET_KEY}`,
520
- 'Content-Type': 'application/json'
521
- },
522
- body: JSON.stringify({
523
- project_name: projectName,
524
- region: 'eu-west',
525
- instance_type: 'small'
526
- })
527
- }
528
- );
529
-
530
- const data = await response.json();
531
- if (data.success) {
532
- return data.project;
533
- }
534
- throw new Error(data.message);
535
- };
536
-
537
- // 2. Manage project lifecycle
538
- const pauseProject = async (projectId: string) => {
539
- const response = await fetch(
540
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/pause`,
541
- {
542
- method: 'POST',
543
- headers: {
544
- 'X-Partnership-Secret': `${SECRET_KEY}`,
545
- 'Content-Type': 'application/json'
546
- },
547
- body: JSON.stringify({
548
- wait_for_completion: true
549
- })
550
- }
551
- );
552
-
553
- const { project } = await response.json();
554
- console.log(`Project ${project.id} status: ${project.status}`);
555
- };
556
-
557
- const restoreProject = async (projectId: string) => {
558
- const response = await fetch(
559
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/restore`,
560
- {
561
- method: 'POST',
562
- headers: {
563
- 'X-Partnership-Secret': `${SECRET_KEY}`,
564
- 'Content-Type': 'application/json'
565
- },
566
- body: JSON.stringify({
567
- wait_for_completion: true
568
- })
569
- }
570
- );
571
-
572
- const { project } = await response.json();
573
- console.log(`Project ${project.id} status: ${project.status}`);
574
- };
575
-
576
- // 3. Delete project
577
- const deleteProject = async (projectId: string) => {
578
- const response = await fetch(
579
- `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}`,
580
- {
581
- method: 'DELETE',
582
- headers: {
583
- 'X-Partnership-Secret': `${SECRET_KEY}`
584
- }
585
- }
586
- );
587
-
588
- if (response.ok) {
589
- const data = await response.json();
590
- console.log(data.message); // "Project deleted successfully"
591
- console.log(`Request ID: ${data.requestId}`);
592
- } else {
593
- throw new Error(`Failed to delete project: ${response.status}`);
594
- }
595
- };
596
- ```
597
-
598
- ## Parameter and Response Reference
599
-
600
- ### Project Region Values
601
- InsForge provides global deployment capabilities. Each project can be deployed to different regions:
602
- - `us-east` - United States East Coast
603
- - `us-west` - United States West Coast
604
- - `ca-central` - Canada Central
605
- - `eu-central` - Europe Central
606
-
607
- Additional regions will be added based on demand.
608
-
609
- ### Project Instance Type Values
610
- Based on your project's business requirements, InsForge offers the following resource types:
611
- - `nano` - Minimal resources for development
612
- - `small` - Light workloads
613
- - `medium` - Standard applications
614
- - `large` - Production workloads
615
- - `xl` - High-performance applications
616
- - `2xl` - Enterprise applications
617
- - `4xl` - Large-scale operations
618
- - `8xl` - Mission-critical systems
619
- - `16xl` - Maximum performance
620
-
621
- ### Project Status Values
622
-
623
- Projects can have the following status values:
624
-
625
- - **active**: Project is running and accessible
626
- - **paused**: Project is paused (white-label only)
627
-
628
- ## Error Handling
629
-
630
- All API endpoints return consistent error responses:
631
-
632
- ```json
633
- {
634
- "success": false,
635
- "message": "Detailed error message describing what went wrong"
636
- }
637
- ```
638
-
639
- Common error scenarios:
640
- - Invalid authentication credentials
641
- - Project not found
642
- - Insufficient permissions for requested operation
643
- - Invalid request parameters
644
-
645
- ## Next Steps
646
-
1
+ ---
2
+ title: Partner Integration
3
+ description: Learn how to integrate InsForge as a partner platform through co-branded or white-label partnerships
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ InsForge provides two partnership models that enable seamless integration of our Backend-as-a-Service platform into your applications. Whether you're looking for a co-branded solution or a fully white-labeled experience, we have the right partnership model for you.
9
+
10
+ ## Partnership Models
11
+
12
+ <CardGroup cols={2}>
13
+ <Card title="Co-Branded Partnership" icon="handshake">
14
+ Perfect for platforms that want to offer InsForge alongside their services.
15
+ The integration process is remarkably simple - developers can connect to the InsForge platform with just one click, without complicated OAuth flows.
16
+ </Card>
17
+ <Card title="White-Label Partnership" icon="tag">
18
+ Ideal for platforms seeking complete control over the user experience.
19
+ Offers full project lifecycle management, including project dashboard integration. Developers can complete all operations without ever leaving your partner platform.
20
+ </Card>
21
+ </CardGroup>
22
+
23
+ ## Partnership Benefits
24
+
25
+ <CardGroup cols={2}>
26
+ <Card title="Scalable Infrastructure" icon="server">
27
+ Leverage our robust backend infrastructure without the overhead of maintenance and scaling
28
+ </Card>
29
+ <Card title="Flexible Integration" icon="plug">
30
+ Choose from multiple integration options that best suit your application needs
31
+ </Card>
32
+ <Card title="Revenue Sharing" icon="handshake">
33
+ Benefit from our competitive revenue sharing model for partner applications
34
+ </Card>
35
+ <Card title="Technical Support" icon="headset">
36
+ Get dedicated technical support and resources to ensure smooth integration
37
+ </Card>
38
+ </CardGroup>
39
+
40
+ ## Getting Started
41
+
42
+ <Steps>
43
+ <Step title="Apply for Partnership">
44
+ Submit your partnership application through our [partner email](mailto:partnerships@insforge.dev).
45
+ Specify whether you're interested in co-branded or white-label partnership.
46
+ </Step>
47
+
48
+ <Step title="Receive Partner Credentials">
49
+ Once approved, you'll receive:
50
+ - **Partner ID**: Your unique partner identifier
51
+ - **Secret Key**: Your authentication key for API access
52
+ - Integration documentation and support
53
+ </Step>
54
+
55
+ <Step title="Configure Authentication">
56
+ All API requests must include your secret key for authentication:
57
+
58
+ ```bash
59
+ curl -X POST https://api.insforge.dev/partnership/v1/YOUR_PARTNER_ID/endpoint \
60
+ -H "Content-Type: application/json" \
61
+ -H "X-Partnership-Secret: YOUR_SECRET_KEY"
62
+ ```
63
+ </Step>
64
+
65
+ <Step title="Start Integration">
66
+ Begin integrating based on your partnership model using our API endpoints.
67
+ </Step>
68
+ </Steps>
69
+
70
+ ## Features by Partnership Type
71
+
72
+ ### Co-Branded Features
73
+ In co-branded mode, developers explicitly know they are InsForge platform users (linked through the same email address). After logging into the InsForge platform, developers have full management rights for projects created through partners and need to pay according to InsForge's billing plans.
74
+
75
+ Partner platforms can:
76
+ - ✅ Sync user accounts (name, email) with InsForge
77
+ - ✅ Sync projects to InsForge
78
+ - ✅ Query project connection information to leverage the completed backend capabilities.
79
+
80
+ ### White-Label Features
81
+ In white-label mode, developers are not aware of InsForge's existence and cannot see partner-created projects on the InsForge platform.
82
+
83
+ Partner platforms can:
84
+ - ✅ Create embedded projects
85
+ - ✅ Query project metadata to leverage the completed backend capabilities.
86
+ - ✅ Pause projects
87
+ - ✅ Restore projects
88
+ - ✅ Delete projects
89
+ - ✅ Get project's authorization token for access
90
+ - ✅ Get project's usage
91
+ - ✅ Get aggregated usage across all partnership projects (for billing)
92
+
93
+ ## API Reference
94
+
95
+ <Tabs>
96
+ <Tab title="Co-Branded APIs">
97
+
98
+ ### Connect User Account
99
+ Synchronize user account information with InsForge.
100
+
101
+ ```bash
102
+ POST /partnership/v1/:partnerId/connect-user
103
+ ```
104
+
105
+ **Request Body:**
106
+ ```json
107
+ {
108
+ "name": "John Doe", // required
109
+ "email": "john@example.com" // required
110
+ }
111
+ ```
112
+
113
+ **Response:**
114
+ ```json
115
+ {
116
+ "account": {
117
+ "id": "uuid-string"
118
+ }
119
+ }
120
+ ```
121
+
122
+ ### Sync Project
123
+ Create or synchronize a project for a specific user.
124
+
125
+ ```bash
126
+ POST /partnership/v1/:partnerId/:userId/sync-project
127
+ ```
128
+
129
+ **Request Body:**
130
+ ```json
131
+ {
132
+ "project_name": "my-project", // required
133
+ "region": "us-east", // optional, "us-east", "us-west", "ap-southeast", "eu-central", default: "us-east"
134
+ "instance_type": "nano" // optional, "nano", "micro", "small", "medium", "large", "xl", "2xl", "4xl", "8xl", "16xl", default: "nano"
135
+ }
136
+ ```
137
+
138
+ **Response:**
139
+ ```json
140
+ {
141
+ "success": true,
142
+ "project": {
143
+ "id": "uuid-string",
144
+ "access_host": "https://project.us-east.insforge.app",
145
+ "api_key": "project-api-key",
146
+ "status": "active"
147
+ }
148
+ }
149
+ ```
150
+
151
+ #### Handling Project Limits
152
+ Note: Due to project limits on the InsForge free plan, project synchronization from partner platforms may fail. In such cases, the response will be:
153
+
154
+ ```json
155
+ {
156
+ "success": false,
157
+ "message": "Free plan allows up to 2 active projects. Please upgrade your plan to create more projects.",
158
+ "candidate_projects": [
159
+ {
160
+ "id": "uuid-string",
161
+ "access_host": "https://project2.us-east.insforge.app",
162
+ "api_key": "project-api-key",
163
+ "status": "active"
164
+ }
165
+ ]
166
+ }
167
+ ```
168
+
169
+ Partners can guide users to select existing projects for connection rather than always creating new ones.
170
+
171
+ ### Get Project Metadata
172
+ Retrieve connection information for a specific project.
173
+
174
+ ```bash
175
+ GET /partnership/v1/:partnerId/:userId/:projectId/metadata
176
+ ```
177
+
178
+ **Response:**
179
+ ```json
180
+ {
181
+ "project": {
182
+ "id": "uuid-string",
183
+ "access_host": "https://project.us-east.insforge.app",
184
+ "api_key": "project-api-key",
185
+ "status": "active"
186
+ }
187
+ }
188
+ ```
189
+
190
+ </Tab>
191
+ <Tab title="White-Label APIs">
192
+
193
+ ### Sync Embedded Project
194
+ Create an embedded project for white-label partners.
195
+
196
+ ```bash
197
+ POST /partnership/v1/:partnerId/sync-embedded-project
198
+ ```
199
+
200
+ **Request Body:**
201
+ ```json
202
+ {
203
+ "project_name": "embedded-project", // required
204
+ "region": "us-east", // optional, "us-east", "us-west", "ap-southeast", "eu-central", default: "us-east"
205
+ "instance_type": "nano" // optional, "nano", "micro", "small", "medium", "large", "xl", "2xl", "4xl", "8xl", "16xl", default: "nano"
206
+ }
207
+ ```
208
+
209
+ **Response:**
210
+ ```json
211
+ {
212
+ "success": true,
213
+ "project": {
214
+ "id": "uuid-string",
215
+ "access_host": "https://project.us-east.insforge.app",
216
+ "api_key": "project-api-key",
217
+ "status": "active"
218
+ }
219
+ }
220
+ ```
221
+
222
+ ### Get Project Metadata
223
+ Retrieve metadata for a specific project.
224
+
225
+ ```bash
226
+ GET /partnership/v1/:partnerId/:projectId/metadata
227
+ ```
228
+
229
+ **Response:**
230
+ ```json
231
+ {
232
+ "project": {
233
+ "id": "uuid-string",
234
+ "access_host": "https://project.us-east.insforge.app",
235
+ "api_key": "project-api-key",
236
+ "region": "us-east",
237
+ "instance_type": "nano",
238
+ "last_activity_at": "2025-01-21T10:30:00Z",
239
+ "status": "active"
240
+ }
241
+ }
242
+ ```
243
+
244
+ ### Pause Project
245
+ Pause an active project to save resources.
246
+
247
+ ```bash
248
+ POST /partnership/v1/:partnerId/:projectId/pause
249
+ ```
250
+
251
+ **Request Body:**
252
+ ```json
253
+ {
254
+ "wait_for_completion": true // optional
255
+ }
256
+ ```
257
+
258
+ **Response:**
259
+ ```json
260
+ {
261
+ "project": {
262
+ "id": "uuid-string",
263
+ "status": "paused"
264
+ }
265
+ }
266
+ ```
267
+
268
+ ### Restore Project
269
+ Restore a paused project back to active state.
270
+
271
+ ```bash
272
+ POST /partnership/v1/:partnerId/:projectId/restore
273
+ ```
274
+
275
+ **Request Body:**
276
+ ```json
277
+ {
278
+ "wait_for_completion": true // optional
279
+ }
280
+ ```
281
+
282
+ **Response:**
283
+ ```json
284
+ {
285
+ "project": {
286
+ "id": "uuid-string",
287
+ "status": "active"
288
+ }
289
+ }
290
+ ```
291
+
292
+ ### Delete Project
293
+ Permanently delete a project. This operation cannot be undone.
294
+
295
+ ```bash
296
+ DELETE /partnership/v1/:partnerId/:projectId
297
+ ```
298
+
299
+ **Response (200 OK):**
300
+ ```json
301
+ {
302
+ "message": "Project deleted successfully",
303
+ "requestId": "xhiahif-fehfe-feae"
304
+ }
305
+ ```
306
+
307
+ ### Generate Project Authorization
308
+ Generate a short-lived asymmetric JWT token for project access. The token is signed with RSA private key and can be verified using the public JWKS endpoint. Token expires in 10 minutes.
309
+
310
+ ```bash
311
+ POST /partnership/v1/:partnerId/:projectId/authorization
312
+ ```
313
+
314
+ **Response:**
315
+ ```json
316
+ {
317
+ "code": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Imluc2ZvcmdlLWtleS0yMDI1LTA4LTEzIn0...",
318
+ "expires_in": 600,
319
+ "type": "Bearer"
320
+ }
321
+ ```
322
+
323
+ ### Get Project Usage
324
+ Retrieve usage metrics for a specific project over a date range. Returns both summary statistics and daily breakdown of usage metrics. If dates are not specified, returns data for the last 7 days.
325
+
326
+ ```bash
327
+ GET /partnership/v1/:partnerId/:projectId/usage?start_date=2025-11-10&end_date=2025-11-18
328
+ ```
329
+
330
+ **Query Parameters:**
331
+ - `start_date` (optional): Start date in YYYY-MM-DD format (defaults to 7 days ago)
332
+ - `end_date` (optional): End date in YYYY-MM-DD format (defaults to today)
333
+
334
+ **Response:**
335
+ ```json
336
+ {
337
+ "project": {
338
+ "id": "uuid-string",
339
+ "name": "project-name",
340
+ "status": "active",
341
+ "last_activity_at": "2025-11-18T10:30:00Z"
342
+ },
343
+ "period": {
344
+ "start": "2025-11-10T00:00:00Z",
345
+ "end": "2025-11-18T23:59:59Z"
346
+ },
347
+ "summary": {
348
+ "max_database_size_bytes": 1048576,
349
+ "max_file_storage_bytes": 5242880,
350
+ "total_ai_tokens": 15000,
351
+ "total_mcp_calls": 120,
352
+ "total_egress_bytes": 2097152,
353
+ "total_ai_credits": 1.5,
354
+ "total_email_requests": 50,
355
+ "total_function_calls": 300,
356
+ "total_ec2_compute": 3600
357
+ },
358
+ "daily_usage": [
359
+ {
360
+ "usage_date": "2025-11-10",
361
+ "database_size_bytes": 1048576,
362
+ "file_storage_bytes": 5242880,
363
+ "ai_tokens": 1500,
364
+ "mcp_calls": 12,
365
+ "egress_bytes": 204800,
366
+ "ai_credits": 0.15,
367
+ "email_requests": 5,
368
+ "function_calls": 30,
369
+ "ec2_compute": 3600
370
+ }
371
+ ]
372
+ }
373
+ ```
374
+
375
+ ### Get Partnership Total Usage
376
+ Retrieve aggregated usage metrics across all projects under your partnership for a date range. This endpoint is designed for billing and reporting purposes, providing a consolidated view of resource consumption.
377
+
378
+ ```bash
379
+ GET /partnership/v1/:partnerId/usage?start_date=2025-11-01&end_date=2025-11-30
380
+ ```
381
+
382
+ **Query Parameters:**
383
+ - `start_date` (optional): Start date in YYYY-MM-DD format (defaults to 7 days ago)
384
+ - `end_date` (optional): End date in YYYY-MM-DD format (defaults to today)
385
+
386
+ **Response:**
387
+ ```json
388
+ {
389
+ "partnership": {
390
+ "id": "ps_abc123xyz",
391
+ "name": "Partner Name"
392
+ },
393
+ "period": {
394
+ "start": "2025-11-01T00:00:00Z",
395
+ "end": "2025-11-30T23:59:59Z"
396
+ },
397
+ "summary": {
398
+ "database_bytes": 10485760,
399
+ "storage_bytes": 52428800,
400
+ "ai_tokens": 150000,
401
+ "mcp_calls": 1200,
402
+ "egress_bytes": 20971520,
403
+ "ai_credits": 15.5,
404
+ "email_requests": 500,
405
+ "function_calls": 3000,
406
+ "ec2_compute": 36000
407
+ }
408
+ }
409
+ ```
410
+
411
+ **Usage Metric Types:**
412
+
413
+ | Metric | Type | Description |
414
+ |--------|------|-------------|
415
+ | `database_bytes` | Peak | Peak total database footprint (sum per day, max across days) |
416
+ | `storage_bytes` | Peak | Peak total storage footprint (sum per day, max across days) |
417
+ | `ai_tokens` | Cumulative | Total AI tokens consumed |
418
+ | `mcp_calls` | Cumulative | Total MCP/tool calls made |
419
+ | `egress_bytes` | Cumulative | Total data transfer (origin + CDN) |
420
+ | `ai_credits` | Cumulative | Total AI credits consumed |
421
+ | `email_requests` | Cumulative | Total emails sent |
422
+ | `function_calls` | Cumulative | Total serverless function invocations |
423
+ | `ec2_compute` | Cumulative | Total compute seconds used |
424
+
425
+ <Note>
426
+ This endpoint includes usage from deleted projects within the specified date range, ensuring complete billing accuracy.
427
+ </Note>
428
+
429
+ </Tab>
430
+ </Tabs>
431
+
432
+ ## Integration Examples
433
+
434
+ ### Co-Branded Integration Flow
435
+
436
+ The following sequence diagram illustrates the integration flow for co-branded partnerships:
437
+
438
+ ```mermaid
439
+ sequenceDiagram
440
+ participant User as End User
441
+ participant Partner as Partner Platform
442
+ participant InsForge as InsForge API
443
+ participant Dashboard as InsForge Dashboard
444
+
445
+ User->>Partner: Sign up/Login
446
+ Partner->>InsForge: POST /connect-user<br/>(name, email)
447
+ InsForge-->>Partner: Return user account ID
448
+
449
+ User->>Partner: Create new project
450
+ Partner->>InsForge: POST /sync-project<br/>(userId, project_name)
451
+
452
+ alt Success
453
+ InsForge-->>Partner: Return project details<br/>(id, access_host, api_key)
454
+ Partner->>Partner: Store project credentials
455
+ Partner->>User: Show project ready
456
+ else Project Limit Reached
457
+ InsForge-->>Partner: Return error + candidate projects
458
+ Partner->>User: Show existing projects to choose
459
+ User->>Partner: Select existing project
460
+ Partner->>InsForge: GET /metadata<br/>(projectId)
461
+ InsForge-->>Partner: Return project details
462
+ end
463
+
464
+ User->>Partner: Use application features
465
+ Partner->>InsForge: API calls using project credentials
466
+ InsForge-->>Partner: Return data
467
+ Partner-->>User: Display results
468
+
469
+ Note over User,Dashboard: User can also access InsForge Dashboard directly
470
+ User->>Dashboard: Login with same email
471
+ Dashboard->>User: Full project management access
472
+ ```
473
+
474
+ ```typescript
475
+ // 1. Connect user account
476
+ const connectUser = async (name: string, email: string) => {
477
+ const response = await fetch(
478
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/connect-user`,
479
+ {
480
+ method: 'POST',
481
+ headers: {
482
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
483
+ 'Content-Type': 'application/json'
484
+ },
485
+ body: JSON.stringify({ name, email })
486
+ }
487
+ );
488
+
489
+ const { account } = await response.json();
490
+ return account.id;
491
+ };
492
+
493
+ // 2. Create project for user
494
+ const createProject = async (userId: string, projectName: string) => {
495
+ const response = await fetch(
496
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${userId}/sync-project`,
497
+ {
498
+ method: 'POST',
499
+ headers: {
500
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
501
+ 'Content-Type': 'application/json'
502
+ },
503
+ body: JSON.stringify({
504
+ project_name: projectName,
505
+ region: 'us-east',
506
+ instance_type: 'nano'
507
+ })
508
+ }
509
+ );
510
+
511
+ const data = await response.json();
512
+ if (data.success) {
513
+ return data.project;
514
+ }
515
+ throw new Error(data.message);
516
+ };
517
+
518
+ // 3. Use project credentials
519
+ console.log(project.access_host);
520
+ console.log(project.api_key);
521
+ ```
522
+
523
+ ### White-Label Integration Flow
524
+
525
+ The following sequence diagram illustrates the integration flow for white-label partnerships:
526
+
527
+ ```mermaid
528
+ sequenceDiagram
529
+ participant User as End User
530
+ participant Partner as Partner Platform
531
+ participant InsForge as InsForge API
532
+
533
+ Note over User,InsForge: User never interacts with InsForge directly
534
+
535
+ User->>Partner: Sign up/Login to partner platform
536
+
537
+ User->>Partner: Create new project
538
+ Partner->>InsForge: POST /sync-embedded-project<br/>(project_name, region, instance_type)
539
+ InsForge-->>Partner: Return project details<br/>(id, access_host, api_key, status)
540
+ Partner->>Partner: Store project credentials
541
+ Partner->>User: Show project ready
542
+
543
+ User->>Partner: Use application features
544
+ Partner->>InsForge: API calls using project credentials
545
+ InsForge-->>Partner: Return data
546
+ Partner-->>User: Display results
547
+
548
+ User->>Partner: Request to pause project
549
+ Partner->>InsForge: POST /pause<br/>(projectId)
550
+ InsForge-->>Partner: Return status: paused
551
+ Partner->>User: Confirm project paused
552
+
553
+ User->>Partner: Request to restore project
554
+ Partner->>InsForge: POST /restore<br/>(projectId)
555
+ InsForge-->>Partner: Return status: active
556
+ Partner->>User: Confirm project active
557
+
558
+ Partner->>InsForge: GET /metadata<br/>(projectId)
559
+ InsForge-->>Partner: Return current project status
560
+ ```
561
+
562
+ ```typescript
563
+ // 1. Create embedded project
564
+ const createEmbeddedProject = async (projectName: string) => {
565
+ const response = await fetch(
566
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/sync-embedded-project`,
567
+ {
568
+ method: 'POST',
569
+ headers: {
570
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
571
+ 'Content-Type': 'application/json'
572
+ },
573
+ body: JSON.stringify({
574
+ project_name: projectName,
575
+ region: 'eu-west',
576
+ instance_type: 'small'
577
+ })
578
+ }
579
+ );
580
+
581
+ const data = await response.json();
582
+ if (data.success) {
583
+ return data.project;
584
+ }
585
+ throw new Error(data.message);
586
+ };
587
+
588
+ // 2. Manage project lifecycle
589
+ const pauseProject = async (projectId: string) => {
590
+ const response = await fetch(
591
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/pause`,
592
+ {
593
+ method: 'POST',
594
+ headers: {
595
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
596
+ 'Content-Type': 'application/json'
597
+ },
598
+ body: JSON.stringify({
599
+ wait_for_completion: true
600
+ })
601
+ }
602
+ );
603
+
604
+ const { project } = await response.json();
605
+ console.log(`Project ${project.id} status: ${project.status}`);
606
+ };
607
+
608
+ const restoreProject = async (projectId: string) => {
609
+ const response = await fetch(
610
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}/restore`,
611
+ {
612
+ method: 'POST',
613
+ headers: {
614
+ 'X-Partnership-Secret': `${SECRET_KEY}`,
615
+ 'Content-Type': 'application/json'
616
+ },
617
+ body: JSON.stringify({
618
+ wait_for_completion: true
619
+ })
620
+ }
621
+ );
622
+
623
+ const { project } = await response.json();
624
+ console.log(`Project ${project.id} status: ${project.status}`);
625
+ };
626
+
627
+ // 3. Delete project
628
+ const deleteProject = async (projectId: string) => {
629
+ const response = await fetch(
630
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/${projectId}`,
631
+ {
632
+ method: 'DELETE',
633
+ headers: {
634
+ 'X-Partnership-Secret': `${SECRET_KEY}`
635
+ }
636
+ }
637
+ );
638
+
639
+ if (response.ok) {
640
+ const data = await response.json();
641
+ console.log(data.message); // "Project deleted successfully"
642
+ console.log(`Request ID: ${data.requestId}`);
643
+ } else {
644
+ throw new Error(`Failed to delete project: ${response.status}`);
645
+ }
646
+ };
647
+
648
+ // 4. Get partnership total usage (for billing)
649
+ const getPartnershipUsage = async (startDate: string, endDate: string) => {
650
+ const params = new URLSearchParams({ start_date: startDate, end_date: endDate });
651
+ const response = await fetch(
652
+ `https://api.insforge.dev/partnership/v1/${PARTNER_ID}/usage?${params}`,
653
+ {
654
+ method: 'GET',
655
+ headers: {
656
+ 'X-Partnership-Secret': `${SECRET_KEY}`
657
+ }
658
+ }
659
+ );
660
+
661
+ const data = await response.json();
662
+ console.log(`Period: ${data.period.start} to ${data.period.end}`);
663
+ console.log(`Database: ${data.summary.database_bytes} bytes (peak)`);
664
+ console.log(`Storage: ${data.summary.storage_bytes} bytes (peak)`);
665
+ console.log(`AI Credits: ${data.summary.ai_credits}`);
666
+ console.log(`Egress: ${data.summary.egress_bytes} bytes`);
667
+ return data;
668
+ };
669
+ ```
670
+
671
+ ## Parameter and Response Reference
672
+
673
+ ### Project Region Values
674
+ InsForge provides global deployment capabilities. Each project can be deployed to different regions:
675
+ - `us-east` - United States East Coast
676
+ - `us-west` - United States West Coast
677
+ - `ap-southeast` - Asia Pacific Southeast
678
+ - `eu-central` - Europe Central
679
+
680
+ Additional regions will be added based on demand.
681
+
682
+ ### Project Instance Type Values
683
+ Based on your project's business requirements, InsForge offers the following resource types:
684
+ - `nano` - Minimal resources for development
685
+ - `micro` - Basic resources for testing and development
686
+ - `small` - Light workloads
687
+ - `medium` - Standard applications
688
+ - `large` - Production workloads
689
+ - `xl` - High-performance applications
690
+ - `2xl` - Enterprise applications
691
+ - `4xl` - Large-scale operations
692
+ - `8xl` - Mission-critical systems
693
+ - `16xl` - Maximum performance
694
+
695
+ ### Project Status Values
696
+
697
+ Projects can have the following status values:
698
+
699
+ - **active**: Project is running and accessible
700
+ - **paused**: Project is paused (white-label only)
701
+
702
+ ## Error Handling
703
+
704
+ All API endpoints return consistent error responses:
705
+
706
+ ```json
707
+ {
708
+ "success": false,
709
+ "message": "Detailed error message describing what went wrong"
710
+ }
711
+ ```
712
+
713
+ Common error scenarios:
714
+ - Invalid authentication credentials
715
+ - Project not found
716
+ - Insufficient permissions for requested operation
717
+ - Invalid request parameters
718
+
719
+ ## Next Steps
720
+
647
721
  - Schedule a [technical review](https://calendly.com/tony-chang-insforge/45min) with our team