@redocly/reef 0.131.0-next.1 → 0.131.0-next.2
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.
- package/CHANGELOG.md +21 -0
- package/dist/client/app/hooks/useRouteChangeTracker.js +1 -1
- package/dist/constants/common.d.ts +1 -0
- package/dist/constants/common.js +1 -1
- package/dist/server/plugins/openapi-docs/template/helpers.js +3 -3
- package/dist/server/web-server/http.js +2 -2
- package/dist/server/web-server/routes/cors-proxy.d.ts +5 -0
- package/dist/server/web-server/routes/cors-proxy.js +2 -0
- package/dist/server/web-server/routes/index.js +1 -1
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @redocly/reef
|
|
2
2
|
|
|
3
|
+
## 0.131.0-next.2
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 8a6153095f: Added an internal `/_api/cors` proxy endpoint in Realm and configured embedded Replay to use it by default.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 089558ba51: Updated `@redocly/openapi-core` to version `2.18.0`.
|
|
12
|
+
- 8ff89afeb0: Fixed an issue where Project Analytics would not display any data for specific versions of Realm.
|
|
13
|
+
- adf0e98992: Fixed an issue where the expand dropdown buttons were not covered by other dropdown menus.
|
|
14
|
+
- Updated dependencies [089558ba51]
|
|
15
|
+
- Updated dependencies [8ff89afeb0]
|
|
16
|
+
- Updated dependencies [adf0e98992]
|
|
17
|
+
- @redocly/openapi-docs@3.19.0-next.1
|
|
18
|
+
- @redocly/realm-asyncapi-sdk@0.9.0-next.1
|
|
19
|
+
- @redocly/theme@0.63.0-next.1
|
|
20
|
+
- @redocly/asyncapi-docs@1.8.0-next.1
|
|
21
|
+
- @redocly/portal-plugin-mock-server@0.16.0-next.1
|
|
22
|
+
- @redocly/graphql-docs@1.8.0-next.1
|
|
23
|
+
|
|
3
24
|
## 0.131.0-next.1
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useLocation as u,useNavigate as d,useNavigationType as l}from"react-router-dom";import{useEffect as v,useState as P}from"react";import{useThemeConfig as w}from"@redocly/theme/core/hooks";import{removeTrailingSlash as E}from"../../../utils/url/remove-trailing-slash";import{envConfig as M}from"../../../config/env-config.js";import{onRouteChange as y}from"../../runtime/generated/browser-plugins.js";import{resolveRouteBySlug as C}from"../utils/resolveRouteBySlug.js";import{usePageData as b}from"./usePageData.js";import{usePostMessage as T}from"../../providers/post-message/use-post-message.js";import{isInIframe as I}from"../../utils/utils.js";import{waitForContentScripts as N}from"../../ScriptLoader.js";import{telemetry as R}from"../telemetry/index.js";const
|
|
1
|
+
import{useLocation as u,useNavigate as d,useNavigationType as l}from"react-router-dom";import{useEffect as v,useState as P}from"react";import{useThemeConfig as w}from"@redocly/theme/core/hooks";import{removeTrailingSlash as E}from"../../../utils/url/remove-trailing-slash";import{envConfig as M}from"../../../config/env-config.js";import{onRouteChange as y}from"../../runtime/generated/browser-plugins.js";import{resolveRouteBySlug as C}from"../utils/resolveRouteBySlug.js";import{usePageData as b}from"./usePageData.js";import{usePostMessage as T}from"../../providers/post-message/use-post-message.js";import{isInIframe as I}from"../../utils/utils.js";import{waitForContentScripts as N}from"../../ScriptLoader.js";import{telemetry as R}from"../telemetry/index.js";const _=()=>{const e=u(),n=d(),a=l(),r=b(),[o,i]=P(),m=w(),{sendMessage:h}=T();v(()=>{N().then(()=>{if(e.pathname!==o?.pathname||e.search!==o.search){y({location:e,prevLocation:o},m);const t=`${window.origin}${e.pathname+e.search+e.hash}`,s=o?`${window.origin}${o.pathname+o.search+o.hash}`:void 0;R.sendPageViewedMessage([{object:"page",uri:t,referrer:s||document.referrer||void 0}])}});const c=!!o;i(e);const{pathname:p,hash:g,state:f}=e;if(e?.pathname.endsWith("/")&&e?.pathname!=="/"){const t=E(e.pathname);n({pathname:t,search:e.search,hash:e.hash},{replace:!0})}(M.NODE_ENV==="development"||I())&&c&&C(p+g,r?.templateId).then(t=>{const s=a==="POP"?"browser":f?.origin;s&&h({type:"route-updated",origin:s,...t})}).catch(t=>console.log("Resolve route by slug failed with error: ",t.message))},[e,a])};export{_ as useRouteChangeTracker};
|
|
@@ -40,6 +40,7 @@ export declare const CATALOG_ENTITY_KEY = "entityKey";
|
|
|
40
40
|
export declare const CATALOG_ENTITY_ID = "entityId";
|
|
41
41
|
export declare const CATALOG_ENTITY_RELATION_ID = "entityRelationId";
|
|
42
42
|
export declare const ServerRoutes: {
|
|
43
|
+
readonly CORS_PROXY: "/_api/cors";
|
|
43
44
|
readonly INFO: "/_info";
|
|
44
45
|
readonly EJECT_COMPONENT: "/eject-component/:componentName";
|
|
45
46
|
readonly SHARED_PAGE_DATA: "/page-data/shared/*";
|
package/dist/constants/common.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{envConfig as o}from"../config/env-config.js";const
|
|
1
|
+
import{envConfig as o}from"../config/env-config.js";const T="openapi_docs",p="asyncapi_docs",i="graphql_docs",R="/_spec-gql",L="markdoc",I="tags",s="*",C={[s]:"read"},l=["openid","email"],S=1440*60,d="anonymous",N="authenticated",P="**",u="Reunite",D="translations.yaml",x="redocly.yaml",h="@redocly/theme",g="@theme",U="/app-data.json",m="/eject-component",r=o.SERVER_EDITOR_APP_URL||"http://127.0.0.1:3000",M=o.REDOCLY_CORS_ORIGINS?o.REDOCLY_CORS_ORIGINS.split(",").map(t=>t.trim()).filter(Boolean).concat(r):[r];var a;(function(t){t.BUILD="build",t.DEVELOP="develop",t.PREPARE="prepare"})(a||(a={}));var _;(function(t){t.RATING="rating",t.SENTIMENT="sentiment",t.COMMENT="comment",t.MOOD="mood",t.PROBLEM="problem",t.SCALE="scale"})(_||(_={}));const e="entityKey",E="entityId",n="entityRelationId",G={CORS_PROXY:"/_api/cors",INFO:"/_info",EJECT_COMPONENT:"/eject-component/:componentName",SHARED_PAGE_DATA:"/page-data/shared/*",PAGE_DATA:"/page-data/*",APP_DATA:"/app-data.json",AUTHORIZATION:"/authorize",OIDC_CALLBACK:"/_auth/oidc",SAML_CALLBACK:"/_auth/saml2",REDOCLY_CALLBACK:"/_auth/redocly",REPLAY_OAUTH2_CALLBACK:"/_auth/replay-oauth2",REDOCLY_LOGIN_CALLBACK:"/_auth/redocly/redocly-login",REDOCLY_TOKEN_LOGIN:"/_auth/redocly-token-login",SEARCH:"/_search",SEARCH_FACETS:"/_search-facets",LOGOUT:"/logout",POST_LOGOUT:"/post-logout",LOGIN:"/login",IDP_LOGIN:"/_auth/idp-login",INVITE:"/invite/:code",RESOLVE_ROUTE_BY_PATH:"/resolve-route-by-path",RESOLVE_ROUTES_BY_PATHS:"/resolve-routes-by-paths",RESOLVE_ROUTE_BY_SLUG:"/resolve-route-by-slug",GET_ROUTES_BY_LINE:"/get-routes-by-line",FEEDBACK:"/feedback",TELEMETRY:"/_events",OTEL_TRACES:"/_otel/v1/traces",HEALTH:"/_health",ASK_AI:"/_ask-ai",CATALOG_ENTITIES:`/catalog-entities/:${E}?`,CATALOG_ENTITIES_RELATIONS:`/catalog-entities-relations/:${n}?`,BFF_CATALOG_ENTITIES:`/bff/catalog-entities/:${e}?`,BFF_CATALOG_RELATED_ENTITIES:`/bff/catalog-related-entities/:${e}`,BFF_CATALOG_REVISIONS:`/bff/catalog-revisions/:${e}`,MCP_OAUTH_AUTHORIZATION_SERVER:"/.well-known/oauth-authorization-server",MCP_OAUTH_PROTECTED_RESOURCE:"/.well-known/oauth-protected-resource",MCP_DYNAMIC_CLIENT_REGISTRATION:"/_mcp/register",MCP_AUTHORIZATION:"/_mcp/oauth2/auth",MCP_TOKEN_PORTAL:"/_mcp/oauth2/token-portal",MCP_CALLBACK:"/_mcp/oauth/callback",SCORECARDS:"/scorecards"};var c;(function(t){t.AI_SEARCH="aiSearch"})(c||(c={}));const b="/login",F="/invite",H={AUTH0_PASS:"/auth/auth0-pass"},y={NotExist:"ENOENT"},v="default_locale",B="sidebar-",f="PUBLIC_",k="branch.",Y=["BROKEN_LINK","MARKDOC","RESOLVE"],V=["logo","navbar","products","footer","sidebar","scripts","links","feedback","search","aiAssistant","colorMode","navigation","codeSnippet","markdown","openapi","graphql","analytics","userMenu","versionPicker","breadcrumbs","catalog","entitiesCatalog","scorecard","scorecards","scorecardClassic","mcp","banner"],A="redocly_category",K="redocly_product",w="redocly_version",j="redocly_teams",q=A,X={asyncapi:"asyncapi",apiFunctions:"apiFunctions",reactPages:"reactPages",catalog:"catalog",catalogClassic:"catalogClassic",lint:"lint",scorecard:"scorecard",scorecards:"scorecards",l10n:"l10n",openapi:"openapi",graphql:"graphql",markdown:"markdown",devOnboarding:"devOnboarding",seo:"seo",redirects:"redirects",customPlugins:"customPlugins",themeEjecting:"themeEjecting",products:"products",breadcrumbs:"breadcrumbs",mockServer:"mockServer",sso:"sso",rbac:"rbac",analytics:"analytics",removeAttribution:"removeAttribution",advancedSearch:"advancedSearch",soap:"soap",ssoDirect:"ssoDirect",codeWalkthrough:"codeWalkthrough",aiSearchLimit:"aiSearchLimit",mcp:"mcp",banner:"banner"};export{M as ALLOWED_CORS_ORIGINS,p as ASYNC_API_DOCS_TEMPLATE_ID,k as BRANCH_ENV_PREFIX,E as CATALOG_ENTITY_ID,e as CATALOG_ENTITY_KEY,n as CATALOG_ENTITY_RELATION_ID,x as CONFIG_FILE_NAME,L as CUSTOM_MARKDOC_OPTIONS_PATH,I as CUSTOM_MARKDOC_TAGS_PATH,d as DEFAULT_ANONYMOUS_VISITOR_TEAM,N as DEFAULT_AUTHENTICATED_TEAM,S as DEFAULT_COOKIE_EXPIRATION,v as DEFAULT_LOCALE_PLACEHOLDER,P as DEFAULT_RBAC_SCOPE,u as DEFAULT_SSO_IDP_TITLE,h as DEFAULT_THEME_NAME,b as DEV_LOGIN_SLUG,m as EJECT_COMPONENT_URL,H as ExternalRoutes,X as FEATURE,_ as FEEDBACK_TYPES,y as FsErrors,U as GLOBAL_DATA_URL,R as GRAPHQL_SPEC_SLUG,i as GRAPHQL_TEMPLATE_ID,F as INVITE_SLUG,Y as MARKDOC_ERROR_TYPES,T as OPENAPI_DOCS_TEMPLATE_ID,f as PUBLIC_ENV_PREFIX,C as PUBLIC_RBAC_SCOPE_ITEM,s as RBAC_ALL_OTHER_TEAMS,l as REQUIRED_OIDC_SCOPES,c as RbacFeatures,A as SEARCH_CATEGORY_FIELD,q as SEARCH_GROUP_FACET_FIELD,K as SEARCH_PRODUCT_FIELD,j as SEARCH_RBAC_FIELD,w as SEARCH_VERSION_FIELD,r as SERVER_EDITOR_APP_URL,B as SIDEBAR_PREFIX,G as ServerRoutes,D as TRANSLATIONS_FILE_NAME,V as UI_ACCESSIBLE_CONFIG_PROPS,g as USER_THEME_ALIAS,a as cliCommandNames};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{useMemo as u}from"react";import{components as
|
|
1
|
+
import{useMemo as u}from"react";import{components as f}from"@redocly-markdoc/components";import{Ast as g}from"@markdoc/markdoc";import{PageNavigation as d}from"@redocly/theme/components/PageNavigation/PageNavigation";import{tags as _,components as h}from"@redocly/theme/markdoc/default";import{Breadcrumbs as y}from"@redocly/theme/components/Breadcrumbs/Breadcrumbs";import{withPathPrefix as c}from"@redocly/theme/core/utils";import{OPENAPI_DOCS_TEMPLATE_ID as P,ServerRoutes as m}from"../../../../constants/common.js";import{isBrowser as w}from"../../../../utils/env/is-browser.js";import*as S from"../../markdown/markdoc/custom-components/index.js";import*as O from"../../markdown/markdoc/nodes/index.js";import v from"../../markdown/markdoc/tags/index.js";import{usePageData as C,useSidebarSiblingsData as x}from"../../../../client/providers/page-data/hooks";import{telemetry as A}from"../../../../client/app/telemetry/index.js";import{getMockServerDocsConfig as E}from"./mock-server-config";function V(o="",r="",t="/"){return o.endsWith(t)&&(o=o.slice(0,-t.length)),r.startsWith(t)&&(r=r.slice(t.length)),!o||!r?o+r:o+t+r}function R(o){if(o)return Object.entries(o).reduce((r,[t,n])=>(r[t]=g.fromJSON(JSON.stringify(n)),r),{})}function Y(o,{markdown:r,baseSlug:t}){return u(()=>{const i=w();if(o.options.oAuth2RedirectURI=i?`${window.location.origin}${c(m.REPLAY_OAUTH2_CALLBACK)}`:null,o.options.routingBasePath=c(t),o.options.mockServer=E(o.options.mockServer,t),!o.options.corsProxyUrl){const e=c(`${m.CORS_PROXY}/`);o.options.corsProxyUrl=i?new URL(e,window.location.origin).toString():e}o.options.scrollYOffset=i?parseInt(getComputedStyle(document.documentElement).getPropertyValue("--navbar-height"),10):0,o.options.markdocOptions={tags:{...v,..._},nodes:{...O},components:{...S,...h,...f,...globalThis.__LOADER.markdocComponents},...r,partials:R(r?.partials)},o.options.unstable_hooks={...o.options.unstable_hooks,MiddlePanelFooter:()=>{const{templateId:e}=C()||{},{nextPage:s,prevPage:a}=x()||{};return e===P?null:d({nextPage:s,prevPage:a})},MiddlePanelHeader:()=>y({})};const l={codeSamplesLanguageSwitch:"samples_language_switch",codeSamplesCopy:"code_samples_copy",panelToggle:"panel_toggle",targetServerSwitch:"target_server_switch",tryItOpen:"try_it_toggle",tryItSent:"try_it_sent"},p={};for(const[e,s]of Object.entries(l)){const a=T(o.options.events?.[e]);p[e]=b(a,s)}return o.options.events=p,o},[o,r,t])}function T(o){if(typeof window>"u")return null;if(typeof o=="function")return o;if(typeof o!="string")return null;try{const r=o.trim();if(!r.match(/^(\([^)]*\)\s*=>\s*.+|[a-zA-Z_$][\w$]*\s*=>\s*.+)$/))throw new Error("Invalid function format. Only arrow functions allowed.");if(["eval","Function","constructor","prototype","__proto__","import","require","process","global","window","document"].some(i=>r.includes(i)))throw new Error("Function contains prohibited keywords");return new Function("event",`
|
|
2
2
|
'use strict';
|
|
3
|
-
const userFn = ${
|
|
3
|
+
const userFn = ${r};
|
|
4
4
|
return userFn(event);
|
|
5
|
-
`)}catch(
|
|
5
|
+
`)}catch(r){return console.error("Function parsing error:",r),null}}function b(o,r){return t=>{if(o)try{o(t)}catch(n){console.error("User event handler error:",n)}if(r)try{A.sendOpenapiDocsMessage([{object:"openapi_docs",eventType:r,operationHttpVerb:t.operationHttpVerb,operationPath:t.operationPath,lang:"lang"in t?t.lang:void 0,action:t.action,state:"state"in t?t.state:void 0,serverUrl:"serverUrl"in t?t.serverUrl:void 0}])}catch{}}}export{V as joinWithSeparator,b as mergeEvents,R as parsePartials,T as safeParseFunction,Y as usePatchedStore};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import*as
|
|
2
|
-
%s`,e.message,e.stack))}const w=
|
|
1
|
+
import*as b from"node:http";import{AsyncLocalStorage as A}from"node:async_hooks";import{Readable as S,Stream as C}from"node:stream";import{pipeline as H}from"node:stream/promises";import{ReadableStream as k}from"node:stream/web";import{getPathPrefix as u}from"@redocly/theme/core/utils";import{ALLOWED_CORS_ORIGINS as L}from"../../constants/common.js";import{logger as d}from"../tools/notifiers/logger.js";import{shutdowner as x}from"../tools/shutdowner.js";import{envConfig as I}from"../../config/env-config.js";import{getClientIp as T}from"./utils/get-client-ip.js";import{normalizeIpAddress as O}from"./utils.js";import{CORS_PROXY_STREAM_HEADER as P}from"./routes/cors-proxy.js";const R=new A;globalThis.redoclyCookieStorage=R;function X(n,c=4e3){return new Promise((m,p)=>{const f=b.createServer(async(t,r)=>{const y=t.headers.cookie||"";R.run(y,async()=>{let s;try{const e=new URL(t.url||"",`http://${t.headers.host}`),o=[],l=t.rawHeaders.length;for(let i=0;i<l;i+=2)o.push([t.rawHeaders[i],t.rawHeaders[i+1]]);const a={headers:o,method:t.method};t.method==="GET"||t.method==="HEAD"||(a.body=S.toWeb(t),a.duplex="half");const h=new Request(e.toString(),a),v=T(h)||"127.0.0.1",E=h?.headers?.get("x-forwarded-host")||O(t.socket.remoteAddress);h.context={remoteAddr:{hostname:E,port:t.socket.localPort,ipAddress:v},url:e},s=await n.fetch(h)}catch(e){s=new Response(null,{status:500}),e instanceof Error&&(e.name==="TimeoutError"||e.constructor.name==="TimeoutError"?s=new Response(null,{status:504}):e.code==="ERR_INVALID_URL"&&(s=new Response("Invalid URL",{status:404})),d.error(`Error while handling request: %s
|
|
2
|
+
%s`,e.message,e.stack))}const w=t.headers.origin;w&&L.some(e=>w===e)&&(r.setHeader("Access-Control-Allow-Origin",w),r.setHeader("Access-Control-Allow-Credentials","true"));for(const[e,o]of s.headers||[])try{e==="set-cookie"?r.setHeader(e,s.headers.getSetCookie(e)):r.setHeader(e,o)}catch(l){d.error(`Error while setting header: ${l?.message}`)}if(r.setHeader("Vary","Cookie"),r.statusCode=s.status||500,s.body)try{if(_(s)){const e=new C.Transform({transform(o,l,a){if(r.closed||r.destroyed)return a();r.write(o,l)?process.nextTick(a):r.once("drain",a)},flush(o){if(r.closed||r.destroyed)return o();r.end(),o()}});await H(s.body instanceof k?S.fromWeb(s.body):s.body,e)}else{const e=await s.text();r.setHeader("Content-Length",Buffer.byteLength(e)),r.end(e)}}catch(e){console.error(e);const o=e instanceof Error?e:new Error("unknown error",{cause:e});r.destroy(o)}else r.end()})});x.registerShutdownCallback(()=>new Promise(t=>{d.verbose("Shutting down http server"),f.close(()=>{d.verbose("Http server shut down"),t()})})),f.listen(parseInt(String(c),10)).on("listening",()=>{I.isDevelopMode?d.logInFooter("server",` \u{1F310} Preview URL: http://127.0.0.1:${c}${u()}`):d.logInFooter("server",`Server started at: http://127.0.0.1:${c}${u()}`),m(f)}).on("error",p)})}function _(n){const c=n.headers.get("content-type")||"",m=n.headers.get("x-accel-buffering")||"",p=n.headers.get("content-encoding"),f=n.headers.get("content-length"),t=n.headers.get("transfer-encoding");return n.headers.get(P)==="1"||p||t||f||/^no$/i.test(m)||!/^(text\/(?!event-stream\b))/i.test(c)}export{X as startHttpServer};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
export declare function corsProxyHandler(proxyBasePath?: string): (ctx: Context) => Promise<Response>;
|
|
3
|
+
export declare function resolveCorsProxyTarget(requestUrl: string, proxyBasePath: string): URL | null;
|
|
4
|
+
export declare const CORS_PROXY_STREAM_HEADER = "x-redocly-proxy-streaming";
|
|
5
|
+
//# sourceMappingURL=cors-proxy.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{withPathPrefix as O}from"@redocly/theme/core/utils";import{ServerRoutes as _}from"../../../constants/common.js";import{getRequestOrigin as q}from"../utils/get-request-origin.js";const C=new Set(["connection","keep-alive","proxy-authenticate","proxy-connection","proxy-authorization","te","trailer","transfer-encoding","upgrade","host"]),P=new Set(["cookie","cookie2"]),T=new Set(["set-cookie","set-cookie2"]),E="x-redocly-proxy-streaming",H="x-http-method-override",w="x-redocly-cookie";function x(o=O(_.CORS_PROXY)){return async e=>{const r=new URL(e.req.url).pathname;if(r===o||r===`${o}/`)return e.text(`Realm CORS proxy endpoint.
|
|
2
|
+
Usage: ${o}/https://api.example.com/path`);const n=L(e.req.url,o);if(!n)return e.text("Invalid proxied URL",400);const i=q(e),c=n.origin===i,h=n.pathname===o||n.pathname.startsWith(`${o}/`);if(c&&!h)return new Response("Please use a direct request",{status:308,headers:{Location:n.toString(),Vary:"origin","Cache-Control":"private"}});const s=new Headers,f=S(e.req.raw.headers);for(const[t,y]of e.req.raw.headers)f.has(t.toLowerCase())||P.has(t.toLowerCase())||s.append(t,y);const d=s.get(w);if(d){const t=e.req.raw.headers.get("cookie")||"";s.set("cookie",t?`${t}; ${d}`:d),s.delete(w)}const u=e.req.raw.headers.get("origin")||"";A(u)&&s.delete("origin");let p=e.req.method;const m=s.get(H);m&&(p=m.toUpperCase(),s.delete(H));const R={method:p,headers:s,redirect:"follow"};p!=="GET"&&p!=="HEAD"&&e.req.raw.body&&(R.body=e.req.raw.body,R.duplex="half");let a;try{a=await fetch(n,R)}catch(t){return e.text(`Failed to proxy request: ${t instanceof Error?t.message:"unknown error"}`,502)}const l=new Headers(a.headers),g=S(a.headers);for(const t of g)l.delete(t);for(const t of T)l.delete(t);return l.set(E,"1"),new Response(a.body,{status:a.status,statusText:a.statusText,headers:l})}}function k(o){try{return decodeURIComponent(o)}catch{return o}}function D(o){return o.replace(/^(https?):\/(?!\/)/i,"$1://")}function $(o,e){return e?o.includes("?")?e==="?"?o:`${o.endsWith("?")||o.endsWith("&")?o:`${o}&`}${e.slice(1)}`:`${o}${e}`:o}function S(o){const e=new Set(C),r=o.get("connection");if(!r)return e;for(const n of r.split(",")){const i=n.trim().toLowerCase();i&&e.add(i)}return e}function A(o){const e=o.toLowerCase();return e.includes(".redocly.app")||e.includes("localhost")}function L(o,e){const r=new URL(o),n=r.pathname===e,i=r.pathname.startsWith(`${e}/`);if(!n&&!i)return null;const c=r.pathname.slice(e.length).replace(/^\/+/,"");if(!c)return null;const h=[c,k(c)];for(const s of h){const f=D(s),d=$(f,r.search);try{const u=new URL(d);if(u.protocol==="http:"||u.protocol==="https:")return u}catch{continue}}return null}const z=E;export{z as CORS_PROXY_STREAM_HEADER,x as corsProxyHandler,L as resolveCorsProxyTarget};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{serveStatic as
|
|
1
|
+
import{serveStatic as C}from"hono/serve-static";import{withPathPrefix as e,withoutPathPrefix as H}from"@redocly/theme/core/utils";import{ServerRoutes as i}from"../../../constants/common.js";import{PUBLIC_STATIC_FOLDER as L}from"../../constants/common.js";import{envConfig as c}from"../../../config/env-config.js";import{authMiddleware as g}from"../middleware/authMiddleware.js";import{ensureSearchData as S}from"../middleware/ensureSearchData.js";import{dynamicMiddleware as P}from"../middleware/dynamic-middleware/dynamic-middleware.js";import{installRoutes as I}from"../../plugins/dev-onboarding/api/routes/index.js";import{authorizeHandler as D,oidcCallbackHandler as h,logoutHandler as A,postLogoutHandler as M,idpLoginHandler as N,redoclyLoginCallbackHandler as v,samlCallbackHandler as B,redoclyTokenLoginHandler as U,inviteHandler as w}from"./auth.js";import{appDataHandler as G}from"./app-data.js";import{searchFacetsHandler as F,searchHandler as y}from"./search.js";import{dynamicRouteHandler as K}from"./dynamic-route.js";import{pageDataHandler as Y,sharedPageDataHandler as k}from"./page-data.js";import{pathPrefixRedirectHandler as b}from"./path-prefix-redirect.js";import{getRoutesByLineHandler as O,resolvePathHandler as _,resolvePathsHandler as V,resolveSlugHandler as r}from"./resolve-route.js";import{feedbackHandler as x}from"./feedback.js";import{loggerMiddleware as $}from"../middleware/loggerMiddleware.js";import{responseHeadersMiddleware as z}from"../middleware/responseHeadersMiddleware.js";import{idleTimeoutMiddleware as Z}from"../middleware/idleTimeoutMiddleware.js";import{otelTracesHandler as X}from"./otel/otel.js";import{healthCheckHandler as q}from"./health.js";import{askAiHandler as W}from"./ask-ai.js";import{replayOauth2RedirectCallbackHandler as j}from"./replay-oauth2-redirect.js";import{corsProxyHandler as E}from"./cors-proxy.js";import{mcpOAuthProtectedResourceHandler as u,mcpOAuthAuthorizationServerHandler as J,mcpDynamicClientRegistrationHandler as Q,mcpAuthorizationHandler as aa,mcpTokenPortalHandler as ea,mcpCallbackHandler as T}from"./mcp-oauth.js";import{corsMiddleware as f}from"../middleware/corsMiddleware.js";import{installApiRoutes as ia}from"./api-routes/api-routes.js";import{cookieMiddleware as la}from"../middleware/cookieMiddleware.js";import{staticContentHandler as ta}from"../routes/static-content.js";import{infoHandler as s}from"./info.js";import{catalogHandler as ma}from"./catalog/catalog.js";import{catalogRelationsHandler as na}from"./catalog/catalog-relations.js";import{bffCatalogHandler as da}from"./catalog/bff-catalog.js";import{bffCatalogRevisionsHandler as oa}from"./catalog/bff-catalog-revisions.js";import{bffCatalogRelatedEntitiesHandler as pa}from"./catalog/bff-catalog-related-entities.js";import{catalogAuthMiddleware as t}from"../middleware/catalogAuthMiddleware.js";import{telemetryMiddleware as Aa}from"../middleware/telemetry-middleware.js";import{errorHandler as Oa}from"./error.js";function Ja(a,l,m){const{resolveRouteData:d,readStaticAsset:o}=m;a.use("*",Z()),a.use("*",la()),a.use("*",P(l)),a.use("*",g(l)),a.use("*",$()),a.use("*",z(l)),a.use("*",Aa()),a.use(e("*"),C({root:`./${L}`,getContent:(n,R)=>ta(n,R,l,o),rewriteRequestPath:n=>H(n)})),a.use(e(i.FEEDBACK),f({allowMethods:["POST"]})),a.use(e(i.ASK_AI),f({allowMethods:["POST"]})),a.use("*",_a(l));const p=S(l);a.use(e(i.INFO),s()),c.NEW_CATALOG_ENABLED==="true"&&(a.use(e(i.CATALOG_ENTITIES),t({serverOutDir:l.serverOutDir}),ma(l)),a.use(e(i.CATALOG_ENTITIES_RELATIONS),t({serverOutDir:l.serverOutDir}),na(l)),a.get(e(i.BFF_CATALOG_ENTITIES),t({serverOutDir:l.serverOutDir,protectReadMethods:!1}),da(l)),a.get(e(i.BFF_CATALOG_RELATED_ENTITIES),t({serverOutDir:l.serverOutDir,protectReadMethods:!1}),pa(l)),a.get(e(i.BFF_CATALOG_REVISIONS),t({serverOutDir:l.serverOutDir,protectReadMethods:!1}),oa(l))),a.get(e(i.SHARED_PAGE_DATA),k(l)),a.get(e(i.PAGE_DATA),Y(l,d)),a.get(e(i.APP_DATA),G(l)),a.post(e(i.SEARCH),p,y(l)),a.post(e(i.SEARCH_FACETS),p,F(l)),a.post(e(i.AUTHORIZATION),D),a.post(e(i.LOGOUT),A(l)),a.get(e(i.LOGOUT),A(l)),a.get(e(i.POST_LOGOUT),M(l)),a.get(e(i.OIDC_CALLBACK),h(l)),a.get(e(i.REDOCLY_TOKEN_LOGIN),U(l)),a.get(e(i.REDOCLY_LOGIN_CALLBACK),v()),a.get(e(i.IDP_LOGIN),N(l)),a.post(e(i.SAML_CALLBACK),B(l)),a.get(e(i.INVITE),w(l)),a.get(e(i.HEALTH),q),a.get(`${i.MCP_OAUTH_PROTECTED_RESOURCE}${e("/mcp")}`,u()),a.get(i.MCP_OAUTH_AUTHORIZATION_SERVER,J()),a.post(e(i.MCP_DYNAMIC_CLIENT_REGISTRATION),Q()),a.get(e(i.MCP_AUTHORIZATION),aa()),a.post(e(i.MCP_TOKEN_PORTAL),ea()),a.get(e(i.MCP_CALLBACK),T()),a.get(e(`${i.MCP_CALLBACK}/*`),T()),I(a,l),a.all(e(i.CORS_PROXY),E()),a.all(e(`${i.CORS_PROXY}/*`),E()),ia(a,l),a.post(e(i.FEEDBACK),x(l)),a.post(e(i.RESOLVE_ROUTE_BY_PATH),_(l)),a.post(e(i.RESOLVE_ROUTES_BY_PATHS),V(l)),a.post(e(i.RESOLVE_ROUTE_BY_SLUG),r(l)),a.post(e(i.ASK_AI),W(l)),a.get(e(i.GET_ROUTES_BY_LINE),O(l)),a.post(e(i.OTEL_TRACES),X),a.get(e(i.REPLAY_OAUTH2_CALLBACK),j),a.all(e("/*"),K(l,d,o)),a.get("*",b),a.onError(Oa)}function _a(a){return async(l,m)=>{await a.waitForPluginsLifecycle(),await m()}}function Qa(a,l){a.get(e(i.INFO),s()),a.post(e(i.RESOLVE_ROUTE_BY_PATH),_(l)),a.post(e(i.RESOLVE_ROUTE_BY_SLUG),r(l)),a.get(e(i.GET_ROUTES_BY_LINE),O(l))}export{Qa as installDevRoutes,Ja as installProdRoutes,_a as waitForPluginsLifecycle};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redocly/reef",
|
|
3
|
-
"version": "0.131.0-next.
|
|
3
|
+
"version": "0.131.0-next.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@opentelemetry/sdk-trace-web": "2.0.1",
|
|
30
30
|
"@opentelemetry/semantic-conventions": "1.34.0",
|
|
31
31
|
"@redocly/ajv": "8.17.2",
|
|
32
|
-
"@redocly/openapi-core": "2.
|
|
32
|
+
"@redocly/openapi-core": "2.18.0",
|
|
33
33
|
"@shikijs/transformers": "3.21.0",
|
|
34
34
|
"@tanstack/react-query": "5.62.3",
|
|
35
35
|
"@tanstack/react-table": "8.21.3",
|
|
@@ -91,14 +91,14 @@
|
|
|
91
91
|
"xpath": "0.0.34",
|
|
92
92
|
"yaml-ast-parser": "0.0.43",
|
|
93
93
|
"zod": "^3.25.76",
|
|
94
|
-
"@redocly/asyncapi-docs": "1.8.0-next.
|
|
94
|
+
"@redocly/asyncapi-docs": "1.8.0-next.1",
|
|
95
95
|
"@redocly/config": "0.43.0",
|
|
96
|
-
"@redocly/graphql-docs": "1.8.0-next.
|
|
97
|
-
"@redocly/openapi-docs": "3.19.0-next.
|
|
96
|
+
"@redocly/graphql-docs": "1.8.0-next.1",
|
|
97
|
+
"@redocly/openapi-docs": "3.19.0-next.1",
|
|
98
98
|
"@redocly/portal-legacy-ui": "0.14.0-next.0",
|
|
99
|
-
"@redocly/portal-plugin-mock-server": "0.16.0-next.
|
|
100
|
-
"@redocly/realm-asyncapi-sdk": "0.9.0-next.
|
|
101
|
-
"@redocly/theme": "0.63.0-next.
|
|
99
|
+
"@redocly/portal-plugin-mock-server": "0.16.0-next.1",
|
|
100
|
+
"@redocly/realm-asyncapi-sdk": "0.9.0-next.1",
|
|
101
|
+
"@redocly/theme": "0.63.0-next.1"
|
|
102
102
|
},
|
|
103
103
|
"peerDependencies": {
|
|
104
104
|
"react": "^19.2.4",
|