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,243 +1,243 @@
1
- ---
2
- title: Architecture
3
- description: Enterprise-grade storage system powered by AWS S3
4
- ---
5
-
6
- ## Overview
7
-
8
- InsForge provides a high-performance, scalable storage system built on AWS S3, delivering enterprise-grade reliability with 99.999999999% (11 9's) durability.
9
-
10
- ## Technology Stack
11
-
12
- ```mermaid
13
- graph TB
14
- Client[Client Application] --> SDK[InsForge SDK]
15
- SDK --> StorageAPI[Storage API]
16
-
17
- StorageAPI --> S3[AWS S3]
18
-
19
- StorageAPI --> DB[(PostgreSQL)]
20
- DB --> Metadata[File Metadata]
21
- DB --> Buckets[Bucket Configuration]
22
-
23
- S3 --> DirectUpload[Presigned URLs]
24
- S3 --> SecureAccess[IAM Policies]
25
-
26
- style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
27
- style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
28
- style StorageAPI fill:#166534,stroke:#22c55e,color:#dcfce7
29
- style S3 fill:#ea580c,stroke:#f97316,color:#fed7aa
30
- style DB fill:#0e7490,stroke:#06b6d4,color:#cffafe
31
- style Metadata fill:#0e7490,stroke:#22d3ee,color:#cffafe
32
- style Buckets fill:#0e7490,stroke:#22d3ee,color:#cffafe
33
- style DirectUpload fill:#ea580c,stroke:#fb923c,color:#fed7aa
34
- style SecureAccess fill:#ea580c,stroke:#fb923c,color:#fed7aa
35
- ```
36
-
37
- ## Core Components
38
-
39
- | Component | Technology | Purpose |
40
- |-----------|------------|---------|
41
- | **Storage Backend** | AWS S3 | Enterprise-grade object storage |
42
- | **Metadata Store** | PostgreSQL | File metadata, bucket configuration |
43
- | **Upload Handler** | Multer | Multipart form data parsing (both backends) |
44
- | **URL Strategy** | Presigned URLs | Secure direct uploads/downloads (S3 only) |
45
- | **Access Control** | JWT + Bucket visibility | Public/private bucket permissions |
46
-
47
- ## AWS S3 Architecture
48
-
49
- ### Enterprise Features
50
-
51
- - **Direct Uploads**: Presigned URLs bypass API server for unlimited scale
52
- - **IAM Security**: Role-based authentication without credential management
53
- - **Multi-Tenancy**: Secure isolation between projects using app key prefix
54
- - **Bucket Policies**: Public and private bucket configurations
55
- - **Automatic Cleanup**: Configurable lifecycle policies
56
- - **Metadata Tracking**: Rich file metadata stored in PostgreSQL
57
-
58
- ## Upload Strategies
59
-
60
- ### Direct Upload to S3
61
-
62
- ```mermaid
63
- sequenceDiagram
64
- participant Client
65
- participant API
66
- participant S3
67
- participant DB
68
-
69
- Client->>API: POST/PUT with multipart/form-data
70
- API->>S3: Upload file
71
- S3-->>API: Success
72
- API->>DB: Store metadata
73
- API-->>Client: {url, key, size}
74
- ```
75
-
76
- ### Presigned URL Upload (Recommended)
77
-
78
- ```mermaid
79
- sequenceDiagram
80
- participant Client
81
- participant API
82
- participant S3
83
- participant DB
84
-
85
- Client->>API: GET upload strategy
86
- API->>S3: Generate presigned URL
87
- S3-->>API: Presigned URL
88
- API-->>Client: {uploadUrl, key}
89
- Client->>S3: Direct upload
90
- Client->>API: Confirm upload
91
- API->>DB: Store metadata
92
- API-->>Client: {url, key, size}
93
- ```
94
-
95
- ## Bucket Configuration
96
-
97
- ### Bucket Types
98
-
99
- | Type | Access | Use Case |
100
- |------|--------|----------|
101
- | **Public** | No auth required for downloads | Public assets, images, static files |
102
- | **Private** | Auth required for all operations | User files, sensitive documents |
103
-
104
-
105
- ## File Operations
106
-
107
- ### Upload Flow
108
-
109
- 1. **Request Upload**: Client requests upload permission
110
- 2. **Validation**: Check auth, bucket permissions, file size
111
- 3. **Strategy Selection**: Choose direct or presigned upload
112
- 4. **Upload**: Client uploads via selected method
113
- 5. **Confirmation**: Verify upload and store metadata
114
- 6. **Response**: Return file URL and metadata
115
-
116
- ### Download Flow
117
-
118
- 1. **Request File**: Client requests file access
119
- 2. **Permission Check**: Verify bucket/object permissions
120
- 3. **Strategy Selection**: Direct serve or presigned URL
121
- 4. **Delivery**: Stream file or redirect to URL
122
-
123
- ## Security Features
124
-
125
- <CardGroup cols={2}>
126
- <Card title="Bucket Policies" icon="shield">
127
- Public, private, or protected bucket access control
128
- </Card>
129
-
130
- <Card title="JWT Authentication" icon="key">
131
- Token-based access for private resources
132
- </Card>
133
-
134
- <Card title="Presigned URLs" icon="link">
135
- Time-limited URLs for secure S3 access
136
- </Card>
137
-
138
- <Card title="MIME Type Validation" icon="file-check">
139
- Restrict uploads to allowed file types
140
- </Card>
141
-
142
- <Card title="Size Limits" icon="weight">
143
- 10MB default, configurable via MAX_FILE_SIZE
144
- </Card>
145
-
146
- <Card title="App Key Isolation" icon="key">
147
- Multi-tenant isolation using app key prefix in S3
148
- </Card>
149
- </CardGroup>
150
-
151
- ## Intelligent Metadata Management
152
-
153
- InsForge maintains optimized metadata in PostgreSQL for instant queries:
154
-
155
- - **Fast Search**: Indexed metadata for sub-millisecond lookups
156
- - **Rich Metadata**: MIME types, sizes, timestamps, custom tags
157
- - **Usage Analytics**: Track downloads, bandwidth, popular files
158
- - **Access Control**: Fine-grained permissions per file or bucket
159
-
160
- ### Secure URL Generation
161
-
162
- | Type | Use Case | Security |
163
- |------|----------|----------|
164
- | **Public Access** | Static assets, images | Direct S3 URLs |
165
- | **Presigned GET** | Private file access | Time-limited, single-use |
166
- | **Presigned POST** | Direct uploads | Validated, size-limited |
167
-
168
- ## Performance Optimizations
169
-
170
- ### Performance Features
171
-
172
- - **Direct S3 Access**: Bypass API server for uploads/downloads
173
- - **Browser Caching**: Cache-Control headers
174
- - **ETag Support**: Conditional requests for S3
175
- - **Parallel Uploads**: Support for multipart uploads
176
-
177
- ### Upload Methods
178
-
179
- **1. Direct Upload through API Server:**
180
- - Client sends file to `/api/storage/buckets/{bucket}/objects`
181
- - File passes through API server memory
182
- - Server uploads to S3
183
- - Limited by server memory (10MB default)
184
-
185
- **2. Presigned URL Upload (Recommended):**
186
- - Client requests upload URL from `/api/storage/buckets/{bucket}/upload-strategy`
187
- - Server returns presigned POST URL
188
- - Client uploads directly to S3 (bypasses API server)
189
- - No server memory constraints
190
- - Client confirms upload via `/api/storage/buckets/{bucket}/objects/{key}/confirm-upload`
191
-
192
- ## Configuration
193
-
194
- ### Environment Variables
195
-
196
- | Variable | Description | Example |
197
- |----------|-------------|---------|
198
- | `AWS_S3_BUCKET` | S3 bucket name | `my-app-storage` |
199
- | `AWS_REGION` | AWS region | `us-east-2` |
200
- | `APP_KEY` | App key for S3 multi-tenancy | `my-app-key` |
201
-
202
- ### S3 Configuration
203
-
204
- ```javascript
205
- // S3 client configuration
206
- const s3Client = new S3Client({
207
- region: this.region, // e.g., 'us-east-2'
208
- // IAM role credentials are automatically used on EC2
209
- // No explicit credentials needed in production
210
- });
211
-
212
- // File paths use app key prefix for multi-tenancy
213
- const s3Key = `${this.appKey}/${bucket}/${key}`;
214
- ```
215
-
216
- ## Best Practices
217
-
218
- <CardGroup cols={2}>
219
- <Card title="Use Buckets" icon="folder">
220
- Organize files logically in buckets
221
- </Card>
222
-
223
- <Card title="Set Limits" icon="gauge">
224
- Configure appropriate size/type limits
225
- </Card>
226
-
227
- <Card title="Clean URLs" icon="link">
228
- Use consistent, SEO-friendly key naming
229
- </Card>
230
-
231
- <Card title="Metadata" icon="tags">
232
- Store searchable metadata in database
233
- </Card>
234
-
235
- <Card title="Backup Strategy" icon="cloud-arrow-up">
236
- Implement regular backups for production
237
- </Card>
238
-
239
- <Card title="Monitor Usage" icon="chart-line">
240
- Track storage costs and usage patterns
241
- </Card>
242
- </CardGroup>
243
-
1
+ ---
2
+ title: Architecture
3
+ description: Enterprise-grade storage system powered by AWS S3
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ InsForge provides a high-performance, scalable storage system built on AWS S3, delivering enterprise-grade reliability with 99.999999999% (11 9's) durability.
9
+
10
+ ## Technology Stack
11
+
12
+ ```mermaid
13
+ graph TB
14
+ Client[Client Application] --> SDK[InsForge SDK]
15
+ SDK --> StorageAPI[Storage API]
16
+
17
+ StorageAPI --> S3[AWS S3]
18
+
19
+ StorageAPI --> DB[(PostgreSQL)]
20
+ DB --> Metadata[File Metadata]
21
+ DB --> Buckets[Bucket Configuration]
22
+
23
+ S3 --> DirectUpload[Presigned URLs]
24
+ S3 --> SecureAccess[IAM Policies]
25
+
26
+ style Client fill:#1e293b,stroke:#475569,color:#e2e8f0
27
+ style SDK fill:#1e40af,stroke:#3b82f6,color:#dbeafe
28
+ style StorageAPI fill:#166534,stroke:#22c55e,color:#dcfce7
29
+ style S3 fill:#ea580c,stroke:#f97316,color:#fed7aa
30
+ style DB fill:#0e7490,stroke:#06b6d4,color:#cffafe
31
+ style Metadata fill:#0e7490,stroke:#22d3ee,color:#cffafe
32
+ style Buckets fill:#0e7490,stroke:#22d3ee,color:#cffafe
33
+ style DirectUpload fill:#ea580c,stroke:#fb923c,color:#fed7aa
34
+ style SecureAccess fill:#ea580c,stroke:#fb923c,color:#fed7aa
35
+ ```
36
+
37
+ ## Core Components
38
+
39
+ | Component | Technology | Purpose |
40
+ |-----------|------------|---------|
41
+ | **Storage Backend** | AWS S3 | Enterprise-grade object storage |
42
+ | **Metadata Store** | PostgreSQL | File metadata, bucket configuration |
43
+ | **Upload Handler** | Multer | Multipart form data parsing (both backends) |
44
+ | **URL Strategy** | Presigned URLs | Secure direct uploads/downloads (S3 only) |
45
+ | **Access Control** | JWT + Bucket visibility | Public/private bucket permissions |
46
+
47
+ ## AWS S3 Architecture
48
+
49
+ ### Enterprise Features
50
+
51
+ - **Direct Uploads**: Presigned URLs bypass API server for unlimited scale
52
+ - **IAM Security**: Role-based authentication without credential management
53
+ - **Multi-Tenancy**: Secure isolation between projects using app key prefix
54
+ - **Bucket Policies**: Public and private bucket configurations
55
+ - **Automatic Cleanup**: Configurable lifecycle policies
56
+ - **Metadata Tracking**: Rich file metadata stored in PostgreSQL
57
+
58
+ ## Upload Strategies
59
+
60
+ ### Direct Upload to S3
61
+
62
+ ```mermaid
63
+ sequenceDiagram
64
+ participant Client
65
+ participant API
66
+ participant S3
67
+ participant DB
68
+
69
+ Client->>API: POST/PUT with multipart/form-data
70
+ API->>S3: Upload file
71
+ S3-->>API: Success
72
+ API->>DB: Store metadata
73
+ API-->>Client: {url, key, size}
74
+ ```
75
+
76
+ ### Presigned URL Upload (Recommended)
77
+
78
+ ```mermaid
79
+ sequenceDiagram
80
+ participant Client
81
+ participant API
82
+ participant S3
83
+ participant DB
84
+
85
+ Client->>API: GET upload strategy
86
+ API->>S3: Generate presigned URL
87
+ S3-->>API: Presigned URL
88
+ API-->>Client: {uploadUrl, key}
89
+ Client->>S3: Direct upload
90
+ Client->>API: Confirm upload
91
+ API->>DB: Store metadata
92
+ API-->>Client: {url, key, size}
93
+ ```
94
+
95
+ ## Bucket Configuration
96
+
97
+ ### Bucket Types
98
+
99
+ | Type | Access | Use Case |
100
+ |------|--------|----------|
101
+ | **Public** | No auth required for downloads | Public assets, images, static files |
102
+ | **Private** | Auth required for all operations | User files, sensitive documents |
103
+
104
+
105
+ ## File Operations
106
+
107
+ ### Upload Flow
108
+
109
+ 1. **Request Upload**: Client requests upload permission
110
+ 2. **Validation**: Check auth, bucket permissions, file size
111
+ 3. **Strategy Selection**: Choose direct or presigned upload
112
+ 4. **Upload**: Client uploads via selected method
113
+ 5. **Confirmation**: Verify upload and store metadata
114
+ 6. **Response**: Return file URL and metadata
115
+
116
+ ### Download Flow
117
+
118
+ 1. **Request File**: Client requests file access
119
+ 2. **Permission Check**: Verify bucket/object permissions
120
+ 3. **Strategy Selection**: Direct serve or presigned URL
121
+ 4. **Delivery**: Stream file or redirect to URL
122
+
123
+ ## Security Features
124
+
125
+ <CardGroup cols={2}>
126
+ <Card title="Bucket Policies" icon="shield">
127
+ Public, private, or protected bucket access control
128
+ </Card>
129
+
130
+ <Card title="JWT Authentication" icon="key">
131
+ Token-based access for private resources
132
+ </Card>
133
+
134
+ <Card title="Presigned URLs" icon="link">
135
+ Time-limited URLs for secure S3 access
136
+ </Card>
137
+
138
+ <Card title="MIME Type Validation" icon="file-check">
139
+ Restrict uploads to allowed file types
140
+ </Card>
141
+
142
+ <Card title="Size Limits" icon="weight">
143
+ 10MB default, configurable via MAX_FILE_SIZE
144
+ </Card>
145
+
146
+ <Card title="App Key Isolation" icon="key">
147
+ Multi-tenant isolation using app key prefix in S3
148
+ </Card>
149
+ </CardGroup>
150
+
151
+ ## Intelligent Metadata Management
152
+
153
+ InsForge maintains optimized metadata in PostgreSQL for instant queries:
154
+
155
+ - **Fast Search**: Indexed metadata for sub-millisecond lookups
156
+ - **Rich Metadata**: MIME types, sizes, timestamps, custom tags
157
+ - **Usage Analytics**: Track downloads, bandwidth, popular files
158
+ - **Access Control**: Fine-grained permissions per file or bucket
159
+
160
+ ### Secure URL Generation
161
+
162
+ | Type | Use Case | Security |
163
+ |------|----------|----------|
164
+ | **Public Access** | Static assets, images | Direct S3 URLs |
165
+ | **Presigned GET** | Private file access | Time-limited, single-use |
166
+ | **Presigned POST** | Direct uploads | Validated, size-limited |
167
+
168
+ ## Performance Optimizations
169
+
170
+ ### Performance Features
171
+
172
+ - **Direct S3 Access**: Bypass API server for uploads/downloads
173
+ - **Browser Caching**: Cache-Control headers
174
+ - **ETag Support**: Conditional requests for S3
175
+ - **Parallel Uploads**: Support for multipart uploads
176
+
177
+ ### Upload Methods
178
+
179
+ **1. Direct Upload through API Server:**
180
+ - Client sends file to `/api/storage/buckets/{bucket}/objects`
181
+ - File passes through API server memory
182
+ - Server uploads to S3
183
+ - Limited by server memory (10MB default)
184
+
185
+ **2. Presigned URL Upload (Recommended):**
186
+ - Client requests upload URL from `/api/storage/buckets/{bucket}/upload-strategy`
187
+ - Server returns presigned POST URL
188
+ - Client uploads directly to S3 (bypasses API server)
189
+ - No server memory constraints
190
+ - Client confirms upload via `/api/storage/buckets/{bucket}/objects/{key}/confirm-upload`
191
+
192
+ ## Configuration
193
+
194
+ ### Environment Variables
195
+
196
+ | Variable | Description | Example |
197
+ |----------|-------------|---------|
198
+ | `AWS_S3_BUCKET` | S3 bucket name | `my-app-storage` |
199
+ | `AWS_REGION` | AWS region | `us-east-2` |
200
+ | `APP_KEY` | App key for S3 multi-tenancy | `my-app-key` |
201
+
202
+ ### S3 Configuration
203
+
204
+ ```javascript
205
+ // S3 client configuration
206
+ const s3Client = new S3Client({
207
+ region: this.region, // e.g., 'us-east-2'
208
+ // IAM role credentials are automatically used on EC2
209
+ // No explicit credentials needed in production
210
+ });
211
+
212
+ // File paths use app key prefix for multi-tenancy
213
+ const s3Key = `${this.appKey}/${bucket}/${key}`;
214
+ ```
215
+
216
+ ## Best Practices
217
+
218
+ <CardGroup cols={2}>
219
+ <Card title="Use Buckets" icon="folder">
220
+ Organize files logically in buckets
221
+ </Card>
222
+
223
+ <Card title="Set Limits" icon="gauge">
224
+ Configure appropriate size/type limits
225
+ </Card>
226
+
227
+ <Card title="Clean URLs" icon="link">
228
+ Use consistent, SEO-friendly key naming
229
+ </Card>
230
+
231
+ <Card title="Metadata" icon="tags">
232
+ Store searchable metadata in database
233
+ </Card>
234
+
235
+ <Card title="Backup Strategy" icon="cloud-arrow-up">
236
+ Implement regular backups for production
237
+ </Card>
238
+
239
+ <Card title="Monitor Usage" icon="chart-line">
240
+ Track storage costs and usage patterns
241
+ </Card>
242
+ </CardGroup>
243
+