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,371 +1,371 @@
1
- openapi: 3.0.3
2
- info:
3
- title: Insforge Secrets API
4
- version: 1.0.0
5
- description: Secure secrets management for storing API keys, tokens, and sensitive configuration
6
-
7
- paths:
8
- /api/secrets:
9
- get:
10
- summary: List all secrets
11
- description: Returns metadata for all secrets (without values)
12
- tags:
13
- - Admin
14
- security:
15
- - bearerAuth: []
16
- responses:
17
- '200':
18
- description: List of secret metadata
19
- content:
20
- application/json:
21
- schema:
22
- type: object
23
- properties:
24
- secrets:
25
- type: array
26
- items:
27
- $ref: '#/components/schemas/SecretMetadata'
28
- example:
29
- secrets:
30
- - id: "123e4567-e89b-12d3-a456-426614174000"
31
- key: "STRIPE_API_KEY"
32
- isActive: true
33
- isReserved: false
34
- createdAt: "2024-01-21T10:30:00Z"
35
- updatedAt: "2024-01-21T10:30:00Z"
36
- expiresAt: null
37
- - id: "223e4567-e89b-12d3-a456-426614174001"
38
- key: "OPENAI_API_KEY"
39
- isActive: true
40
- isReserved: true
41
- createdAt: "2024-01-20T09:15:00Z"
42
- updatedAt: "2024-01-20T09:15:00Z"
43
- expiresAt: "2025-01-20T09:15:00Z"
44
- '401':
45
- description: Unauthorized
46
- '403':
47
- description: Forbidden - Admin only
48
-
49
- post:
50
- summary: Create a new secret
51
- description: Create a new encrypted secret with a unique key
52
- tags:
53
- - Admin
54
- security:
55
- - bearerAuth: []
56
- requestBody:
57
- required: true
58
- content:
59
- application/json:
60
- schema:
61
- type: object
62
- required:
63
- - key
64
- - value
65
- properties:
66
- key:
67
- type: string
68
- pattern: '^[A-Z0-9_]+$'
69
- description: Unique key identifier (uppercase letters, numbers, underscores only)
70
- example: "STRIPE_API_KEY"
71
- value:
72
- type: string
73
- description: Secret value to be encrypted
74
- example: "sk_live_..."
75
- isReserved:
76
- type: boolean
77
- default: false
78
- description: Whether the secret is protected from deletion
79
- expiresAt:
80
- type: string
81
- format: date-time
82
- nullable: true
83
- description: Optional expiration date for the secret
84
- responses:
85
- '201':
86
- description: Secret created successfully
87
- content:
88
- application/json:
89
- schema:
90
- type: object
91
- properties:
92
- success:
93
- type: boolean
94
- message:
95
- type: string
96
- id:
97
- type: string
98
- format: uuid
99
- example:
100
- success: true
101
- message: "Secret STRIPE_API_KEY has been created successfully"
102
- id: "123e4567-e89b-12d3-a456-426614174000"
103
- '400':
104
- description: Invalid input
105
- content:
106
- application/json:
107
- schema:
108
- $ref: '#/components/schemas/ErrorResponse'
109
- examples:
110
- missingFields:
111
- value:
112
- error: "INVALID_INPUT"
113
- message: "Both key and value are required"
114
- statusCode: 400
115
- invalidKeyFormat:
116
- value:
117
- error: "INVALID_INPUT"
118
- message: "Invalid key format. Use uppercase letters, numbers, and underscores only (e.g., STRIPE_API_KEY)"
119
- statusCode: 400
120
- '409':
121
- description: Secret already exists
122
- content:
123
- application/json:
124
- schema:
125
- $ref: '#/components/schemas/ErrorResponse'
126
- example:
127
- error: "INVALID_INPUT"
128
- message: "Secret already exists: STRIPE_API_KEY"
129
- statusCode: 409
130
-
131
- /api/secrets/{key}:
132
- get:
133
- summary: Get secret value
134
- description: Retrieve the decrypted value of a specific secret by its key
135
- tags:
136
- - Admin
137
- security:
138
- - bearerAuth: []
139
- parameters:
140
- - name: key
141
- in: path
142
- required: true
143
- schema:
144
- type: string
145
- pattern: '^[A-Z0-9_]+$'
146
- description: Secret key identifier
147
- example: "STRIPE_API_KEY"
148
- responses:
149
- '200':
150
- description: Secret value retrieved
151
- content:
152
- application/json:
153
- schema:
154
- type: object
155
- properties:
156
- key:
157
- type: string
158
- value:
159
- type: string
160
- example:
161
- key: "STRIPE_API_KEY"
162
- value: "sk_live_..."
163
- '404':
164
- description: Secret not found
165
- content:
166
- application/json:
167
- schema:
168
- $ref: '#/components/schemas/ErrorResponse'
169
- example:
170
- error: "NOT_FOUND"
171
- message: "Secret not found: INVALID_KEY"
172
- statusCode: 404
173
- '401':
174
- description: Unauthorized
175
- '403':
176
- description: Forbidden - Admin only
177
-
178
- put:
179
- summary: Update secret
180
- description: Update an existing secret's value or metadata
181
- tags:
182
- - Admin
183
- security:
184
- - bearerAuth: []
185
- parameters:
186
- - name: key
187
- in: path
188
- required: true
189
- schema:
190
- type: string
191
- pattern: '^[A-Z0-9_]+$'
192
- description: Secret key identifier
193
- example: "STRIPE_API_KEY"
194
- requestBody:
195
- required: true
196
- content:
197
- application/json:
198
- schema:
199
- type: object
200
- properties:
201
- value:
202
- type: string
203
- description: New secret value (will be encrypted)
204
- isActive:
205
- type: boolean
206
- description: Whether the secret is active
207
- isReserved:
208
- type: boolean
209
- description: Whether the secret is protected from deletion
210
- expiresAt:
211
- type: string
212
- format: date-time
213
- nullable: true
214
- description: Expiration date (null to remove expiration)
215
- responses:
216
- '200':
217
- description: Secret updated successfully
218
- content:
219
- application/json:
220
- schema:
221
- type: object
222
- properties:
223
- success:
224
- type: boolean
225
- message:
226
- type: string
227
- example:
228
- success: true
229
- message: "Secret STRIPE_API_KEY has been updated successfully"
230
- '404':
231
- description: Secret not found
232
- content:
233
- application/json:
234
- schema:
235
- $ref: '#/components/schemas/ErrorResponse'
236
- example:
237
- error: "NOT_FOUND"
238
- message: "Secret not found: INVALID_KEY"
239
- statusCode: 404
240
- '500':
241
- description: Failed to update secret
242
- content:
243
- application/json:
244
- schema:
245
- $ref: '#/components/schemas/ErrorResponse'
246
- example:
247
- error: "INTERNAL_ERROR"
248
- message: "Failed to update secret: STRIPE_API_KEY"
249
- statusCode: 500
250
-
251
- delete:
252
- summary: Delete secret
253
- description: Mark a secret as inactive (soft delete). Cannot delete reserved secrets.
254
- tags:
255
- - Admin
256
- security:
257
- - bearerAuth: []
258
- parameters:
259
- - name: key
260
- in: path
261
- required: true
262
- schema:
263
- type: string
264
- pattern: '^[A-Z0-9_]+$'
265
- description: Secret key identifier
266
- example: "STRIPE_API_KEY"
267
- responses:
268
- '200':
269
- description: Secret deleted successfully
270
- content:
271
- application/json:
272
- schema:
273
- type: object
274
- properties:
275
- success:
276
- type: boolean
277
- message:
278
- type: string
279
- example:
280
- success: true
281
- message: "Secret STRIPE_API_KEY has been deleted successfully"
282
- '403':
283
- description: Cannot delete reserved secret
284
- content:
285
- application/json:
286
- schema:
287
- $ref: '#/components/schemas/ErrorResponse'
288
- example:
289
- error: "FORBIDDEN"
290
- message: "Cannot delete reserved secret: OPENAI_API_KEY"
291
- statusCode: 403
292
- '404':
293
- description: Secret not found
294
- content:
295
- application/json:
296
- schema:
297
- $ref: '#/components/schemas/ErrorResponse'
298
- example:
299
- error: "NOT_FOUND"
300
- message: "Secret not found: INVALID_KEY"
301
- statusCode: 404
302
-
303
- components:
304
- securitySchemes:
305
- bearerAuth:
306
- type: http
307
- scheme: bearer
308
- bearerFormat: JWT
309
-
310
- schemas:
311
- SecretMetadata:
312
- type: object
313
- properties:
314
- id:
315
- type: string
316
- format: uuid
317
- description: Unique identifier for the secret
318
- key:
319
- type: string
320
- description: Unique key identifier (uppercase with underscores)
321
- example: "STRIPE_API_KEY"
322
- isActive:
323
- type: boolean
324
- description: Whether the secret is currently active
325
- isReserved:
326
- type: boolean
327
- description: Whether the secret is protected from deletion
328
- createdAt:
329
- type: string
330
- format: date-time
331
- description: When the secret was created
332
- updatedAt:
333
- type: string
334
- format: date-time
335
- description: When the secret was last updated
336
- expiresAt:
337
- type: string
338
- format: date-time
339
- nullable: true
340
- description: When the secret expires (null if no expiration)
341
- required:
342
- - id
343
- - key
344
- - isActive
345
- - isReserved
346
- - createdAt
347
- - updatedAt
348
-
349
- ErrorResponse:
350
- type: object
351
- required:
352
- - error
353
- - message
354
- - statusCode
355
- properties:
356
- error:
357
- type: string
358
- description: Error code for programmatic handling
359
- example: "INVALID_INPUT"
360
- message:
361
- type: string
362
- description: Human-readable error message
363
- example: "Invalid input data"
364
- statusCode:
365
- type: integer
366
- description: HTTP status code
367
- example: 400
368
- nextActions:
369
- type: string
370
- description: Suggested action to resolve the error
1
+ openapi: 3.0.3
2
+ info:
3
+ title: Insforge Secrets API
4
+ version: 1.0.0
5
+ description: Secure secrets management for storing API keys, tokens, and sensitive configuration
6
+
7
+ paths:
8
+ /api/secrets:
9
+ get:
10
+ summary: List all secrets
11
+ description: Returns metadata for all secrets (without values)
12
+ tags:
13
+ - Admin
14
+ security:
15
+ - bearerAuth: []
16
+ responses:
17
+ '200':
18
+ description: List of secret metadata
19
+ content:
20
+ application/json:
21
+ schema:
22
+ type: object
23
+ properties:
24
+ secrets:
25
+ type: array
26
+ items:
27
+ $ref: '#/components/schemas/SecretMetadata'
28
+ example:
29
+ secrets:
30
+ - id: "123e4567-e89b-12d3-a456-426614174000"
31
+ key: "STRIPE_API_KEY"
32
+ isActive: true
33
+ isReserved: false
34
+ createdAt: "2024-01-21T10:30:00Z"
35
+ updatedAt: "2024-01-21T10:30:00Z"
36
+ expiresAt: null
37
+ - id: "223e4567-e89b-12d3-a456-426614174001"
38
+ key: "OPENAI_API_KEY"
39
+ isActive: true
40
+ isReserved: true
41
+ createdAt: "2024-01-20T09:15:00Z"
42
+ updatedAt: "2024-01-20T09:15:00Z"
43
+ expiresAt: "2025-01-20T09:15:00Z"
44
+ '401':
45
+ description: Unauthorized
46
+ '403':
47
+ description: Forbidden - Admin only
48
+
49
+ post:
50
+ summary: Create a new secret
51
+ description: Create a new encrypted secret with a unique key
52
+ tags:
53
+ - Admin
54
+ security:
55
+ - bearerAuth: []
56
+ requestBody:
57
+ required: true
58
+ content:
59
+ application/json:
60
+ schema:
61
+ type: object
62
+ required:
63
+ - key
64
+ - value
65
+ properties:
66
+ key:
67
+ type: string
68
+ pattern: '^[A-Z0-9_]+$'
69
+ description: Unique key identifier (uppercase letters, numbers, underscores only)
70
+ example: "STRIPE_API_KEY"
71
+ value:
72
+ type: string
73
+ description: Secret value to be encrypted
74
+ example: "sk_live_..."
75
+ isReserved:
76
+ type: boolean
77
+ default: false
78
+ description: Whether the secret is protected from deletion
79
+ expiresAt:
80
+ type: string
81
+ format: date-time
82
+ nullable: true
83
+ description: Optional expiration date for the secret
84
+ responses:
85
+ '201':
86
+ description: Secret created successfully
87
+ content:
88
+ application/json:
89
+ schema:
90
+ type: object
91
+ properties:
92
+ success:
93
+ type: boolean
94
+ message:
95
+ type: string
96
+ id:
97
+ type: string
98
+ format: uuid
99
+ example:
100
+ success: true
101
+ message: "Secret STRIPE_API_KEY has been created successfully"
102
+ id: "123e4567-e89b-12d3-a456-426614174000"
103
+ '400':
104
+ description: Invalid input
105
+ content:
106
+ application/json:
107
+ schema:
108
+ $ref: '#/components/schemas/ErrorResponse'
109
+ examples:
110
+ missingFields:
111
+ value:
112
+ error: "INVALID_INPUT"
113
+ message: "Both key and value are required"
114
+ statusCode: 400
115
+ invalidKeyFormat:
116
+ value:
117
+ error: "INVALID_INPUT"
118
+ message: "Invalid key format. Use uppercase letters, numbers, and underscores only (e.g., STRIPE_API_KEY)"
119
+ statusCode: 400
120
+ '409':
121
+ description: Secret already exists
122
+ content:
123
+ application/json:
124
+ schema:
125
+ $ref: '#/components/schemas/ErrorResponse'
126
+ example:
127
+ error: "INVALID_INPUT"
128
+ message: "Secret already exists: STRIPE_API_KEY"
129
+ statusCode: 409
130
+
131
+ /api/secrets/{key}:
132
+ get:
133
+ summary: Get secret value
134
+ description: Retrieve the decrypted value of a specific secret by its key
135
+ tags:
136
+ - Admin
137
+ security:
138
+ - bearerAuth: []
139
+ parameters:
140
+ - name: key
141
+ in: path
142
+ required: true
143
+ schema:
144
+ type: string
145
+ pattern: '^[A-Z0-9_]+$'
146
+ description: Secret key identifier
147
+ example: "STRIPE_API_KEY"
148
+ responses:
149
+ '200':
150
+ description: Secret value retrieved
151
+ content:
152
+ application/json:
153
+ schema:
154
+ type: object
155
+ properties:
156
+ key:
157
+ type: string
158
+ value:
159
+ type: string
160
+ example:
161
+ key: "STRIPE_API_KEY"
162
+ value: "sk_live_..."
163
+ '404':
164
+ description: Secret not found
165
+ content:
166
+ application/json:
167
+ schema:
168
+ $ref: '#/components/schemas/ErrorResponse'
169
+ example:
170
+ error: "NOT_FOUND"
171
+ message: "Secret not found: INVALID_KEY"
172
+ statusCode: 404
173
+ '401':
174
+ description: Unauthorized
175
+ '403':
176
+ description: Forbidden - Admin only
177
+
178
+ put:
179
+ summary: Update secret
180
+ description: Update an existing secret's value or metadata
181
+ tags:
182
+ - Admin
183
+ security:
184
+ - bearerAuth: []
185
+ parameters:
186
+ - name: key
187
+ in: path
188
+ required: true
189
+ schema:
190
+ type: string
191
+ pattern: '^[A-Z0-9_]+$'
192
+ description: Secret key identifier
193
+ example: "STRIPE_API_KEY"
194
+ requestBody:
195
+ required: true
196
+ content:
197
+ application/json:
198
+ schema:
199
+ type: object
200
+ properties:
201
+ value:
202
+ type: string
203
+ description: New secret value (will be encrypted)
204
+ isActive:
205
+ type: boolean
206
+ description: Whether the secret is active
207
+ isReserved:
208
+ type: boolean
209
+ description: Whether the secret is protected from deletion
210
+ expiresAt:
211
+ type: string
212
+ format: date-time
213
+ nullable: true
214
+ description: Expiration date (null to remove expiration)
215
+ responses:
216
+ '200':
217
+ description: Secret updated successfully
218
+ content:
219
+ application/json:
220
+ schema:
221
+ type: object
222
+ properties:
223
+ success:
224
+ type: boolean
225
+ message:
226
+ type: string
227
+ example:
228
+ success: true
229
+ message: "Secret STRIPE_API_KEY has been updated successfully"
230
+ '404':
231
+ description: Secret not found
232
+ content:
233
+ application/json:
234
+ schema:
235
+ $ref: '#/components/schemas/ErrorResponse'
236
+ example:
237
+ error: "NOT_FOUND"
238
+ message: "Secret not found: INVALID_KEY"
239
+ statusCode: 404
240
+ '500':
241
+ description: Failed to update secret
242
+ content:
243
+ application/json:
244
+ schema:
245
+ $ref: '#/components/schemas/ErrorResponse'
246
+ example:
247
+ error: "INTERNAL_ERROR"
248
+ message: "Failed to update secret: STRIPE_API_KEY"
249
+ statusCode: 500
250
+
251
+ delete:
252
+ summary: Delete secret
253
+ description: Mark a secret as inactive (soft delete). Cannot delete reserved secrets.
254
+ tags:
255
+ - Admin
256
+ security:
257
+ - bearerAuth: []
258
+ parameters:
259
+ - name: key
260
+ in: path
261
+ required: true
262
+ schema:
263
+ type: string
264
+ pattern: '^[A-Z0-9_]+$'
265
+ description: Secret key identifier
266
+ example: "STRIPE_API_KEY"
267
+ responses:
268
+ '200':
269
+ description: Secret deleted successfully
270
+ content:
271
+ application/json:
272
+ schema:
273
+ type: object
274
+ properties:
275
+ success:
276
+ type: boolean
277
+ message:
278
+ type: string
279
+ example:
280
+ success: true
281
+ message: "Secret STRIPE_API_KEY has been deleted successfully"
282
+ '403':
283
+ description: Cannot delete reserved secret
284
+ content:
285
+ application/json:
286
+ schema:
287
+ $ref: '#/components/schemas/ErrorResponse'
288
+ example:
289
+ error: "FORBIDDEN"
290
+ message: "Cannot delete reserved secret: OPENAI_API_KEY"
291
+ statusCode: 403
292
+ '404':
293
+ description: Secret not found
294
+ content:
295
+ application/json:
296
+ schema:
297
+ $ref: '#/components/schemas/ErrorResponse'
298
+ example:
299
+ error: "NOT_FOUND"
300
+ message: "Secret not found: INVALID_KEY"
301
+ statusCode: 404
302
+
303
+ components:
304
+ securitySchemes:
305
+ bearerAuth:
306
+ type: http
307
+ scheme: bearer
308
+ bearerFormat: JWT
309
+
310
+ schemas:
311
+ SecretMetadata:
312
+ type: object
313
+ properties:
314
+ id:
315
+ type: string
316
+ format: uuid
317
+ description: Unique identifier for the secret
318
+ key:
319
+ type: string
320
+ description: Unique key identifier (uppercase with underscores)
321
+ example: "STRIPE_API_KEY"
322
+ isActive:
323
+ type: boolean
324
+ description: Whether the secret is currently active
325
+ isReserved:
326
+ type: boolean
327
+ description: Whether the secret is protected from deletion
328
+ createdAt:
329
+ type: string
330
+ format: date-time
331
+ description: When the secret was created
332
+ updatedAt:
333
+ type: string
334
+ format: date-time
335
+ description: When the secret was last updated
336
+ expiresAt:
337
+ type: string
338
+ format: date-time
339
+ nullable: true
340
+ description: When the secret expires (null if no expiration)
341
+ required:
342
+ - id
343
+ - key
344
+ - isActive
345
+ - isReserved
346
+ - createdAt
347
+ - updatedAt
348
+
349
+ ErrorResponse:
350
+ type: object
351
+ required:
352
+ - error
353
+ - message
354
+ - statusCode
355
+ properties:
356
+ error:
357
+ type: string
358
+ description: Error code for programmatic handling
359
+ example: "INVALID_INPUT"
360
+ message:
361
+ type: string
362
+ description: Human-readable error message
363
+ example: "Invalid input data"
364
+ statusCode:
365
+ type: integer
366
+ description: HTTP status code
367
+ example: 400
368
+ nextActions:
369
+ type: string
370
+ description: Suggested action to resolve the error
371
371
  example: "Check the request body format"