@apiboost/omnispec 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/LICENSE.md +202 -0
  2. package/README.md +166 -0
  3. package/core/package.json +5 -0
  4. package/dist/cjs/asyncapi/index.js +17 -0
  5. package/dist/cjs/asyncapi/index.js.map +1 -0
  6. package/dist/cjs/chunks/AsyncApiSpec-TBlyRxTP.js +819 -0
  7. package/dist/cjs/chunks/AsyncApiSpec-TBlyRxTP.js.map +1 -0
  8. package/dist/cjs/chunks/Collapsible-BHAHk_Ep.js +7527 -0
  9. package/dist/cjs/chunks/Collapsible-BHAHk_Ep.js.map +1 -0
  10. package/dist/cjs/chunks/ErrorBoundary-c1piU8da.js +36 -0
  11. package/dist/cjs/chunks/ErrorBoundary-c1piU8da.js.map +1 -0
  12. package/dist/cjs/chunks/OmniSpecRenderer-CE4wxVTL.js +104 -0
  13. package/dist/cjs/chunks/OmniSpecRenderer-CE4wxVTL.js.map +1 -0
  14. package/dist/cjs/chunks/OpenApiSpec-D0JtmOVQ.js +3157 -0
  15. package/dist/cjs/chunks/OpenApiSpec-D0JtmOVQ.js.map +1 -0
  16. package/dist/cjs/chunks/OpenIdConnectManual-oEnN0QJ-.js +2416 -0
  17. package/dist/cjs/chunks/OpenIdConnectManual-oEnN0QJ-.js.map +1 -0
  18. package/dist/cjs/chunks/RendererRegistry-DQ7JBLMT.js +24 -0
  19. package/dist/cjs/chunks/RendererRegistry-DQ7JBLMT.js.map +1 -0
  20. package/dist/cjs/chunks/binary-response-CSrPCI-1.js +77 -0
  21. package/dist/cjs/chunks/binary-response-CSrPCI-1.js.map +1 -0
  22. package/dist/cjs/chunks/ref-resolver-DWu6Q6E5.js +7108 -0
  23. package/dist/cjs/chunks/ref-resolver-DWu6Q6E5.js.map +1 -0
  24. package/dist/cjs/chunks/ssrf-guard-B6T2A7Ho.js +25 -0
  25. package/dist/cjs/chunks/ssrf-guard-B6T2A7Ho.js.map +1 -0
  26. package/dist/cjs/chunks/useSpecDetector-A4OwYrmY.js +252 -0
  27. package/dist/cjs/chunks/useSpecDetector-A4OwYrmY.js.map +1 -0
  28. package/dist/cjs/chunks/useSpecFetcher-BKz1jHTV.js +13669 -0
  29. package/dist/cjs/chunks/useSpecFetcher-BKz1jHTV.js.map +1 -0
  30. package/dist/cjs/core/public.js +198 -0
  31. package/dist/cjs/core/public.js.map +1 -0
  32. package/dist/cjs/index.js +36 -0
  33. package/dist/cjs/index.js.map +1 -0
  34. package/dist/cjs/openapi/index.js +19 -0
  35. package/dist/cjs/openapi/index.js.map +1 -0
  36. package/dist/cjs/server/index.js +154 -0
  37. package/dist/cjs/server/index.js.map +1 -0
  38. package/dist/cjs/wc/index.js +428 -0
  39. package/dist/cjs/wc/index.js.map +1 -0
  40. package/dist/esm/asyncapi/index.js +11 -0
  41. package/dist/esm/asyncapi/index.js.map +1 -0
  42. package/dist/esm/chunks/AsyncApiSpec-C3lsUpZk.js +817 -0
  43. package/dist/esm/chunks/AsyncApiSpec-C3lsUpZk.js.map +1 -0
  44. package/dist/esm/chunks/Collapsible-DA6-nS46.js +7482 -0
  45. package/dist/esm/chunks/Collapsible-DA6-nS46.js.map +1 -0
  46. package/dist/esm/chunks/ErrorBoundary-posRNrbt.js +34 -0
  47. package/dist/esm/chunks/ErrorBoundary-posRNrbt.js.map +1 -0
  48. package/dist/esm/chunks/OmniSpecRenderer-MqsQFXro.js +102 -0
  49. package/dist/esm/chunks/OmniSpecRenderer-MqsQFXro.js.map +1 -0
  50. package/dist/esm/chunks/OpenApiSpec-Cy-oW6jA.js +3153 -0
  51. package/dist/esm/chunks/OpenApiSpec-Cy-oW6jA.js.map +1 -0
  52. package/dist/esm/chunks/OpenIdConnectManual-COfITasf.js +2393 -0
  53. package/dist/esm/chunks/OpenIdConnectManual-COfITasf.js.map +1 -0
  54. package/dist/esm/chunks/RendererRegistry-zlh-WYbU.js +21 -0
  55. package/dist/esm/chunks/RendererRegistry-zlh-WYbU.js.map +1 -0
  56. package/dist/esm/chunks/binary-response-Cre_H-Rt.js +72 -0
  57. package/dist/esm/chunks/binary-response-Cre_H-Rt.js.map +1 -0
  58. package/dist/esm/chunks/ref-resolver-BIrHJOjz.js +7105 -0
  59. package/dist/esm/chunks/ref-resolver-BIrHJOjz.js.map +1 -0
  60. package/dist/esm/chunks/ssrf-guard-CsZoYdEq.js +23 -0
  61. package/dist/esm/chunks/ssrf-guard-CsZoYdEq.js.map +1 -0
  62. package/dist/esm/chunks/useSpecDetector-5SGcKnJx.js +248 -0
  63. package/dist/esm/chunks/useSpecDetector-5SGcKnJx.js.map +1 -0
  64. package/dist/esm/chunks/useSpecFetcher-CZvAnU7Z.js +13625 -0
  65. package/dist/esm/chunks/useSpecFetcher-CZvAnU7Z.js.map +1 -0
  66. package/dist/esm/core/public.js +102 -0
  67. package/dist/esm/core/public.js.map +1 -0
  68. package/dist/esm/index.js +17 -0
  69. package/dist/esm/index.js.map +1 -0
  70. package/dist/esm/openapi/index.js +13 -0
  71. package/dist/esm/openapi/index.js.map +1 -0
  72. package/dist/esm/server/index.js +152 -0
  73. package/dist/esm/server/index.js.map +1 -0
  74. package/dist/esm/wc/index.js +403 -0
  75. package/dist/esm/wc/index.js.map +1 -0
  76. package/dist/types/asyncapi/AsyncApiSpec.d.ts +12 -0
  77. package/dist/types/asyncapi/AsyncApiSpec.d.ts.map +1 -0
  78. package/dist/types/asyncapi/components/AsyncOverview.d.ts +16 -0
  79. package/dist/types/asyncapi/components/AsyncOverview.d.ts.map +1 -0
  80. package/dist/types/asyncapi/components/ChannelDetail.d.ts +19 -0
  81. package/dist/types/asyncapi/components/ChannelDetail.d.ts.map +1 -0
  82. package/dist/types/asyncapi/components/ComponentsSection.d.ts +16 -0
  83. package/dist/types/asyncapi/components/ComponentsSection.d.ts.map +1 -0
  84. package/dist/types/asyncapi/components/ProtocolBadge.d.ts +16 -0
  85. package/dist/types/asyncapi/components/ProtocolBadge.d.ts.map +1 -0
  86. package/dist/types/asyncapi/components/ServerList.d.ts +16 -0
  87. package/dist/types/asyncapi/components/ServerList.d.ts.map +1 -0
  88. package/dist/types/asyncapi/hooks/useAsyncApiSpec.d.ts +12 -0
  89. package/dist/types/asyncapi/hooks/useAsyncApiSpec.d.ts.map +1 -0
  90. package/dist/types/asyncapi/index.d.ts +11 -0
  91. package/dist/types/asyncapi/index.d.ts.map +1 -0
  92. package/dist/types/asyncapi/parser/asyncapi-parser.d.ts +12 -0
  93. package/dist/types/asyncapi/parser/asyncapi-parser.d.ts.map +1 -0
  94. package/dist/types/asyncapi/types/asyncapi.types.d.ts +125 -0
  95. package/dist/types/asyncapi/types/asyncapi.types.d.ts.map +1 -0
  96. package/dist/types/core/components/Auth/ApiKeyAuth.d.ts +30 -0
  97. package/dist/types/core/components/Auth/ApiKeyAuth.d.ts.map +1 -0
  98. package/dist/types/core/components/Auth/AuthPanel.d.ts +18 -0
  99. package/dist/types/core/components/Auth/AuthPanel.d.ts.map +1 -0
  100. package/dist/types/core/components/Auth/AuthPanelModal.d.ts +24 -0
  101. package/dist/types/core/components/Auth/AuthPanelModal.d.ts.map +1 -0
  102. package/dist/types/core/components/Auth/BasicAuth.d.ts +20 -0
  103. package/dist/types/core/components/Auth/BasicAuth.d.ts.map +1 -0
  104. package/dist/types/core/components/Auth/BearerAuth.d.ts +20 -0
  105. package/dist/types/core/components/Auth/BearerAuth.d.ts.map +1 -0
  106. package/dist/types/core/components/Auth/OAuth2AuthManual.d.ts +37 -0
  107. package/dist/types/core/components/Auth/OAuth2AuthManual.d.ts.map +1 -0
  108. package/dist/types/core/components/Auth/OpenIdConnectManual.d.ts +33 -0
  109. package/dist/types/core/components/Auth/OpenIdConnectManual.d.ts.map +1 -0
  110. package/dist/types/core/components/Auth/SecretInput.d.ts +27 -0
  111. package/dist/types/core/components/Auth/SecretInput.d.ts.map +1 -0
  112. package/dist/types/core/components/Auth/index.d.ts +16 -0
  113. package/dist/types/core/components/Auth/index.d.ts.map +1 -0
  114. package/dist/types/core/components/CodeBlock/CodeBlock.d.ts +32 -0
  115. package/dist/types/core/components/CodeBlock/CodeBlock.d.ts.map +1 -0
  116. package/dist/types/core/components/CodeBlock/index.d.ts +12 -0
  117. package/dist/types/core/components/CodeBlock/index.d.ts.map +1 -0
  118. package/dist/types/core/components/Layout/DocLayout.d.ts +24 -0
  119. package/dist/types/core/components/Layout/DocLayout.d.ts.map +1 -0
  120. package/dist/types/core/components/Layout/MobileDrawerDismissContext.d.ts +20 -0
  121. package/dist/types/core/components/Layout/MobileDrawerDismissContext.d.ts.map +1 -0
  122. package/dist/types/core/components/Layout/SpecStatusScreen.d.ts +38 -0
  123. package/dist/types/core/components/Layout/SpecStatusScreen.d.ts.map +1 -0
  124. package/dist/types/core/components/Layout/index.d.ts +11 -0
  125. package/dist/types/core/components/Layout/index.d.ts.map +1 -0
  126. package/dist/types/core/components/MarkdownRenderer/MarkdownRenderer.d.ts +16 -0
  127. package/dist/types/core/components/MarkdownRenderer/MarkdownRenderer.d.ts.map +1 -0
  128. package/dist/types/core/components/MarkdownRenderer/index.d.ts +11 -0
  129. package/dist/types/core/components/MarkdownRenderer/index.d.ts.map +1 -0
  130. package/dist/types/core/components/Navigation/CustomNavSection.d.ts +16 -0
  131. package/dist/types/core/components/Navigation/CustomNavSection.d.ts.map +1 -0
  132. package/dist/types/core/components/Navigation/NavTree.d.ts +32 -0
  133. package/dist/types/core/components/Navigation/NavTree.d.ts.map +1 -0
  134. package/dist/types/core/components/Navigation/SearchBar.d.ts +16 -0
  135. package/dist/types/core/components/Navigation/SearchBar.d.ts.map +1 -0
  136. package/dist/types/core/components/Navigation/buildSidebar.d.ts +13 -0
  137. package/dist/types/core/components/Navigation/buildSidebar.d.ts.map +1 -0
  138. package/dist/types/core/components/Navigation/index.d.ts +13 -0
  139. package/dist/types/core/components/Navigation/index.d.ts.map +1 -0
  140. package/dist/types/core/components/Reference/ReferenceLayout.d.ts +19 -0
  141. package/dist/types/core/components/Reference/ReferenceLayout.d.ts.map +1 -0
  142. package/dist/types/core/components/Reference/ReferenceOperationDetail.d.ts +42 -0
  143. package/dist/types/core/components/Reference/ReferenceOperationDetail.d.ts.map +1 -0
  144. package/dist/types/core/components/Reference/SamplesPanel.d.ts +33 -0
  145. package/dist/types/core/components/Reference/SamplesPanel.d.ts.map +1 -0
  146. package/dist/types/core/components/SchemaViewer/SchemaPresentation.d.ts +147 -0
  147. package/dist/types/core/components/SchemaViewer/SchemaPresentation.d.ts.map +1 -0
  148. package/dist/types/core/components/SchemaViewer/SchemaPrimitives.d.ts +66 -0
  149. package/dist/types/core/components/SchemaViewer/SchemaPrimitives.d.ts.map +1 -0
  150. package/dist/types/core/components/SchemaViewer/SchemaTable.d.ts +16 -0
  151. package/dist/types/core/components/SchemaViewer/SchemaTable.d.ts.map +1 -0
  152. package/dist/types/core/components/SchemaViewer/SchemaTree.d.ts +26 -0
  153. package/dist/types/core/components/SchemaViewer/SchemaTree.d.ts.map +1 -0
  154. package/dist/types/core/components/SchemaViewer/index.d.ts +16 -0
  155. package/dist/types/core/components/SchemaViewer/index.d.ts.map +1 -0
  156. package/dist/types/core/components/SchemaViewer/schema-style.d.ts +45 -0
  157. package/dist/types/core/components/SchemaViewer/schema-style.d.ts.map +1 -0
  158. package/dist/types/core/components/SchemaViewer/schema-utils.d.ts +83 -0
  159. package/dist/types/core/components/SchemaViewer/schema-utils.d.ts.map +1 -0
  160. package/dist/types/core/components/TryIt/CodeSamples.d.ts +26 -0
  161. package/dist/types/core/components/TryIt/CodeSamples.d.ts.map +1 -0
  162. package/dist/types/core/components/TryIt/CustomHeaders.d.ts +24 -0
  163. package/dist/types/core/components/TryIt/CustomHeaders.d.ts.map +1 -0
  164. package/dist/types/core/components/TryIt/InlineTryIt.d.ts +26 -0
  165. package/dist/types/core/components/TryIt/InlineTryIt.d.ts.map +1 -0
  166. package/dist/types/core/components/TryIt/ParameterForm.d.ts +34 -0
  167. package/dist/types/core/components/TryIt/ParameterForm.d.ts.map +1 -0
  168. package/dist/types/core/components/TryIt/RequestBodyEditor.d.ts +34 -0
  169. package/dist/types/core/components/TryIt/RequestBodyEditor.d.ts.map +1 -0
  170. package/dist/types/core/components/TryIt/ResponseViewer.d.ts +18 -0
  171. package/dist/types/core/components/TryIt/ResponseViewer.d.ts.map +1 -0
  172. package/dist/types/core/components/TryIt/TryItPanel.d.ts +38 -0
  173. package/dist/types/core/components/TryIt/TryItPanel.d.ts.map +1 -0
  174. package/dist/types/core/components/TryIt/code-generators.d.ts +23 -0
  175. package/dist/types/core/components/TryIt/code-generators.d.ts.map +1 -0
  176. package/dist/types/core/components/TryIt/curl-generator.d.ts +12 -0
  177. package/dist/types/core/components/TryIt/curl-generator.d.ts.map +1 -0
  178. package/dist/types/core/components/TryIt/index.d.ts +16 -0
  179. package/dist/types/core/components/TryIt/index.d.ts.map +1 -0
  180. package/dist/types/core/components/common/Badge.d.ts +19 -0
  181. package/dist/types/core/components/common/Badge.d.ts.map +1 -0
  182. package/dist/types/core/components/common/Button.d.ts +44 -0
  183. package/dist/types/core/components/common/Button.d.ts.map +1 -0
  184. package/dist/types/core/components/common/Collapsible.d.ts +23 -0
  185. package/dist/types/core/components/common/Collapsible.d.ts.map +1 -0
  186. package/dist/types/core/components/common/CopyButton.d.ts +16 -0
  187. package/dist/types/core/components/common/CopyButton.d.ts.map +1 -0
  188. package/dist/types/core/components/common/ErrorBoundary.d.ts +40 -0
  189. package/dist/types/core/components/common/ErrorBoundary.d.ts.map +1 -0
  190. package/dist/types/core/components/common/ErrorMessage.d.ts +16 -0
  191. package/dist/types/core/components/common/ErrorMessage.d.ts.map +1 -0
  192. package/dist/types/core/components/common/ExampleSelector.d.ts +29 -0
  193. package/dist/types/core/components/common/ExampleSelector.d.ts.map +1 -0
  194. package/dist/types/core/components/common/ExpandableCard.d.ts +27 -0
  195. package/dist/types/core/components/common/ExpandableCard.d.ts.map +1 -0
  196. package/dist/types/core/components/common/Icon.d.ts +53 -0
  197. package/dist/types/core/components/common/Icon.d.ts.map +1 -0
  198. package/dist/types/core/components/common/LinkableHeading.d.ts +19 -0
  199. package/dist/types/core/components/common/LinkableHeading.d.ts.map +1 -0
  200. package/dist/types/core/components/common/LoadingScreen.d.ts +13 -0
  201. package/dist/types/core/components/common/LoadingScreen.d.ts.map +1 -0
  202. package/dist/types/core/components/common/MethodBar.d.ts +18 -0
  203. package/dist/types/core/components/common/MethodBar.d.ts.map +1 -0
  204. package/dist/types/core/components/common/Modal.d.ts +19 -0
  205. package/dist/types/core/components/common/Modal.d.ts.map +1 -0
  206. package/dist/types/core/components/common/ResponsiveColumns.d.ts +17 -0
  207. package/dist/types/core/components/common/ResponsiveColumns.d.ts.map +1 -0
  208. package/dist/types/core/components/common/SpecToolbar.d.ts +27 -0
  209. package/dist/types/core/components/common/SpecToolbar.d.ts.map +1 -0
  210. package/dist/types/core/components/common/Tabs.d.ts +29 -0
  211. package/dist/types/core/components/common/Tabs.d.ts.map +1 -0
  212. package/dist/types/core/components/common/Tooltip.d.ts +17 -0
  213. package/dist/types/core/components/common/Tooltip.d.ts.map +1 -0
  214. package/dist/types/core/components/common/UpgradePrompt.d.ts +18 -0
  215. package/dist/types/core/components/common/UpgradePrompt.d.ts.map +1 -0
  216. package/dist/types/core/components/common/index.d.ts +18 -0
  217. package/dist/types/core/components/common/index.d.ts.map +1 -0
  218. package/dist/types/core/context/AuthContext.d.ts +35 -0
  219. package/dist/types/core/context/AuthContext.d.ts.map +1 -0
  220. package/dist/types/core/context/ConfigContext.d.ts +55 -0
  221. package/dist/types/core/context/ConfigContext.d.ts.map +1 -0
  222. package/dist/types/core/context/ExpandContext.d.ts +33 -0
  223. package/dist/types/core/context/ExpandContext.d.ts.map +1 -0
  224. package/dist/types/core/context/RendererRegistry.d.ts +24 -0
  225. package/dist/types/core/context/RendererRegistry.d.ts.map +1 -0
  226. package/dist/types/core/context/index.d.ts +14 -0
  227. package/dist/types/core/context/index.d.ts.map +1 -0
  228. package/dist/types/core/hooks/index.d.ts +12 -0
  229. package/dist/types/core/hooks/index.d.ts.map +1 -0
  230. package/dist/types/core/hooks/useHashScroll.d.ts +15 -0
  231. package/dist/types/core/hooks/useHashScroll.d.ts.map +1 -0
  232. package/dist/types/core/hooks/useScrollSpy.d.ts +33 -0
  233. package/dist/types/core/hooks/useScrollSpy.d.ts.map +1 -0
  234. package/dist/types/core/hooks/useSegmentedRouter.d.ts +19 -0
  235. package/dist/types/core/hooks/useSegmentedRouter.d.ts.map +1 -0
  236. package/dist/types/core/hooks/useSpecDetector.d.ts +13 -0
  237. package/dist/types/core/hooks/useSpecDetector.d.ts.map +1 -0
  238. package/dist/types/core/hooks/useSpecFetcher.d.ts +17 -0
  239. package/dist/types/core/hooks/useSpecFetcher.d.ts.map +1 -0
  240. package/dist/types/core/public.d.ts +86 -0
  241. package/dist/types/core/public.d.ts.map +1 -0
  242. package/dist/types/core/styles/breakpoints.d.ts +33 -0
  243. package/dist/types/core/styles/breakpoints.d.ts.map +1 -0
  244. package/dist/types/core/styles/css.d.ts +17 -0
  245. package/dist/types/core/styles/css.d.ts.map +1 -0
  246. package/dist/types/core/styles/styled.d.ts +25 -0
  247. package/dist/types/core/styles/styled.d.ts.map +1 -0
  248. package/dist/types/core/themes/ThemeProvider.d.ts +25 -0
  249. package/dist/types/core/themes/ThemeProvider.d.ts.map +1 -0
  250. package/dist/types/core/themes/index.d.ts +12 -0
  251. package/dist/types/core/themes/index.d.ts.map +1 -0
  252. package/dist/types/core/themes/tokens.d.ts +13 -0
  253. package/dist/types/core/themes/tokens.d.ts.map +1 -0
  254. package/dist/types/core/types/auth.types.d.ts +83 -0
  255. package/dist/types/core/types/auth.types.d.ts.map +1 -0
  256. package/dist/types/core/types/common.types.d.ts +141 -0
  257. package/dist/types/core/types/common.types.d.ts.map +1 -0
  258. package/dist/types/core/types/index.d.ts +16 -0
  259. package/dist/types/core/types/index.d.ts.map +1 -0
  260. package/dist/types/core/types/interactive-auth.types.d.ts +37 -0
  261. package/dist/types/core/types/interactive-auth.types.d.ts.map +1 -0
  262. package/dist/types/core/types/sidebar-nav.types.d.ts +41 -0
  263. package/dist/types/core/types/sidebar-nav.types.d.ts.map +1 -0
  264. package/dist/types/core/types/spec-detection.types.d.ts +26 -0
  265. package/dist/types/core/types/spec-detection.types.d.ts.map +1 -0
  266. package/dist/types/core/types/theme.types.d.ts +119 -0
  267. package/dist/types/core/types/theme.types.d.ts.map +1 -0
  268. package/dist/types/core/types/try-it.types.d.ts +50 -0
  269. package/dist/types/core/types/try-it.types.d.ts.map +1 -0
  270. package/dist/types/core/utils/binary-response.d.ts +24 -0
  271. package/dist/types/core/utils/binary-response.d.ts.map +1 -0
  272. package/dist/types/core/utils/detect-spec.d.ts +12 -0
  273. package/dist/types/core/utils/detect-spec.d.ts.map +1 -0
  274. package/dist/types/core/utils/direct-client.d.ts +20 -0
  275. package/dist/types/core/utils/direct-client.d.ts.map +1 -0
  276. package/dist/types/core/utils/fetch-spec.d.ts +15 -0
  277. package/dist/types/core/utils/fetch-spec.d.ts.map +1 -0
  278. package/dist/types/core/utils/index.d.ts +14 -0
  279. package/dist/types/core/utils/index.d.ts.map +1 -0
  280. package/dist/types/core/utils/proxy-client.d.ts +19 -0
  281. package/dist/types/core/utils/proxy-client.d.ts.map +1 -0
  282. package/dist/types/core/utils/ref-security.d.ts +78 -0
  283. package/dist/types/core/utils/ref-security.d.ts.map +1 -0
  284. package/dist/types/core/utils/resolve-download-link.d.ts +23 -0
  285. package/dist/types/core/utils/resolve-download-link.d.ts.map +1 -0
  286. package/dist/types/core/utils/sanitize-html.d.ts +16 -0
  287. package/dist/types/core/utils/sanitize-html.d.ts.map +1 -0
  288. package/dist/types/core/utils/tryit-storage.d.ts +45 -0
  289. package/dist/types/core/utils/tryit-storage.d.ts.map +1 -0
  290. package/dist/types/index.d.ts +29 -0
  291. package/dist/types/index.d.ts.map +1 -0
  292. package/dist/types/openapi/OpenApiSpec.d.ts +12 -0
  293. package/dist/types/openapi/OpenApiSpec.d.ts.map +1 -0
  294. package/dist/types/openapi/components/ApiOverview.d.ts +19 -0
  295. package/dist/types/openapi/components/ApiOverview.d.ts.map +1 -0
  296. package/dist/types/openapi/components/CallbacksSection.d.ts +19 -0
  297. package/dist/types/openapi/components/CallbacksSection.d.ts.map +1 -0
  298. package/dist/types/openapi/components/ComponentsSection.d.ts +19 -0
  299. package/dist/types/openapi/components/ComponentsSection.d.ts.map +1 -0
  300. package/dist/types/openapi/components/EndpointCard.d.ts +20 -0
  301. package/dist/types/openapi/components/EndpointCard.d.ts.map +1 -0
  302. package/dist/types/openapi/components/OperationDetail.d.ts +28 -0
  303. package/dist/types/openapi/components/OperationDetail.d.ts.map +1 -0
  304. package/dist/types/openapi/components/OperationView.d.ts +19 -0
  305. package/dist/types/openapi/components/OperationView.d.ts.map +1 -0
  306. package/dist/types/openapi/components/SegmentedContent.d.ts +22 -0
  307. package/dist/types/openapi/components/SegmentedContent.d.ts.map +1 -0
  308. package/dist/types/openapi/components/ServerSelector.d.ts +18 -0
  309. package/dist/types/openapi/components/ServerSelector.d.ts.map +1 -0
  310. package/dist/types/openapi/components/TagGroup.d.ts +19 -0
  311. package/dist/types/openapi/components/TagGroup.d.ts.map +1 -0
  312. package/dist/types/openapi/hooks/useOpenApiSpec.d.ts +13 -0
  313. package/dist/types/openapi/hooks/useOpenApiSpec.d.ts.map +1 -0
  314. package/dist/types/openapi/index.d.ts +11 -0
  315. package/dist/types/openapi/index.d.ts.map +1 -0
  316. package/dist/types/openapi/parser/openapi-parser.d.ts +13 -0
  317. package/dist/types/openapi/parser/openapi-parser.d.ts.map +1 -0
  318. package/dist/types/openapi/parser/ref-resolver.d.ts +18 -0
  319. package/dist/types/openapi/parser/ref-resolver.d.ts.map +1 -0
  320. package/dist/types/openapi/search.d.ts +16 -0
  321. package/dist/types/openapi/search.d.ts.map +1 -0
  322. package/dist/types/openapi/types/openapi.types.d.ts +139 -0
  323. package/dist/types/openapi/types/openapi.types.d.ts.map +1 -0
  324. package/dist/types/server/index.d.ts +12 -0
  325. package/dist/types/server/index.d.ts.map +1 -0
  326. package/dist/types/server/proxy-router.d.ts +44 -0
  327. package/dist/types/server/proxy-router.d.ts.map +1 -0
  328. package/dist/types/server/ssrf-guard.d.ts +20 -0
  329. package/dist/types/server/ssrf-guard.d.ts.map +1 -0
  330. package/dist/types/test-setup.d.ts +11 -0
  331. package/dist/types/test-setup.d.ts.map +1 -0
  332. package/dist/types/unified/OmniSpecRenderer.d.ts +18 -0
  333. package/dist/types/unified/OmniSpecRenderer.d.ts.map +1 -0
  334. package/dist/types/unified/index.d.ts +12 -0
  335. package/dist/types/unified/index.d.ts.map +1 -0
  336. package/dist/types/wc/OmniSpecRendererElement.d.ts +48 -0
  337. package/dist/types/wc/OmniSpecRendererElement.d.ts.map +1 -0
  338. package/dist/types/wc/attribute-bridge.d.ts +96 -0
  339. package/dist/types/wc/attribute-bridge.d.ts.map +1 -0
  340. package/dist/types/wc/index.d.ts +42 -0
  341. package/dist/types/wc/index.d.ts.map +1 -0
  342. package/dist/types/wc/style-injection.d.ts +24 -0
  343. package/dist/types/wc/style-injection.d.ts.map +1 -0
  344. package/dist/wc/standalone.js +3 -0
  345. package/dist/wc/standalone.js.LICENSE.txt +65 -0
  346. package/dist/wc/standalone.js.map +1 -0
  347. package/package.json +167 -0
@@ -0,0 +1,198 @@
1
+ 'use strict';
2
+
3
+ var useSpecFetcher = require('../chunks/useSpecFetcher-BKz1jHTV.js');
4
+ var OpenIdConnectManual = require('../chunks/OpenIdConnectManual-oEnN0QJ-.js');
5
+ var RendererRegistry = require('../chunks/RendererRegistry-DQ7JBLMT.js');
6
+ var Collapsible = require('../chunks/Collapsible-BHAHk_Ep.js');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var React = require('react');
9
+ var css = require('@emotion/css');
10
+ var useSpecDetector = require('../chunks/useSpecDetector-A4OwYrmY.js');
11
+ require('../chunks/binary-response-CSrPCI-1.js');
12
+ require('@emotion/styled');
13
+
14
+ const copyBtnStyle = css.css({
15
+ background: "none",
16
+ border: "1px solid var(--omnispec-border-color)",
17
+ borderRadius: "var(--omnispec-border-radius)",
18
+ padding: "4px 10px",
19
+ fontSize: "var(--omnispec-font-size-xs)",
20
+ color: "var(--omnispec-fg-secondary)",
21
+ cursor: "pointer",
22
+ "&:hover": {
23
+ color: "var(--omnispec-fg-primary)",
24
+ borderColor: "var(--omnispec-fg-muted)"
25
+ }
26
+ });
27
+ function CopyButton({ text, label = "Copy" }) {
28
+ const [copied, setCopied] = React.useState(false);
29
+ const handleCopy = React.useCallback(async () => {
30
+ await navigator.clipboard.writeText(text);
31
+ setCopied(true);
32
+ setTimeout(() => setCopied(false), 2e3);
33
+ }, [text]);
34
+ return /* @__PURE__ */ jsxRuntime.jsx(
35
+ "button",
36
+ {
37
+ type: "button",
38
+ onClick: handleCopy,
39
+ className: copyBtnStyle,
40
+ "aria-label": label,
41
+ children: copied ? "Copied!" : label
42
+ }
43
+ );
44
+ }
45
+
46
+ const wrapperStyle = css.css({
47
+ position: "relative",
48
+ display: "inline-block"
49
+ });
50
+ const tipStyle = css.css({
51
+ position: "fixed",
52
+ padding: "4px 8px",
53
+ backgroundColor: "var(--omnispec-fg-primary)",
54
+ color: "var(--omnispec-bg-primary)",
55
+ fontSize: "var(--omnispec-font-size-xs)",
56
+ borderRadius: "4px",
57
+ whiteSpace: "nowrap",
58
+ zIndex: 9999,
59
+ pointerEvents: "none"
60
+ });
61
+ function Tooltip({ content, children }) {
62
+ const [visible, setVisible] = React.useState(false);
63
+ const [pos, setPos] = React.useState({ top: 0, left: 0 });
64
+ const wrapperRef = React.useRef(null);
65
+ const handleEnter = React.useCallback(() => {
66
+ if (wrapperRef.current) {
67
+ const rect = wrapperRef.current.getBoundingClientRect();
68
+ setPos({
69
+ top: rect.top - 6,
70
+ left: rect.left + rect.width / 2
71
+ });
72
+ }
73
+ setVisible(true);
74
+ }, []);
75
+ return /* @__PURE__ */ jsxRuntime.jsxs(
76
+ "span",
77
+ {
78
+ ref: wrapperRef,
79
+ className: `omnispec-tooltip ${wrapperStyle}`,
80
+ onMouseEnter: handleEnter,
81
+ onMouseLeave: () => setVisible(false),
82
+ children: [
83
+ children,
84
+ visible && /* @__PURE__ */ jsxRuntime.jsx(
85
+ "span",
86
+ {
87
+ className: tipStyle,
88
+ role: "tooltip",
89
+ style: {
90
+ top: pos.top,
91
+ left: pos.left,
92
+ transform: "translate(-50%, -100%)"
93
+ },
94
+ children: content
95
+ }
96
+ )
97
+ ]
98
+ }
99
+ );
100
+ }
101
+
102
+ exports.Button = useSpecFetcher.Button;
103
+ exports.ConfigProvider = useSpecFetcher.ConfigProvider;
104
+ exports.CustomNavSection = useSpecFetcher.CustomNavSection;
105
+ exports.DEFAULT_SCHEMA_STYLE = useSpecFetcher.DEFAULT_SCHEMA_STYLE;
106
+ exports.DocLayout = useSpecFetcher.DocLayout;
107
+ exports.ErrorMessage = useSpecFetcher.ErrorMessage;
108
+ exports.FREE_SCHEMA_STYLES = useSpecFetcher.FREE_SCHEMA_STYLES;
109
+ exports.Icon = useSpecFetcher.Icon;
110
+ exports.LoadingScreen = useSpecFetcher.LoadingScreen;
111
+ exports.NavTree = useSpecFetcher.NavTree;
112
+ exports.SpecStatusScreen = useSpecFetcher.SpecStatusScreen;
113
+ exports.SpecType = useSpecFetcher.SpecType;
114
+ exports.ThemeProvider = useSpecFetcher.ThemeProvider;
115
+ exports.breakpoints = useSpecFetcher.breakpoints;
116
+ exports.buildSidebar = useSpecFetcher.buildSidebar;
117
+ exports.darkTheme = useSpecFetcher.darkTheme;
118
+ exports.fetchSpec = useSpecFetcher.fetchSpec;
119
+ exports.isSidebarNavGroup = useSpecFetcher.isSidebarNavGroup;
120
+ exports.lightTheme = useSpecFetcher.lightTheme;
121
+ exports.mq = useSpecFetcher.mq;
122
+ exports.resolveSchemaStyle = useSpecFetcher.resolveSchemaStyle;
123
+ exports.useConfig = useSpecFetcher.useConfig;
124
+ exports.useSpecFetcher = useSpecFetcher.useSpecFetcher;
125
+ exports.useTheme = useSpecFetcher.useTheme;
126
+ exports.AuthProvider = OpenIdConnectManual.AuthProvider;
127
+ exports.CodeSamples = OpenIdConnectManual.CodeSamples;
128
+ exports.LinkableHeading = OpenIdConnectManual.LinkableHeading;
129
+ exports.Modal = OpenIdConnectManual.Modal;
130
+ exports.OAuth2AuthManual = OpenIdConnectManual.OAuth2AuthManual;
131
+ exports.OpenIdConnectManual = OpenIdConnectManual.OpenIdConnectManual;
132
+ exports.ReferenceLayout = OpenIdConnectManual.ReferenceLayout;
133
+ exports.ReferenceOperationDetail = OpenIdConnectManual.ReferenceOperationDetail;
134
+ exports.ResponseViewer = OpenIdConnectManual.ResponseViewer;
135
+ exports.ResponsiveColumns = OpenIdConnectManual.ResponsiveColumns;
136
+ exports.SamplesPanel = OpenIdConnectManual.SamplesPanel;
137
+ exports.SecretInput = OpenIdConnectManual.SecretInput;
138
+ exports.authStyles = OpenIdConnectManual.authStyles;
139
+ exports.sendDirectRequest = OpenIdConnectManual.sendDirectRequest;
140
+ exports.sendProxiedRequest = OpenIdConnectManual.sendProxiedRequest;
141
+ exports.useAuth = OpenIdConnectManual.useAuth;
142
+ exports.RendererRegistryProvider = RendererRegistry.RendererRegistryProvider;
143
+ exports.useRendererRegistry = RendererRegistry.useRendererRegistry;
144
+ exports.Badge = Collapsible.Badge;
145
+ exports.CodeBlock = Collapsible.CodeBlock;
146
+ exports.Collapsible = Collapsible.Collapsible;
147
+ exports.EnumItem = Collapsible.EnumItem;
148
+ exports.EnumLabel = Collapsible.EnumLabel;
149
+ exports.EnumList = Collapsible.EnumList;
150
+ exports.ExpandableCard = Collapsible.ExpandableCard;
151
+ exports.FieldDescription = Collapsible.FieldDescription;
152
+ exports.FieldName = Collapsible.FieldName;
153
+ exports.MarkdownRenderer = Collapsible.MarkdownRenderer;
154
+ exports.MethodBar = Collapsible.MethodBar;
155
+ exports.PresentationChildren = Collapsible.PresentationChildren;
156
+ exports.PresentationContainer = Collapsible.PresentationContainer;
157
+ exports.PresentationRow = Collapsible.PresentationRow;
158
+ exports.PropDefault = Collapsible.PropDefault;
159
+ exports.PropDesc = Collapsible.PropDesc;
160
+ exports.PropFormat = Collapsible.PropFormat;
161
+ exports.PropName = Collapsible.PropName;
162
+ exports.PropReq = Collapsible.PropReq;
163
+ exports.PropRequiredStar = Collapsible.PropRequiredStar;
164
+ exports.PropType = Collapsible.PropType;
165
+ exports.SchemaBadge = Collapsible.SchemaBadge;
166
+ exports.SchemaPropChildren = Collapsible.SchemaPropChildren;
167
+ exports.SchemaPropRow = Collapsible.SchemaPropRow;
168
+ exports.SchemaRefLink = Collapsible.SchemaRefLink;
169
+ exports.SchemaSectionTitle = Collapsible.SchemaSectionTitle;
170
+ exports.SchemaTree = Collapsible.SchemaTree;
171
+ exports.SearchBar = Collapsible.SearchBar;
172
+ exports.SpecToolbar = Collapsible.SpecToolbar;
173
+ exports.Tabs = Collapsible.Tabs;
174
+ exports.flattenNavItemIds = Collapsible.flattenNavItemIds;
175
+ exports.generateExample = Collapsible.generateExample;
176
+ exports.requestExpand = Collapsible.requestExpand;
177
+ exports.resolveDownloadLink = Collapsible.resolveDownloadLink;
178
+ exports.schemaToNodes = Collapsible.schemaToNodes;
179
+ exports.useHashScroll = Collapsible.useHashScroll;
180
+ exports.useScrollSpy = Collapsible.useScrollSpy;
181
+ Object.defineProperty(exports, "css", {
182
+ enumerable: true,
183
+ get: function () { return css.css; }
184
+ });
185
+ Object.defineProperty(exports, "cx", {
186
+ enumerable: true,
187
+ get: function () { return css.cx; }
188
+ });
189
+ Object.defineProperty(exports, "keyframes", {
190
+ enumerable: true,
191
+ get: function () { return css.keyframes; }
192
+ });
193
+ exports.UpgradePrompt = useSpecDetector.UpgradePrompt;
194
+ exports.detectSpecType = useSpecDetector.detectSpecType;
195
+ exports.useSpecDetector = useSpecDetector.useSpecDetector;
196
+ exports.CopyButton = CopyButton;
197
+ exports.Tooltip = Tooltip;
198
+ //# sourceMappingURL=public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.js","sources":["../../../src/core/components/common/CopyButton.tsx","../../../src/core/components/common/Tooltip.tsx"],"sourcesContent":["/**\n * This source file is part of the Apiboost(R) OmniSpec Core.\n *\n * Copyright (c) Apiboost, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * See LICENSE.md and LICENSING.md in the project root for license information.\n */\n\nimport { useCallback, useState } from 'react'\nimport { css } from '../../styles/css'\n\ninterface CopyButtonProps {\n text: string\n label?: string\n}\n\nconst copyBtnStyle = css({\n background: 'none',\n border: '1px solid var(--omnispec-border-color)',\n borderRadius: 'var(--omnispec-border-radius)',\n padding: '4px 10px',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-secondary)',\n cursor: 'pointer',\n '&:hover': {\n color: 'var(--omnispec-fg-primary)',\n borderColor: 'var(--omnispec-fg-muted)',\n },\n})\n\nexport function CopyButton({ text, label = 'Copy' }: CopyButtonProps) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = useCallback(async () => {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n }, [text])\n\n return (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={copyBtnStyle}\n aria-label={label}\n >\n {copied ? 'Copied!' : label}\n </button>\n )\n}\n","/**\n * This source file is part of the Apiboost(R) OmniSpec Core.\n *\n * Copyright (c) Apiboost, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * See LICENSE.md and LICENSING.md in the project root for license information.\n */\n\nimport { useCallback, useRef, useState } from 'react'\nimport type { ReactNode } from 'react'\nimport { css } from '../../styles/css'\n\ninterface TooltipProps {\n content: string\n children: ReactNode\n}\n\nconst wrapperStyle = css({\n position: 'relative',\n display: 'inline-block',\n})\n\nconst tipStyle = css({\n position: 'fixed',\n padding: '4px 8px',\n backgroundColor: 'var(--omnispec-fg-primary)',\n color: 'var(--omnispec-bg-primary)',\n fontSize: 'var(--omnispec-font-size-xs)',\n borderRadius: '4px',\n whiteSpace: 'nowrap',\n zIndex: 9999,\n pointerEvents: 'none',\n})\n\nexport function Tooltip({ content, children }: TooltipProps) {\n const [visible, setVisible] = useState(false)\n const [pos, setPos] = useState({ top: 0, left: 0 })\n const wrapperRef = useRef<HTMLSpanElement>(null)\n\n const handleEnter = useCallback(() => {\n if (wrapperRef.current) {\n const rect = wrapperRef.current.getBoundingClientRect()\n setPos({\n top: rect.top - 6,\n left: rect.left + rect.width / 2,\n })\n }\n setVisible(true)\n }, [])\n\n return (\n <span\n ref={wrapperRef}\n className={`omnispec-tooltip ${wrapperStyle}`}\n onMouseEnter={handleEnter}\n onMouseLeave={() => setVisible(false)}\n >\n {children}\n {visible && (\n <span\n className={tipStyle}\n role=\"tooltip\"\n style={{\n top: pos.top,\n left: pos.left,\n transform: 'translate(-50%, -100%)',\n }}\n >\n {content}\n </span>\n )}\n </span>\n )\n}\n"],"names":["css","useState","useCallback","jsx","useRef","jsxs"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ var OpenApiSpec = require('./chunks/OpenApiSpec-D0JtmOVQ.js');
4
+ var AsyncApiSpec = require('./chunks/AsyncApiSpec-TBlyRxTP.js');
5
+ var OmniSpecRenderer = require('./chunks/OmniSpecRenderer-CE4wxVTL.js');
6
+ var RendererRegistry = require('./chunks/RendererRegistry-DQ7JBLMT.js');
7
+ var useSpecFetcher = require('./chunks/useSpecFetcher-BKz1jHTV.js');
8
+ var useSpecDetector = require('./chunks/useSpecDetector-A4OwYrmY.js');
9
+ require('react/jsx-runtime');
10
+ require('react');
11
+ require('@emotion/css');
12
+ require('./chunks/Collapsible-BHAHk_Ep.js');
13
+ require('@emotion/styled');
14
+ require('./chunks/OpenIdConnectManual-oEnN0QJ-.js');
15
+ require('./chunks/binary-response-CSrPCI-1.js');
16
+ require('./chunks/ref-resolver-DWu6Q6E5.js');
17
+ require('./chunks/ssrf-guard-B6T2A7Ho.js');
18
+ require('./chunks/ErrorBoundary-c1piU8da.js');
19
+
20
+
21
+
22
+ exports.OpenApiSpec = OpenApiSpec.OpenApiSpec;
23
+ exports.authSchemeLabel = OpenApiSpec.authSchemeLabel;
24
+ exports.AsyncApiSpec = AsyncApiSpec.AsyncApiSpec;
25
+ exports.OmniSpecRenderer = OmniSpecRenderer.OmniSpecRenderer;
26
+ exports.RendererRegistryProvider = RendererRegistry.RendererRegistryProvider;
27
+ exports.useRendererRegistry = RendererRegistry.useRendererRegistry;
28
+ exports.SpecType = useSpecFetcher.SpecType;
29
+ exports.ThemeProvider = useSpecFetcher.ThemeProvider;
30
+ exports.darkTheme = useSpecFetcher.darkTheme;
31
+ exports.fetchSpec = useSpecFetcher.fetchSpec;
32
+ exports.isSidebarNavGroup = useSpecFetcher.isSidebarNavGroup;
33
+ exports.lightTheme = useSpecFetcher.lightTheme;
34
+ exports.useTheme = useSpecFetcher.useTheme;
35
+ exports.detectSpecType = useSpecDetector.detectSpecType;
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var OpenApiSpec = require('../chunks/OpenApiSpec-D0JtmOVQ.js');
4
+ require('react/jsx-runtime');
5
+ require('react');
6
+ require('@emotion/css');
7
+ require('../chunks/useSpecFetcher-BKz1jHTV.js');
8
+ require('../chunks/Collapsible-BHAHk_Ep.js');
9
+ require('@emotion/styled');
10
+ require('../chunks/OpenIdConnectManual-oEnN0QJ-.js');
11
+ require('../chunks/binary-response-CSrPCI-1.js');
12
+ require('../chunks/ref-resolver-DWu6Q6E5.js');
13
+ require('../chunks/ssrf-guard-B6T2A7Ho.js');
14
+ require('../chunks/ErrorBoundary-c1piU8da.js');
15
+
16
+
17
+
18
+ exports.OpenApiSpec = OpenApiSpec.OpenApiSpec;
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ var express = require('express');
4
+ var ssrfGuard = require('../chunks/ssrf-guard-B6T2A7Ho.js');
5
+ var binaryResponse = require('../chunks/binary-response-CSrPCI-1.js');
6
+
7
+ const DEFAULT_RATE_LIMIT = 60;
8
+ const DEFAULT_TIMEOUT = 3e4;
9
+ const DEFAULT_MAX_BODY = 1048576;
10
+ const createProxyRouter = (options = {}) => {
11
+ const {
12
+ rateLimitPerMinute = DEFAULT_RATE_LIMIT,
13
+ maxTimeout = DEFAULT_TIMEOUT,
14
+ maxBodySize = DEFAULT_MAX_BODY,
15
+ allowedDomains = [],
16
+ onRequest
17
+ } = options;
18
+ const router = express.Router();
19
+ try {
20
+ const rateLimit = require("express-rate-limit").default ?? require("express-rate-limit");
21
+ router.use(
22
+ rateLimit({
23
+ windowMs: 6e4,
24
+ max: rateLimitPerMinute,
25
+ standardHeaders: true,
26
+ legacyHeaders: false,
27
+ message: { error: "Too many proxy requests. Please try again later." }
28
+ })
29
+ );
30
+ } catch {
31
+ const hits = /* @__PURE__ */ new Map();
32
+ router.use((req, res, next) => {
33
+ const key = req.ip ?? "unknown";
34
+ const now = Date.now();
35
+ const entry = hits.get(key);
36
+ if (!entry || now > entry.resetAt) {
37
+ hits.set(key, { count: 1, resetAt: now + 6e4 });
38
+ return next();
39
+ }
40
+ if (entry.count >= rateLimitPerMinute) {
41
+ return res.status(429).json({ error: "Too many proxy requests. Please try again later." });
42
+ }
43
+ entry.count++;
44
+ return next();
45
+ });
46
+ }
47
+ router.post("/", async (req, res) => {
48
+ const proxyReq = req.body;
49
+ if (!proxyReq?.url || !proxyReq?.method) {
50
+ return res.status(400).json({ error: "Missing required fields: url, method" });
51
+ }
52
+ let targetUrl;
53
+ try {
54
+ targetUrl = new URL(proxyReq.url);
55
+ } catch {
56
+ return res.status(400).json({ error: "Invalid target URL" });
57
+ }
58
+ const hostname = targetUrl.hostname;
59
+ if (ssrfGuard.isPrivateIp(hostname)) {
60
+ return res.status(403).json({ error: "Requests to private/internal addresses are not allowed" });
61
+ }
62
+ if (allowedDomains.length > 0) {
63
+ const allowed = allowedDomains.some(
64
+ (domain) => hostname === domain || hostname.endsWith(`.${domain}`)
65
+ );
66
+ if (!allowed) {
67
+ return res.status(403).json({ error: `Domain ${hostname} is not in the allowed list` });
68
+ }
69
+ }
70
+ if (proxyReq.body && proxyReq.body.length > maxBodySize) {
71
+ return res.status(413).json({ error: `Request body exceeds ${maxBodySize} byte limit` });
72
+ }
73
+ const timeout = Math.min(proxyReq.timeout ?? maxTimeout, maxTimeout);
74
+ const controller = new AbortController();
75
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
76
+ const startTime = Date.now();
77
+ let outboundBody = proxyReq.body ?? void 0;
78
+ if (outboundBody !== void 0 && proxyReq.bodyEncoding === "base64") {
79
+ try {
80
+ outboundBody = Buffer.from(outboundBody, "base64");
81
+ } catch {
82
+ return res.status(400).json({ error: "Invalid base64 request body" });
83
+ }
84
+ }
85
+ try {
86
+ const fetchResponse = await fetch(proxyReq.url, {
87
+ method: proxyReq.method,
88
+ headers: proxyReq.headers ?? {},
89
+ // Buffer is a Uint8Array at runtime; Node's fetch accepts it. The DOM
90
+ // BodyInit typing doesn't know that, hence the cast.
91
+ body: outboundBody,
92
+ signal: controller.signal
93
+ });
94
+ const responseContentType = fetchResponse.headers.get("content-type") ?? "";
95
+ const isBinary = binaryResponse.isBinaryContentType(responseContentType);
96
+ const responseBody = isBinary ? Buffer.from(await fetchResponse.arrayBuffer()).toString("base64") : await fetchResponse.text();
97
+ const duration = Date.now() - startTime;
98
+ if (responseBody.length > maxBodySize) {
99
+ return res.status(502).json({
100
+ status: 502,
101
+ statusText: "Response too large",
102
+ headers: {},
103
+ body: `Response body exceeds ${maxBodySize} byte limit`,
104
+ bodyEncoding: "utf-8",
105
+ duration
106
+ });
107
+ }
108
+ const responseHeaders = {};
109
+ fetchResponse.headers.forEach((value, key) => {
110
+ responseHeaders[key] = value;
111
+ });
112
+ const proxyRes = {
113
+ status: fetchResponse.status,
114
+ statusText: fetchResponse.statusText,
115
+ headers: responseHeaders,
116
+ body: responseBody,
117
+ bodyEncoding: isBinary ? "base64" : "utf-8",
118
+ duration
119
+ };
120
+ if (onRequest) {
121
+ try {
122
+ onRequest({
123
+ targetUrl: proxyReq.url,
124
+ method: proxyReq.method,
125
+ statusCode: fetchResponse.status,
126
+ duration,
127
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
128
+ ip: req.ip ?? "unknown"
129
+ });
130
+ } catch {
131
+ }
132
+ }
133
+ return res.json(proxyRes);
134
+ } catch (err) {
135
+ const duration = Date.now() - startTime;
136
+ const message = err instanceof Error ? err.message : "Unknown error";
137
+ const isTimeout = message.includes("abort");
138
+ return res.status(isTimeout ? 504 : 502).json({
139
+ status: isTimeout ? 504 : 502,
140
+ statusText: isTimeout ? "Gateway Timeout" : "Bad Gateway",
141
+ headers: {},
142
+ body: message,
143
+ bodyEncoding: "utf-8",
144
+ duration
145
+ });
146
+ } finally {
147
+ clearTimeout(timeoutId);
148
+ }
149
+ });
150
+ return router;
151
+ };
152
+
153
+ exports.createProxyRouter = createProxyRouter;
154
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/server/proxy-router.ts"],"sourcesContent":["/**\n * This source file is part of the Apiboost(R) OmniSpec Core.\n *\n * Copyright (c) Apiboost, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * See LICENSE.md and LICENSING.md in the project root for license information.\n */\n\nimport { Router } from 'express'\nimport type { Request, Response } from 'express'\nimport type { ProxyRequest, ProxyResponse } from '../core/types/try-it.types'\nimport { isPrivateIp } from './ssrf-guard'\nimport { isBinaryContentType } from '../core/utils/binary-response'\n\nexport interface ProxyRouterOptions {\n /** Max requests per minute per IP. Default: 60. */\n rateLimitPerMinute?: number\n /** Max timeout for proxied requests in ms. Default: 30000. */\n maxTimeout?: number\n /** Max request/response body size in bytes. Default: 1048576 (1MB). */\n maxBodySize?: number\n /** Allowed target domains. Empty array = allow all external. */\n allowedDomains?: string[]\n /** Audit callback fired after each proxy request completes. */\n onRequest?: (audit: ProxyAuditEntry) => void\n}\n\nexport interface ProxyAuditEntry {\n targetUrl: string\n method: string\n statusCode: number\n duration: number\n timestamp: string\n ip: string\n}\n\nconst DEFAULT_RATE_LIMIT = 60\nconst DEFAULT_TIMEOUT = 30_000\nconst DEFAULT_MAX_BODY = 1_048_576\n\n/**\n * Creates an Express router that proxies Try-It requests to external APIs.\n *\n * @param options - Configuration for rate limiting, timeouts, SSRF protection.\n * @returns Express Router to mount at your proxy path (e.g. `/api/proxy`).\n *\n * @example\n * ```ts\n * import { createProxyRouter } from '@apiboost/omnispec/server'\n * app.use('/api/proxy', createProxyRouter({ rateLimitPerMinute: 60 }))\n * ```\n */\nexport const createProxyRouter = (options: ProxyRouterOptions = {}): Router => {\n const {\n rateLimitPerMinute = DEFAULT_RATE_LIMIT,\n maxTimeout = DEFAULT_TIMEOUT,\n maxBodySize = DEFAULT_MAX_BODY,\n allowedDomains = [],\n onRequest,\n } = options\n\n const router = Router()\n\n // Rate limiting — try to use express-rate-limit if available, otherwise\n // fall back to a simple in-memory counter.\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const rateLimit = require('express-rate-limit').default ?? require('express-rate-limit')\n router.use(\n rateLimit({\n windowMs: 60_000,\n max: rateLimitPerMinute,\n standardHeaders: true,\n legacyHeaders: false,\n message: { error: 'Too many proxy requests. Please try again later.' },\n }),\n )\n } catch {\n // express-rate-limit not installed — use basic in-memory limiter.\n const hits = new Map<string, { count: number; resetAt: number }>()\n router.use((req: Request, res: Response, next) => {\n const key = req.ip ?? 'unknown'\n const now = Date.now()\n const entry = hits.get(key)\n\n if (!entry || now > entry.resetAt) {\n hits.set(key, { count: 1, resetAt: now + 60_000 })\n return next()\n }\n\n if (entry.count >= rateLimitPerMinute) {\n return res.status(429).json({ error: 'Too many proxy requests. Please try again later.' })\n }\n\n entry.count++\n return next()\n })\n }\n\n router.post('/', async (req: Request, res: Response) => {\n const proxyReq = req.body as ProxyRequest\n\n // Validate required fields.\n if (!proxyReq?.url || !proxyReq?.method) {\n return res.status(400).json({ error: 'Missing required fields: url, method' })\n }\n\n // Validate URL format.\n let targetUrl: URL\n try {\n targetUrl = new URL(proxyReq.url)\n } catch {\n return res.status(400).json({ error: 'Invalid target URL' })\n }\n\n // SSRF protection — block private IPs.\n const hostname = targetUrl.hostname\n if (isPrivateIp(hostname)) {\n return res.status(403).json({ error: 'Requests to private/internal addresses are not allowed' })\n }\n\n // Domain allowlist (if configured).\n if (allowedDomains.length > 0) {\n const allowed = allowedDomains.some(\n (domain) => hostname === domain || hostname.endsWith(`.${domain}`),\n )\n if (!allowed) {\n return res.status(403).json({ error: `Domain ${hostname} is not in the allowed list` })\n }\n }\n\n // Enforce body size limit.\n if (proxyReq.body && proxyReq.body.length > maxBodySize) {\n return res.status(413).json({ error: `Request body exceeds ${maxBodySize} byte limit` })\n }\n\n const timeout = Math.min(proxyReq.timeout ?? maxTimeout, maxTimeout)\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeout)\n const startTime = Date.now()\n\n // Decode base64-encoded bodies (used for multipart/form-data uploads —\n // the client serializes the real multipart payload and base64-encodes it\n // to fit the JSON envelope) back to raw bytes before forwarding.\n let outboundBody: string | Buffer | undefined = proxyReq.body ?? undefined\n if (outboundBody !== undefined && proxyReq.bodyEncoding === 'base64') {\n try {\n outboundBody = Buffer.from(outboundBody as string, 'base64')\n } catch {\n return res.status(400).json({ error: 'Invalid base64 request body' })\n }\n }\n\n try {\n const fetchResponse = await fetch(proxyReq.url, {\n method: proxyReq.method,\n headers: proxyReq.headers ?? {},\n // Buffer is a Uint8Array at runtime; Node's fetch accepts it. The DOM\n // BodyInit typing doesn't know that, hence the cast.\n body: outboundBody as BodyInit | undefined,\n signal: controller.signal,\n })\n\n // Binary content types are read as bytes and base64-encoded so file\n // downloads survive the JSON envelope; text flows are unchanged.\n const responseContentType = fetchResponse.headers.get('content-type') ?? ''\n const isBinary = isBinaryContentType(responseContentType)\n const responseBody = isBinary\n ? Buffer.from(await fetchResponse.arrayBuffer()).toString('base64')\n : await fetchResponse.text()\n const duration = Date.now() - startTime\n\n // Enforce response body size limit.\n if (responseBody.length > maxBodySize) {\n return res.status(502).json({\n status: 502,\n statusText: 'Response too large',\n headers: {},\n body: `Response body exceeds ${maxBodySize} byte limit`,\n bodyEncoding: 'utf-8' as const,\n duration,\n })\n }\n\n const responseHeaders: Record<string, string> = {}\n fetchResponse.headers.forEach((value, key) => {\n responseHeaders[key] = value\n })\n\n const proxyRes: ProxyResponse = {\n status: fetchResponse.status,\n statusText: fetchResponse.statusText,\n headers: responseHeaders,\n body: responseBody,\n bodyEncoding: isBinary ? 'base64' : 'utf-8',\n duration,\n }\n\n // Fire audit callback (non-blocking).\n if (onRequest) {\n try {\n onRequest({\n targetUrl: proxyReq.url,\n method: proxyReq.method,\n statusCode: fetchResponse.status,\n duration,\n timestamp: new Date().toISOString(),\n ip: req.ip ?? 'unknown',\n })\n } catch {\n // Audit must never block the response.\n }\n }\n\n return res.json(proxyRes)\n } catch (err) {\n const duration = Date.now() - startTime\n const message = err instanceof Error ? err.message : 'Unknown error'\n const isTimeout = message.includes('abort')\n\n return res.status(isTimeout ? 504 : 502).json({\n status: isTimeout ? 504 : 502,\n statusText: isTimeout ? 'Gateway Timeout' : 'Bad Gateway',\n headers: {},\n body: message,\n bodyEncoding: 'utf-8',\n duration,\n } satisfies ProxyResponse)\n } finally {\n clearTimeout(timeoutId)\n }\n })\n\n return router\n}\n"],"names":["Router","isPrivateIp","isBinaryContentType"],"mappings":"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"}