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
@@ -0,0 +1,699 @@
1
+ openapi: 3.0.3
2
+ info:
3
+ title: Insforge Realtime API
4
+ version: 1.0.0
5
+ description: Realtime pub/sub channel management and message history API
6
+
7
+ paths:
8
+ /api/realtime/channels:
9
+ get:
10
+ summary: List All Channels
11
+ description: Retrieve all configured realtime channels
12
+ tags:
13
+ - Channels
14
+ security:
15
+ - bearerAuth: []
16
+ - apiKey: []
17
+ responses:
18
+ '200':
19
+ description: List of channels
20
+ content:
21
+ application/json:
22
+ schema:
23
+ type: array
24
+ items:
25
+ $ref: '#/components/schemas/Channel'
26
+ example:
27
+ - id: "550e8400-e29b-41d4-a716-446655440000"
28
+ pattern: "order:*"
29
+ description: "Order updates channel"
30
+ webhookUrls: ["https://example.com/webhook"]
31
+ enabled: true
32
+ createdAt: "2024-01-15T10:30:00Z"
33
+ updatedAt: "2024-01-15T10:30:00Z"
34
+ - id: "550e8400-e29b-41d4-a716-446655440001"
35
+ pattern: "chat:*"
36
+ description: "Chat room messages"
37
+ webhookUrls: null
38
+ enabled: true
39
+ createdAt: "2024-01-16T11:00:00Z"
40
+ updatedAt: "2024-01-16T11:00:00Z"
41
+
42
+ post:
43
+ summary: Create Channel
44
+ description: Create a new realtime channel with a pattern for subscription matching
45
+ tags:
46
+ - Channels
47
+ security:
48
+ - bearerAuth: []
49
+ - apiKey: []
50
+ requestBody:
51
+ required: true
52
+ content:
53
+ application/json:
54
+ schema:
55
+ $ref: '#/components/schemas/CreateChannelRequest'
56
+ example:
57
+ pattern: "order:*"
58
+ description: "Order updates channel"
59
+ webhookUrls: ["https://example.com/webhook"]
60
+ enabled: true
61
+ responses:
62
+ '201':
63
+ description: Channel created successfully
64
+ content:
65
+ application/json:
66
+ schema:
67
+ $ref: '#/components/schemas/Channel'
68
+ example:
69
+ id: "550e8400-e29b-41d4-a716-446655440000"
70
+ pattern: "order:*"
71
+ description: "Order updates channel"
72
+ webhookUrls: ["https://example.com/webhook"]
73
+ enabled: true
74
+ createdAt: "2024-01-15T10:30:00Z"
75
+ updatedAt: "2024-01-15T10:30:00Z"
76
+ '400':
77
+ description: Invalid input
78
+ content:
79
+ application/json:
80
+ schema:
81
+ $ref: '#/components/schemas/ErrorResponse'
82
+ example:
83
+ error: "INVALID_INPUT"
84
+ message: "pattern: Channel pattern is required"
85
+ statusCode: 400
86
+
87
+ /api/realtime/channels/{id}:
88
+ get:
89
+ summary: Get Channel by ID
90
+ description: Retrieve a specific channel by its UUID
91
+ tags:
92
+ - Channels
93
+ security:
94
+ - bearerAuth: []
95
+ - apiKey: []
96
+ parameters:
97
+ - name: id
98
+ in: path
99
+ required: true
100
+ schema:
101
+ type: string
102
+ format: uuid
103
+ example: "550e8400-e29b-41d4-a716-446655440000"
104
+ responses:
105
+ '200':
106
+ description: Channel details
107
+ content:
108
+ application/json:
109
+ schema:
110
+ $ref: '#/components/schemas/Channel'
111
+ example:
112
+ id: "550e8400-e29b-41d4-a716-446655440000"
113
+ pattern: "order:*"
114
+ description: "Order updates channel"
115
+ webhookUrls: ["https://example.com/webhook"]
116
+ enabled: true
117
+ createdAt: "2024-01-15T10:30:00Z"
118
+ updatedAt: "2024-01-15T10:30:00Z"
119
+ '404':
120
+ description: Channel not found
121
+ content:
122
+ application/json:
123
+ schema:
124
+ $ref: '#/components/schemas/ErrorResponse'
125
+ example:
126
+ error: "NOT_FOUND"
127
+ message: "Channel not found"
128
+ statusCode: 404
129
+
130
+ put:
131
+ summary: Update Channel
132
+ description: Update an existing channel's configuration
133
+ tags:
134
+ - Channels
135
+ security:
136
+ - bearerAuth: []
137
+ - apiKey: []
138
+ parameters:
139
+ - name: id
140
+ in: path
141
+ required: true
142
+ schema:
143
+ type: string
144
+ format: uuid
145
+ example: "550e8400-e29b-41d4-a716-446655440000"
146
+ requestBody:
147
+ required: true
148
+ content:
149
+ application/json:
150
+ schema:
151
+ $ref: '#/components/schemas/UpdateChannelRequest'
152
+ example:
153
+ description: "Updated order channel description"
154
+ enabled: false
155
+ responses:
156
+ '200':
157
+ description: Channel updated successfully
158
+ content:
159
+ application/json:
160
+ schema:
161
+ $ref: '#/components/schemas/Channel'
162
+ example:
163
+ id: "550e8400-e29b-41d4-a716-446655440000"
164
+ pattern: "order:*"
165
+ description: "Updated order channel description"
166
+ webhookUrls: ["https://example.com/webhook"]
167
+ enabled: false
168
+ createdAt: "2024-01-15T10:30:00Z"
169
+ updatedAt: "2024-01-17T14:00:00Z"
170
+ '400':
171
+ description: Invalid input
172
+ content:
173
+ application/json:
174
+ schema:
175
+ $ref: '#/components/schemas/ErrorResponse'
176
+ example:
177
+ error: "INVALID_INPUT"
178
+ message: "webhookUrls.0: Invalid url"
179
+ statusCode: 400
180
+ '404':
181
+ description: Channel not found
182
+ content:
183
+ application/json:
184
+ schema:
185
+ $ref: '#/components/schemas/ErrorResponse'
186
+ example:
187
+ error: "NOT_FOUND"
188
+ message: "Channel not found"
189
+ statusCode: 404
190
+
191
+ delete:
192
+ summary: Delete Channel
193
+ description: Delete a channel and all associated subscriptions
194
+ tags:
195
+ - Channels
196
+ security:
197
+ - bearerAuth: []
198
+ - apiKey: []
199
+ parameters:
200
+ - name: id
201
+ in: path
202
+ required: true
203
+ schema:
204
+ type: string
205
+ format: uuid
206
+ example: "550e8400-e29b-41d4-a716-446655440000"
207
+ responses:
208
+ '200':
209
+ description: Channel deleted successfully
210
+ content:
211
+ application/json:
212
+ schema:
213
+ type: object
214
+ properties:
215
+ message:
216
+ type: string
217
+ example:
218
+ message: "Channel deleted"
219
+ '404':
220
+ description: Channel not found
221
+ content:
222
+ application/json:
223
+ schema:
224
+ $ref: '#/components/schemas/ErrorResponse'
225
+ example:
226
+ error: "NOT_FOUND"
227
+ message: "Channel not found"
228
+ statusCode: 404
229
+
230
+ /api/realtime/messages:
231
+ get:
232
+ summary: List Messages
233
+ description: Retrieve message history with optional filters
234
+ tags:
235
+ - Messages
236
+ security:
237
+ - bearerAuth: []
238
+ - apiKey: []
239
+ parameters:
240
+ - name: channelId
241
+ in: query
242
+ required: false
243
+ schema:
244
+ type: string
245
+ format: uuid
246
+ description: Filter messages by channel ID
247
+ example: "550e8400-e29b-41d4-a716-446655440000"
248
+ - name: eventName
249
+ in: query
250
+ required: false
251
+ schema:
252
+ type: string
253
+ description: Filter messages by event name
254
+ example: "order.created"
255
+ - name: limit
256
+ in: query
257
+ required: false
258
+ schema:
259
+ type: integer
260
+ minimum: 1
261
+ maximum: 1000
262
+ default: 100
263
+ description: Maximum number of messages to return
264
+ - name: offset
265
+ in: query
266
+ required: false
267
+ schema:
268
+ type: integer
269
+ minimum: 0
270
+ default: 0
271
+ description: Number of messages to skip
272
+ responses:
273
+ '200':
274
+ description: List of messages
275
+ content:
276
+ application/json:
277
+ schema:
278
+ type: array
279
+ items:
280
+ $ref: '#/components/schemas/Message'
281
+ example:
282
+ - id: "660e8400-e29b-41d4-a716-446655440000"
283
+ eventName: "order.created"
284
+ channelId: "550e8400-e29b-41d4-a716-446655440000"
285
+ channelName: "order:123"
286
+ payload:
287
+ orderId: "123"
288
+ status: "pending"
289
+ senderType: "user"
290
+ senderId: "770e8400-e29b-41d4-a716-446655440000"
291
+ wsAudienceCount: 5
292
+ whAudienceCount: 1
293
+ whDeliveredCount: 1
294
+ createdAt: "2024-01-15T10:30:00Z"
295
+ '400':
296
+ description: Invalid input
297
+ content:
298
+ application/json:
299
+ schema:
300
+ $ref: '#/components/schemas/ErrorResponse'
301
+ example:
302
+ error: "INVALID_INPUT"
303
+ message: "channelId: Invalid uuid"
304
+ statusCode: 400
305
+
306
+ /api/realtime/messages/stats:
307
+ get:
308
+ summary: Get Message Statistics
309
+ description: Retrieve aggregated statistics about messages
310
+ tags:
311
+ - Messages
312
+ security:
313
+ - bearerAuth: []
314
+ - apiKey: []
315
+ parameters:
316
+ - name: channelId
317
+ in: query
318
+ required: false
319
+ schema:
320
+ type: string
321
+ format: uuid
322
+ description: Filter stats by channel ID
323
+ example: "550e8400-e29b-41d4-a716-446655440000"
324
+ - name: since
325
+ in: query
326
+ required: false
327
+ schema:
328
+ type: string
329
+ format: date-time
330
+ description: Filter stats since this timestamp
331
+ example: "2024-01-01T00:00:00Z"
332
+ responses:
333
+ '200':
334
+ description: Message statistics
335
+ content:
336
+ application/json:
337
+ schema:
338
+ $ref: '#/components/schemas/MessageStats'
339
+ example:
340
+ totalMessages: 1250
341
+ whDeliveryRate: 0.98
342
+ topEvents:
343
+ - eventName: "order.created"
344
+ count: 450
345
+ - eventName: "order.updated"
346
+ count: 380
347
+ - eventName: "order.completed"
348
+ count: 220
349
+ '400':
350
+ description: Invalid input
351
+ content:
352
+ application/json:
353
+ schema:
354
+ $ref: '#/components/schemas/ErrorResponse'
355
+ example:
356
+ error: "INVALID_INPUT"
357
+ message: "since: Invalid datetime"
358
+ statusCode: 400
359
+
360
+ /api/realtime/permissions:
361
+ get:
362
+ summary: Get Realtime Permissions
363
+ description: Retrieve RLS policies for subscribe (channels) and publish (messages) operations
364
+ tags:
365
+ - Permissions
366
+ security:
367
+ - bearerAuth: []
368
+ - apiKey: []
369
+ responses:
370
+ '200':
371
+ description: Realtime RLS permissions
372
+ content:
373
+ application/json:
374
+ schema:
375
+ $ref: '#/components/schemas/RealtimePermissions'
376
+ example:
377
+ subscribe:
378
+ policies:
379
+ - policyName: "allow_authenticated_subscribe"
380
+ tableName: "realtime_channels"
381
+ command: "SELECT"
382
+ roles: ["authenticated"]
383
+ using: "enabled = true"
384
+ withCheck: null
385
+ publish:
386
+ policies:
387
+ - policyName: "allow_authenticated_publish"
388
+ tableName: "realtime_messages"
389
+ command: "INSERT"
390
+ roles: ["authenticated"]
391
+ using: null
392
+ withCheck: "true"
393
+
394
+ components:
395
+ securitySchemes:
396
+ bearerAuth:
397
+ type: http
398
+ scheme: bearer
399
+ apiKey:
400
+ type: apiKey
401
+ in: header
402
+ name: X-API-Key
403
+
404
+ schemas:
405
+ Channel:
406
+ type: object
407
+ required:
408
+ - id
409
+ - pattern
410
+ - enabled
411
+ - createdAt
412
+ - updatedAt
413
+ properties:
414
+ id:
415
+ type: string
416
+ format: uuid
417
+ description: Unique identifier for the channel
418
+ example: "550e8400-e29b-41d4-a716-446655440000"
419
+ pattern:
420
+ type: string
421
+ minLength: 1
422
+ description: Channel pattern for subscription matching (supports wildcards like "order:*")
423
+ example: "order:*"
424
+ description:
425
+ type: string
426
+ nullable: true
427
+ description: Human-readable description of the channel
428
+ example: "Order updates channel"
429
+ webhookUrls:
430
+ type: array
431
+ nullable: true
432
+ items:
433
+ type: string
434
+ format: uri
435
+ description: URLs to receive webhook notifications for messages on this channel
436
+ example: ["https://example.com/webhook"]
437
+ enabled:
438
+ type: boolean
439
+ description: Whether the channel is currently active
440
+ example: true
441
+ createdAt:
442
+ type: string
443
+ format: date-time
444
+ description: Timestamp when the channel was created
445
+ example: "2024-01-15T10:30:00Z"
446
+ updatedAt:
447
+ type: string
448
+ format: date-time
449
+ description: Timestamp when the channel was last updated
450
+ example: "2024-01-15T10:30:00Z"
451
+
452
+ CreateChannelRequest:
453
+ type: object
454
+ required:
455
+ - pattern
456
+ properties:
457
+ pattern:
458
+ type: string
459
+ minLength: 1
460
+ description: Channel pattern for subscription matching
461
+ example: "order:*"
462
+ description:
463
+ type: string
464
+ description: Human-readable description of the channel
465
+ example: "Order updates channel"
466
+ webhookUrls:
467
+ type: array
468
+ items:
469
+ type: string
470
+ format: uri
471
+ description: URLs to receive webhook notifications
472
+ example: ["https://example.com/webhook"]
473
+ enabled:
474
+ type: boolean
475
+ default: true
476
+ description: Whether the channel should be active upon creation
477
+ example: true
478
+
479
+ UpdateChannelRequest:
480
+ type: object
481
+ properties:
482
+ pattern:
483
+ type: string
484
+ minLength: 1
485
+ description: Updated channel pattern
486
+ example: "order:*"
487
+ description:
488
+ type: string
489
+ description: Updated description
490
+ example: "Updated order channel"
491
+ webhookUrls:
492
+ type: array
493
+ items:
494
+ type: string
495
+ format: uri
496
+ description: Updated webhook URLs
497
+ example: ["https://example.com/webhook"]
498
+ enabled:
499
+ type: boolean
500
+ description: Updated enabled status
501
+ example: false
502
+
503
+ Message:
504
+ type: object
505
+ required:
506
+ - id
507
+ - eventName
508
+ - channelName
509
+ - payload
510
+ - senderType
511
+ - wsAudienceCount
512
+ - whAudienceCount
513
+ - whDeliveredCount
514
+ - createdAt
515
+ properties:
516
+ id:
517
+ type: string
518
+ format: uuid
519
+ description: Unique identifier for the message
520
+ example: "660e8400-e29b-41d4-a716-446655440000"
521
+ eventName:
522
+ type: string
523
+ minLength: 1
524
+ description: Name of the event
525
+ example: "order.created"
526
+ channelId:
527
+ type: string
528
+ format: uuid
529
+ nullable: true
530
+ description: ID of the channel this message belongs to
531
+ example: "550e8400-e29b-41d4-a716-446655440000"
532
+ channelName:
533
+ type: string
534
+ minLength: 1
535
+ description: Resolved channel name (instance of the pattern)
536
+ example: "order:123"
537
+ payload:
538
+ type: object
539
+ additionalProperties: true
540
+ description: Message payload data
541
+ example:
542
+ orderId: "123"
543
+ status: "pending"
544
+ senderType:
545
+ type: string
546
+ enum: [system, user]
547
+ description: Type of sender that published the message
548
+ example: "user"
549
+ senderId:
550
+ type: string
551
+ format: uuid
552
+ nullable: true
553
+ description: ID of the user who sent the message (null for system messages)
554
+ example: "770e8400-e29b-41d4-a716-446655440000"
555
+ wsAudienceCount:
556
+ type: integer
557
+ minimum: 0
558
+ description: Number of WebSocket clients who received the message
559
+ example: 5
560
+ whAudienceCount:
561
+ type: integer
562
+ minimum: 0
563
+ description: Number of webhooks that should receive the message
564
+ example: 1
565
+ whDeliveredCount:
566
+ type: integer
567
+ minimum: 0
568
+ description: Number of webhooks that successfully received the message
569
+ example: 1
570
+ createdAt:
571
+ type: string
572
+ format: date-time
573
+ description: Timestamp when the message was created
574
+ example: "2024-01-15T10:30:00Z"
575
+
576
+ MessageStats:
577
+ type: object
578
+ required:
579
+ - totalMessages
580
+ - whDeliveryRate
581
+ - topEvents
582
+ properties:
583
+ totalMessages:
584
+ type: integer
585
+ minimum: 0
586
+ description: Total number of messages
587
+ example: 1250
588
+ whDeliveryRate:
589
+ type: number
590
+ minimum: 0
591
+ maximum: 1
592
+ description: Webhook delivery success rate (0-1)
593
+ example: 0.98
594
+ topEvents:
595
+ type: array
596
+ description: Most frequent event types
597
+ items:
598
+ type: object
599
+ required:
600
+ - eventName
601
+ - count
602
+ properties:
603
+ eventName:
604
+ type: string
605
+ description: Name of the event
606
+ example: "order.created"
607
+ count:
608
+ type: integer
609
+ minimum: 0
610
+ description: Number of occurrences
611
+ example: 450
612
+
613
+ RlsPolicy:
614
+ type: object
615
+ required:
616
+ - policyName
617
+ - tableName
618
+ - command
619
+ - roles
620
+ properties:
621
+ policyName:
622
+ type: string
623
+ description: Name of the RLS policy
624
+ example: "allow_authenticated_subscribe"
625
+ tableName:
626
+ type: string
627
+ description: Table the policy applies to
628
+ example: "realtime_channels"
629
+ command:
630
+ type: string
631
+ description: SQL command the policy applies to (SELECT, INSERT, UPDATE, DELETE)
632
+ example: "SELECT"
633
+ roles:
634
+ type: array
635
+ items:
636
+ type: string
637
+ description: Database roles the policy applies to
638
+ example: ["authenticated"]
639
+ using:
640
+ type: string
641
+ nullable: true
642
+ description: USING clause for row-level filtering
643
+ example: "enabled = true"
644
+ withCheck:
645
+ type: string
646
+ nullable: true
647
+ description: WITH CHECK clause for row-level validation
648
+ example: null
649
+
650
+ RealtimePermissions:
651
+ type: object
652
+ required:
653
+ - subscribe
654
+ - publish
655
+ properties:
656
+ subscribe:
657
+ type: object
658
+ required:
659
+ - policies
660
+ properties:
661
+ policies:
662
+ type: array
663
+ description: RLS policies for channel subscriptions
664
+ items:
665
+ $ref: '#/components/schemas/RlsPolicy'
666
+ publish:
667
+ type: object
668
+ required:
669
+ - policies
670
+ properties:
671
+ policies:
672
+ type: array
673
+ description: RLS policies for message publishing
674
+ items:
675
+ $ref: '#/components/schemas/RlsPolicy'
676
+
677
+ ErrorResponse:
678
+ type: object
679
+ required:
680
+ - error
681
+ - message
682
+ - statusCode
683
+ properties:
684
+ error:
685
+ type: string
686
+ description: Error code for programmatic handling
687
+ example: "INVALID_INPUT"
688
+ message:
689
+ type: string
690
+ description: Human-readable error message
691
+ example: "Invalid request"
692
+ statusCode:
693
+ type: integer
694
+ description: HTTP status code
695
+ example: 400
696
+ nextActions:
697
+ type: string
698
+ description: Suggested action to resolve the error
699
+ example: "Check your request parameters"