@brainfish-ai/devdoc 0.1.42 → 0.1.44

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 (398) hide show
  1. package/dist/cli/commands/create.js +2 -2
  2. package/dist/cli/commands/dev.js +19 -10
  3. package/package.json +3 -2
  4. package/renderer/app/api/assets/[...path]/route.js +108 -0
  5. package/renderer/app/api/assets/route.js +114 -0
  6. package/renderer/app/api/assets/upload/route.js +163 -0
  7. package/renderer/app/api/auth-schemes/route.js +58 -0
  8. package/renderer/app/api/chat/route.js +759 -0
  9. package/renderer/app/api/codegen/route.js +52 -0
  10. package/renderer/app/api/collections/route.js +706 -0
  11. package/renderer/app/api/debug/route.js +47 -0
  12. package/renderer/app/api/deploy/route.js +199 -0
  13. package/renderer/app/api/device/route.js +36 -0
  14. package/renderer/app/api/docs/route.js +205 -0
  15. package/renderer/app/api/domains/add/route.js +121 -0
  16. package/renderer/app/api/domains/lookup/route.js +43 -0
  17. package/renderer/app/api/domains/remove/route.js +89 -0
  18. package/renderer/app/api/domains/status/route.js +140 -0
  19. package/renderer/app/api/domains/verify/route.js +168 -0
  20. package/renderer/app/api/keys/regenerate/route.js +71 -0
  21. package/renderer/app/api/local-assets/[...path]/route.js +108 -0
  22. package/renderer/app/api/openapi-spec/route.js +73 -0
  23. package/renderer/app/api/projects/[slug]/route.js +129 -0
  24. package/renderer/app/api/projects/[slug]/stats/route.js +80 -0
  25. package/renderer/app/api/projects/register/route.js +176 -0
  26. package/renderer/app/api/proxy/route.js +139 -0
  27. package/renderer/app/api/proxy-stream/route.js +156 -0
  28. package/renderer/app/api/redirects/route.js +35 -0
  29. package/renderer/app/api/schema/route.js +85 -0
  30. package/renderer/app/api/subdomains/check/route.js +158 -0
  31. package/renderer/app/api/suggestions/route.js +195 -0
  32. package/renderer/app/globals.css +69 -0
  33. package/renderer/app/layout.js +47 -0
  34. package/renderer/app/llms-full.txt/route.js +266 -0
  35. package/renderer/app/llms.txt/route.js +228 -0
  36. package/renderer/app/page.js +12 -0
  37. package/renderer/app/robots.txt/route.js +66 -0
  38. package/renderer/app/sitemap.xml/route.js +155 -0
  39. package/renderer/components/docs/index.js +8 -0
  40. package/renderer/components/docs/mdx/accordion.js +113 -0
  41. package/renderer/components/docs/mdx/badge.js +72 -0
  42. package/renderer/components/docs/mdx/callouts.js +137 -0
  43. package/renderer/components/docs/mdx/cards.js +175 -0
  44. package/renderer/components/docs/mdx/changelog.js +100 -0
  45. package/renderer/components/docs/mdx/code-block.js +147 -0
  46. package/renderer/components/docs/mdx/code-group.js +287 -0
  47. package/renderer/components/docs/mdx/file-embeds.js +82 -0
  48. package/renderer/components/docs/mdx/frame.js +59 -0
  49. package/renderer/components/docs/mdx/highlight.js +90 -0
  50. package/renderer/components/docs/mdx/iframe.js +69 -0
  51. package/renderer/components/docs/mdx/image.js +135 -0
  52. package/renderer/components/docs/mdx/index.js +134 -0
  53. package/renderer/components/docs/mdx/landing.js +317 -0
  54. package/renderer/components/docs/mdx/mermaid.js +212 -0
  55. package/renderer/components/docs/mdx/param-field.js +112 -0
  56. package/renderer/components/docs/mdx/steps.js +74 -0
  57. package/renderer/components/docs/mdx/tabs.js +50 -0
  58. package/renderer/components/docs/mdx-renderer.js +77 -0
  59. package/renderer/components/docs/navigation/breadcrumbs.js +64 -0
  60. package/renderer/components/docs/navigation/index.js +6 -0
  61. package/renderer/components/docs/navigation/page-nav.js +57 -0
  62. package/renderer/components/docs/navigation/sidebar.js +375 -0
  63. package/renderer/components/docs/navigation/toc.js +89 -0
  64. package/renderer/components/docs/notice.js +77 -0
  65. package/renderer/components/docs-header.js +202 -0
  66. package/renderer/components/docs-viewer/agent/agent-chat.js +1831 -0
  67. package/renderer/components/docs-viewer/agent/agent-popup-button.js +99 -0
  68. package/renderer/components/docs-viewer/agent/cards/debug-context-card.js +107 -0
  69. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.js +57 -0
  70. package/renderer/components/docs-viewer/agent/cards/index.js +45 -0
  71. package/renderer/components/docs-viewer/agent/cards/response-options-card.js +154 -0
  72. package/renderer/components/docs-viewer/agent/cards/types.js +22 -0
  73. package/renderer/components/docs-viewer/agent/chat-message.js +2 -0
  74. package/renderer/components/docs-viewer/agent/index.js +7 -0
  75. package/renderer/components/docs-viewer/agent/messages/assistant-message.js +108 -0
  76. package/renderer/components/docs-viewer/agent/messages/chat-message.js +34 -0
  77. package/renderer/components/docs-viewer/agent/messages/index.js +6 -0
  78. package/renderer/components/docs-viewer/agent/messages/tool-call-display.js +1065 -0
  79. package/renderer/components/docs-viewer/agent/messages/types.js +2 -0
  80. package/renderer/components/docs-viewer/agent/messages/typing-indicator.js +26 -0
  81. package/renderer/components/docs-viewer/agent/messages/user-message.js +37 -0
  82. package/renderer/components/docs-viewer/code-editor/{index.tsx → index.js} +1 -1
  83. package/renderer/components/docs-viewer/code-editor/notes-mode.js +1338 -0
  84. package/renderer/components/docs-viewer/content/changelog-page.js +297 -0
  85. package/renderer/components/docs-viewer/content/content-router.js +182 -0
  86. package/renderer/components/docs-viewer/content/doc-page.js +290 -0
  87. package/renderer/components/docs-viewer/content/documentation-viewer.js +14 -0
  88. package/renderer/components/docs-viewer/content/index.js +31 -0
  89. package/renderer/components/docs-viewer/content/not-found-page.js +300 -0
  90. package/renderer/components/docs-viewer/content/request-details.js +528 -0
  91. package/renderer/components/docs-viewer/content/sections/auth.js +108 -0
  92. package/renderer/components/docs-viewer/content/sections/body.js +80 -0
  93. package/renderer/components/docs-viewer/content/sections/headers.js +64 -0
  94. package/renderer/components/docs-viewer/content/sections/overview.js +56 -0
  95. package/renderer/components/docs-viewer/content/sections/parameters.js +64 -0
  96. package/renderer/components/docs-viewer/content/sections/responses.js +91 -0
  97. package/renderer/components/docs-viewer/global-auth-modal.js +427 -0
  98. package/renderer/components/docs-viewer/index.js +1448 -0
  99. package/renderer/components/docs-viewer/playground/auth-editor.js +418 -0
  100. package/renderer/components/docs-viewer/playground/body-editor.js +240 -0
  101. package/renderer/components/docs-viewer/playground/code-editor.js +135 -0
  102. package/renderer/components/docs-viewer/playground/code-snippet.js +393 -0
  103. package/renderer/components/docs-viewer/playground/graphql-playground.js +936 -0
  104. package/renderer/components/docs-viewer/playground/index.js +682 -0
  105. package/renderer/components/docs-viewer/playground/key-value-editor.js +317 -0
  106. package/renderer/components/docs-viewer/playground/method-selector.js +65 -0
  107. package/renderer/components/docs-viewer/playground/request-builder.js +181 -0
  108. package/renderer/components/docs-viewer/playground/request-tabs.js +240 -0
  109. package/renderer/components/docs-viewer/playground/response-cards/idle-card.js +42 -0
  110. package/renderer/components/docs-viewer/playground/response-cards/index.js +72 -0
  111. package/renderer/components/docs-viewer/playground/response-cards/loading-card.js +24 -0
  112. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.js +28 -0
  113. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.js +308 -0
  114. package/renderer/components/docs-viewer/playground/response-cards/types.js +9 -0
  115. package/renderer/components/docs-viewer/playground/response-viewer.js +18 -0
  116. package/renderer/components/docs-viewer/search/index.js +2 -0
  117. package/renderer/components/docs-viewer/search/search-dialog.js +367 -0
  118. package/renderer/components/docs-viewer/search/use-search.js +89 -0
  119. package/renderer/components/docs-viewer/shared/markdown-renderer.js +423 -0
  120. package/renderer/components/docs-viewer/shared/method-badge.js +23 -0
  121. package/renderer/components/docs-viewer/shared/schema-viewer.js +321 -0
  122. package/renderer/components/docs-viewer/sidebar/collection-tree.js +222 -0
  123. package/renderer/components/docs-viewer/sidebar/endpoint-options.js +512 -0
  124. package/renderer/components/docs-viewer/sidebar/index.js +196 -0
  125. package/renderer/components/docs-viewer/sidebar/right-sidebar.js +159 -0
  126. package/renderer/components/docs-viewer/sidebar/sidebar-group.js +87 -0
  127. package/renderer/components/docs-viewer/sidebar/sidebar-item.js +172 -0
  128. package/renderer/components/docs-viewer/sidebar/sidebar-section.js +31 -0
  129. package/renderer/components/theme-provider.js +10 -0
  130. package/renderer/components/theme-toggle.js +86 -0
  131. package/renderer/components/ui/badge.js +29 -0
  132. package/renderer/components/ui/button.js +40 -0
  133. package/renderer/components/ui/dialog.js +50 -0
  134. package/renderer/components/ui/dropdown-menu.js +143 -0
  135. package/renderer/components/ui/input.js +12 -0
  136. package/renderer/components/ui/label.js +13 -0
  137. package/renderer/components/ui/navigation-menu.js +83 -0
  138. package/renderer/components/ui/select.js +116 -0
  139. package/renderer/components/ui/spinner.js +92 -0
  140. package/renderer/components/ui/tabs.js +34 -0
  141. package/renderer/components/ui/tooltip.js +43 -0
  142. package/renderer/hooks/use-code-copy.js +76 -0
  143. package/renderer/hooks/use-openapi-title.js +33 -0
  144. package/renderer/hooks/use-route-state.js +159 -0
  145. package/renderer/lib/api-docs/agent/index.js +4 -0
  146. package/renderer/lib/api-docs/agent/indexer.js +254 -0
  147. package/renderer/lib/api-docs/agent/spec-summary.js +227 -0
  148. package/renderer/lib/api-docs/agent/types.js +5 -0
  149. package/renderer/lib/api-docs/agent/use-suggestions.js +97 -0
  150. package/renderer/lib/api-docs/auth/auth-context.js +157 -0
  151. package/renderer/lib/api-docs/auth/auth-storage.js +66 -0
  152. package/renderer/lib/api-docs/auth/crypto.js +64 -0
  153. package/renderer/lib/api-docs/auth/index.js +3 -0
  154. package/renderer/lib/api-docs/code-editor/db.js +145 -0
  155. package/renderer/lib/api-docs/code-editor/hooks.js +254 -0
  156. package/renderer/lib/api-docs/code-editor/{index.ts → index.js} +3 -4
  157. package/renderer/lib/api-docs/code-editor/mode-context.js +126 -0
  158. package/renderer/lib/api-docs/code-editor/types.js +53 -0
  159. package/renderer/lib/api-docs/codegen/definitions.js +258 -0
  160. package/renderer/lib/api-docs/codegen/har.js +171 -0
  161. package/renderer/lib/api-docs/codegen/index.js +118 -0
  162. package/renderer/lib/api-docs/factories.js +136 -0
  163. package/renderer/lib/api-docs/{index.ts → index.js} +5 -10
  164. package/renderer/lib/api-docs/mobile-context.js +116 -0
  165. package/renderer/lib/api-docs/navigation-context.js +62 -0
  166. package/renderer/lib/api-docs/parsers/graphql/index.js +50 -0
  167. package/renderer/lib/api-docs/parsers/graphql/parser.js +350 -0
  168. package/renderer/lib/api-docs/parsers/graphql/transformer.js +215 -0
  169. package/renderer/lib/api-docs/parsers/graphql/types.js +46 -0
  170. package/renderer/lib/api-docs/parsers/openapi/dereferencer.js +43 -0
  171. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.js +486 -0
  172. package/renderer/lib/api-docs/parsers/openapi/extractors/body.js +295 -0
  173. package/renderer/lib/api-docs/parsers/openapi/extractors/index.js +132 -0
  174. package/renderer/lib/api-docs/parsers/openapi/index.js +127 -0
  175. package/renderer/lib/api-docs/parsers/openapi/transformer.js +192 -0
  176. package/renderer/lib/api-docs/parsers/openapi/validator.js +24 -0
  177. package/renderer/lib/api-docs/playground/context.js +65 -0
  178. package/renderer/lib/api-docs/playground/navigation-context.js +74 -0
  179. package/renderer/lib/api-docs/playground/request-builder.js +163 -0
  180. package/renderer/lib/api-docs/playground/request-runner.js +224 -0
  181. package/renderer/lib/api-docs/playground/types.js +5 -0
  182. package/renderer/lib/api-docs/types.js +23 -0
  183. package/renderer/lib/api-docs/utils.js +212 -0
  184. package/renderer/lib/cache.js +157 -0
  185. package/renderer/lib/docs/config/domain-schema.js +161 -0
  186. package/renderer/lib/docs/config/environment.js +38 -0
  187. package/renderer/lib/docs/config/index.js +6 -0
  188. package/renderer/lib/docs/config/loader.js +113 -0
  189. package/renderer/lib/docs/config/schema.js +281 -0
  190. package/renderer/lib/docs/index.js +8 -0
  191. package/renderer/lib/docs/mdx/compiler.js +131 -0
  192. package/renderer/lib/docs/mdx/frontmatter.js +73 -0
  193. package/renderer/lib/docs/mdx/index.js +10 -0
  194. package/renderer/lib/docs/mdx/remark-mermaid.js +63 -0
  195. package/renderer/lib/docs/navigation/generator.js +269 -0
  196. package/renderer/lib/docs/navigation/index.js +3 -0
  197. package/renderer/lib/docs/navigation/types.js +11 -0
  198. package/renderer/lib/docs-navigation-context.js +40 -0
  199. package/renderer/lib/docs-navigation.js +140 -0
  200. package/renderer/lib/multi-tenant/context.js +80 -0
  201. package/renderer/lib/storage/blob.js +767 -0
  202. package/renderer/lib/utils/icons.js +30 -0
  203. package/renderer/lib/utils.js +5 -0
  204. package/renderer/next.config.js +62 -0
  205. package/renderer/package.json +1 -0
  206. package/renderer/tsconfig.json +23 -5
  207. package/renderer/app/api/assets/[...path]/route.ts +0 -123
  208. package/renderer/app/api/assets/route.ts +0 -124
  209. package/renderer/app/api/assets/upload/route.ts +0 -177
  210. package/renderer/app/api/auth-schemes/route.ts +0 -77
  211. package/renderer/app/api/chat/route.ts +0 -858
  212. package/renderer/app/api/codegen/route.ts +0 -72
  213. package/renderer/app/api/collections/route.ts +0 -1002
  214. package/renderer/app/api/debug/route.ts +0 -53
  215. package/renderer/app/api/deploy/route.ts +0 -234
  216. package/renderer/app/api/device/route.ts +0 -42
  217. package/renderer/app/api/docs/route.ts +0 -201
  218. package/renderer/app/api/domains/add/route.ts +0 -132
  219. package/renderer/app/api/domains/lookup/route.ts +0 -43
  220. package/renderer/app/api/domains/remove/route.ts +0 -100
  221. package/renderer/app/api/domains/status/route.ts +0 -158
  222. package/renderer/app/api/domains/verify/route.ts +0 -181
  223. package/renderer/app/api/keys/regenerate/route.ts +0 -80
  224. package/renderer/app/api/local-assets/[...path]/route.ts +0 -122
  225. package/renderer/app/api/openapi-spec/route.ts +0 -151
  226. package/renderer/app/api/projects/[slug]/route.ts +0 -153
  227. package/renderer/app/api/projects/[slug]/stats/route.ts +0 -96
  228. package/renderer/app/api/projects/register/route.ts +0 -152
  229. package/renderer/app/api/proxy/route.ts +0 -149
  230. package/renderer/app/api/proxy-stream/route.ts +0 -168
  231. package/renderer/app/api/redirects/route.ts +0 -47
  232. package/renderer/app/api/schema/route.ts +0 -73
  233. package/renderer/app/api/subdomains/check/route.ts +0 -172
  234. package/renderer/app/api/suggestions/route.ts +0 -144
  235. package/renderer/app/layout.tsx +0 -54
  236. package/renderer/app/llms-full.txt/route.ts +0 -346
  237. package/renderer/app/llms.txt/route.ts +0 -279
  238. package/renderer/app/page.tsx +0 -14
  239. package/renderer/app/robots.txt/route.ts +0 -84
  240. package/renderer/app/sitemap.xml/route.ts +0 -199
  241. package/renderer/components/docs/index.ts +0 -12
  242. package/renderer/components/docs/mdx/accordion.tsx +0 -169
  243. package/renderer/components/docs/mdx/badge.tsx +0 -132
  244. package/renderer/components/docs/mdx/callouts.tsx +0 -154
  245. package/renderer/components/docs/mdx/cards.tsx +0 -241
  246. package/renderer/components/docs/mdx/changelog.tsx +0 -120
  247. package/renderer/components/docs/mdx/code-block.tsx +0 -186
  248. package/renderer/components/docs/mdx/code-group.tsx +0 -421
  249. package/renderer/components/docs/mdx/file-embeds.tsx +0 -105
  250. package/renderer/components/docs/mdx/frame.tsx +0 -112
  251. package/renderer/components/docs/mdx/highlight.tsx +0 -151
  252. package/renderer/components/docs/mdx/iframe.tsx +0 -134
  253. package/renderer/components/docs/mdx/image.tsx +0 -235
  254. package/renderer/components/docs/mdx/index.ts +0 -237
  255. package/renderer/components/docs/mdx/landing.tsx +0 -684
  256. package/renderer/components/docs/mdx/mermaid.tsx +0 -240
  257. package/renderer/components/docs/mdx/param-field.tsx +0 -200
  258. package/renderer/components/docs/mdx/steps.tsx +0 -113
  259. package/renderer/components/docs/mdx/tabs.tsx +0 -86
  260. package/renderer/components/docs/mdx-renderer.tsx +0 -100
  261. package/renderer/components/docs/navigation/breadcrumbs.tsx +0 -76
  262. package/renderer/components/docs/navigation/index.ts +0 -8
  263. package/renderer/components/docs/navigation/page-nav.tsx +0 -64
  264. package/renderer/components/docs/navigation/sidebar.tsx +0 -515
  265. package/renderer/components/docs/navigation/toc.tsx +0 -113
  266. package/renderer/components/docs/notice.tsx +0 -105
  267. package/renderer/components/docs-header.tsx +0 -278
  268. package/renderer/components/docs-viewer/agent/agent-chat.tsx +0 -2076
  269. package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +0 -90
  270. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +0 -49
  271. package/renderer/components/docs-viewer/agent/cards/index.tsx +0 -50
  272. package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +0 -212
  273. package/renderer/components/docs-viewer/agent/cards/types.ts +0 -84
  274. package/renderer/components/docs-viewer/agent/chat-message.tsx +0 -17
  275. package/renderer/components/docs-viewer/agent/index.tsx +0 -6
  276. package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +0 -119
  277. package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +0 -46
  278. package/renderer/components/docs-viewer/agent/messages/index.ts +0 -17
  279. package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +0 -721
  280. package/renderer/components/docs-viewer/agent/messages/types.ts +0 -61
  281. package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +0 -24
  282. package/renderer/components/docs-viewer/agent/messages/user-message.tsx +0 -51
  283. package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +0 -1283
  284. package/renderer/components/docs-viewer/content/changelog-page.tsx +0 -331
  285. package/renderer/components/docs-viewer/content/doc-page.tsx +0 -367
  286. package/renderer/components/docs-viewer/content/documentation-viewer.tsx +0 -17
  287. package/renderer/components/docs-viewer/content/index.tsx +0 -29
  288. package/renderer/components/docs-viewer/content/not-found-page.tsx +0 -330
  289. package/renderer/components/docs-viewer/content/request-details.tsx +0 -330
  290. package/renderer/components/docs-viewer/content/sections/auth.tsx +0 -69
  291. package/renderer/components/docs-viewer/content/sections/body.tsx +0 -66
  292. package/renderer/components/docs-viewer/content/sections/headers.tsx +0 -43
  293. package/renderer/components/docs-viewer/content/sections/overview.tsx +0 -40
  294. package/renderer/components/docs-viewer/content/sections/parameters.tsx +0 -43
  295. package/renderer/components/docs-viewer/content/sections/responses.tsx +0 -87
  296. package/renderer/components/docs-viewer/global-auth-modal.tsx +0 -352
  297. package/renderer/components/docs-viewer/index.tsx +0 -1670
  298. package/renderer/components/docs-viewer/playground/auth-editor.tsx +0 -280
  299. package/renderer/components/docs-viewer/playground/body-editor.tsx +0 -221
  300. package/renderer/components/docs-viewer/playground/code-editor.tsx +0 -224
  301. package/renderer/components/docs-viewer/playground/code-snippet.tsx +0 -387
  302. package/renderer/components/docs-viewer/playground/graphql-playground.tsx +0 -745
  303. package/renderer/components/docs-viewer/playground/index.tsx +0 -671
  304. package/renderer/components/docs-viewer/playground/key-value-editor.tsx +0 -261
  305. package/renderer/components/docs-viewer/playground/method-selector.tsx +0 -60
  306. package/renderer/components/docs-viewer/playground/request-builder.tsx +0 -179
  307. package/renderer/components/docs-viewer/playground/request-tabs.tsx +0 -237
  308. package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +0 -21
  309. package/renderer/components/docs-viewer/playground/response-cards/index.tsx +0 -93
  310. package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +0 -16
  311. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +0 -23
  312. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +0 -268
  313. package/renderer/components/docs-viewer/playground/response-cards/types.ts +0 -82
  314. package/renderer/components/docs-viewer/playground/response-viewer.tsx +0 -43
  315. package/renderer/components/docs-viewer/search/index.ts +0 -2
  316. package/renderer/components/docs-viewer/search/search-dialog.tsx +0 -331
  317. package/renderer/components/docs-viewer/search/use-search.ts +0 -117
  318. package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +0 -431
  319. package/renderer/components/docs-viewer/shared/method-badge.tsx +0 -41
  320. package/renderer/components/docs-viewer/shared/schema-viewer.tsx +0 -349
  321. package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +0 -259
  322. package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +0 -316
  323. package/renderer/components/docs-viewer/sidebar/index.tsx +0 -282
  324. package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +0 -202
  325. package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +0 -118
  326. package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +0 -212
  327. package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +0 -38
  328. package/renderer/components/theme-provider.tsx +0 -11
  329. package/renderer/components/theme-toggle.tsx +0 -76
  330. package/renderer/components/ui/badge.tsx +0 -46
  331. package/renderer/components/ui/button.tsx +0 -59
  332. package/renderer/components/ui/dialog.tsx +0 -118
  333. package/renderer/components/ui/dropdown-menu.tsx +0 -257
  334. package/renderer/components/ui/input.tsx +0 -21
  335. package/renderer/components/ui/label.tsx +0 -24
  336. package/renderer/components/ui/navigation-menu.tsx +0 -168
  337. package/renderer/components/ui/select.tsx +0 -190
  338. package/renderer/components/ui/spinner.tsx +0 -114
  339. package/renderer/components/ui/tabs.tsx +0 -66
  340. package/renderer/components/ui/tooltip.tsx +0 -61
  341. package/renderer/hooks/use-code-copy.ts +0 -88
  342. package/renderer/hooks/use-openapi-title.ts +0 -44
  343. package/renderer/lib/api-docs/agent/index.ts +0 -6
  344. package/renderer/lib/api-docs/agent/indexer.ts +0 -323
  345. package/renderer/lib/api-docs/agent/spec-summary.ts +0 -335
  346. package/renderer/lib/api-docs/agent/types.ts +0 -116
  347. package/renderer/lib/api-docs/auth/auth-context.tsx +0 -225
  348. package/renderer/lib/api-docs/auth/auth-storage.ts +0 -87
  349. package/renderer/lib/api-docs/auth/crypto.ts +0 -89
  350. package/renderer/lib/api-docs/auth/index.ts +0 -4
  351. package/renderer/lib/api-docs/code-editor/db.ts +0 -164
  352. package/renderer/lib/api-docs/code-editor/hooks.ts +0 -266
  353. package/renderer/lib/api-docs/code-editor/mode-context.tsx +0 -207
  354. package/renderer/lib/api-docs/code-editor/types.ts +0 -105
  355. package/renderer/lib/api-docs/codegen/definitions.ts +0 -297
  356. package/renderer/lib/api-docs/codegen/har.ts +0 -251
  357. package/renderer/lib/api-docs/codegen/index.ts +0 -159
  358. package/renderer/lib/api-docs/factories.ts +0 -170
  359. package/renderer/lib/api-docs/mobile-context.tsx +0 -112
  360. package/renderer/lib/api-docs/navigation-context.tsx +0 -88
  361. package/renderer/lib/api-docs/parsers/graphql/README.md +0 -129
  362. package/renderer/lib/api-docs/parsers/graphql/index.ts +0 -91
  363. package/renderer/lib/api-docs/parsers/graphql/parser.ts +0 -491
  364. package/renderer/lib/api-docs/parsers/graphql/transformer.ts +0 -246
  365. package/renderer/lib/api-docs/parsers/graphql/types.ts +0 -283
  366. package/renderer/lib/api-docs/parsers/openapi/README.md +0 -32
  367. package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +0 -60
  368. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +0 -574
  369. package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +0 -403
  370. package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +0 -232
  371. package/renderer/lib/api-docs/parsers/openapi/index.ts +0 -171
  372. package/renderer/lib/api-docs/parsers/openapi/transformer.ts +0 -278
  373. package/renderer/lib/api-docs/parsers/openapi/validator.ts +0 -31
  374. package/renderer/lib/api-docs/playground/context.tsx +0 -107
  375. package/renderer/lib/api-docs/playground/navigation-context.tsx +0 -124
  376. package/renderer/lib/api-docs/playground/request-builder.ts +0 -223
  377. package/renderer/lib/api-docs/playground/request-runner.ts +0 -282
  378. package/renderer/lib/api-docs/playground/types.ts +0 -35
  379. package/renderer/lib/api-docs/types.ts +0 -269
  380. package/renderer/lib/api-docs/utils.ts +0 -311
  381. package/renderer/lib/cache.ts +0 -193
  382. package/renderer/lib/docs/config/domain-schema.ts +0 -260
  383. package/renderer/lib/docs/config/index.ts +0 -43
  384. package/renderer/lib/docs/config/loader.ts +0 -142
  385. package/renderer/lib/docs/config/schema.ts +0 -308
  386. package/renderer/lib/docs/index.ts +0 -12
  387. package/renderer/lib/docs/mdx/compiler.ts +0 -176
  388. package/renderer/lib/docs/mdx/frontmatter.ts +0 -91
  389. package/renderer/lib/docs/mdx/index.ts +0 -26
  390. package/renderer/lib/docs/navigation/generator.ts +0 -348
  391. package/renderer/lib/docs/navigation/index.ts +0 -12
  392. package/renderer/lib/docs/navigation/types.ts +0 -123
  393. package/renderer/lib/docs-navigation-context.tsx +0 -80
  394. package/renderer/lib/multi-tenant/context.ts +0 -105
  395. package/renderer/lib/storage/blob.ts +0 -1083
  396. package/renderer/lib/utils/icons.ts +0 -48
  397. package/renderer/lib/utils.ts +0 -6
  398. package/renderer/next.config.ts +0 -76
@@ -1,171 +0,0 @@
1
- /**
2
- * OpenAPI Importer
3
- *
4
- * Main entry point for importing OpenAPI specifications
5
- * Ported from Hoppscotch's openapi/index.ts
6
- */
7
-
8
- import yaml from 'js-yaml'
9
- import type { OpenAPI, OpenAPIV2, OpenAPIV3 } from 'openapi-types'
10
- import type { BrainfishCollection } from '../../types'
11
- import { objectHasProperty } from '../../utils'
12
- import { validateOpenAPISpec } from './validator'
13
- import { dereferenceOpenAPISpec, hasUnresolvedRefs } from './dereferencer'
14
- import { convertOpenAPIToCollection } from './transformer'
15
-
16
- export const OPENAPI_DEREF_ERROR = 'openapi/deref_error' as const
17
- export const IMPORTER_INVALID_FILE_FORMAT = 'importer/invalid_file_format' as const
18
-
19
- /**
20
- * Safely parses JSON string
21
- */
22
- function safeParseJSON(str: string): unknown | null {
23
- try {
24
- return JSON.parse(str)
25
- } catch {
26
- return null
27
- }
28
- }
29
-
30
- /**
31
- * Safely parses YAML string
32
- */
33
- function safeParseYAML(str: string): unknown | null {
34
- try {
35
- return yaml.load(str)
36
- } catch {
37
- return null
38
- }
39
- }
40
-
41
- /**
42
- * Parses OpenAPI document content (JSON or YAML)
43
- */
44
- function parseOpenAPIDocContent(str: string): unknown | null {
45
- const jsonResult = safeParseJSON(str)
46
- if (jsonResult !== null) {
47
- return jsonResult
48
- }
49
- return safeParseYAML(str)
50
- }
51
-
52
- /**
53
- * Checks if document is OpenAPI v2
54
- */
55
- function isOpenAPIV2Document(doc: unknown): doc is OpenAPIV2.Document {
56
- return (
57
- objectHasProperty(doc, 'swagger') &&
58
- typeof doc.swagger === 'string' &&
59
- doc.swagger === '2.0'
60
- )
61
- }
62
-
63
- /**
64
- * Checks if document is OpenAPI v3
65
- */
66
- function isOpenAPIV3Document(
67
- doc: unknown
68
- ): doc is OpenAPIV3.Document {
69
- return (
70
- objectHasProperty(doc, 'openapi') &&
71
- typeof doc.openapi === 'string' &&
72
- doc.openapi.startsWith('3.')
73
- )
74
- }
75
-
76
- /**
77
- * Imports OpenAPI specification from file contents or document
78
- *
79
- * @param input - OpenAPI document object or array of file contents (strings)
80
- * @returns Promise resolving to BrainfishCollection array
81
- */
82
- export async function importOpenAPISpec(
83
- input: OpenAPI.Document | string | string[]
84
- ): Promise<BrainfishCollection[]> {
85
- let docArr: unknown[]
86
-
87
- // Handle different input types
88
- if (typeof input === 'string') {
89
- // Single file content string
90
- const parsed = parseOpenAPIDocContent(input)
91
- if (!parsed) {
92
- throw new Error(IMPORTER_INVALID_FILE_FORMAT)
93
- }
94
- docArr = [parsed]
95
- } else if (Array.isArray(input)) {
96
- // Array of file content strings
97
- docArr = input
98
- .map((str) => parseOpenAPIDocContent(str))
99
- .filter((doc): doc is unknown => doc !== null)
100
-
101
- if (docArr.length === 0) {
102
- throw new Error(IMPORTER_INVALID_FILE_FORMAT)
103
- }
104
- } else {
105
- // Already a parsed OpenAPI document
106
- docArr = [input]
107
- }
108
-
109
- // Validate documents
110
- const validatedDocs: OpenAPI.Document[] = []
111
-
112
- for (const docObj of docArr) {
113
- try {
114
- // More lenient check - if it has paths, we'll try to import it
115
- const isValidOpenAPISpec =
116
- objectHasProperty(docObj, 'paths') &&
117
- (isOpenAPIV2Document(docObj) ||
118
- isOpenAPIV3Document(docObj) ||
119
- objectHasProperty(docObj, 'info'))
120
-
121
- if (!isValidOpenAPISpec) {
122
- throw new Error('INVALID_OPENAPI_SPEC')
123
- }
124
-
125
- try {
126
- const validatedDoc = await validateOpenAPISpec(docObj)
127
- validatedDocs.push(validatedDoc)
128
- } catch (validationError) {
129
- // If validation fails but it has basic OpenAPI structure, add it anyway
130
- if (objectHasProperty(docObj, 'paths')) {
131
- validatedDocs.push(docObj as OpenAPI.Document)
132
- } else {
133
- throw validationError
134
- }
135
- }
136
- } catch (err) {
137
- if (err instanceof Error && err.message === 'INVALID_OPENAPI_SPEC') {
138
- throw new Error('INVALID_OPENAPI_SPEC')
139
- }
140
- // Continue with other documents
141
- console.warn('Failed to validate document:', err)
142
- }
143
- }
144
-
145
- if (validatedDocs.length === 0) {
146
- throw new Error(IMPORTER_INVALID_FILE_FORMAT)
147
- }
148
-
149
- // Dereference documents
150
- const dereferencedDocs: OpenAPI.Document[] = []
151
-
152
- for (const docObj of validatedDocs) {
153
- try {
154
- const dereferencedDoc = await dereferenceOpenAPISpec(docObj)
155
- dereferencedDocs.push(dereferencedDoc)
156
- } catch {
157
- // Check if the document has unresolved references
158
- if (hasUnresolvedRefs(docObj)) {
159
- console.warn(
160
- 'Document contains unresolved references which may affect import quality'
161
- )
162
- }
163
-
164
- // If dereferencing fails, use the original document
165
- dereferencedDocs.push(docObj)
166
- }
167
- }
168
-
169
- // Convert to BrainfishCollections
170
- return convertOpenAPIToCollection(dereferencedDocs)
171
- }
@@ -1,278 +0,0 @@
1
- /**
2
- * OpenAPI Transformer
3
- *
4
- * Ported from Hoppscotch's openapi/index.ts
5
- * Converts OpenAPI Document to BrainfishCollection
6
- */
7
-
8
- /* eslint-disable @typescript-eslint/no-explicit-any */
9
-
10
- import type {
11
- OpenAPI,
12
- OpenAPIV2,
13
- OpenAPIV3,
14
- } from 'openapi-types'
15
- import type {
16
- BrainfishCollection,
17
- BrainfishRESTRequest,
18
- BrainfishRESTResponseOriginalRequest,
19
- } from '../../types'
20
- import {
21
- makeBrainfishCollection,
22
- makeBrainfishRESTRequest,
23
- makeBrainfishRESTResponseOriginalRequest,
24
- } from '../../factories'
25
- import { objectHasProperty, cloneDeep } from '../../utils'
26
- import { hasUnresolvedRefs } from './dereferencer'
27
- import {
28
- replaceOpenApiPathTemplating,
29
- parseOpenAPIParams,
30
- parseOpenAPIHeaders,
31
- parseOpenAPIVariables,
32
- parseOpenAPIResponses,
33
- type OpenAPIPathInfoType,
34
- type OpenAPIOperationType,
35
- } from './extractors'
36
- import { parseOpenAPIBody } from './extractors/body'
37
- import { parseOpenAPIAuth, extractSecurityHeaders, getDefaultAuth } from './extractors/auth'
38
-
39
- /**
40
- * Formats an operation name for display
41
- * Converts snake_case/kebab-case operationIds to readable Title Case
42
- * Prefers summary over operationId if available
43
- */
44
- function formatOperationName(info: any): string {
45
- const summary = info.summary?.trim()
46
- const operationId = info.operationId?.trim()
47
-
48
- // Prefer summary as it's usually more human-readable
49
- if (summary) {
50
- return summary
51
- }
52
-
53
- // If only operationId is available, convert to readable format
54
- if (operationId) {
55
- return operationId
56
- // Replace underscores and hyphens with spaces
57
- .replace(/[_-]/g, ' ')
58
- // Handle camelCase by adding space before capital letters
59
- .replace(/([a-z])([A-Z])/g, '$1 $2')
60
- // Capitalize first letter of each word
61
- .replace(/\b\w/g, (char: string) => char.toUpperCase())
62
- // Clean up multiple spaces
63
- .replace(/\s+/g, ' ')
64
- .trim()
65
- }
66
-
67
- return 'Untitled Request'
68
- }
69
-
70
- /**
71
- * Parses OpenAPI URL from document (v2 or v3)
72
- */
73
- function parseOpenAPIUrl(
74
- doc: OpenAPI.Document | OpenAPIV2.Document | OpenAPIV3.Document
75
- ): string {
76
- // OpenAPI V2 has host and basePath in document properties
77
- if (objectHasProperty(doc, 'swagger')) {
78
- const host = (doc as OpenAPIV2.Document).host?.trim() || '<<baseUrl>>'
79
- const basePath = (doc as OpenAPIV2.Document).basePath?.trim() || ''
80
- return `${host}${basePath}`
81
- }
82
-
83
- // OpenAPI V3 has servers array
84
- if (objectHasProperty(doc, 'servers')) {
85
- const serverUrl = (doc as OpenAPIV3.Document).servers?.[0]?.url
86
- return !serverUrl || serverUrl === './' ? '<<baseUrl>>' : serverUrl
87
- }
88
-
89
- // Fallback
90
- return '<<baseUrl>>'
91
- }
92
-
93
- /**
94
- * Converts an OpenAPI path to Brainfish requests
95
- */
96
- function convertPathToBrainfishReqs(
97
- doc: OpenAPI.Document,
98
- pathName: string,
99
- pathObj: OpenAPIPathInfoType
100
- ): Array<{
101
- request: BrainfishRESTRequest
102
- metadata: {
103
- tags: string[]
104
- }
105
- }> {
106
- const methods = ['get', 'head', 'post', 'put', 'delete', 'options', 'patch'] as const
107
-
108
- return methods
109
- .filter((method) => !!pathObj[method])
110
- .map((method) => {
111
- const info = pathObj[method]! as OpenAPIOperationType
112
- const openAPIUrl = parseOpenAPIUrl(doc)
113
- const openAPIPath = replaceOpenApiPathTemplating(pathName)
114
-
115
- const endpoint =
116
- openAPIUrl.endsWith('/') && openAPIPath.startsWith('/')
117
- ? openAPIUrl + openAPIPath.slice(1)
118
- : openAPIUrl + openAPIPath
119
-
120
- const params = parseOpenAPIParams(
121
- (info.parameters as any) ?? []
122
- )
123
- const baseHeaders = parseOpenAPIHeaders(
124
- (info.parameters as any) ?? []
125
- )
126
-
127
- // Get the primary auth key (handled by global auth) to exclude from additional headers
128
- const defaultAuth = getDefaultAuth(doc)
129
- const primaryAuthKey = defaultAuth?.authType === 'api-key' ? defaultAuth.key : undefined
130
-
131
- // Extract additional security headers (e.g., agent-key when access-token is primary)
132
- const securityHeaders = extractSecurityHeaders(doc, info, primaryAuthKey)
133
-
134
- // Merge headers: base headers + security headers (avoiding duplicates)
135
- const existingKeys = new Set(baseHeaders.map(h => h.key.toLowerCase()))
136
- const additionalSecurityHeaders = securityHeaders
137
- .filter(h => !existingKeys.has(h.key.toLowerCase()))
138
- .map(h => ({
139
- key: h.key,
140
- value: h.value,
141
- active: h.active,
142
- description: h.description,
143
- }))
144
-
145
- const headers = [...baseHeaders, ...additionalSecurityHeaders]
146
-
147
- const requestVariables = parseOpenAPIVariables(
148
- (info.parameters as any) ?? []
149
- )
150
- const auth = parseOpenAPIAuth(doc, info)
151
- const body = parseOpenAPIBody(doc, info)
152
-
153
- const displayName = formatOperationName(info)
154
-
155
- const originalRequest: BrainfishRESTResponseOriginalRequest =
156
- makeBrainfishRESTResponseOriginalRequest({
157
- name: displayName,
158
- method: method.toUpperCase() as any,
159
- endpoint,
160
- params,
161
- headers,
162
- body,
163
- auth,
164
- requestVariables,
165
- })
166
-
167
- const responses = parseOpenAPIResponses(doc, info, originalRequest)
168
-
169
- const request = makeBrainfishRESTRequest({
170
- name: displayName,
171
- description: (info as any).description ?? null,
172
- method: method.toUpperCase() as any,
173
- endpoint,
174
- params,
175
- headers,
176
- auth,
177
- body,
178
- requestVariables,
179
- responses,
180
- tags: (info as any).tags ?? [],
181
- operationId: (info as any).operationId ?? undefined,
182
- })
183
-
184
- return {
185
- request,
186
- metadata: {
187
- tags: (info as any).tags ?? [],
188
- },
189
- }
190
- })
191
- }
192
-
193
- /**
194
- * Converts OpenAPI documents to BrainfishCollections
195
- */
196
- export function convertOpenAPIToCollection(
197
- docs: OpenAPI.Document[]
198
- ): BrainfishCollection[] {
199
- // Check for unresolved references before conversion
200
- for (const doc of docs) {
201
- if (hasUnresolvedRefs(doc)) {
202
- console.warn(
203
- 'Document contains unresolved references which may affect import quality'
204
- )
205
- // Continue anyway to provide a best-effort import
206
- }
207
- }
208
-
209
- const collections = docs.map((doc) => {
210
- const name = doc.info.title
211
- const description = doc.info.description ?? null
212
-
213
- // Extract tag descriptions from OpenAPI spec
214
- const tagDescriptions: Record<string, string> = {}
215
- if ('tags' in doc && Array.isArray(doc.tags)) {
216
- doc.tags.forEach((tag: any) => {
217
- if (tag.name && tag.description) {
218
- tagDescriptions[tag.name] = tag.description
219
- }
220
- })
221
- }
222
-
223
- // Convert all paths to requests
224
- const paths = Object.entries(doc.paths ?? {})
225
- .map(([pathName, pathObj]) =>
226
- convertPathToBrainfishReqs(doc, pathName, pathObj as OpenAPIPathInfoType)
227
- )
228
- .flat()
229
-
230
- // Organize requests by tags
231
- const requestsByTags: Record<string, BrainfishRESTRequest[]> = {}
232
- const requestsWithoutTags: BrainfishRESTRequest[] = []
233
-
234
- paths.forEach(({ metadata, request }) => {
235
- const tags = metadata.tags
236
-
237
- if (tags.length === 0) {
238
- requestsWithoutTags.push(request)
239
- return
240
- }
241
-
242
- for (const tag of tags) {
243
- if (!requestsByTags[tag]) {
244
- requestsByTags[tag] = []
245
- }
246
-
247
- // Clone request for each tag (request can belong to multiple tags)
248
- requestsByTags[tag].push(cloneDeep(request))
249
- }
250
- })
251
-
252
- // Create folders (collections) for each tag
253
- const folders = Object.entries(requestsByTags).map(([tagName, requests]) =>
254
- makeBrainfishCollection({
255
- name: tagName,
256
- description: tagDescriptions[tagName] ?? null,
257
- requests,
258
- folders: [],
259
- variables: [],
260
- auth: { authType: 'inherit', authActive: true },
261
- headers: [],
262
- })
263
- )
264
-
265
- // Create main collection
266
- return makeBrainfishCollection({
267
- name,
268
- description,
269
- folders,
270
- requests: requestsWithoutTags,
271
- variables: [],
272
- auth: { authType: 'inherit', authActive: true },
273
- headers: [],
274
- })
275
- })
276
-
277
- return collections
278
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * OpenAPI Validator
3
- *
4
- * Ported from Hoppscotch's openapi-import-worker.ts
5
- * Converts Web Worker pattern to direct function calls for Next.js
6
- */
7
-
8
- import SwaggerParser from '@apidevtools/swagger-parser'
9
- import type { OpenAPI } from 'openapi-types'
10
-
11
- /**
12
- * Validates an OpenAPI document using SwaggerParser
13
- *
14
- * @param docs - The OpenAPI document to validate
15
- * @returns Promise resolving to validated OpenAPI document
16
- * @throws Error if validation fails
17
- */
18
- export async function validateOpenAPISpec(
19
- docs: unknown
20
- ): Promise<OpenAPI.Document> {
21
- try {
22
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
- const validated = await SwaggerParser.validate(docs as any, {
24
- // @ts-expect-error - this is a valid option, but types may not be updated
25
- continueOnError: true,
26
- })
27
- return validated as unknown as OpenAPI.Document
28
- } catch {
29
- throw new Error('COULD_NOT_VALIDATE')
30
- }
31
- }
@@ -1,107 +0,0 @@
1
- 'use client'
2
-
3
- import { createContext, useContext, useState, useCallback, type ReactNode } from 'react'
4
- import type { PrefillData } from '@/lib/api-docs/agent/types'
5
-
6
- /** Current request payload from the playground */
7
- export interface CurrentRequestPayload {
8
- method: string
9
- endpoint: string
10
- params: Array<{ key: string; value: string; active: boolean }>
11
- headers: Array<{ key: string; value: string; active: boolean }>
12
- body: string | null
13
- bodyContentType: string | null
14
- }
15
-
16
- interface PlaygroundContextValue {
17
- /** Pending prefill data to be applied */
18
- pendingPrefill: PrefillData | null
19
- /** Set prefill data - will be consumed by playground */
20
- setPrefill: (data: PrefillData) => void
21
- /** Clear pending prefill after it's been applied */
22
- clearPrefill: () => void
23
- /** Current request payload from the playground */
24
- currentRequestPayload: CurrentRequestPayload | null
25
- /** Set current request payload - called by playground when values change */
26
- setCurrentRequestPayload: (payload: CurrentRequestPayload | null) => void
27
- /** Trigger to send request from agent */
28
- triggerSend: boolean
29
- /** Call to trigger send from agent */
30
- requestSend: () => void
31
- /** Clear send trigger after playground handles it */
32
- clearSendTrigger: () => void
33
- }
34
-
35
- const PlaygroundContext = createContext<PlaygroundContextValue | null>(null)
36
-
37
- export function PlaygroundProvider({ children }: { children: ReactNode }) {
38
- const [pendingPrefill, setPendingPrefill] = useState<PrefillData | null>(null)
39
- const [currentRequestPayload, setCurrentRequestPayloadState] = useState<CurrentRequestPayload | null>(null)
40
- const [triggerSend, setTriggerSend] = useState(false)
41
-
42
- const setPrefill = useCallback((data: PrefillData) => {
43
- setPendingPrefill(data)
44
- }, [])
45
-
46
- const clearPrefill = useCallback(() => {
47
- setPendingPrefill(null)
48
- }, [])
49
-
50
- const setCurrentRequestPayload = useCallback((payload: CurrentRequestPayload | null) => {
51
- setCurrentRequestPayloadState(payload)
52
- }, [])
53
-
54
- const requestSend = useCallback(() => {
55
- setTriggerSend(true)
56
- }, [])
57
-
58
- const clearSendTrigger = useCallback(() => {
59
- setTriggerSend(false)
60
- }, [])
61
-
62
- return (
63
- <PlaygroundContext.Provider value={{
64
- pendingPrefill,
65
- setPrefill,
66
- clearPrefill,
67
- currentRequestPayload,
68
- setCurrentRequestPayload,
69
- triggerSend,
70
- requestSend,
71
- clearSendTrigger,
72
- }}>
73
- {children}
74
- </PlaygroundContext.Provider>
75
- )
76
- }
77
-
78
- export function usePlaygroundPrefill() {
79
- const context = useContext(PlaygroundContext)
80
- if (!context) {
81
- throw new Error('usePlaygroundPrefill must be used within a PlaygroundProvider')
82
- }
83
- return context
84
- }
85
-
86
- export function useCurrentRequestPayload() {
87
- const context = useContext(PlaygroundContext)
88
- if (!context) {
89
- throw new Error('useCurrentRequestPayload must be used within a PlaygroundProvider')
90
- }
91
- return {
92
- currentRequestPayload: context.currentRequestPayload,
93
- setCurrentRequestPayload: context.setCurrentRequestPayload,
94
- }
95
- }
96
-
97
- export function useSendTrigger() {
98
- const context = useContext(PlaygroundContext)
99
- if (!context) {
100
- throw new Error('useSendTrigger must be used within a PlaygroundProvider')
101
- }
102
- return {
103
- triggerSend: context.triggerSend,
104
- requestSend: context.requestSend,
105
- clearSendTrigger: context.clearSendTrigger,
106
- }
107
- }
@@ -1,124 +0,0 @@
1
- 'use client'
2
-
3
- import { createContext, useContext, useState, useCallback, ReactNode } from 'react'
4
-
5
- // Tabs that can be navigated to
6
- export type PlaygroundTab = 'params' | 'body' | 'headers' | 'auth'
7
-
8
- // Fields that can be highlighted
9
- export type HighlightField =
10
- | { type: 'param'; key?: string }
11
- | { type: 'header'; key?: string }
12
- | { type: 'body' }
13
- | { type: 'auth'; field?: 'apiKey' | 'bearerToken' | 'basicUsername' | 'basicPassword' }
14
-
15
- interface PlaygroundNavigationState {
16
- /** Currently active tab (controlled externally) */
17
- activeTab: PlaygroundTab | null
18
- /** Field to highlight */
19
- highlightField: HighlightField | null
20
- /** Whether to show error styling on highlighted field */
21
- showError: boolean
22
- }
23
-
24
- interface PlaygroundNavigationContextType {
25
- state: PlaygroundNavigationState
26
- /** Navigate to a specific tab */
27
- navigateToTab: (tab: PlaygroundTab) => void
28
- /** Navigate to tab and highlight a field */
29
- navigateAndHighlight: (tab: PlaygroundTab, field?: HighlightField, showError?: boolean) => void
30
- /** Clear highlight */
31
- clearHighlight: () => void
32
- /** Set active tab (called by RequestTabs) */
33
- setActiveTab: (tab: PlaygroundTab) => void
34
- /** Reset navigation state (called when endpoint changes) */
35
- resetNavigation: () => void
36
- }
37
-
38
- const PlaygroundNavigationContext = createContext<PlaygroundNavigationContextType | undefined>(undefined)
39
-
40
- export function PlaygroundNavigationProvider({ children }: { children: ReactNode }) {
41
- const [state, setState] = useState<PlaygroundNavigationState>({
42
- activeTab: null,
43
- highlightField: null,
44
- showError: false,
45
- })
46
-
47
- const navigateToTab = useCallback((tab: PlaygroundTab) => {
48
- setState(prev => ({
49
- ...prev,
50
- activeTab: tab,
51
- highlightField: null,
52
- showError: false,
53
- }))
54
- }, [])
55
-
56
- const navigateAndHighlight = useCallback((
57
- tab: PlaygroundTab,
58
- field?: HighlightField,
59
- showError: boolean = true
60
- ) => {
61
- setState({
62
- activeTab: tab,
63
- highlightField: field || null,
64
- showError,
65
- })
66
-
67
- // Auto-clear highlight after a delay
68
- if (field) {
69
- setTimeout(() => {
70
- setState(prev => ({
71
- ...prev,
72
- highlightField: null,
73
- showError: false,
74
- }))
75
- }, 3000)
76
- }
77
- }, [])
78
-
79
- const clearHighlight = useCallback(() => {
80
- setState(prev => ({
81
- ...prev,
82
- highlightField: null,
83
- showError: false,
84
- }))
85
- }, [])
86
-
87
- const setActiveTab = useCallback((tab: PlaygroundTab) => {
88
- setState(prev => ({
89
- ...prev,
90
- activeTab: tab,
91
- }))
92
- }, [])
93
-
94
- const resetNavigation = useCallback(() => {
95
- setState({
96
- activeTab: null,
97
- highlightField: null,
98
- showError: false,
99
- })
100
- }, [])
101
-
102
- return (
103
- <PlaygroundNavigationContext.Provider
104
- value={{
105
- state,
106
- navigateToTab,
107
- navigateAndHighlight,
108
- clearHighlight,
109
- setActiveTab,
110
- resetNavigation,
111
- }}
112
- >
113
- {children}
114
- </PlaygroundNavigationContext.Provider>
115
- )
116
- }
117
-
118
- export function usePlaygroundNavigation() {
119
- const context = useContext(PlaygroundNavigationContext)
120
- if (context === undefined) {
121
- throw new Error('usePlaygroundNavigation must be used within a PlaygroundNavigationProvider')
122
- }
123
- return context
124
- }