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,147 +1,147 @@
1
- # Project Overview
2
-
3
- InsForge is an open-source Backend-as-a-Service (BaaS) platform designed specifically for AI agents. It provides a comprehensive solution for managing backend services including authentication, database operations, storage, and serverless functions, all accessible through REST APIs with PostgreSQL as the primary database.
4
-
5
- ## Architecture
6
-
7
- This is a monorepo containing:
8
- - **Backend**: Node.js with Express.js, providing RESTful APIs
9
- - **Frontend**: React with Vite, offering an admin dashboard
10
- - **Functions**: Serverless function runtime using Deno
11
- - **Shared-schemas**: Common TypeScript schemas shared across modules
12
-
13
- ## Folder Structure
14
-
15
- - `/backend`: Node.js backend server
16
- - `/src/api`: API routes and middleware
17
- - `/src/controllers`: Business logic controllers
18
- - `/src/core`: Core services (auth, database, storage, metadata)
19
- - `/src/types`: TypeScript type definitions
20
- - `/src/utils`: Utility functions and helpers
21
- - `/frontend`: React dashboard application
22
- - `/src/components`: Reusable UI components
23
- - `/src/features`: Feature-specific modules (auth, database, storage, logs)
24
- - `/src/lib`: Shared libraries, hooks, and utilities
25
- - `/functions`: Serverless function runtime
26
- - `/shared-schemas`: Shared TypeScript schemas
27
- - `/docker-init`: Docker initialization scripts
28
- - `/openapi`: API documentation in OpenAPI format
29
- - `/tests`: Comprehensive test suites
30
-
31
- ## Libraries and Frameworks
32
-
33
- ### Backend
34
- - Express.js for REST API framework
35
- - PostgreSQL with pg driver for database
36
- - Better-auth for authentication
37
- - AWS SDK for S3-compatible storage
38
- - Zod for schema validation
39
- - JWT for token management
40
- - TypeScript for type safety
41
-
42
- ### Frontend
43
- - React 19 with functional components
44
- - Vite for build tooling
45
- - TanStack Query for data fetching
46
- - React Hook Form with Zod validation
47
- - Tailwind CSS for styling
48
- - Radix UI for accessible component primitives
49
- - React Router for navigation
50
- - TypeScript for type safety
51
-
52
- ## Coding Standards
53
-
54
- ### General
55
- - Use TypeScript for all code files
56
- - Prefer descriptive, unabbreviated variable and function names
57
- - Follow consistent file naming: kebab-case for files, PascalCase for components
58
- - Maintain clear folder structure with feature-based organization
59
- - Use ES modules (import/export syntax)
60
- - Implement proper error handling with try-catch blocks
61
- - Add appropriate logging for debugging
62
-
63
- ### Backend Specific
64
- - Use async/await for asynchronous operations
65
- - Implement proper middleware for authentication and error handling
66
- - Follow RESTful conventions for API endpoints
67
- - Use Zod schemas for request/response validation
68
- - Return consistent API responses using utility functions
69
- - Implement proper database transaction handling
70
-
71
- ### Frontend Specific
72
- - Use functional components with hooks exclusively
73
- - Implement proper TypeScript interfaces for all props
74
- - Use React Hook Form for form handling
75
- - Follow component composition patterns
76
- - Implement proper loading and error states
77
- - Use TanStack Query for server state management
78
- - Keep components focused and single-purpose
79
-
80
- #### Naming Conventions
81
- - **Variables, parameters, properties, and functions**: Use camelCase
82
- - Examples: `userName`, `getUserData()`, `isLoading`
83
- - **React components and TypeScript types/interfaces**: Use PascalCase
84
- - Examples: `UserProfileDialog`, `interface User`, `type TableSchema`
85
- - **Constants and Enum members**: Use UPPER_CASE
86
- - Examples: `const API_BASE_URL`, `enum Status { ACTIVE, INACTIVE }`
87
- - **File naming**:
88
- - Components: `PascalCase.tsx` (e.g., `DataGrid.tsx`)
89
- - Hooks: `use` + `PascalCase.ts` (e.g., `useAuth.ts`)
90
- - Services: `camelCase.service.ts` (e.g., `auth.service.ts`)
91
- - Utils: `kebab-case.ts` or `camelCase.ts` (e.g., `database-utils.ts`)
92
- - **No snake_case**: Avoid snake_case except in SQL queries and external APIs
93
-
94
- ### Code Style
95
- - Use single quotes for strings
96
- - Include semicolons at the end of statements
97
- - Use arrow functions for callbacks and inline functions
98
- - Prefer const over let, avoid var
99
- - Use template literals for string interpolation
100
- - Maintain consistent indentation (2 spaces)
101
- - Format code with Prettier configuration
102
-
103
- ## UI Guidelines
104
-
105
- - Follow a clean, modern design with consistent spacing
106
- - Use Radix UI primitives for accessibility
107
- - Maintain consistent color scheme using CSS variables
108
- - Use appropriate loading skeletons for data fetching
109
- - Display clear error messages with actionable feedback
110
- - Implement proper form validation with inline errors
111
- - Use consistent icon set from lucide-react
112
-
113
- ## Testing Standards
114
-
115
- - Implement integration tests for API endpoints
116
- - Maintain test coverage above 70%
117
- - Mock external dependencies appropriately
118
-
119
- ## Security Considerations
120
-
121
- - Never commit secrets or API keys
122
- - Use environment variables for configuration
123
- - Implement proper authentication and authorization
124
- - Validate all user inputs
125
- - Sanitize data before database operations
126
- - Use prepared statements for SQL queries
127
- - Implement rate limiting for API endpoints
128
- - Follow OWASP security best practices
129
-
130
- ## Performance Guidelines
131
-
132
- - Implement proper database indexing
133
- - Use pagination for large data sets
134
- - Optimize React component re-renders
135
- - Implement proper caching strategies
136
- - Use lazy loading for code splitting
137
- - Optimize bundle size with proper imports
138
- - Monitor and log performance metrics
139
-
140
- ## Documentation
141
-
142
- - Document all API endpoints with clear descriptions
143
- - Include JSDoc comments for complex functions
144
- - Maintain up-to-date README files
145
- - Document environment variables and configuration
146
- - Provide clear setup instructions
1
+ # Project Overview
2
+
3
+ InsForge is an open-source Backend-as-a-Service (BaaS) platform designed specifically for AI agents. It provides a comprehensive solution for managing backend services including authentication, database operations, storage, and serverless functions, all accessible through REST APIs with PostgreSQL as the primary database.
4
+
5
+ ## Architecture
6
+
7
+ This is a monorepo containing:
8
+ - **Backend**: Node.js with Express.js, providing RESTful APIs
9
+ - **Frontend**: React with Vite, offering an admin dashboard
10
+ - **Functions**: Serverless function runtime using Deno
11
+ - **Shared-schemas**: Common TypeScript schemas shared across modules
12
+
13
+ ## Folder Structure
14
+
15
+ - `/backend`: Node.js backend server
16
+ - `/src/api`: API routes and middleware
17
+ - `/src/controllers`: Business logic controllers
18
+ - `/src/core`: Core services (auth, database, storage, metadata)
19
+ - `/src/types`: TypeScript type definitions
20
+ - `/src/utils`: Utility functions and helpers
21
+ - `/frontend`: React dashboard application
22
+ - `/src/components`: Reusable UI components
23
+ - `/src/features`: Feature-specific modules (auth, database, storage, logs)
24
+ - `/src/lib`: Shared libraries, hooks, and utilities
25
+ - `/functions`: Serverless function runtime
26
+ - `/shared-schemas`: Shared TypeScript schemas
27
+ - `/docker-init`: Docker initialization scripts
28
+ - `/openapi`: API documentation in OpenAPI format
29
+ - `/tests`: Comprehensive test suites
30
+
31
+ ## Libraries and Frameworks
32
+
33
+ ### Backend
34
+ - Express.js for REST API framework
35
+ - PostgreSQL with pg driver for database
36
+ - Better-auth for authentication
37
+ - AWS SDK for S3-compatible storage
38
+ - Zod for schema validation
39
+ - JWT for token management
40
+ - TypeScript for type safety
41
+
42
+ ### Frontend
43
+ - React 19 with functional components
44
+ - Vite for build tooling
45
+ - TanStack Query for data fetching
46
+ - React Hook Form with Zod validation
47
+ - Tailwind CSS for styling
48
+ - Radix UI for accessible component primitives
49
+ - React Router for navigation
50
+ - TypeScript for type safety
51
+
52
+ ## Coding Standards
53
+
54
+ ### General
55
+ - Use TypeScript for all code files
56
+ - Prefer descriptive, unabbreviated variable and function names
57
+ - Follow consistent file naming: kebab-case for files, PascalCase for components
58
+ - Maintain clear folder structure with feature-based organization
59
+ - Use ES modules (import/export syntax)
60
+ - Implement proper error handling with try-catch blocks
61
+ - Add appropriate logging for debugging
62
+
63
+ ### Backend Specific
64
+ - Use async/await for asynchronous operations
65
+ - Implement proper middleware for authentication and error handling
66
+ - Follow RESTful conventions for API endpoints
67
+ - Use Zod schemas for request/response validation
68
+ - Return consistent API responses using utility functions
69
+ - Implement proper database transaction handling
70
+
71
+ ### Frontend Specific
72
+ - Use functional components with hooks exclusively
73
+ - Implement proper TypeScript interfaces for all props
74
+ - Use React Hook Form for form handling
75
+ - Follow component composition patterns
76
+ - Implement proper loading and error states
77
+ - Use TanStack Query for server state management
78
+ - Keep components focused and single-purpose
79
+
80
+ #### Naming Conventions
81
+ - **Variables, parameters, properties, and functions**: Use camelCase
82
+ - Examples: `userName`, `getUserData()`, `isLoading`
83
+ - **React components and TypeScript types/interfaces**: Use PascalCase
84
+ - Examples: `UserProfileDialog`, `interface User`, `type TableSchema`
85
+ - **Constants and Enum members**: Use UPPER_CASE
86
+ - Examples: `const API_BASE_URL`, `enum Status { ACTIVE, INACTIVE }`
87
+ - **File naming**:
88
+ - Components: `PascalCase.tsx` (e.g., `DataGrid.tsx`)
89
+ - Hooks: `use` + `PascalCase.ts` (e.g., `useAuth.ts`)
90
+ - Services: `camelCase.service.ts` (e.g., `auth.service.ts`)
91
+ - Utils: `kebab-case.ts` or `camelCase.ts` (e.g., `database-utils.ts`)
92
+ - **No snake_case**: Avoid snake_case except in SQL queries and external APIs
93
+
94
+ ### Code Style
95
+ - Use single quotes for strings
96
+ - Include semicolons at the end of statements
97
+ - Use arrow functions for callbacks and inline functions
98
+ - Prefer const over let, avoid var
99
+ - Use template literals for string interpolation
100
+ - Maintain consistent indentation (2 spaces)
101
+ - Format code with Prettier configuration
102
+
103
+ ## UI Guidelines
104
+
105
+ - Follow a clean, modern design with consistent spacing
106
+ - Use Radix UI primitives for accessibility
107
+ - Maintain consistent color scheme using CSS variables
108
+ - Use appropriate loading skeletons for data fetching
109
+ - Display clear error messages with actionable feedback
110
+ - Implement proper form validation with inline errors
111
+ - Use consistent icon set from lucide-react
112
+
113
+ ## Testing Standards
114
+
115
+ - Implement integration tests for API endpoints
116
+ - Maintain test coverage above 70%
117
+ - Mock external dependencies appropriately
118
+
119
+ ## Security Considerations
120
+
121
+ - Never commit secrets or API keys
122
+ - Use environment variables for configuration
123
+ - Implement proper authentication and authorization
124
+ - Validate all user inputs
125
+ - Sanitize data before database operations
126
+ - Use prepared statements for SQL queries
127
+ - Implement rate limiting for API endpoints
128
+ - Follow OWASP security best practices
129
+
130
+ ## Performance Guidelines
131
+
132
+ - Implement proper database indexing
133
+ - Use pagination for large data sets
134
+ - Optimize React component re-renders
135
+ - Implement proper caching strategies
136
+ - Use lazy loading for code splitting
137
+ - Optimize bundle size with proper imports
138
+ - Monitor and log performance metrics
139
+
140
+ ## Documentation
141
+
142
+ - Document all API endpoints with clear descriptions
143
+ - Include JSDoc comments for complex functions
144
+ - Maintain up-to-date README files
145
+ - Document environment variables and configuration
146
+ - Provide clear setup instructions
147
147
  - Include examples for common use cases
@@ -1,66 +1,66 @@
1
- name: Build and Push Docker Image on github container registry
2
-
3
- on:
4
- push:
5
- tags:
6
- - 'v*'
7
- workflow_dispatch:
8
- inputs:
9
- test_tag:
10
- description: 'Test tag name (e.g., v0.1.1-test)'
11
- required: false
12
- default: 'v0.1.1-test'
13
-
14
- env:
15
- REGISTRY: ghcr.io
16
- IMAGE_NAME: ${{ github.repository_owner }}/insforge-oss
17
-
18
- jobs:
19
- build-and-push:
20
- runs-on: ubuntu-latest
21
- permissions:
22
- contents: read
23
- packages: write
24
- id-token: write
25
-
26
- steps:
27
- - name: Checkout repository
28
- uses: actions/checkout@v4
29
-
30
- - name: Set up QEMU
31
- uses: docker/setup-qemu-action@v3
32
-
33
- - name: Set up Docker Buildx
34
- uses: docker/setup-buildx-action@v3
35
-
36
- - name: Log in to GitHub Container Registry
37
- uses: docker/login-action@v3
38
- with:
39
- registry: ${{ env.REGISTRY }}
40
- username: ${{ github.actor }}
41
- password: ${{ secrets.GHCR_PAT }}
42
-
43
- - name: Extract metadata
44
- id: meta
45
- uses: docker/metadata-action@v5
46
- with:
47
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
48
- tags: |
49
- type=ref,event=tag
50
- type=raw,value=${{ github.event.inputs.test_tag }},enable=${{ github.event_name == 'workflow_dispatch' }}
51
-
52
- - name: Build and push Docker image
53
- uses: docker/build-push-action@v5
54
- with:
55
- context: .
56
- platforms: linux/amd64,linux/arm64
57
- push: true
58
- tags: ${{ steps.meta.outputs.tags }}
59
- labels: ${{ steps.meta.outputs.labels }}
60
- cache-from: type=gha
61
- cache-to: type=gha,mode=max
62
- build-args: |
63
- VERSION=${{ github.ref_name }}
64
- BUILD_DATE=${{ github.event.head_commit.timestamp }}
65
- COMMIT_SHA=${{ github.sha }}
1
+ name: Build and Push Docker Image on github container registry
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+ workflow_dispatch:
8
+ inputs:
9
+ test_tag:
10
+ description: 'Test tag name (e.g., v0.1.1-test)'
11
+ required: false
12
+ default: 'v0.1.1-test'
13
+
14
+ env:
15
+ REGISTRY: ghcr.io
16
+ IMAGE_NAME: ${{ github.repository_owner }}/insforge-oss
17
+
18
+ jobs:
19
+ build-and-push:
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: read
23
+ packages: write
24
+ id-token: write
25
+
26
+ steps:
27
+ - name: Checkout repository
28
+ uses: actions/checkout@v4
29
+
30
+ - name: Set up QEMU
31
+ uses: docker/setup-qemu-action@v3
32
+
33
+ - name: Set up Docker Buildx
34
+ uses: docker/setup-buildx-action@v3
35
+
36
+ - name: Log in to GitHub Container Registry
37
+ uses: docker/login-action@v3
38
+ with:
39
+ registry: ${{ env.REGISTRY }}
40
+ username: ${{ github.actor }}
41
+ password: ${{ secrets.GHCR_PAT }}
42
+
43
+ - name: Extract metadata
44
+ id: meta
45
+ uses: docker/metadata-action@v5
46
+ with:
47
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
48
+ tags: |
49
+ type=ref,event=tag
50
+ type=raw,value=${{ github.event.inputs.test_tag }},enable=${{ github.event_name == 'workflow_dispatch' }}
51
+
52
+ - name: Build and push Docker image
53
+ uses: docker/build-push-action@v5
54
+ with:
55
+ context: .
56
+ platforms: linux/amd64,linux/arm64
57
+ push: true
58
+ tags: ${{ steps.meta.outputs.tags }}
59
+ labels: ${{ steps.meta.outputs.labels }}
60
+ cache-from: type=gha
61
+ cache-to: type=gha,mode=max
62
+ build-args: |
63
+ VERSION=${{ github.ref_name }}
64
+ BUILD_DATE=${{ github.event.head_commit.timestamp }}
65
+ COMMIT_SHA=${{ github.sha }}
66
66
  VITE_PUBLIC_POSTHOG_KEY=${{ secrets.POSTHOG_KEY }}
@@ -1,24 +1,24 @@
1
- name: CI Pre-merge Check
2
-
3
- on:
4
- pull_request:
5
- branches: [ main, master, develop ]
6
- push:
7
- branches: [ main, master, develop ]
8
- workflow_dispatch: # Allows manual triggering for testing
9
-
10
- jobs:
11
- docker-build:
12
- name: CI Pre-merge Check
13
- runs-on: ubuntu-latest
14
-
15
- steps:
16
- - name: Checkout code
17
- uses: actions/checkout@v4
18
-
19
- - name: Build Docker image
20
- uses: docker/build-push-action@v5
21
- with:
22
- context: .
23
- push: false
1
+ name: CI Pre-merge Check
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [ main, master, develop ]
6
+ push:
7
+ branches: [ main, master, develop ]
8
+ workflow_dispatch: # Allows manual triggering for testing
9
+
10
+ jobs:
11
+ docker-build:
12
+ name: CI Pre-merge Check
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - name: Checkout code
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Build Docker image
20
+ uses: docker/build-push-action@v5
21
+ with:
22
+ context: .
23
+ push: false
24
24
  tags: insforge:test
@@ -1,63 +1,63 @@
1
- name: E2E Tests
2
-
3
- on:
4
- pull_request:
5
- branches: [main, master, develop]
6
- workflow_dispatch:
7
-
8
- jobs:
9
- e2e:
10
- name: E2E Tests
11
- runs-on: ubuntu-latest
12
-
13
- steps:
14
- - name: Checkout code
15
- uses: actions/checkout@v4
16
-
17
- - name: Create .env file
18
- run: |
19
- cat > .env << EOF
20
- POSTGRES_USER=postgres
21
- POSTGRES_PASSWORD=postgres
22
- POSTGRES_DB=insforge
23
- JWT_SECRET=test-secret-key-for-ci-cd-pipeline
24
- ADMIN_EMAIL=admin@example.com
25
- ADMIN_PASSWORD=test-admin-password-for-ci
26
- TEST_API_BASE=http://localhost:7130/api
27
- EOF
28
-
29
- - name: Start Docker Compose services
30
- run: docker compose up -d
31
-
32
- - name: Wait for PostgreSQL to be ready
33
- run: |
34
- echo "Waiting for PostgreSQL..."
35
- timeout 60 bash -c 'until docker compose exec -T postgres pg_isready -U postgres; do sleep 2; done'
36
-
37
- - name: Wait for InsForge backend to be ready
38
- run: |
39
- echo "Waiting for InsForge backend..."
40
- timeout 120 bash -c 'until curl -f http://localhost:7130/api/health 2>/dev/null; do echo "Waiting..."; sleep 5; done'
41
- echo "Backend is ready!"
42
-
43
- - name: Install test dependencies in container
44
- run: docker compose exec -T insforge apk add --no-cache bash curl jq
45
-
46
- - name: Run E2E tests
47
- run: docker compose exec -T insforge npm run test:e2e
48
-
49
- - name: Show container logs on failure
50
- if: failure()
51
- run: |
52
- echo "=== PostgreSQL logs ==="
53
- docker compose logs postgres
54
- echo ""
55
- echo "=== InsForge backend logs ==="
56
- docker compose logs insforge
57
- echo ""
58
- echo "=== PostgREST logs ==="
59
- docker compose logs postgrest
60
-
61
- - name: Cleanup
62
- if: always()
63
- run: docker compose down -v
1
+ name: E2E Tests
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main, master, develop]
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ e2e:
10
+ name: E2E Tests
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout code
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Create .env file
18
+ run: |
19
+ cat > .env << EOF
20
+ POSTGRES_USER=postgres
21
+ POSTGRES_PASSWORD=postgres
22
+ POSTGRES_DB=insforge
23
+ JWT_SECRET=test-secret-key-for-ci-cd-pipeline
24
+ ADMIN_EMAIL=admin@example.com
25
+ ADMIN_PASSWORD=test-admin-password-for-ci
26
+ TEST_API_BASE=http://localhost:7130/api
27
+ EOF
28
+
29
+ - name: Start Docker Compose services
30
+ run: docker compose up -d
31
+
32
+ - name: Wait for PostgreSQL to be ready
33
+ run: |
34
+ echo "Waiting for PostgreSQL..."
35
+ timeout 60 bash -c 'until docker compose exec -T postgres pg_isready -U postgres; do sleep 2; done'
36
+
37
+ - name: Wait for InsForge backend to be ready
38
+ run: |
39
+ echo "Waiting for InsForge backend..."
40
+ timeout 120 bash -c 'until curl -f http://localhost:7130/api/health 2>/dev/null; do echo "Waiting..."; sleep 5; done'
41
+ echo "Backend is ready!"
42
+
43
+ - name: Install test dependencies in container
44
+ run: docker compose exec -T insforge apk add --no-cache bash curl jq
45
+
46
+ - name: Run E2E tests
47
+ run: docker compose exec -T insforge npm run test:e2e
48
+
49
+ - name: Show container logs on failure
50
+ if: failure()
51
+ run: |
52
+ echo "=== PostgreSQL logs ==="
53
+ docker compose logs postgres
54
+ echo ""
55
+ echo "=== InsForge backend logs ==="
56
+ docker compose logs insforge
57
+ echo ""
58
+ echo "=== PostgREST logs ==="
59
+ docker compose logs postgrest
60
+
61
+ - name: Cleanup
62
+ if: always()
63
+ run: docker compose down -v
@@ -1,33 +1,33 @@
1
- name: Lint and Format Check
2
-
3
- on:
4
- push:
5
- branches: [ main ]
6
- pull_request:
7
- branches: [ '*' ]
8
-
9
- jobs:
10
- lint-and-format:
11
- runs-on: ubuntu-latest
12
-
13
- steps:
14
- - name: Checkout repository
15
- uses: actions/checkout@v4
16
-
17
- - name: Setup Node.js
18
- uses: actions/setup-node@v4
19
- with:
20
- node-version: '20'
21
- cache: 'npm'
22
-
23
- - name: Install dependencies
24
- run: npm ci
25
-
26
- - name: Run ESLint
27
- run: npm run lint
28
-
29
- - name: Check Prettier formatting
30
- run: npx prettier --check .
31
-
32
- - name: Run TypeScript type checking
1
+ name: Lint and Format Check
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ '*' ]
8
+
9
+ jobs:
10
+ lint-and-format:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout repository
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Setup Node.js
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: '20'
21
+ cache: 'npm'
22
+
23
+ - name: Install dependencies
24
+ run: npm ci
25
+
26
+ - name: Run ESLint
27
+ run: npm run lint
28
+
29
+ - name: Check Prettier formatting
30
+ run: npx prettier --check .
31
+
32
+ - name: Run TypeScript type checking
33
33
  run: npm run typecheck