@brainfish-ai/devdoc 0.1.42 → 0.1.43

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 (388) hide show
  1. package/dist/cli/commands/dev.js +19 -10
  2. package/package.json +3 -2
  3. package/renderer/app/api/assets/[...path]/route.js +108 -0
  4. package/renderer/app/api/assets/route.js +114 -0
  5. package/renderer/app/api/assets/upload/route.js +163 -0
  6. package/renderer/app/api/auth-schemes/route.js +58 -0
  7. package/renderer/app/api/chat/route.js +759 -0
  8. package/renderer/app/api/codegen/route.js +52 -0
  9. package/renderer/app/api/collections/route.js +675 -0
  10. package/renderer/app/api/debug/route.js +47 -0
  11. package/renderer/app/api/deploy/route.js +199 -0
  12. package/renderer/app/api/device/route.js +36 -0
  13. package/renderer/app/api/docs/route.js +205 -0
  14. package/renderer/app/api/domains/add/route.js +121 -0
  15. package/renderer/app/api/domains/lookup/route.js +43 -0
  16. package/renderer/app/api/domains/remove/route.js +89 -0
  17. package/renderer/app/api/domains/status/route.js +140 -0
  18. package/renderer/app/api/domains/verify/route.js +168 -0
  19. package/renderer/app/api/keys/regenerate/route.js +71 -0
  20. package/renderer/app/api/local-assets/[...path]/route.js +108 -0
  21. package/renderer/app/api/openapi-spec/route.js +73 -0
  22. package/renderer/app/api/projects/[slug]/route.js +129 -0
  23. package/renderer/app/api/projects/[slug]/stats/route.js +80 -0
  24. package/renderer/app/api/projects/register/route.js +176 -0
  25. package/renderer/app/api/proxy/route.js +139 -0
  26. package/renderer/app/api/proxy-stream/route.js +156 -0
  27. package/renderer/app/api/redirects/route.js +35 -0
  28. package/renderer/app/api/schema/route.js +85 -0
  29. package/renderer/app/api/subdomains/check/route.js +158 -0
  30. package/renderer/app/api/suggestions/route.js +175 -0
  31. package/renderer/app/layout.js +47 -0
  32. package/renderer/app/llms-full.txt/route.js +257 -0
  33. package/renderer/app/llms.txt/route.js +219 -0
  34. package/renderer/app/page.js +12 -0
  35. package/renderer/app/robots.txt/route.js +66 -0
  36. package/renderer/app/sitemap.xml/route.js +145 -0
  37. package/renderer/components/docs/index.js +8 -0
  38. package/renderer/components/docs/mdx/accordion.js +113 -0
  39. package/renderer/components/docs/mdx/badge.js +72 -0
  40. package/renderer/components/docs/mdx/callouts.js +137 -0
  41. package/renderer/components/docs/mdx/cards.js +175 -0
  42. package/renderer/components/docs/mdx/changelog.js +100 -0
  43. package/renderer/components/docs/mdx/code-block.js +147 -0
  44. package/renderer/components/docs/mdx/code-group.js +287 -0
  45. package/renderer/components/docs/mdx/file-embeds.js +82 -0
  46. package/renderer/components/docs/mdx/frame.js +59 -0
  47. package/renderer/components/docs/mdx/highlight.js +90 -0
  48. package/renderer/components/docs/mdx/iframe.js +69 -0
  49. package/renderer/components/docs/mdx/image.js +135 -0
  50. package/renderer/components/docs/mdx/index.js +134 -0
  51. package/renderer/components/docs/mdx/landing.js +315 -0
  52. package/renderer/components/docs/mdx/mermaid.js +212 -0
  53. package/renderer/components/docs/mdx/param-field.js +112 -0
  54. package/renderer/components/docs/mdx/steps.js +74 -0
  55. package/renderer/components/docs/mdx/tabs.js +50 -0
  56. package/renderer/components/docs/mdx-renderer.js +77 -0
  57. package/renderer/components/docs/navigation/breadcrumbs.js +64 -0
  58. package/renderer/components/docs/navigation/index.js +6 -0
  59. package/renderer/components/docs/navigation/page-nav.js +57 -0
  60. package/renderer/components/docs/navigation/sidebar.js +375 -0
  61. package/renderer/components/docs/navigation/toc.js +89 -0
  62. package/renderer/components/docs/notice.js +77 -0
  63. package/renderer/components/docs-header.js +202 -0
  64. package/renderer/components/docs-viewer/agent/agent-chat.js +1930 -0
  65. package/renderer/components/docs-viewer/agent/cards/debug-context-card.js +107 -0
  66. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.js +57 -0
  67. package/renderer/components/docs-viewer/agent/cards/index.js +45 -0
  68. package/renderer/components/docs-viewer/agent/cards/response-options-card.js +154 -0
  69. package/renderer/components/docs-viewer/agent/cards/types.js +22 -0
  70. package/renderer/components/docs-viewer/agent/chat-message.js +2 -0
  71. package/renderer/components/docs-viewer/agent/index.js +4 -0
  72. package/renderer/components/docs-viewer/agent/messages/assistant-message.js +108 -0
  73. package/renderer/components/docs-viewer/agent/messages/chat-message.js +34 -0
  74. package/renderer/components/docs-viewer/agent/messages/index.js +6 -0
  75. package/renderer/components/docs-viewer/agent/messages/tool-call-display.js +1065 -0
  76. package/renderer/components/docs-viewer/agent/messages/types.js +2 -0
  77. package/renderer/components/docs-viewer/agent/messages/typing-indicator.js +26 -0
  78. package/renderer/components/docs-viewer/agent/messages/user-message.js +37 -0
  79. package/renderer/components/docs-viewer/code-editor/{index.tsx → index.js} +1 -1
  80. package/renderer/components/docs-viewer/code-editor/notes-mode.js +1338 -0
  81. package/renderer/components/docs-viewer/content/changelog-page.js +297 -0
  82. package/renderer/components/docs-viewer/content/doc-page.js +264 -0
  83. package/renderer/components/docs-viewer/content/documentation-viewer.js +14 -0
  84. package/renderer/components/docs-viewer/content/index.js +29 -0
  85. package/renderer/components/docs-viewer/content/not-found-page.js +300 -0
  86. package/renderer/components/docs-viewer/content/request-details.js +528 -0
  87. package/renderer/components/docs-viewer/content/sections/auth.js +108 -0
  88. package/renderer/components/docs-viewer/content/sections/body.js +80 -0
  89. package/renderer/components/docs-viewer/content/sections/headers.js +64 -0
  90. package/renderer/components/docs-viewer/content/sections/overview.js +56 -0
  91. package/renderer/components/docs-viewer/content/sections/parameters.js +64 -0
  92. package/renderer/components/docs-viewer/content/sections/responses.js +91 -0
  93. package/renderer/components/docs-viewer/global-auth-modal.js +427 -0
  94. package/renderer/components/docs-viewer/index.js +1552 -0
  95. package/renderer/components/docs-viewer/playground/auth-editor.js +418 -0
  96. package/renderer/components/docs-viewer/playground/body-editor.js +240 -0
  97. package/renderer/components/docs-viewer/playground/code-editor.js +135 -0
  98. package/renderer/components/docs-viewer/playground/code-snippet.js +393 -0
  99. package/renderer/components/docs-viewer/playground/graphql-playground.js +734 -0
  100. package/renderer/components/docs-viewer/playground/index.js +682 -0
  101. package/renderer/components/docs-viewer/playground/key-value-editor.js +317 -0
  102. package/renderer/components/docs-viewer/playground/method-selector.js +65 -0
  103. package/renderer/components/docs-viewer/playground/request-builder.js +181 -0
  104. package/renderer/components/docs-viewer/playground/request-tabs.js +240 -0
  105. package/renderer/components/docs-viewer/playground/response-cards/idle-card.js +42 -0
  106. package/renderer/components/docs-viewer/playground/response-cards/index.js +72 -0
  107. package/renderer/components/docs-viewer/playground/response-cards/loading-card.js +24 -0
  108. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.js +28 -0
  109. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.js +308 -0
  110. package/renderer/components/docs-viewer/playground/response-cards/types.js +9 -0
  111. package/renderer/components/docs-viewer/playground/response-viewer.js +18 -0
  112. package/renderer/components/docs-viewer/search/index.js +2 -0
  113. package/renderer/components/docs-viewer/search/search-dialog.js +367 -0
  114. package/renderer/components/docs-viewer/search/use-search.js +89 -0
  115. package/renderer/components/docs-viewer/shared/markdown-renderer.js +423 -0
  116. package/renderer/components/docs-viewer/shared/method-badge.js +23 -0
  117. package/renderer/components/docs-viewer/shared/schema-viewer.js +321 -0
  118. package/renderer/components/docs-viewer/sidebar/collection-tree.js +222 -0
  119. package/renderer/components/docs-viewer/sidebar/endpoint-options.js +512 -0
  120. package/renderer/components/docs-viewer/sidebar/index.js +196 -0
  121. package/renderer/components/docs-viewer/sidebar/right-sidebar.js +163 -0
  122. package/renderer/components/docs-viewer/sidebar/sidebar-group.js +87 -0
  123. package/renderer/components/docs-viewer/sidebar/sidebar-item.js +172 -0
  124. package/renderer/components/docs-viewer/sidebar/sidebar-section.js +31 -0
  125. package/renderer/components/theme-provider.js +10 -0
  126. package/renderer/components/theme-toggle.js +106 -0
  127. package/renderer/components/ui/badge.js +29 -0
  128. package/renderer/components/ui/button.js +40 -0
  129. package/renderer/components/ui/dialog.js +50 -0
  130. package/renderer/components/ui/dropdown-menu.js +143 -0
  131. package/renderer/components/ui/input.js +12 -0
  132. package/renderer/components/ui/label.js +13 -0
  133. package/renderer/components/ui/navigation-menu.js +83 -0
  134. package/renderer/components/ui/select.js +116 -0
  135. package/renderer/components/ui/spinner.js +92 -0
  136. package/renderer/components/ui/tabs.js +34 -0
  137. package/renderer/components/ui/tooltip.js +43 -0
  138. package/renderer/hooks/use-code-copy.js +76 -0
  139. package/renderer/hooks/use-openapi-title.js +33 -0
  140. package/renderer/lib/api-docs/agent/index.js +4 -0
  141. package/renderer/lib/api-docs/agent/indexer.js +254 -0
  142. package/renderer/lib/api-docs/agent/spec-summary.js +227 -0
  143. package/renderer/lib/api-docs/agent/types.js +5 -0
  144. package/renderer/lib/api-docs/auth/auth-context.js +157 -0
  145. package/renderer/lib/api-docs/auth/auth-storage.js +66 -0
  146. package/renderer/lib/api-docs/auth/crypto.js +64 -0
  147. package/renderer/lib/api-docs/auth/index.js +3 -0
  148. package/renderer/lib/api-docs/code-editor/db.js +145 -0
  149. package/renderer/lib/api-docs/code-editor/hooks.js +254 -0
  150. package/renderer/lib/api-docs/code-editor/{index.ts → index.js} +3 -4
  151. package/renderer/lib/api-docs/code-editor/mode-context.js +154 -0
  152. package/renderer/lib/api-docs/code-editor/types.js +53 -0
  153. package/renderer/lib/api-docs/codegen/definitions.js +258 -0
  154. package/renderer/lib/api-docs/codegen/har.js +171 -0
  155. package/renderer/lib/api-docs/codegen/index.js +118 -0
  156. package/renderer/lib/api-docs/factories.js +136 -0
  157. package/renderer/lib/api-docs/{index.ts → index.js} +5 -10
  158. package/renderer/lib/api-docs/mobile-context.js +79 -0
  159. package/renderer/lib/api-docs/navigation-context.js +62 -0
  160. package/renderer/lib/api-docs/parsers/graphql/index.js +50 -0
  161. package/renderer/lib/api-docs/parsers/graphql/parser.js +350 -0
  162. package/renderer/lib/api-docs/parsers/graphql/transformer.js +215 -0
  163. package/renderer/lib/api-docs/parsers/graphql/types.js +46 -0
  164. package/renderer/lib/api-docs/parsers/openapi/dereferencer.js +43 -0
  165. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.js +486 -0
  166. package/renderer/lib/api-docs/parsers/openapi/extractors/body.js +295 -0
  167. package/renderer/lib/api-docs/parsers/openapi/extractors/index.js +132 -0
  168. package/renderer/lib/api-docs/parsers/openapi/index.js +127 -0
  169. package/renderer/lib/api-docs/parsers/openapi/transformer.js +192 -0
  170. package/renderer/lib/api-docs/parsers/openapi/validator.js +24 -0
  171. package/renderer/lib/api-docs/playground/context.js +65 -0
  172. package/renderer/lib/api-docs/playground/navigation-context.js +74 -0
  173. package/renderer/lib/api-docs/playground/request-builder.js +163 -0
  174. package/renderer/lib/api-docs/playground/request-runner.js +224 -0
  175. package/renderer/lib/api-docs/playground/types.js +5 -0
  176. package/renderer/lib/api-docs/types.js +23 -0
  177. package/renderer/lib/api-docs/utils.js +212 -0
  178. package/renderer/lib/cache.js +157 -0
  179. package/renderer/lib/docs/config/domain-schema.js +161 -0
  180. package/renderer/lib/docs/config/index.js +5 -0
  181. package/renderer/lib/docs/config/loader.js +113 -0
  182. package/renderer/lib/docs/config/schema.js +269 -0
  183. package/renderer/lib/docs/index.js +8 -0
  184. package/renderer/lib/docs/mdx/compiler.js +128 -0
  185. package/renderer/lib/docs/mdx/frontmatter.js +73 -0
  186. package/renderer/lib/docs/mdx/index.js +8 -0
  187. package/renderer/lib/docs/navigation/generator.js +269 -0
  188. package/renderer/lib/docs/navigation/index.js +4 -0
  189. package/renderer/lib/docs/navigation/types.js +9 -0
  190. package/renderer/lib/docs-navigation-context.js +40 -0
  191. package/renderer/lib/multi-tenant/context.js +80 -0
  192. package/renderer/lib/storage/blob.js +767 -0
  193. package/renderer/lib/utils/icons.js +30 -0
  194. package/renderer/lib/utils.js +5 -0
  195. package/renderer/next.config.js +62 -0
  196. package/renderer/tsconfig.json +23 -5
  197. package/renderer/app/api/assets/[...path]/route.ts +0 -123
  198. package/renderer/app/api/assets/route.ts +0 -124
  199. package/renderer/app/api/assets/upload/route.ts +0 -177
  200. package/renderer/app/api/auth-schemes/route.ts +0 -77
  201. package/renderer/app/api/chat/route.ts +0 -858
  202. package/renderer/app/api/codegen/route.ts +0 -72
  203. package/renderer/app/api/collections/route.ts +0 -1002
  204. package/renderer/app/api/debug/route.ts +0 -53
  205. package/renderer/app/api/deploy/route.ts +0 -234
  206. package/renderer/app/api/device/route.ts +0 -42
  207. package/renderer/app/api/docs/route.ts +0 -201
  208. package/renderer/app/api/domains/add/route.ts +0 -132
  209. package/renderer/app/api/domains/lookup/route.ts +0 -43
  210. package/renderer/app/api/domains/remove/route.ts +0 -100
  211. package/renderer/app/api/domains/status/route.ts +0 -158
  212. package/renderer/app/api/domains/verify/route.ts +0 -181
  213. package/renderer/app/api/keys/regenerate/route.ts +0 -80
  214. package/renderer/app/api/local-assets/[...path]/route.ts +0 -122
  215. package/renderer/app/api/openapi-spec/route.ts +0 -151
  216. package/renderer/app/api/projects/[slug]/route.ts +0 -153
  217. package/renderer/app/api/projects/[slug]/stats/route.ts +0 -96
  218. package/renderer/app/api/projects/register/route.ts +0 -152
  219. package/renderer/app/api/proxy/route.ts +0 -149
  220. package/renderer/app/api/proxy-stream/route.ts +0 -168
  221. package/renderer/app/api/redirects/route.ts +0 -47
  222. package/renderer/app/api/schema/route.ts +0 -73
  223. package/renderer/app/api/subdomains/check/route.ts +0 -172
  224. package/renderer/app/api/suggestions/route.ts +0 -144
  225. package/renderer/app/layout.tsx +0 -54
  226. package/renderer/app/llms-full.txt/route.ts +0 -346
  227. package/renderer/app/llms.txt/route.ts +0 -279
  228. package/renderer/app/page.tsx +0 -14
  229. package/renderer/app/robots.txt/route.ts +0 -84
  230. package/renderer/app/sitemap.xml/route.ts +0 -199
  231. package/renderer/components/docs/index.ts +0 -12
  232. package/renderer/components/docs/mdx/accordion.tsx +0 -169
  233. package/renderer/components/docs/mdx/badge.tsx +0 -132
  234. package/renderer/components/docs/mdx/callouts.tsx +0 -154
  235. package/renderer/components/docs/mdx/cards.tsx +0 -241
  236. package/renderer/components/docs/mdx/changelog.tsx +0 -120
  237. package/renderer/components/docs/mdx/code-block.tsx +0 -186
  238. package/renderer/components/docs/mdx/code-group.tsx +0 -421
  239. package/renderer/components/docs/mdx/file-embeds.tsx +0 -105
  240. package/renderer/components/docs/mdx/frame.tsx +0 -112
  241. package/renderer/components/docs/mdx/highlight.tsx +0 -151
  242. package/renderer/components/docs/mdx/iframe.tsx +0 -134
  243. package/renderer/components/docs/mdx/image.tsx +0 -235
  244. package/renderer/components/docs/mdx/index.ts +0 -237
  245. package/renderer/components/docs/mdx/landing.tsx +0 -684
  246. package/renderer/components/docs/mdx/mermaid.tsx +0 -240
  247. package/renderer/components/docs/mdx/param-field.tsx +0 -200
  248. package/renderer/components/docs/mdx/steps.tsx +0 -113
  249. package/renderer/components/docs/mdx/tabs.tsx +0 -86
  250. package/renderer/components/docs/mdx-renderer.tsx +0 -100
  251. package/renderer/components/docs/navigation/breadcrumbs.tsx +0 -76
  252. package/renderer/components/docs/navigation/index.ts +0 -8
  253. package/renderer/components/docs/navigation/page-nav.tsx +0 -64
  254. package/renderer/components/docs/navigation/sidebar.tsx +0 -515
  255. package/renderer/components/docs/navigation/toc.tsx +0 -113
  256. package/renderer/components/docs/notice.tsx +0 -105
  257. package/renderer/components/docs-header.tsx +0 -278
  258. package/renderer/components/docs-viewer/agent/agent-chat.tsx +0 -2076
  259. package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +0 -90
  260. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +0 -49
  261. package/renderer/components/docs-viewer/agent/cards/index.tsx +0 -50
  262. package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +0 -212
  263. package/renderer/components/docs-viewer/agent/cards/types.ts +0 -84
  264. package/renderer/components/docs-viewer/agent/chat-message.tsx +0 -17
  265. package/renderer/components/docs-viewer/agent/index.tsx +0 -6
  266. package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +0 -119
  267. package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +0 -46
  268. package/renderer/components/docs-viewer/agent/messages/index.ts +0 -17
  269. package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +0 -721
  270. package/renderer/components/docs-viewer/agent/messages/types.ts +0 -61
  271. package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +0 -24
  272. package/renderer/components/docs-viewer/agent/messages/user-message.tsx +0 -51
  273. package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +0 -1283
  274. package/renderer/components/docs-viewer/content/changelog-page.tsx +0 -331
  275. package/renderer/components/docs-viewer/content/doc-page.tsx +0 -367
  276. package/renderer/components/docs-viewer/content/documentation-viewer.tsx +0 -17
  277. package/renderer/components/docs-viewer/content/index.tsx +0 -29
  278. package/renderer/components/docs-viewer/content/not-found-page.tsx +0 -330
  279. package/renderer/components/docs-viewer/content/request-details.tsx +0 -330
  280. package/renderer/components/docs-viewer/content/sections/auth.tsx +0 -69
  281. package/renderer/components/docs-viewer/content/sections/body.tsx +0 -66
  282. package/renderer/components/docs-viewer/content/sections/headers.tsx +0 -43
  283. package/renderer/components/docs-viewer/content/sections/overview.tsx +0 -40
  284. package/renderer/components/docs-viewer/content/sections/parameters.tsx +0 -43
  285. package/renderer/components/docs-viewer/content/sections/responses.tsx +0 -87
  286. package/renderer/components/docs-viewer/global-auth-modal.tsx +0 -352
  287. package/renderer/components/docs-viewer/index.tsx +0 -1670
  288. package/renderer/components/docs-viewer/playground/auth-editor.tsx +0 -280
  289. package/renderer/components/docs-viewer/playground/body-editor.tsx +0 -221
  290. package/renderer/components/docs-viewer/playground/code-editor.tsx +0 -224
  291. package/renderer/components/docs-viewer/playground/code-snippet.tsx +0 -387
  292. package/renderer/components/docs-viewer/playground/graphql-playground.tsx +0 -745
  293. package/renderer/components/docs-viewer/playground/index.tsx +0 -671
  294. package/renderer/components/docs-viewer/playground/key-value-editor.tsx +0 -261
  295. package/renderer/components/docs-viewer/playground/method-selector.tsx +0 -60
  296. package/renderer/components/docs-viewer/playground/request-builder.tsx +0 -179
  297. package/renderer/components/docs-viewer/playground/request-tabs.tsx +0 -237
  298. package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +0 -21
  299. package/renderer/components/docs-viewer/playground/response-cards/index.tsx +0 -93
  300. package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +0 -16
  301. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +0 -23
  302. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +0 -268
  303. package/renderer/components/docs-viewer/playground/response-cards/types.ts +0 -82
  304. package/renderer/components/docs-viewer/playground/response-viewer.tsx +0 -43
  305. package/renderer/components/docs-viewer/search/index.ts +0 -2
  306. package/renderer/components/docs-viewer/search/search-dialog.tsx +0 -331
  307. package/renderer/components/docs-viewer/search/use-search.ts +0 -117
  308. package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +0 -431
  309. package/renderer/components/docs-viewer/shared/method-badge.tsx +0 -41
  310. package/renderer/components/docs-viewer/shared/schema-viewer.tsx +0 -349
  311. package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +0 -259
  312. package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +0 -316
  313. package/renderer/components/docs-viewer/sidebar/index.tsx +0 -282
  314. package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +0 -202
  315. package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +0 -118
  316. package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +0 -212
  317. package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +0 -38
  318. package/renderer/components/theme-provider.tsx +0 -11
  319. package/renderer/components/theme-toggle.tsx +0 -76
  320. package/renderer/components/ui/badge.tsx +0 -46
  321. package/renderer/components/ui/button.tsx +0 -59
  322. package/renderer/components/ui/dialog.tsx +0 -118
  323. package/renderer/components/ui/dropdown-menu.tsx +0 -257
  324. package/renderer/components/ui/input.tsx +0 -21
  325. package/renderer/components/ui/label.tsx +0 -24
  326. package/renderer/components/ui/navigation-menu.tsx +0 -168
  327. package/renderer/components/ui/select.tsx +0 -190
  328. package/renderer/components/ui/spinner.tsx +0 -114
  329. package/renderer/components/ui/tabs.tsx +0 -66
  330. package/renderer/components/ui/tooltip.tsx +0 -61
  331. package/renderer/hooks/use-code-copy.ts +0 -88
  332. package/renderer/hooks/use-openapi-title.ts +0 -44
  333. package/renderer/lib/api-docs/agent/index.ts +0 -6
  334. package/renderer/lib/api-docs/agent/indexer.ts +0 -323
  335. package/renderer/lib/api-docs/agent/spec-summary.ts +0 -335
  336. package/renderer/lib/api-docs/agent/types.ts +0 -116
  337. package/renderer/lib/api-docs/auth/auth-context.tsx +0 -225
  338. package/renderer/lib/api-docs/auth/auth-storage.ts +0 -87
  339. package/renderer/lib/api-docs/auth/crypto.ts +0 -89
  340. package/renderer/lib/api-docs/auth/index.ts +0 -4
  341. package/renderer/lib/api-docs/code-editor/db.ts +0 -164
  342. package/renderer/lib/api-docs/code-editor/hooks.ts +0 -266
  343. package/renderer/lib/api-docs/code-editor/mode-context.tsx +0 -207
  344. package/renderer/lib/api-docs/code-editor/types.ts +0 -105
  345. package/renderer/lib/api-docs/codegen/definitions.ts +0 -297
  346. package/renderer/lib/api-docs/codegen/har.ts +0 -251
  347. package/renderer/lib/api-docs/codegen/index.ts +0 -159
  348. package/renderer/lib/api-docs/factories.ts +0 -170
  349. package/renderer/lib/api-docs/mobile-context.tsx +0 -112
  350. package/renderer/lib/api-docs/navigation-context.tsx +0 -88
  351. package/renderer/lib/api-docs/parsers/graphql/README.md +0 -129
  352. package/renderer/lib/api-docs/parsers/graphql/index.ts +0 -91
  353. package/renderer/lib/api-docs/parsers/graphql/parser.ts +0 -491
  354. package/renderer/lib/api-docs/parsers/graphql/transformer.ts +0 -246
  355. package/renderer/lib/api-docs/parsers/graphql/types.ts +0 -283
  356. package/renderer/lib/api-docs/parsers/openapi/README.md +0 -32
  357. package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +0 -60
  358. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +0 -574
  359. package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +0 -403
  360. package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +0 -232
  361. package/renderer/lib/api-docs/parsers/openapi/index.ts +0 -171
  362. package/renderer/lib/api-docs/parsers/openapi/transformer.ts +0 -278
  363. package/renderer/lib/api-docs/parsers/openapi/validator.ts +0 -31
  364. package/renderer/lib/api-docs/playground/context.tsx +0 -107
  365. package/renderer/lib/api-docs/playground/navigation-context.tsx +0 -124
  366. package/renderer/lib/api-docs/playground/request-builder.ts +0 -223
  367. package/renderer/lib/api-docs/playground/request-runner.ts +0 -282
  368. package/renderer/lib/api-docs/playground/types.ts +0 -35
  369. package/renderer/lib/api-docs/types.ts +0 -269
  370. package/renderer/lib/api-docs/utils.ts +0 -311
  371. package/renderer/lib/cache.ts +0 -193
  372. package/renderer/lib/docs/config/domain-schema.ts +0 -260
  373. package/renderer/lib/docs/config/index.ts +0 -43
  374. package/renderer/lib/docs/config/loader.ts +0 -142
  375. package/renderer/lib/docs/config/schema.ts +0 -308
  376. package/renderer/lib/docs/index.ts +0 -12
  377. package/renderer/lib/docs/mdx/compiler.ts +0 -176
  378. package/renderer/lib/docs/mdx/frontmatter.ts +0 -91
  379. package/renderer/lib/docs/mdx/index.ts +0 -26
  380. package/renderer/lib/docs/navigation/generator.ts +0 -348
  381. package/renderer/lib/docs/navigation/index.ts +0 -12
  382. package/renderer/lib/docs/navigation/types.ts +0 -123
  383. package/renderer/lib/docs-navigation-context.tsx +0 -80
  384. package/renderer/lib/multi-tenant/context.ts +0 -105
  385. package/renderer/lib/storage/blob.ts +0 -1083
  386. package/renderer/lib/utils/icons.ts +0 -48
  387. package/renderer/lib/utils.ts +0 -6
  388. 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
- }