insforge 1.2.10 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/.claude-plugin/marketplace.json +20 -20
  2. package/.dockerignore +60 -60
  3. package/.env.example +83 -77
  4. package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
  5. package/.github/ISSUE_TEMPLATE/config.yml +11 -11
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
  7. package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
  8. package/.github/copilot-instructions.md +146 -146
  9. package/.github/workflows/build-image.yml +65 -65
  10. package/.github/workflows/ci-premerge-check.yml +23 -23
  11. package/.github/workflows/e2e.yml +63 -63
  12. package/.github/workflows/lint-and-format.yml +32 -32
  13. package/.prettierignore +64 -64
  14. package/CHANGELOG.md +44 -44
  15. package/CLAUDE_PLUGIN.md +104 -104
  16. package/CODE_OF_CONDUCT.md +128 -128
  17. package/CONTRIBUTING.md +125 -125
  18. package/Dockerfile +30 -30
  19. package/GITHUB_OAUTH_SETUP.md +49 -49
  20. package/GOOGLE_OAUTH_SETUP.md +148 -148
  21. package/LICENSE +201 -201
  22. package/README.md +182 -182
  23. package/assets/Dark.svg +23 -23
  24. package/auth/package.json +28 -28
  25. package/auth/src/lib/broadcastService.ts +117 -115
  26. package/auth/src/pages/SignInPage.tsx +60 -57
  27. package/auth/src/pages/SignUpPage.tsx +60 -57
  28. package/auth/tsconfig.json +32 -32
  29. package/auth/tsconfig.node.json +11 -11
  30. package/backend/package.json +78 -75
  31. package/backend/src/api/routes/ai/index.routes.ts +3 -3
  32. package/backend/src/api/routes/auth/index.routes.ts +667 -570
  33. package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
  34. package/backend/src/api/routes/database/advance.routes.ts +37 -16
  35. package/backend/src/api/routes/database/index.routes.ts +78 -1
  36. package/backend/src/api/routes/database/records.routes.ts +10 -10
  37. package/backend/src/api/routes/database/tables.routes.ts +0 -14
  38. package/backend/src/api/routes/docs/index.routes.ts +75 -76
  39. package/backend/src/api/routes/email/index.routes.ts +35 -0
  40. package/backend/src/api/routes/functions/index.routes.ts +18 -12
  41. package/backend/src/api/routes/metadata/index.routes.ts +12 -0
  42. package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
  43. package/backend/src/api/routes/realtime/index.routes.ts +12 -0
  44. package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
  45. package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
  46. package/backend/src/api/routes/storage/index.routes.ts +18 -12
  47. package/backend/src/api/routes/usage/index.routes.ts +6 -4
  48. package/backend/src/infra/database/database.manager.ts +14 -1
  49. package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
  50. package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
  51. package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
  52. package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
  53. package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
  54. package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
  55. package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
  56. package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
  57. package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
  58. package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
  59. package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
  60. package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
  61. package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
  62. package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
  63. package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
  64. package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
  65. package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
  66. package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
  67. package/backend/src/infra/realtime/realtime.manager.ts +246 -0
  68. package/backend/src/infra/realtime/webhook-sender.ts +82 -0
  69. package/backend/src/infra/security/token.manager.ts +219 -125
  70. package/backend/src/infra/socket/socket.manager.ts +198 -64
  71. package/backend/src/providers/ai/openrouter.provider.ts +12 -9
  72. package/backend/src/providers/email/base.provider.ts +4 -7
  73. package/backend/src/providers/email/cloud.provider.ts +84 -0
  74. package/backend/src/providers/oauth/apple.provider.ts +266 -0
  75. package/backend/src/providers/oauth/index.ts +1 -0
  76. package/backend/src/server.ts +317 -284
  77. package/backend/src/services/ai/ai-model.service.ts +5 -5
  78. package/backend/src/services/ai/chat-completion.service.ts +4 -4
  79. package/backend/src/services/ai/image-generation.service.ts +3 -3
  80. package/backend/src/services/auth/auth.service.ts +14 -0
  81. package/backend/src/services/database/database-table.service.ts +0 -9
  82. package/backend/src/services/database/database.service.ts +127 -0
  83. package/backend/src/services/email/email.service.ts +5 -7
  84. package/backend/src/services/realtime/index.ts +3 -0
  85. package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
  86. package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
  87. package/backend/src/services/realtime/realtime-message.service.ts +260 -0
  88. package/backend/src/types/auth.ts +11 -0
  89. package/backend/src/types/realtime.ts +18 -0
  90. package/backend/src/types/socket.ts +7 -31
  91. package/backend/src/utils/cookies.ts +35 -0
  92. package/backend/src/utils/s3-config-loader.ts +64 -0
  93. package/backend/src/utils/seed.ts +301 -298
  94. package/backend/src/utils/sql-parser.ts +90 -0
  95. package/backend/tests/README.md +133 -133
  96. package/backend/tests/cleanup-all-test-data.sh +230 -230
  97. package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
  98. package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
  99. package/backend/tests/local/test-ai-config.sh +129 -129
  100. package/backend/tests/local/test-ai-usage.sh +80 -80
  101. package/backend/tests/local/test-auth-router.sh +143 -143
  102. package/backend/tests/local/test-database-router.sh +222 -222
  103. package/backend/tests/local/test-e2e.sh +240 -240
  104. package/backend/tests/local/test-fk-errors.sh +96 -96
  105. package/backend/tests/local/test-functions.sh +123 -123
  106. package/backend/tests/local/test-id-field.sh +200 -200
  107. package/backend/tests/local/test-logs.sh +132 -132
  108. package/backend/tests/local/test-public-bucket.sh +264 -264
  109. package/backend/tests/local/test-secrets.sh +249 -249
  110. package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
  111. package/backend/tests/local/test-traditional-rest.sh +208 -208
  112. package/backend/tests/manual/README.md +50 -50
  113. package/backend/tests/manual/create-large-table-simple.sql +10 -10
  114. package/backend/tests/manual/seed-large-table.sql +100 -100
  115. package/backend/tests/manual/setup-large-table-extras.sql +33 -33
  116. package/backend/tests/manual/test-bulk-upsert.sh +409 -409
  117. package/backend/tests/manual/test-database-advance.sh +296 -296
  118. package/backend/tests/manual/test-postgrest-stability.sh +191 -191
  119. package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
  120. package/backend/tests/manual/test-rawsql-modes.sh +244 -244
  121. package/backend/tests/manual/test-universal-storage.sh +263 -263
  122. package/backend/tests/manual/test-users.sql +17 -17
  123. package/backend/tests/run-all-tests.sh +139 -139
  124. package/backend/tests/setup.ts +0 -0
  125. package/backend/tests/test-config.sh +338 -338
  126. package/backend/tests/unit/analyze-query.test.ts +697 -0
  127. package/backend/tsconfig.json +22 -22
  128. package/claude-plugin/.claude-plugin/plugin.json +24 -24
  129. package/claude-plugin/README.md +133 -133
  130. package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
  131. package/docker-compose.prod.yml +204 -200
  132. package/docker-compose.yml +232 -228
  133. package/docker-init/db/db-init.sql +97 -97
  134. package/docker-init/db/jwt.sql +5 -5
  135. package/docker-init/db/postgresql.conf +16 -16
  136. package/docker-init/logs/vector.yml +236 -236
  137. package/docs/README.md +44 -44
  138. package/docs/agent-docs/real-time.md +269 -0
  139. package/docs/changelog.mdx +119 -67
  140. package/docs/core-concepts/ai/architecture.mdx +372 -372
  141. package/docs/core-concepts/ai/sdk.mdx +213 -213
  142. package/docs/core-concepts/authentication/architecture.mdx +278 -278
  143. package/docs/core-concepts/authentication/sdk.mdx +414 -414
  144. package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
  145. package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
  146. package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
  147. package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
  148. package/docs/core-concepts/database/architecture.mdx +255 -255
  149. package/docs/core-concepts/database/sdk.mdx +382 -382
  150. package/docs/core-concepts/email/architecture.mdx +101 -0
  151. package/docs/core-concepts/email/sdk.mdx +53 -0
  152. package/docs/core-concepts/functions/architecture.mdx +105 -105
  153. package/docs/core-concepts/functions/sdk.mdx +184 -184
  154. package/docs/core-concepts/realtime/architecture.mdx +446 -0
  155. package/docs/core-concepts/realtime/sdk.mdx +409 -0
  156. package/docs/core-concepts/storage/architecture.mdx +243 -243
  157. package/docs/core-concepts/storage/sdk.mdx +253 -253
  158. package/docs/deployment/README.md +94 -94
  159. package/docs/deployment/deploy-to-aws-ec2.md +564 -564
  160. package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
  161. package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
  162. package/docs/deployment/deploy-to-render.md +441 -441
  163. package/docs/deprecated/insforge-auth-api.md +214 -214
  164. package/docs/deprecated/insforge-auth-sdk.md +99 -99
  165. package/docs/deprecated/insforge-db-api.md +358 -358
  166. package/docs/deprecated/insforge-db-sdk.md +139 -139
  167. package/docs/deprecated/insforge-debug-sdk.md +156 -156
  168. package/docs/deprecated/insforge-debug.md +64 -64
  169. package/docs/deprecated/insforge-instructions.md +123 -123
  170. package/docs/deprecated/insforge-project.md +117 -117
  171. package/docs/deprecated/insforge-storage-api.md +278 -278
  172. package/docs/deprecated/insforge-storage-sdk.md +158 -158
  173. package/docs/docs.json +232 -210
  174. package/docs/examples/framework-guides/nextjs.mdx +131 -131
  175. package/docs/examples/framework-guides/nuxt.mdx +165 -165
  176. package/docs/examples/framework-guides/react.mdx +165 -165
  177. package/docs/examples/framework-guides/svelte.mdx +153 -153
  178. package/docs/examples/framework-guides/vue.mdx +159 -159
  179. package/docs/examples/overview.mdx +67 -67
  180. package/docs/favicon.svg +19 -19
  181. package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
  182. package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
  183. package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
  184. package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
  185. package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
  186. package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
  187. package/docs/images/icons/ai.svg +4 -4
  188. package/docs/images/logos/nextjs.svg +4 -4
  189. package/docs/images/logos/nuxt.svg +4 -4
  190. package/docs/images/logos/react.svg +5 -5
  191. package/docs/images/logos/svelte.svg +4 -4
  192. package/docs/images/logos/vue.svg +5 -5
  193. package/docs/insforge-instructions-sdk.md +89 -88
  194. package/docs/introduction.mdx +45 -45
  195. package/docs/logo/dark.svg +22 -22
  196. package/docs/logo/light.svg +20 -20
  197. package/docs/partnership.mdx +651 -646
  198. package/docs/quickstart.mdx +82 -82
  199. package/docs/showcase.mdx +52 -52
  200. package/docs/snippets/sdk-installation.mdx +21 -21
  201. package/docs/snippets/service-icons.mdx +27 -27
  202. package/examples/oauth/frontend-oauth-example.html +250 -250
  203. package/examples/response-examples.md +443 -443
  204. package/frontend/components.json +17 -17
  205. package/frontend/package.json +69 -69
  206. package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
  207. package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
  208. package/frontend/src/assets/icons/checked.svg +3 -3
  209. package/frontend/src/assets/icons/connected.svg +3 -3
  210. package/frontend/src/assets/icons/error.svg +3 -3
  211. package/frontend/src/assets/icons/loader.svg +9 -9
  212. package/frontend/src/assets/icons/pencil.svg +4 -4
  213. package/frontend/src/assets/icons/refresh.svg +4 -4
  214. package/frontend/src/assets/icons/step_active.svg +3 -3
  215. package/frontend/src/assets/icons/step_inactive.svg +11 -11
  216. package/frontend/src/assets/icons/warning.svg +3 -3
  217. package/frontend/src/assets/logos/apple.svg +3 -3
  218. package/frontend/src/assets/logos/claude_code.svg +3 -3
  219. package/frontend/src/assets/logos/cline.svg +6 -6
  220. package/frontend/src/assets/logos/cursor.svg +20 -20
  221. package/frontend/src/assets/logos/discord.svg +8 -8
  222. package/frontend/src/assets/logos/facebook.svg +3 -3
  223. package/frontend/src/assets/logos/gemini.svg +19 -19
  224. package/frontend/src/assets/logos/github.svg +5 -5
  225. package/frontend/src/assets/logos/google.svg +13 -13
  226. package/frontend/src/assets/logos/grok.svg +10 -10
  227. package/frontend/src/assets/logos/insforge_dark.svg +15 -15
  228. package/frontend/src/assets/logos/insforge_light.svg +15 -15
  229. package/frontend/src/assets/logos/instagram.svg +1 -1
  230. package/frontend/src/assets/logos/linkedin.svg +3 -3
  231. package/frontend/src/assets/logos/openai.svg +10 -10
  232. package/frontend/src/assets/logos/roo_code.svg +9 -9
  233. package/frontend/src/assets/logos/spotify.svg +16 -16
  234. package/frontend/src/assets/logos/tiktok.svg +5 -5
  235. package/frontend/src/assets/logos/trae.svg +3 -3
  236. package/frontend/src/assets/logos/windsurf.svg +10 -10
  237. package/frontend/src/assets/logos/x.svg +3 -3
  238. package/frontend/src/components/layout/AppHeader.tsx +9 -10
  239. package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
  240. package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
  241. package/frontend/src/features/auth/helpers.tsx +8 -0
  242. package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
  243. package/frontend/src/features/database/components/SQLModal.tsx +75 -0
  244. package/frontend/src/features/database/components/TableForm.tsx +0 -4
  245. package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
  246. package/frontend/src/features/database/hooks/useTables.ts +32 -28
  247. package/frontend/src/features/database/index.ts +1 -0
  248. package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -37
  249. package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +35 -47
  250. package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +43 -54
  251. package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
  252. package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +35 -47
  253. package/frontend/src/features/database/services/advance.service.ts +0 -26
  254. package/frontend/src/features/database/services/database.service.ts +55 -0
  255. package/frontend/src/features/database/services/table.service.ts +0 -6
  256. package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
  257. package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +11 -9
  258. package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
  259. package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
  260. package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
  261. package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
  262. package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
  263. package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
  264. package/frontend/src/features/realtime/index.ts +11 -0
  265. package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
  266. package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
  267. package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
  268. package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
  269. package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
  270. package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
  271. package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +1 -35
  272. package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
  273. package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
  274. package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
  275. package/frontend/src/lib/utils/menuItems.ts +24 -0
  276. package/frontend/src/lib/utils/utils.ts +14 -1
  277. package/frontend/tsconfig.json +25 -25
  278. package/frontend/tsconfig.node.json +9 -9
  279. package/functions/deno.json +24 -24
  280. package/functions/server.ts +315 -315
  281. package/i18n/README.ar.md +130 -130
  282. package/i18n/README.de.md +130 -130
  283. package/i18n/README.es.md +154 -154
  284. package/i18n/README.fr.md +134 -134
  285. package/i18n/README.hi.md +129 -129
  286. package/i18n/README.ja.md +174 -174
  287. package/i18n/README.ko.md +136 -136
  288. package/i18n/README.pt-BR.md +131 -131
  289. package/i18n/README.ru.md +129 -129
  290. package/i18n/README.zh-CN.md +133 -133
  291. package/openapi/ai.yaml +715 -715
  292. package/openapi/auth.yaml +1244 -1244
  293. package/openapi/email.yaml +158 -0
  294. package/openapi/functions.yaml +475 -475
  295. package/openapi/health.yaml +29 -29
  296. package/openapi/logs.yaml +223 -223
  297. package/openapi/metadata.yaml +177 -177
  298. package/openapi/realtime.yaml +699 -0
  299. package/openapi/records.yaml +381 -381
  300. package/openapi/secrets.yaml +370 -370
  301. package/openapi/storage.yaml +875 -875
  302. package/openapi/tables.yaml +463 -463
  303. package/package.json +97 -97
  304. package/shared-schemas/package.json +31 -31
  305. package/shared-schemas/src/ai.schema.ts +63 -59
  306. package/shared-schemas/src/auth-api.schema.ts +352 -339
  307. package/shared-schemas/src/auth.schema.ts +1 -1
  308. package/shared-schemas/src/database-api.schema.ts +32 -1
  309. package/shared-schemas/src/database.schema.ts +39 -0
  310. package/shared-schemas/src/docs.schema.ts +26 -0
  311. package/shared-schemas/src/email-api.schema.ts +30 -0
  312. package/shared-schemas/src/index.ts +4 -0
  313. package/shared-schemas/src/metadata.schema.ts +9 -0
  314. package/shared-schemas/src/realtime-api.schema.ts +111 -0
  315. package/shared-schemas/src/realtime.schema.ts +143 -0
  316. package/shared-schemas/tsconfig.json +21 -21
  317. package/tsconfig.json +7 -7
  318. package/zeabur/README.md +13 -13
  319. package/zeabur/template.yml +1032 -1032
  320. package/.cursor/rules/cursor-rules.mdc +0 -94
  321. package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
  322. package/test-gemini.sh +0 -35
  323. package/test-usage-admin.sh +0 -57
  324. package/test-usage.sh +0 -50
  325. /package/frontend/src/features/ai/{page → pages}/AIPage.tsx +0 -0
  326. /package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +0 -0
  327. /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
  328. /package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +0 -0
  329. /package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +0 -0
  330. /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
  331. /package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +0 -0
  332. /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
  333. /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
  334. /package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +0 -0
  335. /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
@@ -1,464 +1,464 @@
1
- openapi: 3.0.3
2
- info:
3
- title: Insforge Tables API
4
- version: 1.0.0
5
-
6
- paths:
7
- /api/database/tables:
8
- get:
9
- summary: List Tables
10
- tags:
11
- - Admin
12
- security:
13
- - bearerAuth: []
14
- - apiKey: []
15
- responses:
16
- '200':
17
- description: List of table names
18
- content:
19
- application/json:
20
- schema:
21
- type: array
22
- items:
23
- type: string
24
- example:
25
- - "users"
26
- - "posts"
27
- - "comments"
28
- - "categories"
29
-
30
- post:
31
- summary: Create Table
32
- tags:
33
- - Admin
34
- security:
35
- - bearerAuth: []
36
- - apiKey: []
37
- requestBody:
38
- required: true
39
- content:
40
- application/json:
41
- schema:
42
- type: object
43
- required:
44
- - tableName
45
- - columns
46
- properties:
47
- tableName:
48
- type: string
49
- columns:
50
- type: array
51
- items:
52
- type: object
53
- required:
54
- - name
55
- - type
56
- - nullable
57
- properties:
58
- name:
59
- type: string
60
- type:
61
- type: string
62
- enum: [string, datetime, integer, float, boolean, uuid, json, file]
63
- nullable:
64
- type: boolean
65
- unique:
66
- type: boolean
67
- defaultValue:
68
- type: string
69
- foreignKey:
70
- type: object
71
- properties:
72
- table:
73
- type: string
74
- column:
75
- type: string
76
- onDelete:
77
- type: string
78
- enum: [CASCADE, SET NULL, NO ACTION, RESTRICT]
79
- default: NO ACTION
80
- responses:
81
- '201':
82
- description: Table created
83
- content:
84
- application/json:
85
- schema:
86
- type: object
87
- properties:
88
- message:
89
- type: string
90
- table_name:
91
- type: string
92
- example:
93
- message: "Table created successfully"
94
- tableName: "posts"
95
- '400':
96
- description: Bad request
97
- content:
98
- application/json:
99
- schema:
100
- $ref: '#/components/schemas/ErrorResponse'
101
- example:
102
- error: "VALIDATION_ERROR"
103
- message: "Table name already exists"
104
- statusCode: 400
105
- nextActions: "Choose a different table name"
106
- '422':
107
- description: Unprocessable entity
108
- content:
109
- application/json:
110
- schema:
111
- $ref: '#/components/schemas/ErrorResponse'
112
- example:
113
- error: "INVALID_FIELD_TYPE"
114
- message: "Invalid field type: 'text'. Valid types are: string, integer, float, boolean, datetime, uuid, json, file"
115
- statusCode: 422
116
- nextActions: "Use one of the valid field types"
117
-
118
- /api/database/tables/{tableName}:
119
- get:
120
- summary: Get Table Schema
121
- tags:
122
- - Admin
123
- security:
124
- - bearerAuth: []
125
- - apiKey: []
126
- parameters:
127
- - name: tableName
128
- in: path
129
- required: true
130
- schema:
131
- type: string
132
- responses:
133
- '200':
134
- description: Table schema
135
- content:
136
- application/json:
137
- schema:
138
- type: object
139
- properties:
140
- table_name:
141
- type: string
142
- columns:
143
- type: array
144
- items:
145
- type: object
146
- properties:
147
- name:
148
- type: string
149
- type:
150
- type: string
151
- nullable:
152
- type: boolean
153
- unique:
154
- type: boolean
155
- default:
156
- type: string
157
- nullable: true
158
- isPrimaryKey:
159
- type: boolean
160
- foreignKey:
161
- type: object
162
- nullable: true
163
- properties:
164
- table:
165
- type: string
166
- column:
167
- type: string
168
- on_delete:
169
- type: string
170
- example:
171
- tableName: "posts"
172
- columns:
173
- - name: "id"
174
- type: "uuid"
175
- nullable: false
176
- unique: true
177
- default: "gen_random_uuid()"
178
- isPrimaryKey: true
179
- foreignKey: null
180
- - name: "title"
181
- type: "string"
182
- nullable: false
183
- unique: false
184
- default: null
185
- isPrimaryKey: false
186
- foreignKey: null
187
- - name: "userId"
188
- type: "uuid"
189
- nullable: false
190
- unique: false
191
- default: null
192
- isPrimaryKey: false
193
- foreignKey:
194
- table: "users"
195
- column: "id"
196
- on_delete: "CASCADE"
197
- '404':
198
- description: Table not found
199
- content:
200
- application/json:
201
- schema:
202
- $ref: '#/components/schemas/ErrorResponse'
203
- example:
204
- error: "TABLE_NOT_FOUND"
205
- message: "Table 'nonexistent' does not exist"
206
- statusCode: 404
207
- nextActions: "Check table name and try again"
208
- patch:
209
- summary: Update Table Schema
210
- tags:
211
- - Admin
212
- security:
213
- - bearerAuth: []
214
- - apiKey: []
215
- parameters:
216
- - name: tableName
217
- in: path
218
- required: true
219
- schema:
220
- type: string
221
- requestBody:
222
- required: true
223
- content:
224
- application/json:
225
- schema:
226
- type: object
227
- properties:
228
- addColumns:
229
- type: array
230
- description: Add new columns to the table
231
- items:
232
- type: object
233
- required:
234
- - columnName
235
- - type
236
- properties:
237
- columnName:
238
- type: string
239
- description: Name of the new column
240
- type:
241
- type: string
242
- enum: [string, integer, float, boolean, datetime, uuid, json, file]
243
- description: Data type of the column
244
- isNullable:
245
- type: boolean
246
- default: true
247
- description: Whether the column allows NULL values
248
- isUnique:
249
- type: boolean
250
- default: false
251
- description: Whether the column values must be unique
252
- defaultValue:
253
- type: string
254
- description: Default value for the column
255
- dropColumns:
256
- type: array
257
- description: Remove columns from the table
258
- items:
259
- type: string
260
- description: Name of the column to drop
261
- updateColumns:
262
- type: array
263
- description: Modify existing columns (rename or change default)
264
- items:
265
- type: object
266
- required:
267
- - columnName
268
- properties:
269
- columnName:
270
- type: string
271
- description: Current name of the column
272
- newColumnName:
273
- type: string
274
- description: New name for the column (optional)
275
- minLength: 1
276
- maxLength: 64
277
- defaultValue:
278
- type: string
279
- description: New default value for the column (optional)
280
- addForeignKeys:
281
- type: array
282
- description: Add foreign key constraints to existing columns
283
- items:
284
- type: object
285
- required:
286
- - columnName
287
- - foreignKey
288
- properties:
289
- columnName:
290
- type: string
291
- description: Name of the column to add foreign key to
292
- foreignKey:
293
- type: object
294
- required:
295
- - referenceTable
296
- - referenceColumn
297
- properties:
298
- referenceTable:
299
- type: string
300
- description: Table being referenced
301
- referenceColumn:
302
- type: string
303
- description: Column being referenced
304
- onDelete:
305
- type: string
306
- enum: [CASCADE, SET NULL, NO ACTION, RESTRICT]
307
- default: RESTRICT
308
- description: Action on delete
309
- onUpdate:
310
- type: string
311
- enum: [CASCADE, SET NULL, NO ACTION, RESTRICT]
312
- default: RESTRICT
313
- description: Action on update
314
- dropForeignKeys:
315
- type: array
316
- description: Remove foreign key constraints from columns
317
- items:
318
- type: string
319
- description: Name of the column with foreign key to drop
320
- renameTable:
321
- type: object
322
- description: Rename the table
323
- required:
324
- - newTableName
325
- properties:
326
- newTableName:
327
- type: string
328
- description: New name for the table
329
- minLength: 1
330
- maxLength: 64
331
- responses:
332
- '200':
333
- description: Table schema updated successfully
334
- content:
335
- application/json:
336
- schema:
337
- type: object
338
- properties:
339
- message:
340
- type: string
341
- description: Success message
342
- tableName:
343
- type: string
344
- description: Name of the updated table
345
- operations:
346
- type: array
347
- description: List of operations performed
348
- items:
349
- type: string
350
- example:
351
- message: "Table schema updated successfully"
352
- tableName: "posts"
353
- operations:
354
- - "added 2 columns"
355
- - "dropped 1 columns"
356
- - "renamed 1 columns"
357
- - "added 1 foreign keys"
358
- - "dropped 1 foreign keys"
359
- '400':
360
- description: Bad request
361
- content:
362
- application/json:
363
- schema:
364
- $ref: '#/components/schemas/ErrorResponse'
365
- examples:
366
- columnExists:
367
- value:
368
- error: "COLUMN_EXISTS"
369
- message: "Column 'title' already exists in table 'posts'"
370
- statusCode: 400
371
- nextActions: "Choose a different column name or drop it first"
372
- columnNotFound:
373
- value:
374
- error: "COLUMN_NOT_FOUND"
375
- message: "Column 'nonexistent' not found in table 'posts'"
376
- statusCode: 400
377
- nextActions: "Check column name with GET /api/tables/{tableName}/schema"
378
- foreignKeyExists:
379
- value:
380
- error: "FOREIGN_KEY_EXISTS"
381
- message: "Foreign key on column 'user_id' already exists"
382
- statusCode: 400
383
- nextActions: "Drop the existing foreign key first or use a different column"
384
- '404':
385
- description: Table not found
386
- content:
387
- application/json:
388
- schema:
389
- $ref: '#/components/schemas/ErrorResponse'
390
- example:
391
- error: "TABLE_NOT_FOUND"
392
- message: "Table 'nonexistent' does not exist"
393
- statusCode: 404
394
- nextActions: "Check table name and try again"
395
- delete:
396
- summary: Delete Table
397
- tags:
398
- - Admin
399
- security:
400
- - bearerAuth: []
401
- - apiKey: []
402
- parameters:
403
- - name: tableName
404
- in: path
405
- required: true
406
- schema:
407
- type: string
408
- responses:
409
- '200':
410
- description: Table deleted
411
- content:
412
- application/json:
413
- schema:
414
- type: object
415
- properties:
416
- message:
417
- type: string
418
- table_name:
419
- type: string
420
- example:
421
- message: "Table deleted successfully"
422
- tableName: "posts"
423
- '404':
424
- description: Table not found
425
- content:
426
- application/json:
427
- schema:
428
- $ref: '#/components/schemas/ErrorResponse'
429
- example:
430
- error: "TABLE_NOT_FOUND"
431
- message: "Table 'nonexistent' does not exist"
432
- statusCode: 404
433
- nextActions: "Check table name and try again"
434
-
435
- components:
436
- securitySchemes:
437
- bearerAuth:
438
- type: http
439
- scheme: bearer
440
- apiKey:
441
- type: apiKey
442
- in: header
443
- name: X-API-Key
444
-
445
- schemas:
446
- ErrorResponse:
447
- type: object
448
- required:
449
- - error
450
- - message
451
- - statusCode
452
- properties:
453
- error:
454
- type: string
455
- description: Error code for programmatic handling
456
- message:
457
- type: string
458
- description: Human-readable error message
459
- statusCode:
460
- type: integer
461
- description: HTTP status code
462
- nextActions:
463
- type: string
1
+ openapi: 3.0.3
2
+ info:
3
+ title: Insforge Tables API
4
+ version: 1.0.0
5
+
6
+ paths:
7
+ /api/database/tables:
8
+ get:
9
+ summary: List Tables
10
+ tags:
11
+ - Admin
12
+ security:
13
+ - bearerAuth: []
14
+ - apiKey: []
15
+ responses:
16
+ '200':
17
+ description: List of table names
18
+ content:
19
+ application/json:
20
+ schema:
21
+ type: array
22
+ items:
23
+ type: string
24
+ example:
25
+ - "users"
26
+ - "posts"
27
+ - "comments"
28
+ - "categories"
29
+
30
+ post:
31
+ summary: Create Table
32
+ tags:
33
+ - Admin
34
+ security:
35
+ - bearerAuth: []
36
+ - apiKey: []
37
+ requestBody:
38
+ required: true
39
+ content:
40
+ application/json:
41
+ schema:
42
+ type: object
43
+ required:
44
+ - tableName
45
+ - columns
46
+ properties:
47
+ tableName:
48
+ type: string
49
+ columns:
50
+ type: array
51
+ items:
52
+ type: object
53
+ required:
54
+ - name
55
+ - type
56
+ - nullable
57
+ properties:
58
+ name:
59
+ type: string
60
+ type:
61
+ type: string
62
+ enum: [string, datetime, integer, float, boolean, uuid, json, file]
63
+ nullable:
64
+ type: boolean
65
+ unique:
66
+ type: boolean
67
+ defaultValue:
68
+ type: string
69
+ foreignKey:
70
+ type: object
71
+ properties:
72
+ table:
73
+ type: string
74
+ column:
75
+ type: string
76
+ onDelete:
77
+ type: string
78
+ enum: [CASCADE, SET NULL, NO ACTION, RESTRICT]
79
+ default: NO ACTION
80
+ responses:
81
+ '201':
82
+ description: Table created
83
+ content:
84
+ application/json:
85
+ schema:
86
+ type: object
87
+ properties:
88
+ message:
89
+ type: string
90
+ table_name:
91
+ type: string
92
+ example:
93
+ message: "Table created successfully"
94
+ tableName: "posts"
95
+ '400':
96
+ description: Bad request
97
+ content:
98
+ application/json:
99
+ schema:
100
+ $ref: '#/components/schemas/ErrorResponse'
101
+ example:
102
+ error: "VALIDATION_ERROR"
103
+ message: "Table name already exists"
104
+ statusCode: 400
105
+ nextActions: "Choose a different table name"
106
+ '422':
107
+ description: Unprocessable entity
108
+ content:
109
+ application/json:
110
+ schema:
111
+ $ref: '#/components/schemas/ErrorResponse'
112
+ example:
113
+ error: "INVALID_FIELD_TYPE"
114
+ message: "Invalid field type: 'text'. Valid types are: string, integer, float, boolean, datetime, uuid, json, file"
115
+ statusCode: 422
116
+ nextActions: "Use one of the valid field types"
117
+
118
+ /api/database/tables/{tableName}:
119
+ get:
120
+ summary: Get Table Schema
121
+ tags:
122
+ - Admin
123
+ security:
124
+ - bearerAuth: []
125
+ - apiKey: []
126
+ parameters:
127
+ - name: tableName
128
+ in: path
129
+ required: true
130
+ schema:
131
+ type: string
132
+ responses:
133
+ '200':
134
+ description: Table schema
135
+ content:
136
+ application/json:
137
+ schema:
138
+ type: object
139
+ properties:
140
+ table_name:
141
+ type: string
142
+ columns:
143
+ type: array
144
+ items:
145
+ type: object
146
+ properties:
147
+ name:
148
+ type: string
149
+ type:
150
+ type: string
151
+ nullable:
152
+ type: boolean
153
+ unique:
154
+ type: boolean
155
+ default:
156
+ type: string
157
+ nullable: true
158
+ isPrimaryKey:
159
+ type: boolean
160
+ foreignKey:
161
+ type: object
162
+ nullable: true
163
+ properties:
164
+ table:
165
+ type: string
166
+ column:
167
+ type: string
168
+ on_delete:
169
+ type: string
170
+ example:
171
+ tableName: "posts"
172
+ columns:
173
+ - name: "id"
174
+ type: "uuid"
175
+ nullable: false
176
+ unique: true
177
+ default: "gen_random_uuid()"
178
+ isPrimaryKey: true
179
+ foreignKey: null
180
+ - name: "title"
181
+ type: "string"
182
+ nullable: false
183
+ unique: false
184
+ default: null
185
+ isPrimaryKey: false
186
+ foreignKey: null
187
+ - name: "userId"
188
+ type: "uuid"
189
+ nullable: false
190
+ unique: false
191
+ default: null
192
+ isPrimaryKey: false
193
+ foreignKey:
194
+ table: "users"
195
+ column: "id"
196
+ on_delete: "CASCADE"
197
+ '404':
198
+ description: Table not found
199
+ content:
200
+ application/json:
201
+ schema:
202
+ $ref: '#/components/schemas/ErrorResponse'
203
+ example:
204
+ error: "TABLE_NOT_FOUND"
205
+ message: "Table 'nonexistent' does not exist"
206
+ statusCode: 404
207
+ nextActions: "Check table name and try again"
208
+ patch:
209
+ summary: Update Table Schema
210
+ tags:
211
+ - Admin
212
+ security:
213
+ - bearerAuth: []
214
+ - apiKey: []
215
+ parameters:
216
+ - name: tableName
217
+ in: path
218
+ required: true
219
+ schema:
220
+ type: string
221
+ requestBody:
222
+ required: true
223
+ content:
224
+ application/json:
225
+ schema:
226
+ type: object
227
+ properties:
228
+ addColumns:
229
+ type: array
230
+ description: Add new columns to the table
231
+ items:
232
+ type: object
233
+ required:
234
+ - columnName
235
+ - type
236
+ properties:
237
+ columnName:
238
+ type: string
239
+ description: Name of the new column
240
+ type:
241
+ type: string
242
+ enum: [string, integer, float, boolean, datetime, uuid, json, file]
243
+ description: Data type of the column
244
+ isNullable:
245
+ type: boolean
246
+ default: true
247
+ description: Whether the column allows NULL values
248
+ isUnique:
249
+ type: boolean
250
+ default: false
251
+ description: Whether the column values must be unique
252
+ defaultValue:
253
+ type: string
254
+ description: Default value for the column
255
+ dropColumns:
256
+ type: array
257
+ description: Remove columns from the table
258
+ items:
259
+ type: string
260
+ description: Name of the column to drop
261
+ updateColumns:
262
+ type: array
263
+ description: Modify existing columns (rename or change default)
264
+ items:
265
+ type: object
266
+ required:
267
+ - columnName
268
+ properties:
269
+ columnName:
270
+ type: string
271
+ description: Current name of the column
272
+ newColumnName:
273
+ type: string
274
+ description: New name for the column (optional)
275
+ minLength: 1
276
+ maxLength: 64
277
+ defaultValue:
278
+ type: string
279
+ description: New default value for the column (optional)
280
+ addForeignKeys:
281
+ type: array
282
+ description: Add foreign key constraints to existing columns
283
+ items:
284
+ type: object
285
+ required:
286
+ - columnName
287
+ - foreignKey
288
+ properties:
289
+ columnName:
290
+ type: string
291
+ description: Name of the column to add foreign key to
292
+ foreignKey:
293
+ type: object
294
+ required:
295
+ - referenceTable
296
+ - referenceColumn
297
+ properties:
298
+ referenceTable:
299
+ type: string
300
+ description: Table being referenced
301
+ referenceColumn:
302
+ type: string
303
+ description: Column being referenced
304
+ onDelete:
305
+ type: string
306
+ enum: [CASCADE, SET NULL, NO ACTION, RESTRICT]
307
+ default: RESTRICT
308
+ description: Action on delete
309
+ onUpdate:
310
+ type: string
311
+ enum: [CASCADE, SET NULL, NO ACTION, RESTRICT]
312
+ default: RESTRICT
313
+ description: Action on update
314
+ dropForeignKeys:
315
+ type: array
316
+ description: Remove foreign key constraints from columns
317
+ items:
318
+ type: string
319
+ description: Name of the column with foreign key to drop
320
+ renameTable:
321
+ type: object
322
+ description: Rename the table
323
+ required:
324
+ - newTableName
325
+ properties:
326
+ newTableName:
327
+ type: string
328
+ description: New name for the table
329
+ minLength: 1
330
+ maxLength: 64
331
+ responses:
332
+ '200':
333
+ description: Table schema updated successfully
334
+ content:
335
+ application/json:
336
+ schema:
337
+ type: object
338
+ properties:
339
+ message:
340
+ type: string
341
+ description: Success message
342
+ tableName:
343
+ type: string
344
+ description: Name of the updated table
345
+ operations:
346
+ type: array
347
+ description: List of operations performed
348
+ items:
349
+ type: string
350
+ example:
351
+ message: "Table schema updated successfully"
352
+ tableName: "posts"
353
+ operations:
354
+ - "added 2 columns"
355
+ - "dropped 1 columns"
356
+ - "renamed 1 columns"
357
+ - "added 1 foreign keys"
358
+ - "dropped 1 foreign keys"
359
+ '400':
360
+ description: Bad request
361
+ content:
362
+ application/json:
363
+ schema:
364
+ $ref: '#/components/schemas/ErrorResponse'
365
+ examples:
366
+ columnExists:
367
+ value:
368
+ error: "COLUMN_EXISTS"
369
+ message: "Column 'title' already exists in table 'posts'"
370
+ statusCode: 400
371
+ nextActions: "Choose a different column name or drop it first"
372
+ columnNotFound:
373
+ value:
374
+ error: "COLUMN_NOT_FOUND"
375
+ message: "Column 'nonexistent' not found in table 'posts'"
376
+ statusCode: 400
377
+ nextActions: "Check column name with GET /api/tables/{tableName}/schema"
378
+ foreignKeyExists:
379
+ value:
380
+ error: "FOREIGN_KEY_EXISTS"
381
+ message: "Foreign key on column 'user_id' already exists"
382
+ statusCode: 400
383
+ nextActions: "Drop the existing foreign key first or use a different column"
384
+ '404':
385
+ description: Table not found
386
+ content:
387
+ application/json:
388
+ schema:
389
+ $ref: '#/components/schemas/ErrorResponse'
390
+ example:
391
+ error: "TABLE_NOT_FOUND"
392
+ message: "Table 'nonexistent' does not exist"
393
+ statusCode: 404
394
+ nextActions: "Check table name and try again"
395
+ delete:
396
+ summary: Delete Table
397
+ tags:
398
+ - Admin
399
+ security:
400
+ - bearerAuth: []
401
+ - apiKey: []
402
+ parameters:
403
+ - name: tableName
404
+ in: path
405
+ required: true
406
+ schema:
407
+ type: string
408
+ responses:
409
+ '200':
410
+ description: Table deleted
411
+ content:
412
+ application/json:
413
+ schema:
414
+ type: object
415
+ properties:
416
+ message:
417
+ type: string
418
+ table_name:
419
+ type: string
420
+ example:
421
+ message: "Table deleted successfully"
422
+ tableName: "posts"
423
+ '404':
424
+ description: Table not found
425
+ content:
426
+ application/json:
427
+ schema:
428
+ $ref: '#/components/schemas/ErrorResponse'
429
+ example:
430
+ error: "TABLE_NOT_FOUND"
431
+ message: "Table 'nonexistent' does not exist"
432
+ statusCode: 404
433
+ nextActions: "Check table name and try again"
434
+
435
+ components:
436
+ securitySchemes:
437
+ bearerAuth:
438
+ type: http
439
+ scheme: bearer
440
+ apiKey:
441
+ type: apiKey
442
+ in: header
443
+ name: X-API-Key
444
+
445
+ schemas:
446
+ ErrorResponse:
447
+ type: object
448
+ required:
449
+ - error
450
+ - message
451
+ - statusCode
452
+ properties:
453
+ error:
454
+ type: string
455
+ description: Error code for programmatic handling
456
+ message:
457
+ type: string
458
+ description: Human-readable error message
459
+ statusCode:
460
+ type: integer
461
+ description: HTTP status code
462
+ nextActions:
463
+ type: string
464
464
  description: Suggested action to resolve the error