@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,25 @@
1
+ 'use strict';
2
+
3
+ const isPrivateIp = (hostname) => {
4
+ const h = hostname.replace(/^\[|]$/g, "");
5
+ if (h === "localhost" || h.startsWith("127.")) {
6
+ return true;
7
+ }
8
+ if (h.startsWith("10.")) return true;
9
+ if (h.startsWith("192.168.")) return true;
10
+ if (/^172\.(1[6-9]|2\d|3[01])\./.test(h)) return true;
11
+ if (h.startsWith("169.254.")) return true;
12
+ if (h === "0.0.0.0" || h === "255.255.255.255") return true;
13
+ const lower = h.toLowerCase();
14
+ if (lower === "::1" || lower === "::") return true;
15
+ if (lower.startsWith("fc") || lower.startsWith("fd")) return true;
16
+ if (lower.startsWith("fe80")) return true;
17
+ const v4Mapped = lower.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
18
+ if (v4Mapped) {
19
+ return isPrivateIp(v4Mapped[1]);
20
+ }
21
+ return false;
22
+ };
23
+
24
+ exports.isPrivateIp = isPrivateIp;
25
+ //# sourceMappingURL=ssrf-guard-B6T2A7Ho.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrf-guard-B6T2A7Ho.js","sources":["../../../src/server/ssrf-guard.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\n/**\n * Checks if a hostname or IP address is in a private/reserved range.\n *\n * Blocks RFC 1918 private ranges, loopback, link-local, and IPv6\n * equivalents to prevent SSRF attacks through the proxy.\n *\n * @param hostname - The hostname or IP to check.\n * @returns True if the address is private/reserved and should be blocked.\n */\nexport const isPrivateIp = (hostname: string): boolean => {\n // Normalize — strip IPv6 brackets.\n const h = hostname.replace(/^\\[|]$/g, '')\n\n // IPv4 loopback.\n if (h === 'localhost' || h.startsWith('127.')) {\n return true\n }\n\n // IPv4 private ranges (RFC 1918).\n if (h.startsWith('10.')) return true\n if (h.startsWith('192.168.')) return true\n if (/^172\\.(1[6-9]|2\\d|3[01])\\./.test(h)) return true\n\n // IPv4 link-local.\n if (h.startsWith('169.254.')) return true\n\n // IPv4 special: 0.0.0.0, broadcast.\n if (h === '0.0.0.0' || h === '255.255.255.255') return true\n\n // IPv6 loopback and private.\n const lower = h.toLowerCase()\n if (lower === '::1' || lower === '::') return true\n if (lower.startsWith('fc') || lower.startsWith('fd')) return true // Unique local (fc00::/7)\n if (lower.startsWith('fe80')) return true // Link-local\n\n // IPv4-mapped IPv6 (::ffff:10.0.0.1).\n const v4Mapped = lower.match(/^::ffff:(\\d+\\.\\d+\\.\\d+\\.\\d+)$/)\n if (v4Mapped) {\n return isPrivateIp(v4Mapped[1])\n }\n\n return false\n}\n"],"names":[],"mappings":";;AAmBO,MAAM,WAAA,GAAc,CAAC,QAAA,KAA8B;AAExD,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAGxC,EAAA,IAAI,CAAA,KAAM,WAAA,IAAe,CAAA,CAAE,UAAA,CAAW,MAAM,CAAA,EAAG;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,IAAA;AAChC,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,UAAU,CAAA,EAAG,OAAO,IAAA;AACrC,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,IAAA;AAGjD,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,UAAU,CAAA,EAAG,OAAO,IAAA;AAGrC,EAAA,IAAI,CAAA,KAAM,SAAA,IAAa,CAAA,KAAM,iBAAA,EAAmB,OAAO,IAAA;AAGvD,EAAA,MAAM,KAAA,GAAQ,EAAE,WAAA,EAAY;AAC5B,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,KAAA,KAAU,IAAA,EAAM,OAAO,IAAA;AAC9C,EAAA,IAAI,KAAA,CAAM,WAAW,IAAI,CAAA,IAAK,MAAM,UAAA,CAAW,IAAI,GAAG,OAAO,IAAA;AAC7D,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,EAAG,OAAO,IAAA;AAGrC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,+BAA+B,CAAA;AAC5D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,WAAA,CAAY,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,KAAA;AACT;;;;"}
@@ -0,0 +1,252 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var css = require('@emotion/css');
5
+ var useSpecFetcher = require('./useSpecFetcher-BKz1jHTV.js');
6
+ var React = require('react');
7
+
8
+ const specTypeLabels = {
9
+ "graphql-sdl": "GraphQL",
10
+ "graphql-introspection": "GraphQL",
11
+ "soap-wsdl": "SOAP/WSDL",
12
+ "grpc-proto": "gRPC/Protobuf"
13
+ };
14
+ function UpgradePrompt({ specType, docsUrl, upgradeUrl }) {
15
+ const label = specTypeLabels[specType] ?? specType;
16
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerStyle, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cardStyle, children: [
17
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: iconWrapperStyle, children: /* @__PURE__ */ jsxRuntime.jsx(useSpecFetcher.Icon, { name: "info", size: "1.5rem" }) }),
18
+ /* @__PURE__ */ jsxRuntime.jsxs("h2", { className: titleStyle, children: [
19
+ label,
20
+ " specification detected"
21
+ ] }),
22
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: descStyle, children: [
23
+ "Rendering ",
24
+ label,
25
+ ", along with GraphQL, SOAP, and gRPC specifications, requires ",
26
+ /* @__PURE__ */ jsxRuntime.jsx("code", { className: codeStyle, children: "@apiboost/omnispec-pro" }),
27
+ "."
28
+ ] }),
29
+ /* @__PURE__ */ jsxRuntime.jsx("pre", { className: installStyle, children: "npm install @apiboost/omnispec-pro" }),
30
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: actionsStyle, children: [
31
+ docsUrl && /* @__PURE__ */ jsxRuntime.jsxs("a", { href: docsUrl, className: linkStyle, target: "_blank", rel: "noopener noreferrer", children: [
32
+ "View documentation ",
33
+ /* @__PURE__ */ jsxRuntime.jsx(useSpecFetcher.Icon, { name: "external-link", size: "0.75rem" })
34
+ ] }),
35
+ upgradeUrl && /* @__PURE__ */ jsxRuntime.jsxs(useSpecFetcher.Button, { variant: "primary", href: upgradeUrl, target: "_blank", rel: "noopener noreferrer", children: [
36
+ "Upgrade now ",
37
+ /* @__PURE__ */ jsxRuntime.jsx(useSpecFetcher.Icon, { name: "external-link", size: "0.75rem" })
38
+ ] })
39
+ ] })
40
+ ] }) });
41
+ }
42
+ const containerStyle = css.css({
43
+ display: "flex",
44
+ alignItems: "center",
45
+ justifyContent: "center",
46
+ flex: 1,
47
+ minHeight: "20rem",
48
+ padding: "2rem"
49
+ });
50
+ const cardStyle = css.css({
51
+ display: "flex",
52
+ flexDirection: "column",
53
+ alignItems: "center",
54
+ gap: "0.75rem",
55
+ maxWidth: "32rem",
56
+ textAlign: "center",
57
+ padding: "2.5rem 2rem",
58
+ borderRadius: "var(--omnispec-border-radius)",
59
+ backgroundColor: "var(--omnispec-bg-secondary)",
60
+ boxShadow: "0 0.0625rem 0.25rem rgba(0, 0, 0, 0.08)"
61
+ });
62
+ const iconWrapperStyle = css.css({
63
+ display: "flex",
64
+ alignItems: "center",
65
+ justifyContent: "center",
66
+ width: "3rem",
67
+ height: "3rem",
68
+ borderRadius: "50%",
69
+ backgroundColor: "var(--omnispec-bg-tertiary)",
70
+ color: "var(--omnispec-color-info)"
71
+ });
72
+ const titleStyle = css.css({
73
+ margin: 0,
74
+ fontSize: "var(--omnispec-font-size-lg)",
75
+ fontWeight: 600,
76
+ color: "var(--omnispec-fg-primary)"
77
+ });
78
+ const descStyle = css.css({
79
+ margin: 0,
80
+ fontSize: "var(--omnispec-font-size-sm)",
81
+ color: "var(--omnispec-fg-secondary)",
82
+ lineHeight: 1.6
83
+ });
84
+ const codeStyle = css.css({
85
+ backgroundColor: "var(--omnispec-bg-code)",
86
+ color: "var(--omnispec-fg-code)",
87
+ padding: "0.125rem 0.375rem",
88
+ borderRadius: "0.25rem",
89
+ fontSize: "0.875em",
90
+ fontFamily: "var(--omnispec-font-mono)"
91
+ });
92
+ const installStyle = css.css({
93
+ margin: 0,
94
+ padding: "0.625rem 1rem",
95
+ backgroundColor: "var(--omnispec-bg-code)",
96
+ color: "var(--omnispec-fg-primary)",
97
+ borderRadius: "var(--omnispec-border-radius)",
98
+ fontFamily: "var(--omnispec-font-mono)",
99
+ fontSize: "var(--omnispec-font-size-sm)",
100
+ userSelect: "all"
101
+ });
102
+ const actionsStyle = css.css({
103
+ display: "flex",
104
+ gap: "1rem",
105
+ marginTop: "0.5rem",
106
+ flexWrap: "wrap",
107
+ justifyContent: "center"
108
+ });
109
+ const linkStyle = css.css({
110
+ display: "inline-flex",
111
+ alignItems: "center",
112
+ gap: "0.375rem",
113
+ fontSize: "var(--omnispec-font-size-sm)",
114
+ color: "var(--omnispec-fg-link)",
115
+ textDecoration: "none",
116
+ fontWeight: 500,
117
+ "&:hover": {
118
+ textDecoration: "underline"
119
+ }
120
+ });
121
+
122
+ function detectSpecType(content) {
123
+ if (typeof content === "object") {
124
+ return detectFromObject(content);
125
+ }
126
+ const trimmed = content.trim();
127
+ try {
128
+ const parsed = JSON.parse(trimmed);
129
+ return detectFromObject(parsed);
130
+ } catch {
131
+ }
132
+ const yamlResult = detectFromYamlString(trimmed);
133
+ if (yamlResult) return yamlResult;
134
+ if (trimmed.startsWith("<") || trimmed.startsWith("<?xml")) {
135
+ return detectFromXml(trimmed);
136
+ }
137
+ if (isProtoBuf(trimmed)) {
138
+ return {
139
+ type: useSpecFetcher.SpecType.GRPC_PROTO,
140
+ confidence: "high"
141
+ };
142
+ }
143
+ if (isGraphQLSDL(trimmed)) {
144
+ return {
145
+ type: useSpecFetcher.SpecType.GRAPHQL_SDL,
146
+ confidence: "medium"
147
+ };
148
+ }
149
+ return null;
150
+ }
151
+ function detectFromObject(obj) {
152
+ if ("swagger" in obj && typeof obj.swagger === "string") {
153
+ return {
154
+ type: useSpecFetcher.SpecType.OPENAPI_2,
155
+ confidence: "high",
156
+ version: obj.swagger
157
+ };
158
+ }
159
+ if ("openapi" in obj && typeof obj.openapi === "string") {
160
+ return {
161
+ type: useSpecFetcher.SpecType.OPENAPI_3,
162
+ confidence: "high",
163
+ version: obj.openapi
164
+ };
165
+ }
166
+ if ("asyncapi" in obj && typeof obj.asyncapi === "string") {
167
+ const version = obj.asyncapi;
168
+ const major = parseInt(version.split(".")[0], 10);
169
+ return {
170
+ type: major >= 3 ? useSpecFetcher.SpecType.ASYNCAPI_3 : useSpecFetcher.SpecType.ASYNCAPI_2,
171
+ confidence: "high",
172
+ version
173
+ };
174
+ }
175
+ if ("__schema" in obj || "data" in obj && typeof obj.data === "object" && obj.data !== null && "__schema" in obj.data) {
176
+ return {
177
+ type: useSpecFetcher.SpecType.GRAPHQL_INTROSPECTION,
178
+ confidence: "high"
179
+ };
180
+ }
181
+ return null;
182
+ }
183
+ function detectFromYamlString(content) {
184
+ const lines = content.split("\n").slice(0, 20);
185
+ for (const line of lines) {
186
+ const match = line.match(/^(\w+)\s*:\s*['"]?([^'"#\s]+)/);
187
+ if (!match) continue;
188
+ const [, key, value] = match;
189
+ if (key === "swagger") {
190
+ return { type: useSpecFetcher.SpecType.OPENAPI_2, confidence: "high", version: value };
191
+ }
192
+ if (key === "openapi") {
193
+ return { type: useSpecFetcher.SpecType.OPENAPI_3, confidence: "high", version: value };
194
+ }
195
+ if (key === "asyncapi") {
196
+ const major = parseInt(value.split(".")[0], 10);
197
+ return {
198
+ type: major >= 3 ? useSpecFetcher.SpecType.ASYNCAPI_3 : useSpecFetcher.SpecType.ASYNCAPI_2,
199
+ confidence: "high",
200
+ version: value
201
+ };
202
+ }
203
+ }
204
+ return null;
205
+ }
206
+ function detectFromXml(content) {
207
+ if (content.includes("<definitions") || content.includes("<wsdl:definitions")) {
208
+ return { type: useSpecFetcher.SpecType.SOAP_WSDL, confidence: "high" };
209
+ }
210
+ if (content.includes("<description") && content.includes("wsdl")) {
211
+ return { type: useSpecFetcher.SpecType.SOAP_WSDL, confidence: "medium" };
212
+ }
213
+ return null;
214
+ }
215
+ function isGraphQLSDL(content) {
216
+ const sdlPatterns = [
217
+ /^\s*type\s+Query\s*\{/m,
218
+ /^\s*schema\s*\{/m,
219
+ /^\s*type\s+\w+\s*(implements\s+\w+)?\s*\{/m,
220
+ /^\s*directive\s+@/m,
221
+ /^\s*enum\s+\w+\s*\{/m,
222
+ /^\s*input\s+\w+\s*\{/m,
223
+ /^\s*interface\s+\w+\s*\{/m,
224
+ /^\s*union\s+\w+\s*=/m
225
+ ];
226
+ let matchCount = 0;
227
+ for (const pattern of sdlPatterns) {
228
+ if (pattern.test(content)) matchCount++;
229
+ }
230
+ return matchCount >= 2;
231
+ }
232
+ function isProtoBuf(content) {
233
+ if (/^\s*syntax\s*=\s*"proto[23]"\s*;/m.test(content)) return true;
234
+ const hasServiceRpc = /\bservice\s+\w+\s*\{/.test(content) && /\brpc\s+\w+\s*\(/.test(content);
235
+ const hasMessage = /\bmessage\s+\w+\s*\{/.test(content);
236
+ return hasServiceRpc && hasMessage;
237
+ }
238
+
239
+ function useSpecDetector(content, hintType) {
240
+ return React.useMemo(() => {
241
+ if (hintType && content) {
242
+ return { type: hintType, confidence: "high" };
243
+ }
244
+ if (!content) return null;
245
+ return detectSpecType(content);
246
+ }, [content, hintType]);
247
+ }
248
+
249
+ exports.UpgradePrompt = UpgradePrompt;
250
+ exports.detectSpecType = detectSpecType;
251
+ exports.useSpecDetector = useSpecDetector;
252
+ //# sourceMappingURL=useSpecDetector-A4OwYrmY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSpecDetector-A4OwYrmY.js","sources":["../../../src/core/components/common/UpgradePrompt.tsx","../../../src/core/utils/detect-spec.ts","../../../src/core/hooks/useSpecDetector.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 { css } from '@core/styles/css'\nimport { Icon } from '@core/components/common/Icon'\nimport { Button } from '@core/components/common/Button'\nimport type { SpecType } from '@core/types/spec-detection.types'\n\nconst specTypeLabels: Partial<Record<SpecType, string>> = {\n 'graphql-sdl': 'GraphQL',\n 'graphql-introspection': 'GraphQL',\n 'soap-wsdl': 'SOAP/WSDL',\n 'grpc-proto': 'gRPC/Protobuf',\n}\n\ninterface UpgradePromptProps {\n specType: SpecType\n docsUrl?: string\n upgradeUrl?: string\n}\n\nexport function UpgradePrompt({ specType, docsUrl, upgradeUrl }: UpgradePromptProps) {\n const label = specTypeLabels[specType] ?? specType\n\n return (\n <div className={containerStyle}>\n <div className={cardStyle}>\n <div className={iconWrapperStyle}>\n <Icon name=\"info\" size=\"1.5rem\" />\n </div>\n <h2 className={titleStyle}>{label} specification detected</h2>\n <p className={descStyle}>\n Rendering {label}, along with GraphQL, SOAP, and gRPC specifications,\n requires <code className={codeStyle}>@apiboost/omnispec-pro</code>.\n </p>\n <pre className={installStyle}>npm install @apiboost/omnispec-pro</pre>\n <div className={actionsStyle}>\n {docsUrl && (\n <a href={docsUrl} className={linkStyle} target=\"_blank\" rel=\"noopener noreferrer\">\n View documentation <Icon name=\"external-link\" size=\"0.75rem\" />\n </a>\n )}\n {upgradeUrl && (\n <Button variant=\"primary\" href={upgradeUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Upgrade now <Icon name=\"external-link\" size=\"0.75rem\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nconst containerStyle = css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n minHeight: '20rem',\n padding: '2rem',\n})\n\nconst cardStyle = css({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '0.75rem',\n maxWidth: '32rem',\n textAlign: 'center',\n padding: '2.5rem 2rem',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-bg-secondary)',\n boxShadow: '0 0.0625rem 0.25rem rgba(0, 0, 0, 0.08)',\n})\n\nconst iconWrapperStyle = css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '3rem',\n height: '3rem',\n borderRadius: '50%',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n color: 'var(--omnispec-color-info)',\n})\n\nconst titleStyle = css({\n margin: 0,\n fontSize: 'var(--omnispec-font-size-lg)',\n fontWeight: 600,\n color: 'var(--omnispec-fg-primary)',\n})\n\nconst descStyle = css({\n margin: 0,\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-secondary)',\n lineHeight: 1.6,\n})\n\nconst codeStyle = css({\n backgroundColor: 'var(--omnispec-bg-code)',\n color: 'var(--omnispec-fg-code)',\n padding: '0.125rem 0.375rem',\n borderRadius: '0.25rem',\n fontSize: '0.875em',\n fontFamily: 'var(--omnispec-font-mono)',\n})\n\nconst installStyle = css({\n margin: 0,\n padding: '0.625rem 1rem',\n backgroundColor: 'var(--omnispec-bg-code)',\n color: 'var(--omnispec-fg-primary)',\n borderRadius: 'var(--omnispec-border-radius)',\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-sm)',\n userSelect: 'all',\n})\n\nconst actionsStyle = css({\n display: 'flex',\n gap: '1rem',\n marginTop: '0.5rem',\n flexWrap: 'wrap',\n justifyContent: 'center',\n})\n\nconst linkStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.375rem',\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-link)',\n textDecoration: 'none',\n fontWeight: 500,\n '&:hover': {\n textDecoration: 'underline',\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 { SpecType } from '../types/spec-detection.types'\nimport type { SpecDetectionResult } from '../types/spec-detection.types'\n\nexport function detectSpecType(content: string | Record<string, unknown>): SpecDetectionResult | null {\n if (typeof content === 'object') {\n return detectFromObject(content)\n }\n\n const trimmed = content.trim()\n\n // Try JSON parse\n try {\n const parsed = JSON.parse(trimmed)\n return detectFromObject(parsed)\n } catch {\n // Not JSON\n }\n\n // Try YAML detection (look for top-level keys without braces)\n const yamlResult = detectFromYamlString(trimmed)\n if (yamlResult) return yamlResult\n\n // Try XML detection (WSDL)\n if (trimmed.startsWith('<') || trimmed.startsWith('<?xml')) {\n return detectFromXml(trimmed)\n }\n\n // Try Protocol Buffers detection (before GraphQL — both use keyword matching)\n if (isProtoBuf(trimmed)) {\n return {\n type: SpecType.GRPC_PROTO,\n confidence: 'high',\n }\n }\n\n // Try GraphQL SDL detection\n if (isGraphQLSDL(trimmed)) {\n return {\n type: SpecType.GRAPHQL_SDL,\n confidence: 'medium',\n }\n }\n\n return null\n}\n\nfunction detectFromObject(obj: Record<string, unknown>): SpecDetectionResult | null {\n // OpenAPI 2.x (Swagger)\n if ('swagger' in obj && typeof obj.swagger === 'string') {\n return {\n type: SpecType.OPENAPI_2,\n confidence: 'high',\n version: obj.swagger as string,\n }\n }\n\n // OpenAPI 3.x\n if ('openapi' in obj && typeof obj.openapi === 'string') {\n return {\n type: SpecType.OPENAPI_3,\n confidence: 'high',\n version: obj.openapi as string,\n }\n }\n\n // AsyncAPI\n if ('asyncapi' in obj && typeof obj.asyncapi === 'string') {\n const version = obj.asyncapi as string\n const major = parseInt(version.split('.')[0], 10)\n return {\n type: major >= 3 ? SpecType.ASYNCAPI_3 : SpecType.ASYNCAPI_2,\n confidence: 'high',\n version,\n }\n }\n\n // GraphQL introspection result\n if ('__schema' in obj || ('data' in obj && typeof obj.data === 'object' && obj.data !== null && '__schema' in (obj.data as Record<string, unknown>))) {\n return {\n type: SpecType.GRAPHQL_INTROSPECTION,\n confidence: 'high',\n }\n }\n\n return null\n}\n\nfunction detectFromYamlString(content: string): SpecDetectionResult | null {\n // Simple YAML key detection without a full parser\n const lines = content.split('\\n').slice(0, 20)\n\n for (const line of lines) {\n const match = line.match(/^(\\w+)\\s*:\\s*['\"]?([^'\"#\\s]+)/)\n if (!match) continue\n\n const [, key, value] = match\n\n if (key === 'swagger') {\n return { type: SpecType.OPENAPI_2, confidence: 'high', version: value }\n }\n if (key === 'openapi') {\n return { type: SpecType.OPENAPI_3, confidence: 'high', version: value }\n }\n if (key === 'asyncapi') {\n const major = parseInt(value.split('.')[0], 10)\n return {\n type: major >= 3 ? SpecType.ASYNCAPI_3 : SpecType.ASYNCAPI_2,\n confidence: 'high',\n version: value,\n }\n }\n }\n\n return null\n}\n\nfunction detectFromXml(content: string): SpecDetectionResult | null {\n // WSDL 1.1: <definitions> or <wsdl:definitions>\n if (content.includes('<definitions') || content.includes('<wsdl:definitions')) {\n return { type: SpecType.SOAP_WSDL, confidence: 'high' }\n }\n // WSDL 2.0: <description>\n if (content.includes('<description') && content.includes('wsdl')) {\n return { type: SpecType.SOAP_WSDL, confidence: 'medium' }\n }\n return null\n}\n\nfunction isGraphQLSDL(content: string): boolean {\n const sdlPatterns = [\n /^\\s*type\\s+Query\\s*\\{/m,\n /^\\s*schema\\s*\\{/m,\n /^\\s*type\\s+\\w+\\s*(implements\\s+\\w+)?\\s*\\{/m,\n /^\\s*directive\\s+@/m,\n /^\\s*enum\\s+\\w+\\s*\\{/m,\n /^\\s*input\\s+\\w+\\s*\\{/m,\n /^\\s*interface\\s+\\w+\\s*\\{/m,\n /^\\s*union\\s+\\w+\\s*=/m,\n ]\n\n let matchCount = 0\n for (const pattern of sdlPatterns) {\n if (pattern.test(content)) matchCount++\n }\n\n return matchCount >= 2\n}\n\nfunction isProtoBuf(content: string): boolean {\n // Proto files have a distinctive syntax: \"syntax = \"proto3\";\" or service/rpc/message keywords\n if (/^\\s*syntax\\s*=\\s*\"proto[23]\"\\s*;/m.test(content)) return true\n // Fallback: must have both service+rpc and message keywords\n const hasServiceRpc = /\\bservice\\s+\\w+\\s*\\{/.test(content) && /\\brpc\\s+\\w+\\s*\\(/.test(content)\n const hasMessage = /\\bmessage\\s+\\w+\\s*\\{/.test(content)\n return hasServiceRpc && hasMessage\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 { useMemo } from 'react'\nimport type { SpecDetectionResult } from '../types/spec-detection.types'\nimport type { SpecType } from '../types/spec-detection.types'\nimport { detectSpecType } from '../utils/detect-spec'\n\nexport function useSpecDetector(\n content: string | Record<string, unknown> | null,\n hintType?: SpecType,\n): SpecDetectionResult | null {\n return useMemo(() => {\n if (hintType && content) {\n return { type: hintType, confidence: 'high' as const }\n }\n if (!content) return null\n return detectSpecType(content)\n }, [content, hintType])\n}\n"],"names":["jsxs","jsx","Icon","Button","css","SpecType","useMemo"],"mappings":"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"}