@redocly/openapi-docs 3.0.0-alpha.75 → 3.0.0-alpha.76
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/dist/console.redocly-openapi-docs.min.js +163 -180
- package/dist/oauth2-redirect.js +1 -1
- package/dist/redocly-openapi-docs.min.js +1025 -972
- package/lib/components/OperationParameters/OperationParameters.js +1 -1
- package/lib/components/OperationParameters/types.d.ts +0 -1
- package/lib/components/OperationParameters/utils.d.ts +2 -2
- package/lib/components/common/CheckboxList.d.ts +4 -3
- package/lib/components/common/CheckboxList.js +1 -1
- package/lib/components/common/FileUpload/FileUpload.d.ts +1 -1
- package/lib/components/common/FileUpload/FileUpload.js +1 -1
- package/lib/components/common/TextField.d.ts +12 -5
- package/lib/components/common/TextField.js +2 -2
- package/lib/components/rightPanel/ActionPanel.d.ts +3 -4
- package/lib/components/rightPanel/ActionPanel.js +1 -1
- package/lib/components/rightPanel/AuthPanel/AuthPanel.d.ts +1 -1
- package/lib/components/rightPanel/AuthPanel/AuthPanel.js +1 -1
- package/lib/components/rightPanel/AuthPanel/types.d.ts +0 -3
- package/lib/components/rightPanel/CodemirrorInput/CodemirrorInput.d.ts +3 -4
- package/lib/components/rightPanel/CodemirrorInput/CodemirrorInput.js +1 -1
- package/lib/components/rightPanel/CodemirrorInput/helpers.d.ts +6 -1
- package/lib/components/rightPanel/CodemirrorInput/helpers.js +1 -1
- package/lib/components/rightPanel/CodemirrorInput/styled.d.ts +2 -1
- package/lib/components/rightPanel/CodemirrorInput/styled.js +44 -45
- package/lib/components/rightPanel/CodemirrorInput/types.d.ts +3 -14
- package/lib/components/rightPanel/Console/Console.js +1 -1
- package/lib/components/rightPanel/Console/Request.js +1 -1
- package/lib/components/rightPanel/Console/types.d.ts +1 -6
- package/lib/components/rightPanel/OAuth2Flow/OAuth2Flow.d.ts +1 -1
- package/lib/components/rightPanel/OAuth2Flow/OAuth2Flow.js +1 -1
- package/lib/components/rightPanel/OAuth2Flow/types.d.ts +0 -3
- package/lib/components/rightPanel/OAuth2TokenInput.d.ts +2 -8
- package/lib/components/rightPanel/OAuth2TokenInput.js +1 -1
- package/lib/components/rightPanel/OpenIDConnect.d.ts +0 -3
- package/lib/components/rightPanel/OpenIDConnect.js +1 -1
- package/lib/components/rightPanel/ParameterDropdown.d.ts +3 -2
- package/lib/components/rightPanel/ParameterDropdown.js +1 -1
- package/lib/components/rightPanel/RequestBody/Body.js +1 -1
- package/lib/components/rightPanel/RequestBody/RequestBody.js +1 -1
- package/lib/components/rightPanel/RequestBody/types.d.ts +1 -3
- package/lib/components/rightPanel/RequestBodyForm.d.ts +0 -2
- package/lib/components/rightPanel/RequestBodyForm.js +1 -1
- package/lib/components/rightPanel/Scope.js +1 -1
- package/lib/components/rightPanel/ServersDropdown/ServersDropdown.js +1 -1
- package/lib/components/rightPanel/utils.js +1 -1
- package/lib/jotai/app.js +1 -1
- package/lib/testProviders.d.ts +4 -1
- package/lib/testProviders.js +1 -1
- package/lib/utils/saveTextBeforeHeading.js +1 -1
- package/lib-esm/components/OperationParameters/OperationParameters.js +1 -1
- package/lib-esm/components/OperationParameters/types.d.ts +0 -1
- package/lib-esm/components/OperationParameters/utils.d.ts +2 -2
- package/lib-esm/components/common/CheckboxList.d.ts +4 -3
- package/lib-esm/components/common/CheckboxList.js +1 -1
- package/lib-esm/components/common/FileUpload/FileUpload.d.ts +1 -1
- package/lib-esm/components/common/FileUpload/FileUpload.js +1 -1
- package/lib-esm/components/common/TextField.d.ts +12 -5
- package/lib-esm/components/common/TextField.js +2 -2
- package/lib-esm/components/rightPanel/ActionPanel.d.ts +3 -4
- package/lib-esm/components/rightPanel/ActionPanel.js +1 -1
- package/lib-esm/components/rightPanel/AuthPanel/AuthPanel.d.ts +1 -1
- package/lib-esm/components/rightPanel/AuthPanel/AuthPanel.js +1 -1
- package/lib-esm/components/rightPanel/AuthPanel/types.d.ts +0 -3
- package/lib-esm/components/rightPanel/CodemirrorInput/CodemirrorInput.d.ts +3 -4
- package/lib-esm/components/rightPanel/CodemirrorInput/CodemirrorInput.js +1 -1
- package/lib-esm/components/rightPanel/CodemirrorInput/helpers.d.ts +6 -1
- package/lib-esm/components/rightPanel/CodemirrorInput/helpers.js +1 -1
- package/lib-esm/components/rightPanel/CodemirrorInput/styled.d.ts +2 -1
- package/lib-esm/components/rightPanel/CodemirrorInput/styled.js +44 -45
- package/lib-esm/components/rightPanel/CodemirrorInput/types.d.ts +3 -14
- package/lib-esm/components/rightPanel/Console/Console.js +1 -1
- package/lib-esm/components/rightPanel/Console/Request.js +1 -1
- package/lib-esm/components/rightPanel/Console/types.d.ts +1 -6
- package/lib-esm/components/rightPanel/OAuth2Flow/OAuth2Flow.d.ts +1 -1
- package/lib-esm/components/rightPanel/OAuth2Flow/OAuth2Flow.js +1 -1
- package/lib-esm/components/rightPanel/OAuth2Flow/types.d.ts +0 -3
- package/lib-esm/components/rightPanel/OAuth2TokenInput.d.ts +2 -8
- package/lib-esm/components/rightPanel/OAuth2TokenInput.js +1 -1
- package/lib-esm/components/rightPanel/OpenIDConnect.d.ts +0 -3
- package/lib-esm/components/rightPanel/OpenIDConnect.js +1 -1
- package/lib-esm/components/rightPanel/ParameterDropdown.d.ts +3 -2
- package/lib-esm/components/rightPanel/ParameterDropdown.js +1 -1
- package/lib-esm/components/rightPanel/RequestBody/Body.js +1 -1
- package/lib-esm/components/rightPanel/RequestBody/RequestBody.js +1 -1
- package/lib-esm/components/rightPanel/RequestBody/types.d.ts +1 -3
- package/lib-esm/components/rightPanel/RequestBodyForm.d.ts +0 -2
- package/lib-esm/components/rightPanel/RequestBodyForm.js +1 -1
- package/lib-esm/components/rightPanel/Scope.js +1 -1
- package/lib-esm/components/rightPanel/ServersDropdown/ServersDropdown.js +1 -1
- package/lib-esm/components/rightPanel/utils.js +1 -1
- package/lib-esm/jotai/app.js +1 -1
- package/lib-esm/testProviders.d.ts +4 -1
- package/lib-esm/testProviders.js +1 -1
- package/lib-esm/utils/saveTextBeforeHeading.js +1 -1
- package/package.json +9 -6
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { AuthPanelProps } from './types';
|
|
3
|
-
export declare const AuthPanel: ({ securityDefaults, operation, activeServer, authCorsProxyUrl,
|
|
3
|
+
export declare const AuthPanel: ({ securityDefaults, operation, activeServer, authCorsProxyUrl, }: AuthPanelProps) => JSX.Element | null;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{Fragment,useEffect,
|
|
1
|
+
import React,{Fragment,useEffect,useCallback,useMemo}from"react";import{useAtomValue}from"jotai";import{TryItSecurityApps}from"@redocly/theme";import{Controller,useFormContext}from"react-hook-form";import{escapeFormId,fromSessionStorage,getSecurityDetailsOptions,toSessionStorage}from"../../../utils";import{TryItDropdown}from"../styled";import{FormControl,FormLabel,FormWrapper}from"../../common/form";import{FormDropdown,FormTextField}from"../../common/TextField";import{OpenIDConnect,Error}from"../OpenIDConnect";import{fromCookie,requiredValidator}from"../utils";import{OAuth2Flow}from"../OAuth2Flow";import{l}from"../../../services";import{OAuth2TokenInput}from"../OAuth2TokenInput";import{globalStoreAtom}from"../../../jotai/store";export const AuthPanel=({securityDefaults:e,operation:t,activeServer:o,authCorsProxyUrl:a})=>{var r,n;const{control:i,setValue:u,watch:s}=useFormContext(),{parser:c}=useAtomValue(globalStoreAtom),m=t.security,d=useMemo((()=>m.map((e=>e.schemes.map((e=>e.id)).join(" and "))).filter(Boolean)),[m]),p=s("securityScheme"),f=useMemo((()=>{const e=d.findIndex((e=>e===p));return e<0?0:e}),[d,p]);useEffect((()=>{const e=fromSessionStorage("securityRequirementName"),t=d.findIndex((t=>t===e));u("securityScheme",d[t<0?0:t])}),[d,t,u]);const h=useCallback((e=>{u("securityScheme",e.value),toSessionStorage("securityRequirementName",e.value)}),[u]),y=useMemo((()=>d.map(((e,t)=>({value:e,idx:t})))),[d]);if(0===y.length)return React.createElement(Error,{message:"Cannot find security schema in the definition"});const v=m[f],F=escapeFormId(v.schemes[0].id),C=s(`auth.${F}`);return React.createElement(React.Fragment,null,React.createElement(FormWrapper,null,y.length>1&&React.createElement(FormControl,null,React.createElement(FormLabel,null," Security scheme: "),React.createElement(Controller,{control:i,name:"securityScheme",render:({field:{value:e}})=>React.createElement(TryItDropdown,{variant:"dark",fullWidth:!0,options:y,value:e,onChange:h})}))||null,React.createElement(TryItSecurityApps,{apiId:null===(n=null===(r=null==c?void 0:c.definition.info)||void 0===r?void 0:r["x-metadata"])||void 0===n?void 0:n.apiId,value:C,onChange:e=>{u(`auth.${F}`,e)}}),v.schemes.map((t=>{var r,n,i,u,s,c;const m=escapeFormId(t.id);if("apiKey"===t.type){const o=getSecurityDetailsOptions(m,""),a={fieldName:`auth.${m}`,fullWidth:!0,defaultValue:fromCookie(t)||fromSessionStorage(`auth.${m}`)||(null==e?void 0:e[m]),rules:{validate:requiredValidator},validateOnBlur:!0,validateOnChange:!0};return React.createElement(FormControl,{key:m},React.createElement(FormLabel,null," ",t.name,": "),o?React.createElement(FormDropdown,Object.assign({},a,{options:o})):React.createElement(FormTextField,Object.assign({},a,{type:"password",panel:"try-it","data-cy":"apiKey-auth-password"})))}if("http"===t.type){if("basic"===t.scheme){const t=getSecurityDetailsOptions(m,"username"),o={fieldName:`auth.${m}.username`,fullWidth:!0,defaultValue:fromSessionStorage(`auth.${m}.username`)||(null===(r=null==e?void 0:e[m])||void 0===r?void 0:r.username),validate:requiredValidator,rules:{required:!0}};return React.createElement(Fragment,{key:m},React.createElement(FormControl,null,React.createElement(FormLabel,null," ",l("tryItAuthBasicUsername"),": "),t?React.createElement(FormDropdown,Object.assign({},o,{options:t})):React.createElement(FormTextField,Object.assign({},o,{panel:"try-it"}))),React.createElement(FormControl,null,React.createElement(FormLabel,null," ",l("tryItAuthBasicPassword"),": "),React.createElement(FormTextField,{type:"password","data-cy":"http-auth-password",fullWidth:!0,fieldName:`auth.${m}.password`,defaultValue:fromSessionStorage(`auth.${m}.password`)||(null===(n=null==e?void 0:e[m])||void 0===n?void 0:n.password)||"",validateOnBlur:!0,validateOnChange:!0,panel:"try-it"})))}if("bearer"===t.scheme){const t=getSecurityDetailsOptions(m,""),o={fieldName:`auth.${m}`,fullWidth:!0,defaultValue:fromSessionStorage(`auth.${m}`)||(null==e?void 0:e[m]),rules:{validate:requiredValidator},validateOnBlur:!0,validateOnChange:!0};return React.createElement(Fragment,{key:m},React.createElement(FormControl,null,React.createElement(FormLabel,null," Bearer Token: "),t?React.createElement(FormDropdown,Object.assign({},o,{options:t})):React.createElement(FormTextField,Object.assign({},o,{type:"password",placeholder:"(without 'Bearer')",panel:"try-it"}))))}}else{if("oauth2"===t.type&&t.flows&&t.flows.clientCredentials)return React.createElement(OAuth2TokenInput,{key:m,flow:t.flows.clientCredentials,server:o,authCorsProxyUrl:a,id:m,clientId:t.flows.clientCredentials["x-defaultClientId"]||t["x-defaultClientId"],defaultValues:null==e?void 0:e[m]});if("oauth2"===t.type&&t.flows&&t.flows.implicit)return React.createElement(OAuth2Flow,{key:m,authorizationUrl:t.flows.implicit.authorizationUrl,authCorsProxyUrl:a,scopes:Object.keys((null===(u=null===(i=null==t?void 0:t.flows)||void 0===i?void 0:i.implicit)||void 0===u?void 0:u.scopes)||{}),server:o,id:m,clientId:t.flows.implicit["x-defaultClientId"]||t["x-defaultClientId"],flow:"implicit",defaultValues:null==e?void 0:e[m]});if("oauth2"===t.type&&t.flows&&t.flows.authorizationCode)return React.createElement(OAuth2Flow,{key:m,authorizationUrl:t.flows.authorizationCode.authorizationUrl,tokenUrl:t.flows.authorizationCode.tokenUrl,authCorsProxyUrl:a,scopes:Object.keys((null===(s=t.flows.authorizationCode)||void 0===s?void 0:s.scopes)||{}),server:o,id:m,clientId:t.flows.authorizationCode["x-defaultClientId"]||t["x-defaultClientId"],flow:"authorizationCode",tokenEndpointAuthMethod:t.flows.authorizationCode["x-tokenEndpointAuthMethod"],usePkce:t.flows.authorizationCode["x-usePkce"],defaultValues:null==e?void 0:e[m]});if("oauth2"===t.type){let t=fromSessionStorage(`auth.${m}.token`)||JSON.stringify(null===(c=null==e?void 0:e[m])||void 0===c?void 0:c.token);return t=t?JSON.parse(t):{},React.createElement(Fragment,{key:m},React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token Type: "),React.createElement(FormTextField,{fullWidth:!0,fieldName:`auth.${m}.token.token_type`,defaultValue:t.token_type||"Bearer",panel:"try-it"})),React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token: "),React.createElement(FormTextField,{type:"password",fullWidth:!0,fieldName:`auth.${m}.token.access_token`,rules:{validate:requiredValidator},defaultValue:t.access_token,validateOnBlur:!0,validateOnChange:!0,panel:"try-it"})))}if("openIdConnect"===t.type)return React.createElement(OpenIDConnect,{key:m,server:o,authCorsProxyUrl:a,id:m,scheme:t,clientId:t["x-defaultClientId"],defaultValues:null==e?void 0:e[m]})}}))),React.createElement("small",null,React.createElement("strong",null,"Note"),": Your credentials will be saved until the end of the browser session"))};
|
|
2
2
|
//# sourceMappingURL=AuthPanel.js.map
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import type { FormApi, FormState } from 'informed';
|
|
2
1
|
import type { OperationModel } from '../../../models';
|
|
3
2
|
import type { SecurityDetails } from '../../../types';
|
|
4
3
|
export interface AuthPanelProps {
|
|
5
4
|
operation: OperationModel;
|
|
6
|
-
form: FormState;
|
|
7
|
-
formApi: FormApi;
|
|
8
5
|
activeServer: string;
|
|
9
6
|
authCorsProxyUrl: Maybe<string>;
|
|
10
7
|
securityDefaults?: Record<string, SecurityDetails | string>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const CodemirrorInput: React.ComponentType<CodemirrorInputBase>;
|
|
2
|
+
import type { CodemirrorInputProps } from './types';
|
|
3
|
+
export declare const CodemirrorInputComponent: ({ onChange, onBlur, id, schema, fieldName, validate, defaultValue, mode, }: CodemirrorInputProps) => JSX.Element;
|
|
4
|
+
export declare const CodemirrorInput: React.NamedExoticComponent<CodemirrorInputProps>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React,{memo,useCallback,useMemo}from"react";import{useFormContext,Controller}from"react-hook-form";import{json}from"@codemirror/lang-json";import{MediaTypes}from"../../../constants";import{StyledCodeMirror}from"./styled";import{linterInit,themeInit}from"./helpers";export const CodemirrorInputComponent=({onChange:e,onBlur:r,id:o,schema:t,fieldName:l,validate:n,defaultValue:a,mode:m})=>{const{setValue:s,control:i,setError:c,clearErrors:u,getFieldState:d}=useFormContext(),p=useCallback((e=>{const{error:r}=d(l);e&&!r?c(l,{message:e}):r&&u(l)}),[u,l,d,c]),C=useCallback((r=>{s(l,r),null==e||e(r)}),[l,e,s]),f=useCallback((e=>{null==r||r(e)}),[r]),h=useMemo((()=>[json(),linterInit({id:o,schema:t,handleErrors:p})]),[p,o,t]);return React.createElement(Controller,{control:i,name:l,rules:{validate:n},defaultValue:a,render:({field:{value:e,ref:r}})=>React.createElement(StyledCodeMirror,{ref:r,className:"codemirror-container",value:e||"",onChange:C,onBlur:f,lang:m||MediaTypes.JSON,theme:themeInit("light"),extensions:h,basicSetup:{bracketMatching:!0,closeBrackets:!0,tabSize:2,foldGutter:!1,lineNumbers:!1,lintKeymap:!0,drawSelection:!1}})})};export const CodemirrorInput=memo(CodemirrorInputComponent);
|
|
2
2
|
//# sourceMappingURL=CodemirrorInput.js.map
|
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Extension } from '@uiw/react-codemirror';
|
|
2
|
+
import type { CodemirrorInputProps } from './types';
|
|
3
|
+
export declare function themeInit(theme: 'light' | 'dark'): Extension;
|
|
4
|
+
export declare function linterInit({ id, schema, handleErrors, }: Pick<CodemirrorInputProps, 'id' | 'schema'> & {
|
|
5
|
+
handleErrors: (message?: string) => void;
|
|
6
|
+
}): Extension;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(e,r,
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(t,e,r,o){return new(r||(r=Promise))((function(i,n){function a(t){try{s(o.next(t))}catch(t){n(t)}}function c(t){try{s(o.throw(t))}catch(t){n(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(a,c)}s((o=o.apply(t,e||[])).next())}))};import{materialLightInit,materialDarkInit}from"@uiw/codemirror-theme-material";import{tags as t}from"@lezer/highlight";import{linter}from"@codemirror/lint";import{getLanguageService,TextDocument}from"@redocly/vscode-json-languageservice";export function themeInit(e){const r={settings:{background:"var(--bg-overlay)",fontFamily:"var(--code-block-font-family)"},styles:[{tag:[t.propertyName],color:"var(--code-block-tokens-property-string-color)"},{tag:[t.processingInstruction,t.string,t.inserted,t.special(t.string)],color:"var(--code-block-tokens-string-color)"},{tag:[t.atom,t.bool,t.special(t.variableName)],color:"var(--text-secondary)"}]};switch(e){case"light":default:return materialLightInit(r);case"dark":return materialDarkInit(r)}}const service=getLanguageService({});export function linterInit({id:t,schema:e,handleErrors:r}){return service.configure({validate:!0,schemas:[{uri:"stub://"+t,fileMatch:["*"],schema:e}]}),linter((e=>__awaiter(this,void 0,void 0,(function*(){var o;const i=e.state.doc.toString(),n=TextDocument.create(t+".json","json",0,i),a=service.parseJSONDocument(n),c=yield service.doValidation(n,a);return r(null===(o=null==c?void 0:c[0])||void 0===o?void 0:o.message),null==c?void 0:c.map((t=>{const e=getPosition(i,t.range.start.line,t.range.start.character);return{from:e,to:e,message:t.message,severity:t.severity}}))}))))}function getPosition(t,e,r){const o=t.split("\n");let i=0;for(let t=0;t<e-1;t++)i+=o[t].length+1;return i+=r,i}
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const StyledCodeMirror: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("@uiw/react-codemirror").ReactCodeMirrorProps & import("react").RefAttributes<import("@uiw/react-codemirror").ReactCodeMirrorRef>>, any, {}, never>;
|
|
@@ -1,54 +1,53 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import styled from"styled-components";import CodeMirror from"@uiw/react-codemirror";export const StyledCodeMirror=styled(CodeMirror)`
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
justify-content: flex-start;
|
|
5
|
+
overflow: hidden;
|
|
6
|
+
flex: 1;
|
|
7
|
+
|
|
8
|
+
.cm-editor {
|
|
9
|
+
flex: 1;
|
|
10
|
+
color: var(--code-block-text-color);
|
|
11
|
+
border-radius: var(--panel-border-radius);
|
|
6
12
|
font-weight: var(--code-block-font-weight);
|
|
7
13
|
font-size: var(--code-block-font-size);
|
|
8
14
|
line-height: var(--code-block-line-height);
|
|
9
15
|
padding: var(--code-block-padding);
|
|
10
16
|
white-space: var(--code-wrap, pre);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.CodeMirror-lint-mark-error {
|
|
14
|
-
background-size: 4px;
|
|
15
|
-
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAYAAAD+Bd/7AAAAVUlEQVR42mNgQAL/GRjigPg/EP8FYntkCX4gtoVKgvE/BoabcEVAhj6S5DUgfgFl/wFJ2gPxL6iuT1DF+kD2R5AYA5KRj6CS/FAMYvszIBltz4AFAAD9fz0YtLg13wAAAABJRU5ErkJggg==') !important;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.cm-s-material .CodeMirror-code .cm-string.cm-property {
|
|
19
|
-
color: var(--code-block-tokens-property-string-color);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.cm-s-material .CodeMirror-code .cm-string {
|
|
23
|
-
color: var(--code-block-tokens-string-color);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.cm-s-material .CodeMirror-code .cm-atom {
|
|
27
|
-
color: var(--text-secondary);
|
|
28
|
-
}
|
|
29
17
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
18
|
+
.cm-matchingBracket {
|
|
19
|
+
outline: 1px solid grey;
|
|
20
|
+
text-decoration: none;
|
|
21
|
+
color: var(--color-gold-8);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.cm-nonmatchingBracket {
|
|
25
|
+
color: var(--color-red-8) !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.cm-activeLine {
|
|
29
|
+
background: none;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.cm-lintPoint:after {
|
|
33
|
+
border: none;
|
|
34
|
+
width: 10px;
|
|
35
|
+
height: 8px;
|
|
36
|
+
left: 0;
|
|
37
|
+
bottom: -2px;
|
|
38
|
+
background-position: left bottom;
|
|
39
|
+
background-repeat: repeat-x;
|
|
40
|
+
background-size: 4px;
|
|
41
|
+
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAYAAAD+Bd/7AAAAVUlEQVR42mNgQAL/GRjigPg/EP8FYntkCX4gtoVKgvE/BoabcEVAhj6S5DUgfgFl/wFJ2gPxL6iuT1DF+kD2R5AYA5KRj6CS/FAMYvszIBltz4AFAAD9fz0YtLg13wAAAABJRU5ErkJggg==') !important;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
.cm-editor.cm-focused {
|
|
45
|
+
outline: none;
|
|
46
|
+
|
|
47
|
+
.cm-matchingBracket,
|
|
48
|
+
.cm-nonmatchingBracket {
|
|
49
|
+
background: none;
|
|
50
|
+
}
|
|
52
51
|
}
|
|
53
52
|
`;
|
|
54
53
|
//# sourceMappingURL=styled.js.map
|
|
@@ -1,22 +1,11 @@
|
|
|
1
|
-
import type { Controlled as CodeMirror } from 'react-codemirror2-react-17';
|
|
2
|
-
import type { FieldApi, FieldState } from 'informed';
|
|
3
|
-
import type { LegacyRef } from 'react';
|
|
4
1
|
import type { OpenAPISchema, Referenced } from '../../../types';
|
|
5
|
-
export interface
|
|
6
|
-
forwardedRef?: LegacyRef<CodeMirror>;
|
|
2
|
+
export interface CodemirrorInputProps {
|
|
7
3
|
mode?: string;
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
fieldName: string;
|
|
5
|
+
defaultValue: string;
|
|
10
6
|
validate: () => string | undefined;
|
|
11
7
|
schema?: Referenced<OpenAPISchema>;
|
|
12
8
|
id: string;
|
|
13
9
|
onChange?: (e: any) => void;
|
|
14
10
|
onBlur?: (e: any) => void;
|
|
15
11
|
}
|
|
16
|
-
export interface CodemirrorInputProps extends CodemirrorInputBase {
|
|
17
|
-
fieldApi: FieldApi;
|
|
18
|
-
fieldState: FieldState<string>;
|
|
19
|
-
render: any;
|
|
20
|
-
userProps: any;
|
|
21
|
-
ref: any;
|
|
22
|
-
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(e,t,o,r){return new(o||(o=Promise))((function(s,n){function a(e){try{l(r.next(e))}catch(e){n(e)}}function i(e){try{l(r.throw(e))}catch(e){n(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(a,i)}l((r=r.apply(e,t||[])).next())}))}
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(e,t,o,r){return new(o||(o=Promise))((function(s,n){function a(e){try{l(r.next(e))}catch(e){n(e)}}function i(e){try{l(r.throw(e))}catch(e){n(e)}}function l(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(a,i)}l((r=r.apply(e,t||[])).next())}))};import{execute}from"swagger-client/es/execute/index";import React,{useEffect,useState,useCallback,memo}from"react";import{useMount}from"@redocly/theme";import{useAtomValue,useAtom}from"jotai";import{useForm,FormProvider}from"react-hook-form";import{dereferenceDefinitionForTryIt}from"./shallowCopyForTryIt";import{unescapeFormId}from"../../../utils/string";import{StyledCodeHeader}from"../../Panel";import{isFileUploadMime}from"../../common/FileUpload/helper";import{AnalyticsEventType}from"../../../events";import{getDefaultOrStoredVariables,getFileNameFromHeaders,getParameters,makeRequestInterceptor,unescapeQueryParams,updateStorage}from"../utils";import{ResponsePanel}from"../ResponsePanel";import{ConsoleTabs}from"../ConsoleTabs";import{ActionPanel}from"../ActionPanel";import{Request}from"./Request";import{CloseButton,ConsoleBody}from"../styled";import{ConsoleWrapper}from"./ConsoleWrapper";import{usePrevious}from"../../../hooks";import{globalStoreAtom}from"../../../jotai/store";import{getActiveMediaType}from"../../../models";import{operationStore}from"../../../jotai/operation";function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}function ConsoleComponent({operation:e,onResponse:t,className:o,rootElement:r,properties:s,mergeExampleBody:n,securityDefaults:a,onClose:i}){const l=useForm({defaultValues:{path:getParameters(e.parameters,"path"),cookie:getParameters(e.parameters,"cookie"),header:getParameters(e.parameters,"header"),query:getParameters(e.parameters,"query")}}),[{activeServer:c},u]=useAtom(operationStore(e.pointer)),[p,m]=useState(0),[d,v]=useState(!1),[y,h]=useState(!1),[f,g]=useState(),[b,S]=useState(),[O,j]=useState(),[C,P]=useState(),R=usePrevious(e),{parser:I,options:T}=useAtomValue(globalStoreAtom);useEffect((()=>{const{unsubscribe:e}=l.watch(((e={})=>{u((t=>Object.assign(Object.assign({},t),{requestValues:JSON.parse(JSON.stringify(e))}))),updateStorage(Object.assign(Object.assign({},e),{query:unescapeQueryParams(e.query||{})}))}));return()=>e()}),[l,u]);const E=useCallback((e=>{m(e)}),[]),A=useCallback((e=>{u((t=>Object.assign(Object.assign({},t),{activeServer:e}))),l.setValue("server",e)}),[u,l]),q=l.handleSubmit((o=>__awaiter(this,void 0,void 0,(function*(){var r,s,n,a,i,l,u,p,d,y,h,g,b;const{servers:O,requestBody:C}=e,R=C&&C.content&&(null===(r=getActiveMediaType(C.content))||void 0===r?void 0:r.name)||"";let I=o.body;if(/json/.test(R))try{I=JSON.parse(I)}catch(e){console.error(e)}v(!0);const E=f,A=(e.httpVerb||"").toLowerCase();if(!O)throw console.error("Servers are not specified in your OpenAPI file. You can't use Try It Out console without specifying servers. If you use OpenAPI 2, make sure you configured host and basepath"),new Error("Servers are not specified");const q=O.find((e=>null==c?void 0:c.url.endsWith(e.url.endsWith("/")?e.url.substring(0,e.url.length-1):e.url))),w=Date.now();let F,V=o.auth;if(V){const e=Object.keys(V)[0],t=unescapeFormId(e);F=Object.assign(Object.assign({},E),{components:Object.assign(Object.assign({},null==E?void 0:E.components),{securitySchemes:Object.assign(Object.assign({},null===(s=null==E?void 0:E.components)||void 0===s?void 0:s.securitySchemes),{[t]:Object.assign(Object.assign({},null===(a=null===(n=null==E?void 0:E.components)||void 0===n?void 0:n.securitySchemes)||void 0===a?void 0:a[t]),{type:"openIdConnect"===(null===(u=null===(l=null===(i=null==E?void 0:E.components)||void 0===i?void 0:i.securitySchemes)||void 0===l?void 0:l[t])||void 0===u?void 0:u.type)?"oauth2":(null===(d=null===(p=null==E?void 0:E.components)||void 0===p?void 0:p.securitySchemes)||void 0===d?void 0:d[t]).type})})})}),V=Object.assign(Object.assign({},V),{[t]:V[e]})}else F=Object.assign({},E);F.servers=O;const k=T.corsProxyUrl;k&&O.length&&(F.servers=O.map((e=>Object.assign(Object.assign({},e),{url:k+normalizeUrlProtocol(e.url)}))),F.paths=Object.assign(Object.assign({},F.paths),{[e.path]:Object.assign(Object.assign({},F.paths[e.path]),{[A]:Object.assign(Object.assign({},F.paths[e.path][A]),{servers:void 0}),servers:void 0})}));const x=(null==C?void 0:C.content)&&(null===(y=getActiveMediaType(C.content))||void 0===y?void 0:y.name)||null;if(x&&I&&isFileUploadMime(x)){const e=Object.values(I);I=e.length>1?e:e[0]}const B=unescapeQueryParams(o.query||{}),_={server:k?k+normalizeUrlProtocol(q.url):q.url,serverVariables:getDefaultOrStoredVariables(q),spec:F,pathName:e.path,method:e.httpVerb,parameters:Object.assign(Object.assign(Object.assign(Object.assign({},o.path),B),o.header),o.cookie),securities:{authorized:V},requestBody:I,requestContentType:x,responseContentType:(null===(h=o.header)||void 0===h?void 0:h.Accept)||null,requestInterceptor:makeRequestInterceptor(T,e,null==V?void 0:V.Authorization)};try{const e=yield execute(_),o=null==e?void 0:e.data;o instanceof Blob&&(isFileUploadMime(o.type)&&(e.fileInfo={rawData:o,fileName:getFileNameFromHeaders(e.headers)}),e.data=yield o.text()),null==t||t({request:_,response:e}),P(e),j(void 0)}catch(e){e&&e.response&&e.response.data instanceof Blob&&(e.response.data=yield e.response.data.text(),null==t||t({request:_,response:e.response})),P(void 0),j(e)}finally{v(!1),m(1),S(Date.now()-w),null===(b=null===(g=T.events)||void 0===g?void 0:g.tryItSent)||void 0===b||b.call(g,{eventType:AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"Sent",operationId:e.operationId,operationPath:e.path,operationHttpVerb:e.httpVerb,operationSummary:e.description})}}))),(()=>{var t,o;h(!0),setTimeout((()=>h(!1)),1e3),null===(o=null===(t=T.events)||void 0===t?void 0:t.tryItSent)||void 0===o||o.call(t,{eventType:AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"ValidationFailed",operationId:e.operationId,operationPath:e.path,operationHttpVerb:e.httpVerb,operationSummary:e.description})}));useMount((()=>__awaiter(this,void 0,void 0,(function*(){const t=yield dereferenceDefinitionForTryIt(e,I.definition);g(t),e.activeServer&&!c&&u((t=>Object.assign(Object.assign({},t),{activeServer:e.activeServer})))})))),useEffect((()=>{R&&R!==e&&(P(void 0),j(void 0),m(0))}),[e,R]);const w=!(!C&&!O),F=l.getValues();return React.createElement(FormProvider,Object.assign({},l),React.createElement(ConsoleWrapper,{shaking:y,className:o,rootElement:r},React.createElement(StyledCodeHeader,null,React.createElement(ConsoleTabs,{active:p,hasResponse:w,onChange:E}),i&&React.createElement(CloseButton,{onClick:i}," ✕ ")),React.createElement(ConsoleBody,{hidden:0!==p,"data-cy":"console-request-body"},React.createElement(Request,{operation:e,properties:s,mergeExampleBody:n,securityDefaults:a,resolvedRawSpec:f,server:c||e.activeServer,onServerChange:A})),React.createElement(ConsoleBody,{hidden:1!==p,"data-cy":"console-response-body"},React.createElement(ResponsePanel,{response:C,error:O,time:b})),React.createElement(ActionPanel,{hasResponse:w,params:F,operation:e,loading:d,onSubmit:q})))}export const Console=memo(ConsoleComponent);
|
|
2
2
|
//# sourceMappingURL=Console.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{memo}from"react";import{
|
|
1
|
+
import React,{memo}from"react";import{useAtomValue}from"jotai";import{OpenApiTryItSecurityPanel}from"@redocly/theme";import{useFormContext,Controller}from"react-hook-form";import{requiredValidator}from"../utils";import{JsonPointer}from"../../../utils";import{OAuth2}from"../../../services/OAuth2";import{l}from"../../../services";import{Accordion}from"../../Panel";import{ServersDropdown}from"../ServersDropdown";import{TryItPanel}from"../TryItPanel";import{RequestBody}from"../RequestBody";import{OperationParameters}from"../../OperationParameters";import{AuthPanel}from"../AuthPanel";import{globalOptionsAtom}from"../../../jotai/store";import{RenderHook}from"../../RenderHook";function RequestComponent({operation:e,properties:r,mergeExampleBody:t,securityDefaults:o,resolvedRawSpec:a,server:n,onServerChange:i}){const{watch:m,formState:u}=useFormContext(),c=u.errors||{},s=Boolean(c.path||c.cookie||c.header||c.query),{hooks:d,authCorsProxyUrl:p}=useAtomValue(globalOptionsAtom),y=a&&JsonPointer.get(a,e.pointer),h=m();let f=h&&h.auth&&Object.keys(h.auth)[0];f&&h.auth[f]||(f=void 0),!f||void 0===h.auth[f].token&&void 0===h.auth[f].client_id&&void 0===h.auth[f].client_secret||h.auth[f].token&&h.auth[f].token.access_token||(f=void 0),f&&null!=h.auth[f].username&&(h.auth[f].username&&h.auth[f].password||(f=void 0));const v=e.parameters||[];return!a&&React.createElement(React.Fragment,null,"Loading...")||React.createElement("form",{style:{flex:1,display:"flex",flexDirection:"column",margin:0}},React.createElement(ServersDropdown,{operation:e,onChange:i}),React.createElement(Accordion,{initialActiveIdx:e.security.length&&f?1:0},e.security.length&&React.createElement(TryItPanel,{header:l("tryItAuth"),"data-cy":"security-trigger",error:!f&&!!c.auth,success:!!f,renderChildrenHidden:!0},OpenApiTryItSecurityPanel||(null==d?void 0:d.ReplaceTryItSecurityPanel)?React.createElement(AuthPanelWrapper,{fieldName:"auth",validate:requiredValidator},(r=>React.createElement(RenderHook,{Hook:OpenApiTryItSecurityPanel||(null==d?void 0:d.ReplaceTryItSecurityPanel),props:{server:n,operation:e,onChange:r,OAuth2:OAuth2}}))):React.createElement(AuthPanel,{operation:e,activeServer:n.url,authCorsProxyUrl:p,securityDefaults:o}))||null,e.requestBody&&React.createElement(TryItPanel,{header:l("tryItBody"),"data-cy":"body-trigger",error:!!c.body,renderChildrenHidden:!0},React.createElement(RequestBody,{validate:allowBodyErrors,body:e.requestBody,pointer:e.pointer,id:e.id,resolvedBody:null==y?void 0:y.requestBody,properties:r,mergeExampleBody:t}))||null,v.length&&React.createElement(TryItPanel,{header:l("tryItParameters"),"data-cy":"parameters-trigger",error:s,renderChildrenHidden:!0},React.createElement(OperationParameters,{operation:e,values:h}))||null))}function AuthPanelWrapper({fieldName:e,validate:r,children:t}){const{control:o,setValue:a}=useFormContext();return React.createElement(Controller,{control:o,name:e,rules:{validate:r},render:()=>t(a)})}function allowBodyErrors(){}export const Request=memo(RequestComponent);
|
|
2
2
|
//# sourceMappingURL=Request.js.map
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { FormApi, FormState } from 'informed';
|
|
2
1
|
import type { OperationModel } from '../../../models';
|
|
3
2
|
import type { SecurityDetails, Server } from '../../../types';
|
|
4
3
|
import type { OpenApiResponseData } from '../types';
|
|
@@ -21,11 +20,7 @@ export interface RequestProps {
|
|
|
21
20
|
properties?: any;
|
|
22
21
|
mergeExampleBody?: boolean;
|
|
23
22
|
securityDefaults: Record<string, string | SecurityDetails> | undefined;
|
|
24
|
-
form: any;
|
|
25
23
|
resolvedRawSpec: any;
|
|
26
24
|
server: Server;
|
|
27
|
-
|
|
28
|
-
setFormApi: (formApi: FormApi) => void;
|
|
29
|
-
handleChange: (formState: FormState) => void;
|
|
30
|
-
handleServerChange: (server: Server) => void;
|
|
25
|
+
onServerChange: (server: Server) => void;
|
|
31
26
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { OAuth2FlowProps } from './types';
|
|
3
|
-
export declare const OAuth2Flow: ({ usePkce,
|
|
3
|
+
export declare const OAuth2Flow: ({ usePkce, id, flow, tokenUrl: _tokenUrl, authCorsProxyUrl, tokenEndpointAuthMethod, server, scopes, authorizationUrl, defaultValues, clientId, }: OAuth2FlowProps) => JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(e,t,o,
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(e,t,o,r){return new(o||(o=Promise))((function(l,n){function a(e){try{c(r.next(e))}catch(e){n(e)}}function i(e){try{c(r.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?l(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(a,i)}c((r=r.apply(e,t||[])).next())}))};import React,{useEffect,useState}from"react";import{Button}from"@redocly/theme";import{useAtomValue}from"jotai";import{useFormContext}from"react-hook-form";import{ButtonsWrapper,PkceOptionsWrapper,PkceDetails}from"./styled";import{LinearProgress}from"../../common/LinearProgress";import{FormControl,FormLabel,FormError,FormWrapper}from"../../common/form";import{FormDropdown,FormTextField,TextField}from"../../common/TextField";import{Checkbox}from"../../common/Checkbox";import{OAuth2,deriveCodeChallenge}from"../../../services/OAuth2";import{fromSessionStorage,getSecurityDetailsOptions}from"../../../utils";import{isEmptyObject,randString}from"../../../services/utils";import{getOAuth2TokenEndpointAuthHeader,normalizeUrlProtocol,requiredValidator,validateTokenEndpointMethod}from"../utils";import Scope from"../Scope";import{Error}from"./Error";import{globalOptionsAtom}from"../../../jotai/store";export const OAuth2Flow=({usePkce:e,id:t,flow:o,tokenUrl:r,authCorsProxyUrl:l,tokenEndpointAuthMethod:n,server:a,scopes:i,authorizationUrl:c,defaultValues:u,clientId:s})=>{var d;const{oAuth2RedirectURI:m,routingBasePath:p}=useAtomValue(globalOptionsAtom),{setValue:h,getValues:f,trigger:g,formState:E}=useFormContext(),[k,v]=useState(null),[C,R]=useState(!1),[F,y]=useState(!1),[O,S]=useState(void 0),[b,_]=useState(void 0),[A,x]=useState(void 0),W=(null===(d=f("auth"))||void 0===d?void 0:d[t])||{},P=E.errors||{},w=void 0!==O&&b!==A?{label:"sync",onClick:()=>{O&&_(A)}}:void 0;useEffect((()=>{if(e){const e=randString(43);deriveCodeChallenge(e).then((t=>{S(e),_(t),x(t)}))}}),[e]);const T=()=>{h(`auth.${t}.token`,"")};if(!c)return React.createElement(FormError,null,"No flow info");let V=fromSessionStorage(`auth.${t}.token`)||JSON.stringify(null==u?void 0:u.token);V=V?JSON.parse(V):"";const z=getSecurityDetailsOptions(t,"client_id"),B={fieldName:`auth.${t}.client_id`,fullWidth:!0,defaultValue:fromSessionStorage(`auth.${t}.client_id`)||s||(null==u?void 0:u.client_id),placeholder:"Your OAuth2 app Client ID",rules:{validate:requiredValidator},validateOnBlur:!0,validateOnChange:!0};return React.createElement("div",null,React.createElement(FormWrapper,null,React.createElement(FormControl,null,React.createElement(FormLabel,null," Client ID: "),z?React.createElement(FormDropdown,Object.assign({},B,{options:z})):React.createElement(FormTextField,Object.assign({},B,{"data-cy":"client-id-input",panel:"try-it"}))),"authorizationCode"===o&&React.createElement(React.Fragment,null,(!(null==e?void 0:e.hideClientSecretInput)||!e)&&React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client Secret:"),React.createElement(FormTextField,{type:"password",fullWidth:!0,fieldName:`auth.${t}.client_secret`,defaultValue:fromSessionStorage(`auth.${t}.client_secret`)||(null==u?void 0:u.client_secret),validateOnBlur:!0,validateOnChange:!0,panel:"try-it","data-cy":"client-secret-input"})),e&&!e.disableManualConfiguration&&React.createElement(PkceOptionsWrapper,null,React.createElement(Checkbox,{id:"pkce-opitons-toggle",label:"Configure PKCE manually",checked:F,onChange:()=>{y((e=>!e))},"data-cy":"pkce-options-toggle"}),F&&React.createElement(PkceDetails,null,React.createElement(FormControl,null,React.createElement(FormLabel,null,"Code Verifier"),React.createElement(TextField,{fullWidth:!0,value:O,onChange:({target:{value:e}})=>__awaiter(void 0,void 0,void 0,(function*(){const t=yield deriveCodeChallenge(e);S(e),x(t)})),panel:"try-it","data-cy":"code-verifier-input"})),React.createElement(FormControl,null,React.createElement(FormLabel,null,"Code Challenge"),React.createElement(TextField,{fullWidth:!0,value:b,onChange:({target:{value:e}})=>{_(e)},inputActionButton:w,panel:"try-it","data-cy":"code-challenge-input"}))))),React.createElement(FormTextField,{fullWidth:!0,fieldName:`auth.${t}.token`,type:"hidden",defaultValue:V,panel:"try-it"}),React.createElement(Scope,{id:t,scopes:i}),W.token&&W.token.access_token?React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token: "),React.createElement(TextField,{disabled:!0,type:"password",fullWidth:!0,value:W.token.access_token,panel:"try-it"})):null),React.createElement(ButtonsWrapper,null,W.token&&W.token.access_token?React.createElement(Button,{fullWidth:!0,onClick:()=>{T(),v(null)}},"Log out"):C?React.createElement(React.Fragment,null,React.createElement(Button,{fullWidth:!0,onClick:()=>{R(!1),v(null),OAuth2.clearRedirectData(o)}},"Cancel"),React.createElement(LinearProgress,null)):React.createElement(Button,{fullWidth:!0,disabled:!isEmptyObject(P),onClick:()=>{var i;i=c,__awaiter(void 0,void 0,void 0,(function*(){if(!i)return;if(yield g(),!isEmptyObject(P))return;R(!0),v(null);const c=l?l+normalizeUrlProtocol(i):i,u=l&&r?l+normalizeUrlProtocol(r):r,s=f(`auth.${t}.scopes`),d={authorizationUrl:c.startsWith("http")?c:a+c,clientId:W.client_id,scopes:s,redirectUri:m,routingBasePath:p,successCallback:e=>{h(`auth.${t}.token`,e),R(!1),v(null)},errorCallback:e=>{R(!1),v((null==e?void 0:e.message)||"Failed to retrieve the access token")}};"implicit"===o&&OAuth2.authorizeImplicit(d),validateTokenEndpointMethod(n)?"authorizationCode"===o&&OAuth2.authorizeAuthorizationCode(Object.assign(Object.assign(Object.assign({},d),{tokenUrl:(null==u?void 0:u.startsWith("http"))?u:a+u,clientSecret:W.client_secret,extraHeaders:getOAuth2TokenEndpointAuthHeader({authMethod:n,clientId:W.client_id,clientSecret:W.client_secret})}),e&&{codeVerifier:O,codeChallenge:b})):console.log(`Unsupported token endpoint auth method: ${n}`)}))}},"Authorize")),C||k||!W.token||!W.token.access_token&&React.createElement(Error,{loading:C,error:k,token:W.token}))};
|
|
2
2
|
//# sourceMappingURL=OAuth2Flow.js.map
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { SecurityDetails } from '../../../types';
|
|
2
|
-
import type { FormApi, FormState } from 'informed';
|
|
3
2
|
export interface OAuth2FlowProps {
|
|
4
3
|
authorizationUrl: string;
|
|
5
4
|
tokenUrl?: string;
|
|
@@ -11,8 +10,6 @@ export interface OAuth2FlowProps {
|
|
|
11
10
|
scopes: string[];
|
|
12
11
|
server: string;
|
|
13
12
|
id: string;
|
|
14
|
-
form: FormState;
|
|
15
|
-
formApi: FormApi;
|
|
16
13
|
flow: 'implicit' | 'authorizationCode';
|
|
17
14
|
tokenEndpointAuthMethod?: string | string[];
|
|
18
15
|
clientId?: string;
|
|
@@ -9,14 +9,8 @@ export interface OAuth2TokenInputProps {
|
|
|
9
9
|
};
|
|
10
10
|
authCorsProxyUrl: Maybe<string>;
|
|
11
11
|
server: string;
|
|
12
|
-
id: string;
|
|
13
|
-
form: {
|
|
14
|
-
values: any;
|
|
15
|
-
errors: any;
|
|
16
|
-
};
|
|
17
|
-
formApi: any;
|
|
18
12
|
clientId?: string;
|
|
13
|
+
id: string;
|
|
19
14
|
defaultValues?: SecurityDetails;
|
|
20
15
|
}
|
|
21
|
-
export declare const OAuth2TokenInput: ({
|
|
22
|
-
export default OAuth2TokenInput;
|
|
16
|
+
export declare const OAuth2TokenInput: ({ id, server, flow, authCorsProxyUrl, defaultValues, clientId, }: OAuth2TokenInputProps) => JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(e,t,o,n){return new(o||(o=Promise))((function(r,l){function
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(e,t,o,n){return new(o||(o=Promise))((function(r,l){function a(e){try{c(n.next(e))}catch(e){l(e)}}function i(e){try{c(n.throw(e))}catch(e){l(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(a,i)}c((n=n.apply(e,t||[])).next())}))};import React,{useState}from"react";import{Button}from"@redocly/theme";import{useFormContext}from"react-hook-form";import{FormControl,FormLabel,FormError,FormWrapper,FormHeader,TokenField,TokenValue,TokenClear,TokenShowHide}from"../common/form";import{fromSessionStorage,getSecurityDetailsOptions,toSessionStorage}from"../../utils";import{OAuth2}from"../../services/OAuth2";import{FormDropdown,FormTextField}from"../common/TextField";import Scope from"./Scope";import{getOAuth2TokenEndpointAuthHeader,normalizeUrlProtocol,validateTokenEndpointMethod}from"./utils";function validateToken(e){if(!e)return"Token is required"}export const OAuth2TokenInput=({id:e,server:t,flow:o,authCorsProxyUrl:n,defaultValues:r,clientId:l})=>{var a,i;const{setValue:c,watch:s,formState:u}=useFormContext(),[m,d]=useState(""),[h,p]=useState(!1),[k,f]=useState(!0),F=(null===(a=s("auth"))||void 0===a?void 0:a[e])||{},S=(null===(i=u.errors)||void 0===i?void 0:i.auth)||{},E=()=>{c(`auth.${e}.token`,""),toSessionStorage(`auth.${e}.token`,"")},v=Object.keys(o.scopes);let g=fromSessionStorage(`auth.${e}.token`)||JSON.stringify(null==r?void 0:r.token);g=g?JSON.parse(g):"";const _=getSecurityDetailsOptions(e,"client_id"),R={fieldName:`auth.${e}.client_id`,fullWidth:!0,defaultValue:fromSessionStorage(`auth.${e}.client_id`)||l||(null==r?void 0:r.client_id),placeholder:"Your OAuth2 app Client ID"};return React.createElement(React.Fragment,null,React.createElement(FormWrapper,null,React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client ID:"),_?React.createElement(FormDropdown,Object.assign({},R,{options:_})):React.createElement(FormTextField,Object.assign({},R,{type:"password",panel:"try-it"}))),React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client Secret:"),React.createElement(FormTextField,{type:"password",fullWidth:!0,fieldName:`auth.${e}.client_secret`,defaultValue:fromSessionStorage(`auth.${e}.client_secret`)||(null==r?void 0:r.client_secret),panel:"try-it"})),React.createElement(FormTextField,{fullWidth:!0,fieldName:`auth.${e}.token`,type:"hidden",defaultValue:g,rules:{validate:validateToken}}),React.createElement(Scope,{id:e,scopes:v})),React.createElement(Button,{color:"primary",onClick:()=>__awaiter(void 0,void 0,void 0,(function*(){if(h)return;const r=n&&o.tokenUrl?n+normalizeUrlProtocol(o.tokenUrl):o.tokenUrl;if(S.client_id||S.client_secret)return void console.log("Provide client_id and client_secret");const l=F.client_id,a=F.client_secret;if(!l||!a)return void console.log("Provide client_id and client_secret");p(!0);const i=o["x-tokenEndpointAuthMethod"];validateTokenEndpointMethod(i)?yield OAuth2.authorizeClientCredentials({tokenUrl:r.startsWith("http")?r:t+r,clientId:l,clientSecret:a,scopes:F.scopes,extraHeaders:getOAuth2TokenEndpointAuthHeader({authMethod:i,clientId:l,clientSecret:a}),successCallback:t=>{c(`auth.${e}.token`,t),p(!1)},errorCallback:e=>{E(),d(e.message),p(!1)}}):console.log(`Unsupported token endpoint auth method: ${i}`)})),blinking:h},h?"Loading...":"Request Token"),React.createElement(FormHeader,null," Access Token "),m?React.createElement(FormError,{style:{marginBottom:"1em"}},"Failed to request token: ",React.createElement("pre",null,m)," "):F.token&&F.token.access_token?React.createElement(TokenField,null,React.createElement(TokenValue,{length:F.token.access_token.length,masked:k},F.token.access_token),React.createElement(TokenShowHide,{onClick:()=>{f((e=>!e))}},k?"Show":"Hide"," "),React.createElement(TokenClear,{onClick:E}," Clear ")):React.createElement(FormError,{style:{marginBottom:"1em"}},"No token"))};
|
|
2
2
|
//# sourceMappingURL=OAuth2TokenInput.js.map
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type { FormApi, FormState } from 'informed';
|
|
3
2
|
import type { ExtendedOpenAPISecurityScheme } from '../../models';
|
|
4
3
|
import type { SecurityDetails } from '../../types';
|
|
5
4
|
export interface OpenIDConnectProps {
|
|
6
5
|
server: string;
|
|
7
6
|
authCorsProxyUrl: Maybe<string>;
|
|
8
7
|
id: string;
|
|
9
|
-
form: FormState;
|
|
10
|
-
formApi: FormApi;
|
|
11
8
|
scheme: ExtendedOpenAPISecurityScheme;
|
|
12
9
|
clientId?: string;
|
|
13
10
|
defaultValues?: SecurityDetails;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(r,a){function l(e){try{i(o.next(e))}catch(e){a(e)}}function c(e){try{i(o.throw(e))}catch(e){a(e)}}function i(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,c)}i((o=o.apply(e,t||[])).next())}))};import React,{useState,useEffect}from"react";import{discoverOpenIDConnect}from"../../services/OpenIDConnect";import{LinearProgress}from"../common/LinearProgress";import{FormError}from"../common/form";import{OAuth2Flow}from"./OAuth2Flow";import{FlowName}from"./styled";export function OpenIDConnect(e){var t,n;const{scheme:o,defaultValues:r}=e,[a,l]=useState({}),[c,i]=useState(),[u,s]=useState(!1);useEffect((()=>{
|
|
1
|
+
var __awaiter=this&&this.__awaiter||function(e,t,n,o){return new(n||(n=Promise))((function(r,a){function l(e){try{i(o.next(e))}catch(e){a(e)}}function c(e){try{i(o.throw(e))}catch(e){a(e)}}function i(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(l,c)}i((o=o.apply(e,t||[])).next())}))};import React,{useState,useEffect}from"react";import{discoverOpenIDConnect}from"../../services/OpenIDConnect";import{LinearProgress}from"../common/LinearProgress";import{FormError}from"../common/form";import{OAuth2Flow}from"./OAuth2Flow";import{FlowName}from"./styled";export function OpenIDConnect(e){var t,n;const{scheme:o,defaultValues:r}=e,[a,l]=useState({}),[c,i]=useState(),[u,s]=useState(!1);useEffect((()=>{d(o.openIdConnectUrl)}),[o.openIdConnectUrl]);const d=e=>__awaiter(this,void 0,void 0,(function*(){s(!0),i("");try{const t=yield discoverOpenIDConnect(e);l(t)}catch(e){i(e.message)}s(!1)}));return u?React.createElement(Loading,null):c?React.createElement(Error,{message:c}):React.createElement("div",null,React.createElement("div",null,(null===(t=null==a?void 0:a.response_types_supported)||void 0===t?void 0:t.includes("token"))?React.createElement(React.Fragment,null,React.createElement(FlowName,null,"OAuth2 Implicit Flow"),React.createElement(OAuth2Flow,{key:e.id,authorizationUrl:a.authorization_endpoint,authCorsProxyUrl:e.authCorsProxyUrl,scopes:a.scopes_supported,server:e.server,id:e.id,clientId:e.clientId,flow:"implicit",defaultValues:r})):(null===(n=null==a?void 0:a.response_types_supported)||void 0===n?void 0:n.includes("code"))?React.createElement(React.Fragment,null,React.createElement(FlowName,null,"OAuth2 Authorization Flow"),React.createElement(OAuth2Flow,{key:e.id,authorizationUrl:a.authorization_endpoint,tokenUrl:a.token_endpoint,authCorsProxyUrl:e.authCorsProxyUrl,scopes:a.scopes_supported,server:e.server,id:e.id,clientId:e.clientId,tokenEndpointAuthMethod:null==a?void 0:a.token_endpoint_auth_methods_supported,flow:"authorizationCode",defaultValues:r})):React.createElement("div",null,"Unsupported flow")))}function Loading(){return React.createElement("div",null,React.createElement("div",null,React.createElement("div",null,"Fetching OpenID Connect metadata..."),React.createElement(LinearProgress,null)))}export function Error({message:e}){return React.createElement("div",null,React.createElement("div",null,React.createElement(FormError,null,e)))}
|
|
2
2
|
//# sourceMappingURL=OpenIDConnect.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
interface ParameterEnumDropdownProps {
|
|
3
|
-
|
|
3
|
+
defaultValue: string | string[];
|
|
4
4
|
paramEnum: Array<string>;
|
|
5
|
+
fieldName: string;
|
|
5
6
|
}
|
|
6
|
-
export declare const ParameterEnumDropdown: React.
|
|
7
|
+
export declare const ParameterEnumDropdown: React.NamedExoticComponent<ParameterEnumDropdownProps>;
|
|
7
8
|
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{
|
|
1
|
+
import React,{memo}from"react";import{Controller,useFormContext}from"react-hook-form";import{TryItDropdown}from"./styled";const ParameterEnumDropdownComponent=({paramEnum:e,fieldName:r,defaultValue:o})=>{const{control:t,setValue:a}=useFormContext(),n=e.map(((e,r)=>({idx:r,value:e}))),m=e=>{a(r,e.value)},l=()=>{a(r,"")};return React.createElement(Controller,{control:t,name:r,defaultValue:Array.isArray(o)?o[0]:o,render:({field:{value:e}})=>React.createElement(TryItDropdown,{clearable:!0,fullWidth:!0,variant:"dark",value:e,options:n,handleClear:l,onChange:m})})};export const ParameterEnumDropdown=memo(ParameterEnumDropdownComponent);
|
|
2
2
|
//# sourceMappingURL=ParameterDropdown.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{memo,useCallback}from"react";import{isRootFileUpload}from"../../common/FileUpload/helper";import{MediaTypes}from"../../../constants";import{ExampleSwitch,useExampleKey}from"../../Samples";import{fromSessionStorage,toSessionStorage}from"../../../utils";import{encodeSample,getStorageExampleKey}from"../utils";import{RequestBodyForm}from"../RequestBodyForm";import{CodemirrorInput}from"../CodemirrorInput";import{useActivateExample}from"../../../hooks";function BodyComponent({mediaType:e,mediaContent:o,properties:t,id:a,resolvedBody:m,
|
|
1
|
+
import React,{memo,useCallback,useMemo}from"react";import{useFormContext}from"react-hook-form";import{isRootFileUpload}from"../../common/FileUpload/helper";import{MediaTypes}from"../../../constants";import{ExampleSwitch,useExampleKey}from"../../Samples";import{fromSessionStorage,toSessionStorage}from"../../../utils";import{encodeSample,getStorageExampleKey}from"../utils";import{RequestBodyForm}from"../RequestBodyForm";import{CodemirrorInput}from"../CodemirrorInput";import{useActivateExample}from"../../../hooks";function BodyComponent({mediaType:e,mediaContent:o,properties:t,id:a,resolvedBody:m,getActiveSample:r,validate:l}){const{setValue:n}=useFormContext(),i=useActivateExample(o),p=e.examples||{},s=Object.keys(p),d=e.schema,c=isRootFileUpload(d||{},e.name)||e.name===MediaTypes.MULTIPART||e.name===MediaTypes.URL_ENCODED,{exampleKey:u}=useExampleKey(e.operation,p),y=fromSessionStorage(getStorageExampleKey(a,e.name,u,p))||encodeSample(p[u],t),g=useCallback(((e="",o="",t=[])=>m=>{toSessionStorage(getStorageExampleKey(a,e,o,t),m)}),[a]),S=useCallback((e=>{null==i||i(e),n("body",r(e))}),[n,r,i]),f=useCallback(((e,o)=>{n(`body.${e}`,o)}),[n]),x=useMemo((()=>((null==m?void 0:m.content[e.name])||{}).schema),[e.name,null==m?void 0:m.content]);return React.createElement(React.Fragment,null,s.length&&1!==s.length&&React.createElement(ExampleSwitch,{examples:p,onChange:S,exampleKey:u,panel:"try-it"})||null,c?React.createElement(RequestBodyForm,{mediaType:e,onChange:f}):React.createElement(CodemirrorInput,{id:"body"+a,fieldName:"body",defaultValue:y,schema:x,mode:e.name,validate:l,onChange:g(e.name,u,p)}))}export const Body=memo(BodyComponent);
|
|
2
2
|
//# sourceMappingURL=Body.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import React,{memo,useCallback,useEffect}from"react";import{useAtomValue}from"jotai";import{DropdownOrLabel}from"../../DropdownOrLabel";import{MediaTypesSwitch}from"../../MediaTypeSwitch";import{Dropdown}from"../../common";import{RequestMimeLabel}from"../RequestMimeLabel";import{encodeSample,getStorageExampleKey}from"../utils";import{fromSessionStorage}from"../../../utils";import{Body}from"./Body";import{getActiveMediaType}from"../../../models";import{activeMimeNameAtom}from"../../../jotai/app";import{operationStore}from"../../../jotai/operation";function RequestBodyComponent({body:{content:e},
|
|
1
|
+
import React,{memo,useCallback,useEffect}from"react";import{useAtomValue}from"jotai";import{useFormContext}from"react-hook-form";import{DropdownOrLabel}from"../../DropdownOrLabel";import{MediaTypesSwitch}from"../../MediaTypeSwitch";import{Dropdown}from"../../common";import{RequestMimeLabel}from"../RequestMimeLabel";import{encodeSample,getStorageExampleKey}from"../utils";import{fromSessionStorage}from"../../../utils";import{Body}from"./Body";import{getActiveMediaType}from"../../../models";import{activeMimeNameAtom}from"../../../jotai/app";import{operationStore}from"../../../jotai/operation";function RequestBodyComponent({body:{content:e},resolvedBody:o,properties:t,mergeExampleBody:r,id:a,validate:m,pointer:i}){const{setValue:n}=useFormContext(),p=useAtomValue(activeMimeNameAtom),{examples:l,name:s}=e&&getActiveMediaType(e,p)||{},d=useCallback((o=>{if(!e||!e.hasSample)return"";if(!(null==l?void 0:l[o]))return"";const r=s&&fromSessionStorage(getStorageExampleKey(a,s,o,l)),m=r?JSON.parse(r):null==l?void 0:l[o];return encodeSample(m,t)}),[s,l,a,e,t]),{activeExampleName:c}=useAtomValue(operationStore(i));useEffect((()=>{if(t&&!r)return void n("body",JSON.stringify(t||{},null,2));const e=getStorageExampleKey(a,s,c,l),o=fromSessionStorage(e)||d(c||"");n("body","object"==typeof o?JSON.stringify(o,null,2):o)}),[l,c,s,n,d,a,t,r]);return React.createElement(React.Fragment,null,React.createElement(MediaTypesSwitch,{content:e,renderDropdown:e=>React.createElement(DropdownOrLabel,Object.assign({},e,{variant:"dark",fullWidth:!0,Label:RequestMimeLabel,Dropdown:Dropdown}))},(r=>React.createElement(Body,{mediaType:r,mediaContent:e,resolvedBody:o,id:a,properties:t,getActiveSample:d,validate:m}))))}export const RequestBody=memo(RequestBodyComponent);
|
|
2
2
|
//# sourceMappingURL=RequestBody.js.map
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { FormApi } from 'informed';
|
|
2
1
|
import type { RequestBodyModel, MediaContentModel, MediaTypeModel } from '../../../models';
|
|
3
2
|
import type { OpenAPIRequestBody } from '../../../types';
|
|
4
3
|
export interface RequestBodyProps {
|
|
@@ -6,12 +5,11 @@ export interface RequestBodyProps {
|
|
|
6
5
|
pointer: string;
|
|
7
6
|
resolvedBody: OpenAPIRequestBody;
|
|
8
7
|
validate: () => string | undefined;
|
|
9
|
-
formApi: FormApi;
|
|
10
8
|
id: string;
|
|
11
9
|
properties: any;
|
|
12
10
|
mergeExampleBody?: boolean;
|
|
13
11
|
}
|
|
14
|
-
export interface BodyProps extends Pick<RequestBodyProps, 'resolvedBody' | 'validate' | '
|
|
12
|
+
export interface BodyProps extends Pick<RequestBodyProps, 'resolvedBody' | 'validate' | 'id' | 'properties'> {
|
|
15
13
|
mediaType: MediaTypeModel;
|
|
16
14
|
mediaContent?: MediaContentModel;
|
|
17
15
|
getActiveSample: (key: string) => string;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { FormApi } from 'informed';
|
|
3
2
|
import type { FieldModel, MediaTypeModel, UploadFileType } from '../../models';
|
|
4
3
|
interface RequestBodyFormProps {
|
|
5
4
|
mediaType: MediaTypeModel;
|
|
6
5
|
onChange(key: string, file: UploadFileType): void;
|
|
7
|
-
formApi?: FormApi;
|
|
8
6
|
}
|
|
9
7
|
export declare const RequestBodyForm: React.NamedExoticComponent<RequestBodyFormProps>;
|
|
10
8
|
export declare function getRequestBodyFormFields(mediaType: MediaTypeModel): FieldModel[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React,{memo,useEffect}from"react";import styled from"styled-components";import{readAtom}from"../../jotai/nexus";import{isMultipartFileUploadProperty,isRootFileUpload,mimeTypeToAccept}from"../common/FileUpload/helper";import{FormControl,FormLabel}from"../common/form";import{FileUpload}from"../common/FileUpload";import{FormTextField,getInvertedInputStyles}from"../common/TextField";import{DefinitionTypes}from"../../models";import{MediaTypes}from"../../constants";import{useExampleKey}from"../Samples";import{operationStore}from"../../jotai/operation";import{normalizeText}from"../../utils";function RequestBodyFormComponent({mediaType:e,onChange:o
|
|
1
|
+
import React,{memo,useEffect}from"react";import styled from"styled-components";import{useFormContext}from"react-hook-form";import{readAtom}from"../../jotai/nexus";import{isMultipartFileUploadProperty,isRootFileUpload,mimeTypeToAccept}from"../common/FileUpload/helper";import{FormControl,FormLabel}from"../common/form";import{FileUpload}from"../common/FileUpload";import{FormTextField,getInvertedInputStyles}from"../common/TextField";import{DefinitionTypes}from"../../models";import{MediaTypes}from"../../constants";import{useExampleKey}from"../Samples";import{operationStore}from"../../jotai/operation";import{normalizeText}from"../../utils";function RequestBodyFormComponent({mediaType:e,onChange:o}){var t;const{setValue:l}=useFormContext(),m=e.examples||{},{exampleKey:n}=useExampleKey(e.operation,m),r=null===(t=m[n])||void 0===t?void 0:t.rawValue,a=getRequestBodyFormFields(e);useEffect((()=>l&&a.forEach((e=>{var o,t;const m=null==r?void 0:r[e.name],n=null!==(t=null!==(o=e.example)&&void 0!==o?o:null==m?void 0:m.example)&&void 0!==t?t:m,a="object"==typeof n?JSON.stringify(n):n;void 0!==n&&l("body."+e.name,`${a}`)}))),[n]);const i=e.schema||{};return isRootFileUpload(i,e.name)?React.createElement(FileFormControlWrapper,null,React.createElement(FormControl,null,React.createElement(StyledFileUpload,{fullWidth:!0,fieldName:`body.${e.name}`,accept:mimeTypeToAccept(e.name),schema:i,contentName:e.name,onChange:o}))):i.type===DefinitionTypes.OBJECT||a?React.createElement(FileFormControlWrapper,null,a.map((t=>{const l=t.schema||{contentMediaType:"",type:"",description:""},m=e.name===MediaTypes.MULTIPART&&isMultipartFileUploadProperty(l),n=l.contentMediaType||"",r=m?React.createElement(StyledFileUpload,{fullWidth:!0,fieldName:"body."+t.name,accept:mimeTypeToAccept(n),multiple:"array"===l.type,schema:l,contentName:t.name,onChange:o}):React.createElement(FormTextField,{fullWidth:!0,id:"body."+t.name,fieldName:"body."+t.name,placeholder:normalizeText(l.description)||t.name,panel:"try-it"});return React.createElement(FormControl,{key:t.name},React.createElement(FormLabel,null,t.name,":"),r)}))):(console.warn(`Invalid schema for request body and mime type: "${e.name}"`,i),null)}export const RequestBodyForm=memo(RequestBodyFormComponent);export function getRequestBodyFormFields(e){var o,t,l,m,n,r;const{activeOneOf:a}=readAtom(operationStore(e.operation.pointer)),i=null!==(t=a[(null===(o=e.schema)||void 0===o?void 0:o.pointer)||""])&&void 0!==t?t:0;return((null===(m=null===(l=e.schema)||void 0===l?void 0:l.oneOf)||void 0===m?void 0:m.length)?(null===(n=e.schema)||void 0===n?void 0:n.oneOf[i].fields)||[]:(null===(r=e.schema)||void 0===r?void 0:r.fields)||[]).filter((e=>!e.schema.readOnly))}const FileFormControlWrapper=styled.div`
|
|
2
2
|
> div {
|
|
3
3
|
margin-top: 10px;
|
|
4
4
|
}
|