@redocly/reference-docs 2.2.2 → 2.2.3

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.
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { FormApi, FormState } from 'informed';
3
3
  import { OperationModel } from '../../redoc-lib';
4
+ import { SecurityDetails } from '../../utils';
4
5
  export declare function requiredValidator(value: any): "Field is required" | undefined;
5
6
  export interface AuthPanelProps {
6
7
  operation: OperationModel;
@@ -8,6 +9,7 @@ export interface AuthPanelProps {
8
9
  formApi: FormApi;
9
10
  activeServer: string;
10
11
  authCorsProxyUrl: Maybe<string>;
12
+ securityDefaults?: Record<string, SecurityDetails | string>;
11
13
  }
12
14
  export interface AuthPanelState {
13
15
  activeScheme: number;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.AuthPanel=exports.requiredValidator=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),redoc_lib_1=require("../../redoc-lib"),utils_1=require("../../utils"),OAuth2TokenInput_1=(0,tslib_1.__importDefault)(require("./OAuth2TokenInput")),OAuth2Flow_1=require("./OAuth2Flow"),OpenIDConnect_1=require("./OpenIDConnect"),TextField_1=require("../common/TextField"),form_1=require("../common/form"),Labels_1=require("../../redoc-lib/src/services/Labels");function requiredValidator(e){if(!e)return"Field is required"}exports.requiredValidator=requiredValidator;var getCookie=function(e){var t=document.cookie.match("\\b"+e+"=([^;]*)\\b");return t?t[1]:void 0};function fromCookie(e){if("cookie"===e.in)return getCookie(e.name)}var AuthPanel=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{activeScheme:0}}),Object.defineProperty(t,"handleSchemeChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){t.setState({activeScheme:e.idx}),(0,utils_1.toStorage)("securityRequirementName",e.value)}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t,"getDerivedStateFromProps",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=e.operation.security.map((function(e){return e.schemes.map((function(e){return e.id})).join(" and ")})),r=(0,utils_1.fromStorage)("securityRequirementName"),a=t.findIndex((function(e){return e===r}));return{activeScheme:a<0?0:a}}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this,t=this.state.activeScheme,r=this.props.operation.security,a=r.map((function(e){return e.schemes.map((function(e){return e.id})).join(" and ")})).map((function(e,t){return{value:e,idx:t}}));return 0===a.length?null:React.createElement(React.Fragment,null,React.createElement(form_1.FormWrapper,null,a.length>1&&React.createElement(form_1.FormControl,null,React.createElement(redoc_lib_1.Dropdown,{variant:"dark",fullWidth:!0,prefix:"Security scheme: ",options:a,value:a[t].value,onChange:this.handleSchemeChange}))||null,r[t].schemes.map((function(t){var r,a,o,l=(0,utils_1.escapeFormId)(t.id);if("apiKey"===t.type){var i=(0,utils_1.getSecurityDetailsOptions)(l,""),n={field:"auth."+l,fullWidth:!0,initialValue:fromCookie(t)||(0,utils_1.fromStorage)("auth."+l),initValue:fromCookie(t)||(0,utils_1.fromStorage)("auth."+l),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(form_1.FormControl,{key:l},React.createElement(form_1.FormLabel,null," ",t.name,": "),i?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},n,{options:i})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},n,{type:"password","data-cy":"apiKey-auth-password"})))}if("http"===t.type){if("basic"===t.scheme){var u=(0,utils_1.getSecurityDetailsOptions)(l,"username");n={field:"auth."+l+".username",fullWidth:!0,initialValue:(0,utils_1.fromStorage)("auth."+l+".username"),initValue:(0,utils_1.fromStorage)("auth."+l+".username"),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(React.Fragment,{key:l},React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," ",(0,Labels_1.l)("tryItAuthBasicUsername"),": "),u?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},n,{options:u})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},n))),React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," ",(0,Labels_1.l)("tryItAuthBasicPassword"),": "),React.createElement(TextField_1.FormTextField,{type:"password","data-cy":"http-auth-password",fullWidth:!0,field:"auth."+l+".password",validate:requiredValidator,initialValue:(0,utils_1.fromStorage)("auth."+l+".password"),validateOnBlur:!0,validateOnChange:!0})))}if("bearer"===t.scheme){var s=(0,utils_1.getSecurityDetailsOptions)(l,"");n={field:"auth."+l,fullWidth:!0,initialValue:(0,utils_1.fromStorage)("auth."+l),initValue:(0,utils_1.fromStorage)("auth."+l),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(React.Fragment,{key:l},React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Bearer Token: "),s?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},n,{options:s})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},n,{type:"password",placeholder:"(without 'Bearer')"}))))}}else{if("oauth2"===t.type&&t.flows&&t.flows.clientCredentials)return React.createElement(OAuth2TokenInput_1.default,{key:l,flow:t.flows.clientCredentials,server:e.props.activeServer,authCorsProxyUrl:e.props.authCorsProxyUrl,id:l,form:e.props.form,formApi:e.props.formApi,clientId:t.flows.clientCredentials["x-defaultClientId"]||t["x-defaultClientId"]});if("oauth2"===t.type&&t.flows&&t.flows.implicit)return React.createElement(OAuth2Flow_1.OAuth2Flow,{key:l,authorizationUrl:t.flows.implicit.authorizationUrl,authCorsProxyUrl:e.props.authCorsProxyUrl,scopes:Object.keys((null===(a=null===(r=null==t?void 0:t.flows)||void 0===r?void 0:r.implicit)||void 0===a?void 0:a.scopes)||{}),server:e.props.activeServer,id:l,form:e.props.form,formApi:e.props.formApi,clientId:t.flows.implicit["x-defaultClientId"]||t["x-defaultClientId"],flow:"implicit"});if("oauth2"===t.type&&t.flows&&t.flows.authorizationCode)return React.createElement(OAuth2Flow_1.OAuth2Flow,{key:l,authorizationUrl:t.flows.authorizationCode.authorizationUrl,tokenUrl:t.flows.authorizationCode.tokenUrl,authCorsProxyUrl:e.props.authCorsProxyUrl,scopes:Object.keys((null===(o=t.flows.authorizationCode)||void 0===o?void 0:o.scopes)||{}),server:e.props.activeServer,id:l,form:e.props.form,formApi:e.props.formApi,clientId:t.flows.authorizationCode["x-defaultClientId"]||t["x-defaultClientId"],flow:"authorizationCode"});if("oauth2"===t.type){var c=(0,utils_1.fromStorage)("auth."+l+".token");return c=c?JSON.parse(c):{},React.createElement(React.Fragment,{key:l},React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Access Token Type: "),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+l+".token.token_type",initialValue:c.token_type||"Bearer"})),React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Access Token: "),React.createElement(TextField_1.FormTextField,{type:"password",fullWidth:!0,field:"auth."+l+".token.access_token",validate:requiredValidator,initialValue:c.access_token,validateOnBlur:!0,validateOnChange:!0})))}if("openIdConnect"===t.type)return React.createElement(OpenIDConnect_1.OpenIDConnect,{key:l,server:e.props.activeServer,authCorsProxyUrl:e.props.authCorsProxyUrl,id:l,form:e.props.form,formApi:e.props.formApi,scheme:t,clientId:t["x-defaultClientId"]})}}))),React.createElement("small",null,React.createElement("strong",null,"Note"),": Your credentials will be saved until the end of the browser session"))}}),t}(React.Component);exports.AuthPanel=AuthPanel;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.AuthPanel=exports.requiredValidator=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),redoc_lib_1=require("../../redoc-lib"),utils_1=require("../../utils"),OAuth2TokenInput_1=(0,tslib_1.__importDefault)(require("./OAuth2TokenInput")),OAuth2Flow_1=require("./OAuth2Flow"),OpenIDConnect_1=require("./OpenIDConnect"),TextField_1=require("../common/TextField"),form_1=require("../common/form"),Labels_1=require("../../redoc-lib/src/services/Labels");function requiredValidator(e){if(!e)return"Field is required"}exports.requiredValidator=requiredValidator;var getCookie=function(e){var t=document.cookie.match("\\b"+e+"=([^;]*)\\b");return t?t[1]:void 0};function fromCookie(e){if("cookie"===e.in)return getCookie(e.name)}var AuthPanel=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{activeScheme:0}}),Object.defineProperty(t,"handleSchemeChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){t.setState({activeScheme:e.idx}),(0,utils_1.toStorage)("securityRequirementName",e.value)}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t,"getDerivedStateFromProps",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=e.operation.security.map((function(e){return e.schemes.map((function(e){return e.id})).join(" and ")})),r=(0,utils_1.fromStorage)("securityRequirementName"),l=t.findIndex((function(e){return e===r}));return{activeScheme:l<0?0:l}}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this,t=this.props.securityDefaults,r=this.state.activeScheme,l=this.props.operation.security,a=l.map((function(e){return e.schemes.map((function(e){return e.id})).join(" and ")})).map((function(e,t){return{value:e,idx:t}}));return 0===a.length?null:React.createElement(React.Fragment,null,React.createElement(form_1.FormWrapper,null,a.length>1&&React.createElement(form_1.FormControl,null,React.createElement(redoc_lib_1.Dropdown,{variant:"dark",fullWidth:!0,prefix:"Security scheme: ",options:a,value:a[r].value,onChange:this.handleSchemeChange}))||null,l[r].schemes.map((function(r){var l,a,o,i,n,u,s,c=(0,utils_1.escapeFormId)(r.id);if("apiKey"===r.type){var d=(0,utils_1.getSecurityDetailsOptions)(c,""),m={field:"auth."+c,fullWidth:!0,initialValue:fromCookie(r)||(0,utils_1.fromStorage)("auth."+c)||(null==t?void 0:t[c]),initValue:fromCookie(r)||(0,utils_1.fromStorage)("auth."+c)||(null==t?void 0:t[c]),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(form_1.FormControl,{key:c},React.createElement(form_1.FormLabel,null," ",r.name,": "),d?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},m,{options:d})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},m,{type:"password","data-cy":"apiKey-auth-password"})))}if("http"===r.type){if("basic"===r.scheme){var p=(0,utils_1.getSecurityDetailsOptions)(c,"username");m={field:"auth."+c+".username",fullWidth:!0,initialValue:(0,utils_1.fromStorage)("auth."+c+".username")||(null===(l=null==t?void 0:t[c])||void 0===l?void 0:l.username),initValue:(0,utils_1.fromStorage)("auth."+c+".username")||(null===(a=null==t?void 0:t[c])||void 0===a?void 0:a.username),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(React.Fragment,{key:c},React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," ",(0,Labels_1.l)("tryItAuthBasicUsername"),": "),p?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},m,{options:p})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},m))),React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," ",(0,Labels_1.l)("tryItAuthBasicPassword"),": "),React.createElement(TextField_1.FormTextField,{type:"password","data-cy":"http-auth-password",fullWidth:!0,field:"auth."+c+".password",validate:requiredValidator,initialValue:(0,utils_1.fromStorage)("auth."+c+".password")||(null===(o=null==t?void 0:t[c])||void 0===o?void 0:o.password),validateOnBlur:!0,validateOnChange:!0})))}if("bearer"===r.scheme){var f=(0,utils_1.getSecurityDetailsOptions)(c,"");m={field:"auth."+c,fullWidth:!0,initialValue:(0,utils_1.fromStorage)("auth."+c)||(null==t?void 0:t[c]),initValue:(0,utils_1.fromStorage)("auth."+c)||(null==t?void 0:t[c]),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(React.Fragment,{key:c},React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Bearer Token: "),f?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},m,{options:f})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},m,{type:"password",placeholder:"(without 'Bearer')"}))))}}else{if("oauth2"===r.type&&r.flows&&r.flows.clientCredentials)return React.createElement(OAuth2TokenInput_1.default,{key:c,flow:r.flows.clientCredentials,server:e.props.activeServer,authCorsProxyUrl:e.props.authCorsProxyUrl,id:c,form:e.props.form,formApi:e.props.formApi,clientId:r.flows.clientCredentials["x-defaultClientId"]||r["x-defaultClientId"],defaultValues:null==t?void 0:t[c]});if("oauth2"===r.type&&r.flows&&r.flows.implicit)return React.createElement(OAuth2Flow_1.OAuth2Flow,{key:c,authorizationUrl:r.flows.implicit.authorizationUrl,authCorsProxyUrl:e.props.authCorsProxyUrl,scopes:Object.keys((null===(n=null===(i=null==r?void 0:r.flows)||void 0===i?void 0:i.implicit)||void 0===n?void 0:n.scopes)||{}),server:e.props.activeServer,id:c,form:e.props.form,formApi:e.props.formApi,clientId:r.flows.implicit["x-defaultClientId"]||r["x-defaultClientId"],flow:"implicit",defaultValues:null==t?void 0:t[c]});if("oauth2"===r.type&&r.flows&&r.flows.authorizationCode)return React.createElement(OAuth2Flow_1.OAuth2Flow,{key:c,authorizationUrl:r.flows.authorizationCode.authorizationUrl,tokenUrl:r.flows.authorizationCode.tokenUrl,authCorsProxyUrl:e.props.authCorsProxyUrl,scopes:Object.keys((null===(u=r.flows.authorizationCode)||void 0===u?void 0:u.scopes)||{}),server:e.props.activeServer,id:c,form:e.props.form,formApi:e.props.formApi,clientId:r.flows.authorizationCode["x-defaultClientId"]||r["x-defaultClientId"],flow:"authorizationCode",defaultValues:null==t?void 0:t[c]});if("oauth2"===r.type){var h=(0,utils_1.fromStorage)("auth."+c+".token")||JSON.stringify(null===(s=null==t?void 0:t[c])||void 0===s?void 0:s.token);return h=h?JSON.parse(h):{},React.createElement(React.Fragment,{key:c},React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Access Token Type: "),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+c+".token.token_type",initialValue:h.token_type||"Bearer"})),React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Access Token: "),React.createElement(TextField_1.FormTextField,{type:"password",fullWidth:!0,field:"auth."+c+".token.access_token",validate:requiredValidator,initialValue:h.access_token,validateOnBlur:!0,validateOnChange:!0})))}if("openIdConnect"===r.type)return React.createElement(OpenIDConnect_1.OpenIDConnect,{key:c,server:e.props.activeServer,authCorsProxyUrl:e.props.authCorsProxyUrl,id:c,form:e.props.form,formApi:e.props.formApi,scheme:r,clientId:r["x-defaultClientId"],defaultValues:null==t?void 0:t[c]})}}))),React.createElement("small",null,React.createElement("strong",null,"Note"),": Your credentials will be saved until the end of the browser session"))}}),t}(React.Component);exports.AuthPanel=AuthPanel;
2
2
  //# sourceMappingURL=AuthPanel.js.map
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { SecurityDetails } from '../../utils';
2
3
  import { OpenApiResponseData } from './ResponsePanel';
3
4
  import { ProStore } from '../../services';
4
5
  import { OperationModel, Server } from '../../redoc-lib';
@@ -10,7 +11,11 @@ export interface ConsoleProps {
10
11
  rootElement?: HTMLElement | null;
11
12
  onClose?: () => any;
12
13
  properties?: any;
13
- onResponse?: (response: OpenApiResponseData) => void;
14
+ securityDefaults?: Record<string, SecurityDetails | string>;
15
+ onResponse?: (arg: {
16
+ request: Record<string, unknown>;
17
+ response: OpenApiResponseData;
18
+ }) => void;
14
19
  }
15
20
  export interface ConsoleState {
16
21
  form: any;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Console=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),informed_1=require("informed"),mobx_react_1=require("mobx-react"),utils_1=require("../../utils"),styled_components_1=require("./styled.components"),ServerDropdown_1=require("./ServerDropdown"),OperationParameters_1=require("./OperationParameters"),ActionPanel_1=require("./ActionPanel"),ResponsePanel_1=require("./ResponsePanel"),RequestBody_1=require("./RequestBody"),ConsoleBadges_1=require("./ConsoleBadges"),AuthPanel_1=require("./AuthPanel"),services_1=require("../../services"),swagger_client_1=(0,tslib_1.__importDefault)(require("swagger-client")),redoc_lib_1=require("../../redoc-lib"),helper_1=require("../../redoc-lib/src/components/helper"),Labels_1=require("../../redoc-lib/src/services/Labels"),styled_components_2=(0,tslib_1.__importDefault)(require("../../redoc-lib/src/styled-components")),Panel_1=require("../Panel"),OAuth2_1=require("../../services/OAuth2"),PanelBody_1=require("../Panel/PanelBody"),utils_2=require("./utils"),helper_2=require("../common/FileUpload/helper");function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}var flexColumn={flex:1,display:"flex",flexDirection:"column"},Console=function(e){function t(t){var r=e.call(this,t)||this;return Object.defineProperty(r,"formApi",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(r,"setFormApi",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.formApi=e,setTimeout((function(){r.setState({form:r.formApi.getState()})}),0)}}),Object.defineProperty(r,"handleChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({form:e}),(0,utils_2.updateStorage)(e)}}),Object.defineProperty(r,"handleTabChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({activeTab:e})}}),Object.defineProperty(r,"handleServerChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({server:e})}}),Object.defineProperty(r,"handleExecute",{enumerable:!0,configurable:!0,writable:!0,value:function(){return(0,tslib_1.__awaiter)(r,void 0,void 0,(function(){var e,t,r,n,o,a,s,i,l,c,u,d,p,_,h,m,b,v,y,f,g,P,R,S,q,C,w,E,x,A,I,O,k,T,B,j=this;return(0,tslib_1.__generator)(this,(function(H){switch(H.label){case 0:if(e=this.props,t=e.store,r=e.operation,n=e.onResponse,this.formApi.submitForm(),o=this.formApi.getState(),a=o.values,o.invalid)return this.setState({shaking:!0}),setTimeout((function(){return j.setState({shaking:!1})}),1e3),null===(A=null===(x=null==t?void 0:t.options.events)||void 0===x?void 0:x.tryItSent)||void 0===A||A.call(x,{eventType:services_1.AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"ValidationFailed",operationId:r.operationId,operationPath:r.path,operationHttpVerb:r.httpVerb,operationSummary:r.description}),[2];if(s=this.props.operation.requestBody,i=s&&s.content&&s.content.active&&s.content.active.name||"",l=a.body,/json/.test(i))try{l=JSON.parse(l)}catch(e){console.error(e)}if(this.setState({loading:!0}),c=t.dereferencedRawSpec,!(u=(0,utils_1.get)(c,["paths",r.path,(r.httpVerb||"").toLowerCase(),"servers"])||(0,utils_1.get)(c,["paths",r.path,"servers"])||(0,utils_1.get)(c,["servers"])))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");d=u.find((function(e){return j.state.server.url.endsWith(e.url.endsWith("/")?e.url.substring(0,e.url.length-1):e.url)})),p=Date.now(),_=!!window.document.documentMode,m=a.auth,a.auth?(b=Object.keys(a.auth)[0],v=(0,utils_1.unescapeFormId)(b),h=(0,tslib_1.__assign)((0,tslib_1.__assign)({},c),{components:(0,tslib_1.__assign)((0,tslib_1.__assign)({},c.components),{securitySchemes:(0,tslib_1.__assign)((0,tslib_1.__assign)({},c.components.securitySchemes),(w={},w[v]=(0,tslib_1.__assign)((0,tslib_1.__assign)({},c.components.securitySchemes[v]),{type:"openIdConnect"===c.components.securitySchemes[v].type?"oauth2":c.components.securitySchemes[v].type}),w))})}),m=(0,tslib_1.__assign)((0,tslib_1.__assign)({},m),((E={})[v]=m[b],E))):h=(0,tslib_1.__assign)({},c),(y=t.options.corsProxyUrl)&&c.servers&&c.servers.length&&(h.servers=c.servers.map((function(e){return(0,tslib_1.__assign)((0,tslib_1.__assign)({},e),{url:y+normalizeUrlProtocol(e.url)})}))),(f=(null===(O=null===(I=null==s?void 0:s.content)||void 0===I?void 0:I.active)||void 0===O?void 0:O.name)||null)&&l&&(0,helper_2.isFileUploadMime)(f)&&(g=Object.values(l),l=g.length>1?g:g[0]),H.label=1;case 1:return H.trys.push([1,5,8,9]),P={userFetch:_&&require("cross-fetch").fetch,server:y?y+normalizeUrlProtocol(d.url):d.url,serverVariables:this.state.server.variables,spec:h,pathName:r.path,method:r.httpVerb,parameters:(0,tslib_1.__assign)((0,tslib_1.__assign)((0,tslib_1.__assign)((0,tslib_1.__assign)({},a.path),a.query),a.header),a.cookie),securities:{authorized:m},requestBody:l,requestContentType:f,responseContentType:(null===(k=a.header)||void 0===k?void 0:k.Accept)||null,requestInterceptor:t.options.requestInterceptor&&function(e){var n,o;return null===(o=(n=t.options).requestInterceptor)||void 0===o?void 0:o.call(n,e,r)}||void 0},[4,swagger_client_1.default.execute(P)];case 2:return(R=H.sent())&&R.data instanceof Blob?(S=R,[4,R.data.text()]):[3,4];case 3:S.data=H.sent(),H.label=4;case 4:return this.setState({response:R,error:void 0}),[3,9];case 5:return(q=H.sent())&&q.response&&q.response.data instanceof Blob?(C=q.response,[4,q.response.data.text()]):[3,7];case 6:C.data=H.sent(),H.label=7;case 7:return this.setState({response:void 0,error:q}),[3,9];case 8:return this.setState({loading:!1,activeTab:1,time:Date.now()-p}),null===(B=null===(T=null==t?void 0:t.options.events)||void 0===T?void 0:T.tryItSent)||void 0===B||B.call(T,{eventType:services_1.AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"Sent",operationId:r.operationId,operationPath:r.path,operationHttpVerb:r.httpVerb,operationSummary:r.description}),this.state.response&&(null==n||n(this.state.response)),[7];case 9:return[2]}}))}))}}),Object.defineProperty(r,"validateBody",{enumerable:!0,configurable:!0,writable:!0,value:function(){}}),r.state={form:{values:{path:(0,utils_2.getParameters)(t.operation.parameters,"path"),cookie:(0,utils_2.getParameters)(t.operation.parameters,"cookie"),header:(0,utils_2.getParameters)(t.operation.parameters,"header"),query:(0,utils_2.getParameters)(t.operation.parameters,"query")}},shaking:!1,loading:!1,activeTab:0,server:{}},r}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){return(0,tslib_1.__awaiter)(this,void 0,void 0,(function(){var e,t,r,n,o;return(0,tslib_1.__generator)(this,(function(a){switch(a.label){case 0:return e=this.props,t=e.store,r=e.specIdx,n=e.operation,[4,t.dereferenceSpecForTryIt(r||0,n)];case 1:return o=a.sent(),this.setState({resolvedRawSpec:o}),this.formApi.setValues({}),[2]}}))}))}}),Object.defineProperty(t.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(e){e.operation!==this.props.operation&&this.setState({response:void 0,error:void 0,activeTab:0})}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.props,t=e.operation,r=e.className,n=e.rootElement,o=this.state,a=o.shaking,s=o.activeTab,i=o.form,l=o.response,c=o.loading,u=o.error,d=!(!l&&!u);return React.createElement(ConsoleWrapHook,{shaking:a,className:r,rootElement:n},React.createElement(Panel_1.CodeHeader,null,React.createElement(ConsoleBadges_1.ConsoleBadges,{active:s,hasResponse:d,onChange:this.handleTabChange}),this.props.onClose&&React.createElement(styled_components_1.CloseButton,{onClick:this.props.onClose}," ✕ ")),React.createElement(styled_components_1.ConsoleBody,{hidden:0!==s},this.renderRequest()),React.createElement(styled_components_1.ConsoleBody,{hidden:1!==s},this.renderResponse()),React.createElement(ActionPanel_1.ActionPanel,{hasResponse:d,params:i.values&&(0,tslib_1.__assign)({},i.values),operation:t,loading:c,execute:this.handleExecute}))}}),Object.defineProperty(t.prototype,"renderRequest",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e,t=this.props,r=t.operation,n=t.store,o=t.properties,a=this.state,s=a.form,i=a.resolvedRawSpec,l=a.server,c=s.errors||{},u=c.path||c.cookie||c.header||c.query,d=i&&redoc_lib_1.JsonPointer.get(i,r.pointer),p=s.values&&s.values.auth&&Object.keys(s.values.auth)[0];p&&s.values.auth[p]||(p=void 0),!p||void 0===s.values.auth[p].token&&void 0===s.values.auth[p].client_id&&void 0===s.values.auth[p].client_secret||s.values.auth[p].token&&s.values.auth[p].token.access_token||(p=void 0),p&&null!=s.values.auth[p].username&&(s.values.auth[p].username&&s.values.auth[p].password||(p=void 0));var _=r.parameters||[],h=null===(e=null==n?void 0:n.options.hooks)||void 0===e?void 0:e.ReplaceTryItAuthPanel;return i?React.createElement(React.Fragment,null,React.createElement(informed_1.Form,{onChange:this.handleChange,getApi:this.setFormApi,style:(0,tslib_1.__assign)((0,tslib_1.__assign)({},flexColumn),{margin:0})},React.createElement(Panel_1.Accordion,{initialActiveIdx:r.security.length&&p?1:0},r.security.length&&React.createElement(TryItPanel,{header:(0,Labels_1.l)("tryItAuth"),"data-cy":"security-trigger",renderChildrenHidden:!0,error:!p&&!!c.auth,success:!!p},h?React.createElement(AuthPanelHook,{field:"auth",validate:AuthPanel_1.requiredValidator},(function(e){return React.createElement(helper_1.RenderHook,{Hook:h,props:{server:l,operation:r,onChange:e,OAuth2:OAuth2_1.OAuth2}})})):React.createElement(AuthPanel_1.AuthPanel,{formApi:this.formApi,form:s,operation:r,activeServer:l.url,authCorsProxyUrl:n.options.authCorsProxyUrl}))||null,r.requestBody&&React.createElement(TryItPanel,{header:(0,Labels_1.l)("tryItBody"),"data-cy":"body-trigger",renderChildrenHidden:!0,error:!!c.body},React.createElement(RequestBody_1.RequestBody,{validate:this.validateBody,console:this,body:r.requestBody,id:r.id,resolvedBody:d.requestBody,properties:o}))||null,_.length&&React.createElement(TryItPanel,{header:(0,Labels_1.l)("tryItParameters"),"data-cy":"parameters-trigger",error:u,renderChildrenHidden:!0},React.createElement(OperationParameters_1.OperationParameters,{operation:r,values:s.values,errors:s.errors||{}}))||null)),React.createElement(ServerDropdown_1.ServerChooser,{operation:r,onChange:this.handleServerChange})):"Loading..."}}),Object.defineProperty(t.prototype,"renderResponse",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.state,t=e.response,r=e.error,n=e.time;return React.createElement(ResponsePanel_1.ResponsePanel,{response:t,error:r,time:n})}}),t=(0,tslib_1.__decorate)([mobx_react_1.observer],t)}(React.Component);function ConsoleWrapHook(e){var t=e.shaking,r=e.className,n=e.children,o=e.rootElement,a=(0,utils_1.useDimensions)(o)[0];return React.createElement(styled_components_1.ConsoleWrap,{shaking:t,className:r,"data-cy":"console",fullWidth:null==a?void 0:a.width},n)}function AuthPanelHook(e){var t=(0,informed_1.useField)((0,tslib_1.__assign)({},e)),r=t.fieldApi,n=t.render,o=t.userProps,a=r.setValue,s=o.children;return n(React.createElement(React.Fragment,null,s(a)))}function TryItPanel(e){return React.createElement(StyledTryItPanel,(0,tslib_1.__assign)({},e,{header:function(t){var r=t.toggle,n=t.expanded;return React.createElement(Panel_1.Header,{onClick:r,isExpanded:n,"data-cy":e["data-cy"]},React.createElement(Panel_1.Trigger,null,React.createElement(Panel_1.Title,null,e.header),React.createElement(redoc_lib_1.ShelfIcon,{direction:n?"down":"right"})),e.error&&React.createElement(redoc_lib_1.CrossIcon,{size:"14px",color:"#ff908b"})||null,e.success&&React.createElement(redoc_lib_1.LockIcon,{size:"14px",color:"#56ff26"})||null)}}))}exports.Console=Console;var templateObject_1,StyledTryItPanel=(0,styled_components_2.default)(Panel_1.Panel)(templateObject_1||(templateObject_1=(0,tslib_1.__makeTemplateObject)(["\n "," {\n color: white;\n border: 1px solid ",";\n padding: 10px;\n }\n\n "," path {\n fill: white;\n }\n\n "," {\n padding: 15px 10px;\n background-color: #3e4c59;\n border: 1px solid ",";\n border-top: 0;\n }\n"],["\n "," {\n color: white;\n border: 1px solid ",";\n padding: 10px;\n }\n\n "," path {\n fill: white;\n }\n\n "," {\n padding: 15px 10px;\n background-color: #3e4c59;\n border: 1px solid ",";\n border-top: 0;\n }\n"])),Panel_1.Header,(function(e){return e.error?"#ff908b":"#89949f"}),redoc_lib_1.ShelfIcon,PanelBody_1.PanelBody,(function(e){return e.error?"#ff908b":"#89949f"}));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Console=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),informed_1=require("informed"),mobx_react_1=require("mobx-react"),utils_1=require("../../utils"),styled_components_1=require("./styled.components"),ServerDropdown_1=require("./ServerDropdown"),OperationParameters_1=require("./OperationParameters"),ActionPanel_1=require("./ActionPanel"),ResponsePanel_1=require("./ResponsePanel"),RequestBody_1=require("./RequestBody"),ConsoleBadges_1=require("./ConsoleBadges"),AuthPanel_1=require("./AuthPanel"),services_1=require("../../services"),swagger_client_1=(0,tslib_1.__importDefault)(require("swagger-client")),redoc_lib_1=require("../../redoc-lib"),helper_1=require("../../redoc-lib/src/components/helper"),Labels_1=require("../../redoc-lib/src/services/Labels"),styled_components_2=(0,tslib_1.__importDefault)(require("../../redoc-lib/src/styled-components")),Panel_1=require("../Panel"),OAuth2_1=require("../../services/OAuth2"),PanelBody_1=require("../Panel/PanelBody"),utils_2=require("./utils"),helper_2=require("../common/FileUpload/helper");function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}var flexColumn={flex:1,display:"flex",flexDirection:"column"},Console=function(e){function t(t){var r=e.call(this,t)||this;return Object.defineProperty(r,"formApi",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(r,"setFormApi",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.formApi=e,setTimeout((function(){r.setState({form:r.formApi.getState()})}),0)}}),Object.defineProperty(r,"handleChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({form:e}),(0,utils_2.updateStorage)(e)}}),Object.defineProperty(r,"handleTabChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({activeTab:e})}}),Object.defineProperty(r,"handleServerChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({server:e})}}),Object.defineProperty(r,"handleExecute",{enumerable:!0,configurable:!0,writable:!0,value:function(){return(0,tslib_1.__awaiter)(r,void 0,void 0,(function(){var e,t,r,n,o,a,s,i,l,c,u,d,p,_,h,m,b,v,y,f,g,P,R,q,S,C,w,E,x,A,I,O,k,T,B,j=this;return(0,tslib_1.__generator)(this,(function(H){switch(H.label){case 0:if(e=this.props,t=e.store,r=e.operation,n=e.onResponse,this.formApi.submitForm(),o=this.formApi.getState(),a=o.values,o.invalid)return this.setState({shaking:!0}),setTimeout((function(){return j.setState({shaking:!1})}),1e3),null===(A=null===(x=null==t?void 0:t.options.events)||void 0===x?void 0:x.tryItSent)||void 0===A||A.call(x,{eventType:services_1.AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"ValidationFailed",operationId:r.operationId,operationPath:r.path,operationHttpVerb:r.httpVerb,operationSummary:r.description}),[2];if(s=this.props.operation.requestBody,i=s&&s.content&&s.content.active&&s.content.active.name||"",l=a.body,/json/.test(i))try{l=JSON.parse(l)}catch(e){console.error(e)}if(this.setState({loading:!0}),c=t.dereferencedRawSpec,!(u=(0,utils_1.get)(c,["paths",r.path,(r.httpVerb||"").toLowerCase(),"servers"])||(0,utils_1.get)(c,["paths",r.path,"servers"])||(0,utils_1.get)(c,["servers"])))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");d=u.find((function(e){return j.state.server.url.endsWith(e.url.endsWith("/")?e.url.substring(0,e.url.length-1):e.url)})),p=Date.now(),_=!!window.document.documentMode,m=a.auth,a.auth?(b=Object.keys(a.auth)[0],v=(0,utils_1.unescapeFormId)(b),h=(0,tslib_1.__assign)((0,tslib_1.__assign)({},c),{components:(0,tslib_1.__assign)((0,tslib_1.__assign)({},c.components),{securitySchemes:(0,tslib_1.__assign)((0,tslib_1.__assign)({},c.components.securitySchemes),(w={},w[v]=(0,tslib_1.__assign)((0,tslib_1.__assign)({},c.components.securitySchemes[v]),{type:"openIdConnect"===c.components.securitySchemes[v].type?"oauth2":c.components.securitySchemes[v].type}),w))})}),m=(0,tslib_1.__assign)((0,tslib_1.__assign)({},m),((E={})[v]=m[b],E))):h=(0,tslib_1.__assign)({},c),(y=t.options.corsProxyUrl)&&c.servers&&c.servers.length&&(h.servers=c.servers.map((function(e){return(0,tslib_1.__assign)((0,tslib_1.__assign)({},e),{url:y+normalizeUrlProtocol(e.url)})}))),(f=(null===(O=null===(I=null==s?void 0:s.content)||void 0===I?void 0:I.active)||void 0===O?void 0:O.name)||null)&&l&&(0,helper_2.isFileUploadMime)(f)&&(g=Object.values(l),l=g.length>1?g:g[0]),P={userFetch:_&&require("cross-fetch").fetch,server:y?y+normalizeUrlProtocol(d.url):d.url,serverVariables:this.state.server.variables,spec:h,pathName:r.path,method:r.httpVerb,parameters:(0,tslib_1.__assign)((0,tslib_1.__assign)((0,tslib_1.__assign)((0,tslib_1.__assign)({},a.path),a.query),a.header),a.cookie),securities:{authorized:m},requestBody:l,requestContentType:f,responseContentType:(null===(k=a.header)||void 0===k?void 0:k.Accept)||null,requestInterceptor:t.options.requestInterceptor&&function(e){var n,o;return null===(o=(n=t.options).requestInterceptor)||void 0===o?void 0:o.call(n,e,r)}||void 0},H.label=1;case 1:return H.trys.push([1,5,8,9]),[4,swagger_client_1.default.execute(P)];case 2:return(R=H.sent())&&R.data instanceof Blob?(q=R,[4,R.data.text()]):[3,4];case 3:q.data=H.sent(),H.label=4;case 4:return this.setState({response:R,error:void 0}),[3,9];case 5:return(S=H.sent())&&S.response&&S.response.data instanceof Blob?(C=S.response,[4,S.response.data.text()]):[3,7];case 6:C.data=H.sent(),H.label=7;case 7:return this.setState({response:void 0,error:S}),[3,9];case 8:return this.setState({loading:!1,activeTab:1,time:Date.now()-p}),null===(B=null===(T=null==t?void 0:t.options.events)||void 0===T?void 0:T.tryItSent)||void 0===B||B.call(T,{eventType:services_1.AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"Sent",operationId:r.operationId,operationPath:r.path,operationHttpVerb:r.httpVerb,operationSummary:r.description}),this.state.response&&(null==n||n({request:P,response:this.state.response})),[7];case 9:return[2]}}))}))}}),Object.defineProperty(r,"validateBody",{enumerable:!0,configurable:!0,writable:!0,value:function(){}}),r.state={form:{values:{path:(0,utils_2.getParameters)(t.operation.parameters,"path"),cookie:(0,utils_2.getParameters)(t.operation.parameters,"cookie"),header:(0,utils_2.getParameters)(t.operation.parameters,"header"),query:(0,utils_2.getParameters)(t.operation.parameters,"query")}},shaking:!1,loading:!1,activeTab:0,server:{}},r}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){return(0,tslib_1.__awaiter)(this,void 0,void 0,(function(){var e,t,r,n,o;return(0,tslib_1.__generator)(this,(function(a){switch(a.label){case 0:return e=this.props,t=e.store,r=e.specIdx,n=e.operation,[4,t.dereferenceSpecForTryIt(r||0,n)];case 1:return o=a.sent(),this.setState({resolvedRawSpec:o}),this.formApi.setValues({}),[2]}}))}))}}),Object.defineProperty(t.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(e){e.operation!==this.props.operation&&this.setState({response:void 0,error:void 0,activeTab:0})}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.props,t=e.operation,r=e.className,n=e.rootElement,o=this.state,a=o.shaking,s=o.activeTab,i=o.form,l=o.response,c=o.loading,u=o.error,d=!(!l&&!u);return React.createElement(ConsoleWrapHook,{shaking:a,className:r,rootElement:n},React.createElement(Panel_1.CodeHeader,null,React.createElement(ConsoleBadges_1.ConsoleBadges,{active:s,hasResponse:d,onChange:this.handleTabChange}),this.props.onClose&&React.createElement(styled_components_1.CloseButton,{onClick:this.props.onClose}," ✕ ")),React.createElement(styled_components_1.ConsoleBody,{hidden:0!==s},this.renderRequest()),React.createElement(styled_components_1.ConsoleBody,{hidden:1!==s},this.renderResponse()),React.createElement(ActionPanel_1.ActionPanel,{hasResponse:d,params:i.values&&(0,tslib_1.__assign)({},i.values),operation:t,loading:c,execute:this.handleExecute}))}}),Object.defineProperty(t.prototype,"renderRequest",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e,t=this.props,r=t.operation,n=t.store,o=t.properties,a=t.securityDefaults,s=this.state,i=s.form,l=s.resolvedRawSpec,c=s.server,u=i.errors||{},d=u.path||u.cookie||u.header||u.query,p=l&&redoc_lib_1.JsonPointer.get(l,r.pointer),_=i.values&&i.values.auth&&Object.keys(i.values.auth)[0];_&&i.values.auth[_]||(_=void 0),!_||void 0===i.values.auth[_].token&&void 0===i.values.auth[_].client_id&&void 0===i.values.auth[_].client_secret||i.values.auth[_].token&&i.values.auth[_].token.access_token||(_=void 0),_&&null!=i.values.auth[_].username&&(i.values.auth[_].username&&i.values.auth[_].password||(_=void 0));var h=r.parameters||[],m=null===(e=null==n?void 0:n.options.hooks)||void 0===e?void 0:e.ReplaceTryItAuthPanel;return l?React.createElement(React.Fragment,null,React.createElement(informed_1.Form,{onChange:this.handleChange,getApi:this.setFormApi,style:(0,tslib_1.__assign)((0,tslib_1.__assign)({},flexColumn),{margin:0})},React.createElement(Panel_1.Accordion,{initialActiveIdx:r.security.length&&_?1:0},r.security.length&&React.createElement(TryItPanel,{header:(0,Labels_1.l)("tryItAuth"),"data-cy":"security-trigger",renderChildrenHidden:!0,error:!_&&!!u.auth,success:!!_},m?React.createElement(AuthPanelHook,{field:"auth",validate:AuthPanel_1.requiredValidator},(function(e){return React.createElement(helper_1.RenderHook,{Hook:m,props:{server:c,operation:r,onChange:e,OAuth2:OAuth2_1.OAuth2}})})):React.createElement(AuthPanel_1.AuthPanel,{formApi:this.formApi,form:i,operation:r,activeServer:c.url,authCorsProxyUrl:n.options.authCorsProxyUrl,securityDefaults:a}))||null,r.requestBody&&React.createElement(TryItPanel,{header:(0,Labels_1.l)("tryItBody"),"data-cy":"body-trigger",renderChildrenHidden:!0,error:!!u.body},React.createElement(RequestBody_1.RequestBody,{validate:this.validateBody,console:this,body:r.requestBody,id:r.id,resolvedBody:p.requestBody,properties:o}))||null,h.length&&React.createElement(TryItPanel,{header:(0,Labels_1.l)("tryItParameters"),"data-cy":"parameters-trigger",error:d,renderChildrenHidden:!0},React.createElement(OperationParameters_1.OperationParameters,{operation:r,values:i.values,errors:i.errors||{}}))||null)),React.createElement(ServerDropdown_1.ServerChooser,{operation:r,onChange:this.handleServerChange})):"Loading..."}}),Object.defineProperty(t.prototype,"renderResponse",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.state,t=e.response,r=e.error,n=e.time;return React.createElement(ResponsePanel_1.ResponsePanel,{response:t,error:r,time:n})}}),t=(0,tslib_1.__decorate)([mobx_react_1.observer],t)}(React.Component);function ConsoleWrapHook(e){var t=e.shaking,r=e.className,n=e.children,o=e.rootElement,a=(0,utils_1.useDimensions)(o)[0];return React.createElement(styled_components_1.ConsoleWrap,{shaking:t,className:r,"data-cy":"console",fullWidth:null==a?void 0:a.width},n)}function AuthPanelHook(e){var t=(0,informed_1.useField)((0,tslib_1.__assign)({},e)),r=t.fieldApi,n=t.render,o=t.userProps,a=r.setValue,s=o.children;return n(React.createElement(React.Fragment,null,s(a)))}function TryItPanel(e){return React.createElement(StyledTryItPanel,(0,tslib_1.__assign)({},e,{header:function(t){var r=t.toggle,n=t.expanded;return React.createElement(Panel_1.Header,{onClick:r,isExpanded:n,"data-cy":e["data-cy"]},React.createElement(Panel_1.Trigger,null,React.createElement(Panel_1.Title,null,e.header),React.createElement(redoc_lib_1.ShelfIcon,{direction:n?"down":"right"})),e.error&&React.createElement(redoc_lib_1.CrossIcon,{size:"14px",color:"#ff908b"})||null,e.success&&React.createElement(redoc_lib_1.LockIcon,{size:"14px",color:"#56ff26"})||null)}}))}exports.Console=Console;var templateObject_1,StyledTryItPanel=(0,styled_components_2.default)(Panel_1.Panel)(templateObject_1||(templateObject_1=(0,tslib_1.__makeTemplateObject)(["\n "," {\n color: white;\n border: 1px solid ",";\n padding: 10px;\n }\n\n "," path {\n fill: white;\n }\n\n "," {\n padding: 15px 10px;\n background-color: #3e4c59;\n border: 1px solid ",";\n border-top: 0;\n }\n"],["\n "," {\n color: white;\n border: 1px solid ",";\n padding: 10px;\n }\n\n "," path {\n fill: white;\n }\n\n "," {\n padding: 15px 10px;\n background-color: #3e4c59;\n border: 1px solid ",";\n border-top: 0;\n }\n"])),Panel_1.Header,(function(e){return e.error?"#ff908b":"#89949f"}),redoc_lib_1.ShelfIcon,PanelBody_1.PanelBody,(function(e){return e.error?"#ff908b":"#89949f"}));
2
2
  //# sourceMappingURL=Console.js.map
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { SecurityDetails } from '../../utils';
2
3
  import { FormApi, FormState } from 'informed';
3
4
  import { RedocProNormalizedOptions } from '../../services';
4
5
  export interface OAuth2FlowProps {
@@ -12,6 +13,7 @@ export interface OAuth2FlowProps {
12
13
  formApi: FormApi;
13
14
  flow: 'implicit' | 'authorizationCode';
14
15
  clientId?: string;
16
+ defaultValues?: SecurityDetails;
15
17
  }
16
18
  interface OAuth2FlowState {
17
19
  error: string | null;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OAuth2Flow=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),redoc_lib_1=require("../../redoc-lib"),LinearProgress_1=require("../common/LinearProgress"),form_1=require("../common/form"),OAuth2_1=require("../../services/OAuth2"),utils_1=require("../../utils"),Scope_1=(0,tslib_1.__importDefault)(require("./Scope")),shared_1=require("../shared"),TextField_1=require("../common/TextField"),utils_2=require("./utils");function requiredValidator(e){if(!e)return"Field is required"}var OAuth2Flow=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{error:null,loading:!1}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token","")}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"values",{get:function(){return this.props.form.values&&this.props.form.values.auth&&this.props.form.values.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.props.form.errors&&this.props.form.errors.auth&&this.props.form.errors.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"handleAuthorize",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=this;if(e){this.props.formApi.validate();var r=this.props,l=r.flow,i=r.id,o=r.tokenUrl,a=r.authCorsProxyUrl;if(this.values.client_id&&("authorizationCode"!==l||this.values.client_secret)){this.setState({loading:!0,error:null});var n=a?a+(0,utils_2.normalizeUrlProtocol)(e):e,s=a&&o?a+(0,utils_2.normalizeUrlProtocol)(o):o,u=this.props.formApi.getValue("auth."+i+".scopes"),c={authorizationUrl:n.startsWith("http")?n:this.props.server+n,clientId:this.values.client_id,scopes:u,redirectUri:this.context.oAuth2RedirectURI,routingBasePath:this.context.routingBasePath,successCallback:function(e){t.props.formApi.setValue("auth."+t.props.id+".token",e),t.setState({loading:!1,error:null})},errorCallback:function(e){t.setState({loading:!1,error:(null==e?void 0:e.message)||"Failed to retrieve the access token"})}};"implicit"===l&&OAuth2_1.OAuth2.authorizeImplicit(c),"authorizationCode"===l&&OAuth2_1.OAuth2.authorizeAuthorizationCode((0,tslib_1.__assign)((0,tslib_1.__assign)({},c),{tokenUrl:(null==s?void 0:s.startsWith("http"))?s:this.props.server+s,clientSecret:this.values.client_secret}))}}}}),Object.defineProperty(t.prototype,"handleLogout",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.clearToken(),this.setState({error:null})}}),Object.defineProperty(t.prototype,"handleCancel",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.setState({loading:!1,error:null}),OAuth2_1.OAuth2.clearRedirectData(this.props.flow)}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e,t,r=this,l=this.state,i=l.error,o=l.loading,a=this.props,n=a.id,s=a.scopes,u=a.authorizationUrl,c=a.flow;if(!u)return React.createElement(form_1.FormError,null,"No flow info");var p=(0,utils_1.fromStorage)("auth."+n+".token");p=p?JSON.parse(p):"";var d=(0,utils_1.getSecurityDetailsOptions)(n,"client_id"),h={field:"auth."+n+".client_id",fullWidth:!0,initialValue:(0,utils_1.fromStorage)("auth."+n+".client_id")||this.props.clientId,initValue:(0,utils_1.fromStorage)("auth."+n+".client_id")||this.props.clientId,placeholder:"Your OAuth2 app Client ID",validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement("div",null,React.createElement(form_1.FormWrapper,null,React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Client ID: "),d?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},h,{options:d})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},h))),"authorizationCode"===c&&React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Client Secret:"),React.createElement(TextField_1.FormTextField,{type:"password",fullWidth:!0,field:"auth."+n+".client_secret",initialValue:(0,utils_1.fromStorage)("auth."+n+".client_secret"),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0})),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+n+".token",type:"hidden",initialValue:p,validate:requiredValidator}),React.createElement(Scope_1.default,{id:n,scopes:s}),this.values.token&&this.values.token.access_token?React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Access Token: "),React.createElement(TextField_1.TextField,{disabled:!0,type:"password",fullWidth:!0,value:this.values.token.access_token})):null),React.createElement(ButtonsWrapper,null,this.values.token&&this.values.token.access_token?React.createElement(shared_1.Button,{fullWidth:!0,onClick:function(){r.handleLogout()}},"Log out"):React.createElement(React.Fragment,null,o?React.createElement(React.Fragment,null,React.createElement(shared_1.Button,{fullWidth:!0,onClick:function(){r.handleCancel()}},"Cancel"),React.createElement(LinearProgress_1.LinearProgress,null)):React.createElement(shared_1.Button,{fullWidth:!0,disabled:(null===(t=null===(e=this.props)||void 0===e?void 0:e.formApi)||void 0===t?void 0:t.getTouched("auth."+n+".client_id"))&&!this.values.client_id,onClick:function(){r.handleAuthorize(u)}},"Authorize"))),o||i||!this.values.token||!this.values.token.access_token&&React.createElement(form_1.FormWrapper,null,React.createElement(form_1.FormControl,null,o?React.createElement(form_1.FormWarning,null,"Please, finish your authorization flow or cancel authorization."):i?React.createElement(React.Fragment,null,React.createElement(OriginalErrorMessage,null,React.createElement(form_1.FormError,null,i))):this.values.token&&this.values.token.access_token?null:React.createElement(form_1.FormWarning,null," No Access Token. Please, Authorize. "))))}}),Object.defineProperty(t,"contextType",{enumerable:!0,configurable:!0,writable:!0,value:redoc_lib_1.OptionsContext}),t}(React.Component);exports.OAuth2Flow=OAuth2Flow;var templateObject_1,templateObject_2,OriginalErrorMessage=redoc_lib_1.styled.div(templateObject_1||(templateObject_1=(0,tslib_1.__makeTemplateObject)(["\n font-family: monospace;\n margin-top: 10px;\n line-height: 1;\n padding-left: 10px;\n border-left: 1px solid gray;\n"],["\n font-family: monospace;\n margin-top: 10px;\n line-height: 1;\n padding-left: 10px;\n border-left: 1px solid gray;\n"]))),ButtonsWrapper=redoc_lib_1.styled.div(templateObject_2||(templateObject_2=(0,tslib_1.__makeTemplateObject)(["\n margin-bottom: 15px;\n"],["\n margin-bottom: 15px;\n"])));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OAuth2Flow=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),redoc_lib_1=require("../../redoc-lib"),LinearProgress_1=require("../common/LinearProgress"),form_1=require("../common/form"),OAuth2_1=require("../../services/OAuth2"),utils_1=require("../../utils"),Scope_1=(0,tslib_1.__importDefault)(require("./Scope")),shared_1=require("../shared"),TextField_1=require("../common/TextField"),utils_2=require("./utils");function requiredValidator(e){if(!e)return"Field is required"}var OAuth2Flow=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{error:null,loading:!1}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token","")}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"values",{get:function(){return this.props.form.values&&this.props.form.values.auth&&this.props.form.values.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.props.form.errors&&this.props.form.errors.auth&&this.props.form.errors.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"handleAuthorize",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=this;if(e){this.props.formApi.validate();var r=this.props,l=r.flow,i=r.id,o=r.tokenUrl,a=r.authCorsProxyUrl;if(this.values.client_id&&("authorizationCode"!==l||this.values.client_secret)){this.setState({loading:!0,error:null});var n=a?a+(0,utils_2.normalizeUrlProtocol)(e):e,s=a&&o?a+(0,utils_2.normalizeUrlProtocol)(o):o,u=this.props.formApi.getValue("auth."+i+".scopes"),c={authorizationUrl:n.startsWith("http")?n:this.props.server+n,clientId:this.values.client_id,scopes:u,redirectUri:this.context.oAuth2RedirectURI,routingBasePath:this.context.routingBasePath,successCallback:function(e){t.props.formApi.setValue("auth."+t.props.id+".token",e),t.setState({loading:!1,error:null})},errorCallback:function(e){t.setState({loading:!1,error:(null==e?void 0:e.message)||"Failed to retrieve the access token"})}};"implicit"===l&&OAuth2_1.OAuth2.authorizeImplicit(c),"authorizationCode"===l&&OAuth2_1.OAuth2.authorizeAuthorizationCode((0,tslib_1.__assign)((0,tslib_1.__assign)({},c),{tokenUrl:(null==s?void 0:s.startsWith("http"))?s:this.props.server+s,clientSecret:this.values.client_secret}))}}}}),Object.defineProperty(t.prototype,"handleLogout",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.clearToken(),this.setState({error:null})}}),Object.defineProperty(t.prototype,"handleCancel",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.setState({loading:!1,error:null}),OAuth2_1.OAuth2.clearRedirectData(this.props.flow)}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e,t,r=this,l=this.state,i=l.error,o=l.loading,a=this.props,n=a.id,s=a.scopes,u=a.authorizationUrl,c=a.flow,d=a.defaultValues;if(!u)return React.createElement(form_1.FormError,null,"No flow info");var p=(0,utils_1.fromStorage)("auth."+n+".token")||JSON.stringify(null==d?void 0:d.token);p=p?JSON.parse(p):"";var h=(0,utils_1.getSecurityDetailsOptions)(n,"client_id"),m={field:"auth."+n+".client_id",fullWidth:!0,initialValue:(0,utils_1.fromStorage)("auth."+n+".client_id")||this.props.clientId||(null==d?void 0:d.client_id),initValue:(0,utils_1.fromStorage)("auth."+n+".client_id")||this.props.clientId||(null==d?void 0:d.client_id),placeholder:"Your OAuth2 app Client ID",validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement("div",null,React.createElement(form_1.FormWrapper,null,React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Client ID: "),h?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},m,{options:h})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},m,{"data-cy":"client-id-input"}))),"authorizationCode"===c&&React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Client Secret:"),React.createElement(TextField_1.FormTextField,{type:"password",fullWidth:!0,field:"auth."+n+".client_secret",initialValue:(0,utils_1.fromStorage)("auth."+n+".client_secret")||(null==d?void 0:d.client_secret),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0,"data-cy":"client-secret-input"})),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+n+".token",type:"hidden",initialValue:p,validate:requiredValidator}),React.createElement(Scope_1.default,{id:n,scopes:s}),this.values.token&&this.values.token.access_token?React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Access Token: "),React.createElement(TextField_1.TextField,{disabled:!0,type:"password",fullWidth:!0,value:this.values.token.access_token})):null),React.createElement(ButtonsWrapper,null,this.values.token&&this.values.token.access_token?React.createElement(shared_1.Button,{fullWidth:!0,onClick:function(){r.handleLogout()}},"Log out"):React.createElement(React.Fragment,null,o?React.createElement(React.Fragment,null,React.createElement(shared_1.Button,{fullWidth:!0,onClick:function(){r.handleCancel()}},"Cancel"),React.createElement(LinearProgress_1.LinearProgress,null)):React.createElement(shared_1.Button,{fullWidth:!0,disabled:(null===(t=null===(e=this.props)||void 0===e?void 0:e.formApi)||void 0===t?void 0:t.getTouched("auth."+n+".client_id"))&&!this.values.client_id,onClick:function(){r.handleAuthorize(u)}},"Authorize"))),o||i||!this.values.token||!this.values.token.access_token&&React.createElement(form_1.FormWrapper,null,React.createElement(form_1.FormControl,null,o?React.createElement(form_1.FormWarning,null,"Please, finish your authorization flow or cancel authorization."):i?React.createElement(React.Fragment,null,React.createElement(OriginalErrorMessage,null,React.createElement(form_1.FormError,null,i))):this.values.token&&this.values.token.access_token?null:React.createElement(form_1.FormWarning,null," No Access Token. Please, Authorize. "))))}}),Object.defineProperty(t,"contextType",{enumerable:!0,configurable:!0,writable:!0,value:redoc_lib_1.OptionsContext}),t}(React.Component);exports.OAuth2Flow=OAuth2Flow;var templateObject_1,templateObject_2,OriginalErrorMessage=redoc_lib_1.styled.div(templateObject_1||(templateObject_1=(0,tslib_1.__makeTemplateObject)(["\n font-family: monospace;\n margin-top: 10px;\n line-height: 1;\n padding-left: 10px;\n border-left: 1px solid gray;\n"],["\n font-family: monospace;\n margin-top: 10px;\n line-height: 1;\n padding-left: 10px;\n border-left: 1px solid gray;\n"]))),ButtonsWrapper=redoc_lib_1.styled.div(templateObject_2||(templateObject_2=(0,tslib_1.__makeTemplateObject)(["\n margin-bottom: 15px;\n"],["\n margin-bottom: 15px;\n"])));
2
2
  //# sourceMappingURL=OAuth2Flow.js.map
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { SecurityDetails } from '../../utils';
2
3
  export interface OAuth2TokenInputProps {
3
4
  flow: {
4
5
  refreshUrl?: string;
@@ -14,6 +15,7 @@ export interface OAuth2TokenInputProps {
14
15
  };
15
16
  formApi: any;
16
17
  clientId?: string;
18
+ defaultValues?: SecurityDetails;
17
19
  }
18
20
  interface OAuth2TokenInputState {
19
21
  error: string;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OAuth2TokenInput=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),form_1=require("../common/form"),utils_1=require("../../utils"),Scope_1=(0,tslib_1.__importDefault)(require("./Scope")),OAuth2_1=require("../../services/OAuth2"),shared_1=require("../shared"),TextField_1=require("../common/TextField"),utils_2=require("./utils");function validateToken(e){if(!e)return"Token is required"}var OAuth2TokenInput=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{error:"",loading:!1,tokenMasked:!0}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token",""),(0,utils_1.toStorage)("auth."+t.props.id+".token","")}}),Object.defineProperty(t,"toggleTokenMask",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.setState({tokenMasked:!t.state.tokenMasked})}}),Object.defineProperty(t,"requestToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){return(0,tslib_1.__awaiter)(t,void 0,void 0,(function(){var e,t,r,o,i,l,n,a=this;return(0,tslib_1.__generator)(this,(function(s){switch(s.label){case 0:return this.state.loading?[2]:(e=this.props,t=e.server,r=e.flow,o=e.authCorsProxyUrl,i=o&&r.tokenUrl?o+(0,utils_2.normalizeUrlProtocol)(r.tokenUrl):r.tokenUrl,this.errors.client_id||this.errors.client_secret?(console.log("Provide client_id and client_secret"),[2]):(l=this.values.client_id,n=this.values.client_secret,l&&n?(this.setState({loading:!0}),[4,OAuth2_1.OAuth2.authorizeClientCredentials({tokenUrl:i.startsWith("http")?i:t+i,clientId:l,clientSecret:n,scopes:this.values.scopes,successCallback:function(e){a.props.formApi.setValue("auth."+a.props.id+".token",e),a.setState({loading:!1})},errorCallback:function(e){a.clearToken(),a.setState({error:e.message,loading:!1})}})]):(console.log("Provide client_id and client_secret"),[2])));case 1:return s.sent(),[2]}}))}))}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"values",{get:function(){return this.props.form.values&&this.props.form.values.auth&&this.props.form.values.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.props.form.errors&&this.props.form.errors.auth&&this.props.form.errors.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.state,t=e.loading,r=e.error,o=e.tokenMasked,i=this.props.id,l=Object.keys(this.props.flow.scopes),n=(0,utils_1.fromStorage)("auth."+i+".token");n=n?JSON.parse(n):"";var a=(0,utils_1.getSecurityDetailsOptions)(i,"client_id"),s={field:"auth."+i+".client_id",fullWidth:!0,initialValue:(0,utils_1.fromStorage)("auth."+i+".client_id")||this.props.clientId,initValue:(0,utils_1.fromStorage)("auth."+i+".client_id")||this.props.clientId,placeholder:"Your OAuth2 app Client ID"};return React.createElement(React.Fragment,null,React.createElement(form_1.FormWrapper,null,React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Client ID:"),a?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},s,{options:a})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},s,{type:"password"}))),React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Client Secret:"),React.createElement(TextField_1.FormTextField,{type:"password",fullWidth:!0,field:"auth."+i+".client_secret",initialValue:(0,utils_1.fromStorage)("auth."+i+".client_secret")})),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+i+".token",type:"hidden",initialValue:n,validate:validateToken}),React.createElement(Scope_1.default,{id:i,scopes:l})),React.createElement(shared_1.Button,{color:"primary",onClick:this.requestToken,blinking:t},t?"Loading...":"Request Token"),React.createElement(form_1.FormHeader,null," Access Token "),r?React.createElement(form_1.FormError,{style:{marginBottom:"1em"}},"Failed to request token: ",React.createElement("pre",null,r)," "):this.values.token&&this.values.token.access_token?React.createElement(form_1.TokenField,null,React.createElement(form_1.TokenValue,{length:this.values.token.access_token.length,masked:o},this.values.token.access_token),React.createElement(form_1.TokenShowHide,{onClick:this.toggleTokenMask},o?"Show":"Hide"," "),React.createElement(form_1.TokenClear,{onClick:this.clearToken}," Clear ")):React.createElement(form_1.FormError,{style:{marginBottom:"1em"}},"No token"))}}),t}(React.Component);exports.OAuth2TokenInput=OAuth2TokenInput,exports.default=OAuth2TokenInput;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OAuth2TokenInput=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),form_1=require("../common/form"),utils_1=require("../../utils"),Scope_1=(0,tslib_1.__importDefault)(require("./Scope")),OAuth2_1=require("../../services/OAuth2"),shared_1=require("../shared"),TextField_1=require("../common/TextField"),utils_2=require("./utils");function validateToken(e){if(!e)return"Token is required"}var OAuth2TokenInput=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{error:"",loading:!1,tokenMasked:!0}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token",""),(0,utils_1.toStorage)("auth."+t.props.id+".token","")}}),Object.defineProperty(t,"toggleTokenMask",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.setState({tokenMasked:!t.state.tokenMasked})}}),Object.defineProperty(t,"requestToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){return(0,tslib_1.__awaiter)(t,void 0,void 0,(function(){var e,t,r,o,l,i,n,a=this;return(0,tslib_1.__generator)(this,(function(s){switch(s.label){case 0:return this.state.loading?[2]:(e=this.props,t=e.server,r=e.flow,o=e.authCorsProxyUrl,l=o&&r.tokenUrl?o+(0,utils_2.normalizeUrlProtocol)(r.tokenUrl):r.tokenUrl,this.errors.client_id||this.errors.client_secret?(console.log("Provide client_id and client_secret"),[2]):(i=this.values.client_id,n=this.values.client_secret,i&&n?(this.setState({loading:!0}),[4,OAuth2_1.OAuth2.authorizeClientCredentials({tokenUrl:l.startsWith("http")?l:t+l,clientId:i,clientSecret:n,scopes:this.values.scopes,successCallback:function(e){a.props.formApi.setValue("auth."+a.props.id+".token",e),a.setState({loading:!1})},errorCallback:function(e){a.clearToken(),a.setState({error:e.message,loading:!1})}})]):(console.log("Provide client_id and client_secret"),[2])));case 1:return s.sent(),[2]}}))}))}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"values",{get:function(){return this.props.form.values&&this.props.form.values.auth&&this.props.form.values.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.props.form.errors&&this.props.form.errors.auth&&this.props.form.errors.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.state,t=e.loading,r=e.error,o=e.tokenMasked,l=this.props,i=l.id,n=l.defaultValues,a=Object.keys(this.props.flow.scopes),s=(0,utils_1.fromStorage)("auth."+i+".token")||JSON.stringify(null==n?void 0:n.token);s=s?JSON.parse(s):"";var u=(0,utils_1.getSecurityDetailsOptions)(i,"client_id"),c={field:"auth."+i+".client_id",fullWidth:!0,initialValue:(0,utils_1.fromStorage)("auth."+i+".client_id")||this.props.clientId||(null==n?void 0:n.client_id),initValue:(0,utils_1.fromStorage)("auth."+i+".client_id")||this.props.clientId||(null==n?void 0:n.client_id),placeholder:"Your OAuth2 app Client ID"};return React.createElement(React.Fragment,null,React.createElement(form_1.FormWrapper,null,React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Client ID:"),u?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},c,{options:u})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},c,{type:"password"}))),React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Client Secret:"),React.createElement(TextField_1.FormTextField,{type:"password",fullWidth:!0,field:"auth."+i+".client_secret",initialValue:(0,utils_1.fromStorage)("auth."+i+".client_secret")||(null==n?void 0:n.client_secret)})),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+i+".token",type:"hidden",initialValue:s,validate:validateToken}),React.createElement(Scope_1.default,{id:i,scopes:a})),React.createElement(shared_1.Button,{color:"primary",onClick:this.requestToken,blinking:t},t?"Loading...":"Request Token"),React.createElement(form_1.FormHeader,null," Access Token "),r?React.createElement(form_1.FormError,{style:{marginBottom:"1em"}},"Failed to request token: ",React.createElement("pre",null,r)," "):this.values.token&&this.values.token.access_token?React.createElement(form_1.TokenField,null,React.createElement(form_1.TokenValue,{length:this.values.token.access_token.length,masked:o},this.values.token.access_token),React.createElement(form_1.TokenShowHide,{onClick:this.toggleTokenMask},o?"Show":"Hide"," "),React.createElement(form_1.TokenClear,{onClick:this.clearToken}," Clear ")):React.createElement(form_1.FormError,{style:{marginBottom:"1em"}},"No token"))}}),t}(React.Component);exports.OAuth2TokenInput=OAuth2TokenInput,exports.default=OAuth2TokenInput;
2
2
  //# sourceMappingURL=OAuth2TokenInput.js.map
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import { FormApi, FormState } from 'informed';
3
3
  import { SecurityScheme } from '../../redoc-lib';
4
+ import { SecurityDetails } from '../../utils';
4
5
  export interface OpenIDConnectProps {
5
6
  server: string;
6
7
  authCorsProxyUrl: Maybe<string>;
@@ -9,5 +10,6 @@ export interface OpenIDConnectProps {
9
10
  formApi: FormApi;
10
11
  scheme: SecurityScheme;
11
12
  clientId?: string;
13
+ defaultValues?: SecurityDetails;
12
14
  }
13
15
  export declare function OpenIDConnect(props: OpenIDConnectProps): JSX.Element;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OpenIDConnect=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),redoc_lib_1=require("../../redoc-lib"),OpenIDConnect_1=require("../../services/OpenIDConnect"),OAuth2Flow_1=require("./OAuth2Flow"),LinearProgress_1=require("../common/LinearProgress"),form_1=require("../common/form");function OpenIDConnect(e){var t,r=this,n=e.scheme,o=React.useState({}),a=o[0],c=o[1],l=React.useState(),i=l[0],s=l[1],u=React.useState(!1),m=u[0],p=u[1];React.useEffect((function(){_(n.openIdConnectUrl)}),[n.openIdConnectUrl]);var _=function(e){return(0,tslib_1.__awaiter)(r,void 0,void 0,(function(){var t,r;return(0,tslib_1.__generator)(this,(function(n){switch(n.label){case 0:p(!0),s(""),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,(0,OpenIDConnect_1.discoverOpenIDConnect)(e)];case 2:return t=n.sent(),c(t),[3,4];case 3:return r=n.sent(),s(r.message),[3,4];case 4:return p(!1),[2]}}))}))};return React.createElement("div",null,m?React.createElement("div",null,React.createElement("div",null,"Fetching OpenID Connect metadata..."),React.createElement(LinearProgress_1.LinearProgress,null)):React.createElement("div",null,i?React.createElement(form_1.FormError,null,i):(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_1.OAuth2Flow,{key:e.id,authorizationUrl:a.authorization_endpoint,authCorsProxyUrl:e.authCorsProxyUrl,scopes:a.scopes_supported,server:e.server,id:e.id,form:e.form,formApi:e.formApi,clientId:e.clientId,flow:"implicit"})):React.createElement("div",null,"Unsupported flow")))}exports.OpenIDConnect=OpenIDConnect;var templateObject_1,FlowName=redoc_lib_1.styled.div(templateObject_1||(templateObject_1=(0,tslib_1.__makeTemplateObject)(["\n margin-top: 5px;\n margin-bottom: 10px;\n"],["\n margin-top: 5px;\n margin-bottom: 10px;\n"])));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OpenIDConnect=void 0;var tslib_1=require("tslib"),React=(0,tslib_1.__importStar)(require("react")),redoc_lib_1=require("../../redoc-lib"),OpenIDConnect_1=require("../../services/OpenIDConnect"),OAuth2Flow_1=require("./OAuth2Flow"),LinearProgress_1=require("../common/LinearProgress"),form_1=require("../common/form");function OpenIDConnect(e){var t,r=this,n=e.scheme,o=e.defaultValues,a=React.useState({}),l=a[0],c=a[1],i=React.useState(),s=i[0],u=i[1],m=React.useState(!1),p=m[0],d=m[1];React.useEffect((function(){_(n.openIdConnectUrl)}),[n.openIdConnectUrl]);var _=function(e){return(0,tslib_1.__awaiter)(r,void 0,void 0,(function(){var t,r;return(0,tslib_1.__generator)(this,(function(n){switch(n.label){case 0:d(!0),u(""),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,(0,OpenIDConnect_1.discoverOpenIDConnect)(e)];case 2:return t=n.sent(),c(t),[3,4];case 3:return r=n.sent(),u(r.message),[3,4];case 4:return d(!1),[2]}}))}))};return React.createElement("div",null,p?React.createElement("div",null,React.createElement("div",null,"Fetching OpenID Connect metadata..."),React.createElement(LinearProgress_1.LinearProgress,null)):React.createElement("div",null,s?React.createElement(form_1.FormError,null,s):(null===(t=null==l?void 0:l.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_1.OAuth2Flow,{key:e.id,authorizationUrl:l.authorization_endpoint,authCorsProxyUrl:e.authCorsProxyUrl,scopes:l.scopes_supported,server:e.server,id:e.id,form:e.form,formApi:e.formApi,clientId:e.clientId,flow:"implicit",defaultValues:o})):React.createElement("div",null,"Unsupported flow")))}exports.OpenIDConnect=OpenIDConnect;var templateObject_1,FlowName=redoc_lib_1.styled.div(templateObject_1||(templateObject_1=(0,tslib_1.__makeTemplateObject)(["\n margin-top: 5px;\n margin-bottom: 10px;\n"],["\n margin-top: 5px;\n margin-bottom: 10px;\n"])));
2
2
  //# sourceMappingURL=OpenIDConnect.js.map
package/lib/index.d.ts CHANGED
@@ -2,5 +2,5 @@ export * from './components';
2
2
  export * from './services';
3
3
  export * from './redoc-lib';
4
4
  export * from './models';
5
- export { setSecurityDetails, setSecurityDetailsVariants, setParameterValue } from './utils';
5
+ export { setSecurityDetails, setSecurityDetailsVariants, setParameterValue, SecurityDetails, } from './utils';
6
6
  export type { OAuth2 } from './services/OAuth2';
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { FormApi, FormState } from 'informed';
3
3
  import { OperationModel } from '../../redoc-lib';
4
+ import { SecurityDetails } from '../../utils';
4
5
  export declare function requiredValidator(value: any): "Field is required" | undefined;
5
6
  export interface AuthPanelProps {
6
7
  operation: OperationModel;
@@ -8,6 +9,7 @@ export interface AuthPanelProps {
8
9
  formApi: FormApi;
9
10
  activeServer: string;
10
11
  authCorsProxyUrl: Maybe<string>;
12
+ securityDefaults?: Record<string, SecurityDetails | string>;
11
13
  }
12
14
  export interface AuthPanelState {
13
15
  activeScheme: number;
@@ -1,2 +1,2 @@
1
- import{__assign,__extends}from"tslib";import*as React from"react";import{Dropdown}from"../../redoc-lib";import{fromStorage,getSecurityDetailsOptions,toStorage,escapeFormId}from"../../utils";import OAuth2TokenInput from"./OAuth2TokenInput";import{OAuth2Flow}from"./OAuth2Flow";import{OpenIDConnect}from"./OpenIDConnect";import{FormDropdown,FormTextField}from"../common/TextField";import{FormControl,FormLabel,FormWrapper}from"../common/form";import{l}from"../../redoc-lib/src/services/Labels";export function requiredValidator(e){if(!e)return"Field is required"}var getCookie=function(e){var t=document.cookie.match("\\b"+e+"=([^;]*)\\b");return t?t[1]:void 0};function fromCookie(e){if("cookie"===e.in)return getCookie(e.name)}var AuthPanel=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{activeScheme:0}}),Object.defineProperty(t,"handleSchemeChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){t.setState({activeScheme:e.idx}),toStorage("securityRequirementName",e.value)}}),t}return __extends(t,e),Object.defineProperty(t,"getDerivedStateFromProps",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=e.operation.security.map((function(e){return e.schemes.map((function(e){return e.id})).join(" and ")})),r=fromStorage("securityRequirementName"),a=t.findIndex((function(e){return e===r}));return{activeScheme:a<0?0:a}}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this,t=this.state.activeScheme,r=this.props.operation.security,a=r.map((function(e){return e.schemes.map((function(e){return e.id})).join(" and ")})).map((function(e,t){return{value:e,idx:t}}));return 0===a.length?null:React.createElement(React.Fragment,null,React.createElement(FormWrapper,null,a.length>1&&React.createElement(FormControl,null,React.createElement(Dropdown,{variant:"dark",fullWidth:!0,prefix:"Security scheme: ",options:a,value:a[t].value,onChange:this.handleSchemeChange}))||null,r[t].schemes.map((function(t){var r,a,o,n=escapeFormId(t.id);if("apiKey"===t.type){var i=getSecurityDetailsOptions(n,""),u={field:"auth."+n,fullWidth:!0,initialValue:fromCookie(t)||fromStorage("auth."+n),initValue:fromCookie(t)||fromStorage("auth."+n),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(FormControl,{key:n},React.createElement(FormLabel,null," ",t.name,": "),i?React.createElement(FormDropdown,__assign({},u,{options:i})):React.createElement(FormTextField,__assign({},u,{type:"password","data-cy":"apiKey-auth-password"})))}if("http"===t.type){if("basic"===t.scheme){var c=getSecurityDetailsOptions(n,"username");u={field:"auth."+n+".username",fullWidth:!0,initialValue:fromStorage("auth."+n+".username"),initValue:fromStorage("auth."+n+".username"),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(React.Fragment,{key:n},React.createElement(FormControl,null,React.createElement(FormLabel,null," ",l("tryItAuthBasicUsername"),": "),c?React.createElement(FormDropdown,__assign({},u,{options:c})):React.createElement(FormTextField,__assign({},u))),React.createElement(FormControl,null,React.createElement(FormLabel,null," ",l("tryItAuthBasicPassword"),": "),React.createElement(FormTextField,{type:"password","data-cy":"http-auth-password",fullWidth:!0,field:"auth."+n+".password",validate:requiredValidator,initialValue:fromStorage("auth."+n+".password"),validateOnBlur:!0,validateOnChange:!0})))}if("bearer"===t.scheme){var m=getSecurityDetailsOptions(n,"");u={field:"auth."+n,fullWidth:!0,initialValue:fromStorage("auth."+n),initValue:fromStorage("auth."+n),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(React.Fragment,{key:n},React.createElement(FormControl,null,React.createElement(FormLabel,null," Bearer Token: "),m?React.createElement(FormDropdown,__assign({},u,{options:m})):React.createElement(FormTextField,__assign({},u,{type:"password",placeholder:"(without 'Bearer')"}))))}}else{if("oauth2"===t.type&&t.flows&&t.flows.clientCredentials)return React.createElement(OAuth2TokenInput,{key:n,flow:t.flows.clientCredentials,server:e.props.activeServer,authCorsProxyUrl:e.props.authCorsProxyUrl,id:n,form:e.props.form,formApi:e.props.formApi,clientId:t.flows.clientCredentials["x-defaultClientId"]||t["x-defaultClientId"]});if("oauth2"===t.type&&t.flows&&t.flows.implicit)return React.createElement(OAuth2Flow,{key:n,authorizationUrl:t.flows.implicit.authorizationUrl,authCorsProxyUrl:e.props.authCorsProxyUrl,scopes:Object.keys((null===(a=null===(r=null==t?void 0:t.flows)||void 0===r?void 0:r.implicit)||void 0===a?void 0:a.scopes)||{}),server:e.props.activeServer,id:n,form:e.props.form,formApi:e.props.formApi,clientId:t.flows.implicit["x-defaultClientId"]||t["x-defaultClientId"],flow:"implicit"});if("oauth2"===t.type&&t.flows&&t.flows.authorizationCode)return React.createElement(OAuth2Flow,{key:n,authorizationUrl:t.flows.authorizationCode.authorizationUrl,tokenUrl:t.flows.authorizationCode.tokenUrl,authCorsProxyUrl:e.props.authCorsProxyUrl,scopes:Object.keys((null===(o=t.flows.authorizationCode)||void 0===o?void 0:o.scopes)||{}),server:e.props.activeServer,id:n,form:e.props.form,formApi:e.props.formApi,clientId:t.flows.authorizationCode["x-defaultClientId"]||t["x-defaultClientId"],flow:"authorizationCode"});if("oauth2"===t.type){var s=fromStorage("auth."+n+".token");return s=s?JSON.parse(s):{},React.createElement(React.Fragment,{key:n},React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token Type: "),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+n+".token.token_type",initialValue:s.token_type||"Bearer"})),React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token: "),React.createElement(FormTextField,{type:"password",fullWidth:!0,field:"auth."+n+".token.access_token",validate:requiredValidator,initialValue:s.access_token,validateOnBlur:!0,validateOnChange:!0})))}if("openIdConnect"===t.type)return React.createElement(OpenIDConnect,{key:n,server:e.props.activeServer,authCorsProxyUrl:e.props.authCorsProxyUrl,id:n,form:e.props.form,formApi:e.props.formApi,scheme:t,clientId:t["x-defaultClientId"]})}}))),React.createElement("small",null,React.createElement("strong",null,"Note"),": Your credentials will be saved until the end of the browser session"))}}),t}(React.Component);export{AuthPanel};
1
+ import{__assign,__extends}from"tslib";import*as React from"react";import{Dropdown}from"../../redoc-lib";import{fromStorage,getSecurityDetailsOptions,toStorage,escapeFormId}from"../../utils";import OAuth2TokenInput from"./OAuth2TokenInput";import{OAuth2Flow}from"./OAuth2Flow";import{OpenIDConnect}from"./OpenIDConnect";import{FormDropdown,FormTextField}from"../common/TextField";import{FormControl,FormLabel,FormWrapper}from"../common/form";import{l}from"../../redoc-lib/src/services/Labels";export function requiredValidator(e){if(!e)return"Field is required"}var getCookie=function(e){var t=document.cookie.match("\\b"+e+"=([^;]*)\\b");return t?t[1]:void 0};function fromCookie(e){if("cookie"===e.in)return getCookie(e.name)}var AuthPanel=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{activeScheme:0}}),Object.defineProperty(t,"handleSchemeChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){t.setState({activeScheme:e.idx}),toStorage("securityRequirementName",e.value)}}),t}return __extends(t,e),Object.defineProperty(t,"getDerivedStateFromProps",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=e.operation.security.map((function(e){return e.schemes.map((function(e){return e.id})).join(" and ")})),r=fromStorage("securityRequirementName"),o=t.findIndex((function(e){return e===r}));return{activeScheme:o<0?0:o}}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this,t=this.props.securityDefaults,r=this.state.activeScheme,o=this.props.operation.security,a=o.map((function(e){return e.schemes.map((function(e){return e.id})).join(" and ")})).map((function(e,t){return{value:e,idx:t}}));return 0===a.length?null:React.createElement(React.Fragment,null,React.createElement(FormWrapper,null,a.length>1&&React.createElement(FormControl,null,React.createElement(Dropdown,{variant:"dark",fullWidth:!0,prefix:"Security scheme: ",options:a,value:a[r].value,onChange:this.handleSchemeChange}))||null,o[r].schemes.map((function(r){var o,a,i,n,u,c,s,m=escapeFormId(r.id);if("apiKey"===r.type){var d=getSecurityDetailsOptions(m,""),p={field:"auth."+m,fullWidth:!0,initialValue:fromCookie(r)||fromStorage("auth."+m)||(null==t?void 0:t[m]),initValue:fromCookie(r)||fromStorage("auth."+m)||(null==t?void 0:t[m]),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(FormControl,{key:m},React.createElement(FormLabel,null," ",r.name,": "),d?React.createElement(FormDropdown,__assign({},p,{options:d})):React.createElement(FormTextField,__assign({},p,{type:"password","data-cy":"apiKey-auth-password"})))}if("http"===r.type){if("basic"===r.scheme){var f=getSecurityDetailsOptions(m,"username");p={field:"auth."+m+".username",fullWidth:!0,initialValue:fromStorage("auth."+m+".username")||(null===(o=null==t?void 0:t[m])||void 0===o?void 0:o.username),initValue:fromStorage("auth."+m+".username")||(null===(a=null==t?void 0:t[m])||void 0===a?void 0:a.username),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(React.Fragment,{key:m},React.createElement(FormControl,null,React.createElement(FormLabel,null," ",l("tryItAuthBasicUsername"),": "),f?React.createElement(FormDropdown,__assign({},p,{options:f})):React.createElement(FormTextField,__assign({},p))),React.createElement(FormControl,null,React.createElement(FormLabel,null," ",l("tryItAuthBasicPassword"),": "),React.createElement(FormTextField,{type:"password","data-cy":"http-auth-password",fullWidth:!0,field:"auth."+m+".password",validate:requiredValidator,initialValue:fromStorage("auth."+m+".password")||(null===(i=null==t?void 0:t[m])||void 0===i?void 0:i.password),validateOnBlur:!0,validateOnChange:!0})))}if("bearer"===r.scheme){var h=getSecurityDetailsOptions(m,"");p={field:"auth."+m,fullWidth:!0,initialValue:fromStorage("auth."+m)||(null==t?void 0:t[m]),initValue:fromStorage("auth."+m)||(null==t?void 0:t[m]),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0};return React.createElement(React.Fragment,{key:m},React.createElement(FormControl,null,React.createElement(FormLabel,null," Bearer Token: "),h?React.createElement(FormDropdown,__assign({},p,{options:h})):React.createElement(FormTextField,__assign({},p,{type:"password",placeholder:"(without 'Bearer')"}))))}}else{if("oauth2"===r.type&&r.flows&&r.flows.clientCredentials)return React.createElement(OAuth2TokenInput,{key:m,flow:r.flows.clientCredentials,server:e.props.activeServer,authCorsProxyUrl:e.props.authCorsProxyUrl,id:m,form:e.props.form,formApi:e.props.formApi,clientId:r.flows.clientCredentials["x-defaultClientId"]||r["x-defaultClientId"],defaultValues:null==t?void 0:t[m]});if("oauth2"===r.type&&r.flows&&r.flows.implicit)return React.createElement(OAuth2Flow,{key:m,authorizationUrl:r.flows.implicit.authorizationUrl,authCorsProxyUrl:e.props.authCorsProxyUrl,scopes:Object.keys((null===(u=null===(n=null==r?void 0:r.flows)||void 0===n?void 0:n.implicit)||void 0===u?void 0:u.scopes)||{}),server:e.props.activeServer,id:m,form:e.props.form,formApi:e.props.formApi,clientId:r.flows.implicit["x-defaultClientId"]||r["x-defaultClientId"],flow:"implicit",defaultValues:null==t?void 0:t[m]});if("oauth2"===r.type&&r.flows&&r.flows.authorizationCode)return React.createElement(OAuth2Flow,{key:m,authorizationUrl:r.flows.authorizationCode.authorizationUrl,tokenUrl:r.flows.authorizationCode.tokenUrl,authCorsProxyUrl:e.props.authCorsProxyUrl,scopes:Object.keys((null===(c=r.flows.authorizationCode)||void 0===c?void 0:c.scopes)||{}),server:e.props.activeServer,id:m,form:e.props.form,formApi:e.props.formApi,clientId:r.flows.authorizationCode["x-defaultClientId"]||r["x-defaultClientId"],flow:"authorizationCode",defaultValues:null==t?void 0:t[m]});if("oauth2"===r.type){var v=fromStorage("auth."+m+".token")||JSON.stringify(null===(s=null==t?void 0:t[m])||void 0===s?void 0:s.token);return v=v?JSON.parse(v):{},React.createElement(React.Fragment,{key:m},React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token Type: "),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+m+".token.token_type",initialValue:v.token_type||"Bearer"})),React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token: "),React.createElement(FormTextField,{type:"password",fullWidth:!0,field:"auth."+m+".token.access_token",validate:requiredValidator,initialValue:v.access_token,validateOnBlur:!0,validateOnChange:!0})))}if("openIdConnect"===r.type)return React.createElement(OpenIDConnect,{key:m,server:e.props.activeServer,authCorsProxyUrl:e.props.authCorsProxyUrl,id:m,form:e.props.form,formApi:e.props.formApi,scheme:r,clientId:r["x-defaultClientId"],defaultValues:null==t?void 0:t[m]})}}))),React.createElement("small",null,React.createElement("strong",null,"Note"),": Your credentials will be saved until the end of the browser session"))}}),t}(React.Component);export{AuthPanel};
2
2
  //# sourceMappingURL=AuthPanel.js.map
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { SecurityDetails } from '../../utils';
2
3
  import { OpenApiResponseData } from './ResponsePanel';
3
4
  import { ProStore } from '../../services';
4
5
  import { OperationModel, Server } from '../../redoc-lib';
@@ -10,7 +11,11 @@ export interface ConsoleProps {
10
11
  rootElement?: HTMLElement | null;
11
12
  onClose?: () => any;
12
13
  properties?: any;
13
- onResponse?: (response: OpenApiResponseData) => void;
14
+ securityDefaults?: Record<string, SecurityDetails | string>;
15
+ onResponse?: (arg: {
16
+ request: Record<string, unknown>;
17
+ response: OpenApiResponseData;
18
+ }) => void;
14
19
  }
15
20
  export interface ConsoleState {
16
21
  form: any;
@@ -1,2 +1,2 @@
1
- import{__assign,__awaiter,__decorate,__extends,__generator,__makeTemplateObject}from"tslib";import*as React from"react";import{Form,useField}from"informed";import{observer}from"mobx-react";import{get,useDimensions,unescapeFormId}from"../../utils";import{CloseButton,ConsoleBody,ConsoleWrap}from"./styled.components";import{ServerChooser}from"./ServerDropdown";import{OperationParameters}from"./OperationParameters";import{ActionPanel}from"./ActionPanel";import{ResponsePanel}from"./ResponsePanel";import{RequestBody}from"./RequestBody";import{ConsoleBadges}from"./ConsoleBadges";import{AuthPanel,requiredValidator}from"./AuthPanel";import{AnalyticsEventType}from"../../services";import Swagger from"swagger-client";import{JsonPointer,ShelfIcon,CrossIcon,LockIcon}from"../../redoc-lib";import{RenderHook}from"../../redoc-lib/src/components/helper";import{l}from"../../redoc-lib/src/services/Labels";import styled from"../../redoc-lib/src/styled-components";import{CodeHeader,Panel,Header,Accordion,Trigger,Title}from"../Panel";import{OAuth2}from"../../services/OAuth2";import{PanelBody}from"../Panel/PanelBody";import{getParameters,updateStorage}from"./utils";import{isFileUploadMime}from"../common/FileUpload/helper";function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}var flexColumn={flex:1,display:"flex",flexDirection:"column"},Console=function(e){function t(t){var r=e.call(this,t)||this;return Object.defineProperty(r,"formApi",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(r,"setFormApi",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.formApi=e,setTimeout((function(){r.setState({form:r.formApi.getState()})}),0)}}),Object.defineProperty(r,"handleChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({form:e}),updateStorage(e)}}),Object.defineProperty(r,"handleTabChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({activeTab:e})}}),Object.defineProperty(r,"handleServerChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({server:e})}}),Object.defineProperty(r,"handleExecute",{enumerable:!0,configurable:!0,writable:!0,value:function(){return __awaiter(r,void 0,void 0,(function(){var e,t,r,o,n,a,s,i,l,c,u,p,d,m,h,v,f,g,y,b,_,P,R,S,C,I,w,E,A,T,k,x,O,B,j,q=this;return __generator(this,(function(F){switch(F.label){case 0:if(e=this.props,t=e.store,r=e.operation,o=e.onResponse,this.formApi.submitForm(),n=this.formApi.getState(),a=n.values,n.invalid)return this.setState({shaking:!0}),setTimeout((function(){return q.setState({shaking:!1})}),1e3),null===(T=null===(A=null==t?void 0:t.options.events)||void 0===A?void 0:A.tryItSent)||void 0===T||T.call(A,{eventType:AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"ValidationFailed",operationId:r.operationId,operationPath:r.path,operationHttpVerb:r.httpVerb,operationSummary:r.description}),[2];if(s=this.props.operation.requestBody,i=s&&s.content&&s.content.active&&s.content.active.name||"",l=a.body,/json/.test(i))try{l=JSON.parse(l)}catch(e){console.error(e)}if(this.setState({loading:!0}),c=t.dereferencedRawSpec,!(u=get(c,["paths",r.path,(r.httpVerb||"").toLowerCase(),"servers"])||get(c,["paths",r.path,"servers"])||get(c,["servers"])))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");p=u.find((function(e){return q.state.server.url.endsWith(e.url.endsWith("/")?e.url.substring(0,e.url.length-1):e.url)})),d=Date.now(),m=!!window.document.documentMode,v=a.auth,a.auth?(f=Object.keys(a.auth)[0],g=unescapeFormId(f),h=__assign(__assign({},c),{components:__assign(__assign({},c.components),{securitySchemes:__assign(__assign({},c.components.securitySchemes),(w={},w[g]=__assign(__assign({},c.components.securitySchemes[g]),{type:"openIdConnect"===c.components.securitySchemes[g].type?"oauth2":c.components.securitySchemes[g].type}),w))})}),v=__assign(__assign({},v),((E={})[g]=v[f],E))):h=__assign({},c),(y=t.options.corsProxyUrl)&&c.servers&&c.servers.length&&(h.servers=c.servers.map((function(e){return __assign(__assign({},e),{url:y+normalizeUrlProtocol(e.url)})}))),(b=(null===(x=null===(k=null==s?void 0:s.content)||void 0===k?void 0:k.active)||void 0===x?void 0:x.name)||null)&&l&&isFileUploadMime(b)&&(_=Object.values(l),l=_.length>1?_:_[0]),F.label=1;case 1:return F.trys.push([1,5,8,9]),P={userFetch:m&&require("cross-fetch").fetch,server:y?y+normalizeUrlProtocol(p.url):p.url,serverVariables:this.state.server.variables,spec:h,pathName:r.path,method:r.httpVerb,parameters:__assign(__assign(__assign(__assign({},a.path),a.query),a.header),a.cookie),securities:{authorized:v},requestBody:l,requestContentType:b,responseContentType:(null===(O=a.header)||void 0===O?void 0:O.Accept)||null,requestInterceptor:t.options.requestInterceptor&&function(e){var o,n;return null===(n=(o=t.options).requestInterceptor)||void 0===n?void 0:n.call(o,e,r)}||void 0},[4,Swagger.execute(P)];case 2:return(R=F.sent())&&R.data instanceof Blob?(S=R,[4,R.data.text()]):[3,4];case 3:S.data=F.sent(),F.label=4;case 4:return this.setState({response:R,error:void 0}),[3,9];case 5:return(C=F.sent())&&C.response&&C.response.data instanceof Blob?(I=C.response,[4,C.response.data.text()]):[3,7];case 6:I.data=F.sent(),F.label=7;case 7:return this.setState({response:void 0,error:C}),[3,9];case 8:return this.setState({loading:!1,activeTab:1,time:Date.now()-d}),null===(j=null===(B=null==t?void 0:t.options.events)||void 0===B?void 0:B.tryItSent)||void 0===j||j.call(B,{eventType:AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"Sent",operationId:r.operationId,operationPath:r.path,operationHttpVerb:r.httpVerb,operationSummary:r.description}),this.state.response&&(null==o||o(this.state.response)),[7];case 9:return[2]}}))}))}}),Object.defineProperty(r,"validateBody",{enumerable:!0,configurable:!0,writable:!0,value:function(){}}),r.state={form:{values:{path:getParameters(t.operation.parameters,"path"),cookie:getParameters(t.operation.parameters,"cookie"),header:getParameters(t.operation.parameters,"header"),query:getParameters(t.operation.parameters,"query")}},shaking:!1,loading:!1,activeTab:0,server:{}},r}return __extends(t,e),Object.defineProperty(t.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){return __awaiter(this,void 0,void 0,(function(){var e,t,r,o,n;return __generator(this,(function(a){switch(a.label){case 0:return e=this.props,t=e.store,r=e.specIdx,o=e.operation,[4,t.dereferenceSpecForTryIt(r||0,o)];case 1:return n=a.sent(),this.setState({resolvedRawSpec:n}),this.formApi.setValues({}),[2]}}))}))}}),Object.defineProperty(t.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(e){e.operation!==this.props.operation&&this.setState({response:void 0,error:void 0,activeTab:0})}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.props,t=e.operation,r=e.className,o=e.rootElement,n=this.state,a=n.shaking,s=n.activeTab,i=n.form,l=n.response,c=n.loading,u=n.error,p=!(!l&&!u);return React.createElement(ConsoleWrapHook,{shaking:a,className:r,rootElement:o},React.createElement(CodeHeader,null,React.createElement(ConsoleBadges,{active:s,hasResponse:p,onChange:this.handleTabChange}),this.props.onClose&&React.createElement(CloseButton,{onClick:this.props.onClose}," ✕ ")),React.createElement(ConsoleBody,{hidden:0!==s},this.renderRequest()),React.createElement(ConsoleBody,{hidden:1!==s},this.renderResponse()),React.createElement(ActionPanel,{hasResponse:p,params:i.values&&__assign({},i.values),operation:t,loading:c,execute:this.handleExecute}))}}),Object.defineProperty(t.prototype,"renderRequest",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e,t=this.props,r=t.operation,o=t.store,n=t.properties,a=this.state,s=a.form,i=a.resolvedRawSpec,c=a.server,u=s.errors||{},p=u.path||u.cookie||u.header||u.query,d=i&&JsonPointer.get(i,r.pointer),m=s.values&&s.values.auth&&Object.keys(s.values.auth)[0];m&&s.values.auth[m]||(m=void 0),!m||void 0===s.values.auth[m].token&&void 0===s.values.auth[m].client_id&&void 0===s.values.auth[m].client_secret||s.values.auth[m].token&&s.values.auth[m].token.access_token||(m=void 0),m&&null!=s.values.auth[m].username&&(s.values.auth[m].username&&s.values.auth[m].password||(m=void 0));var h=r.parameters||[],v=null===(e=null==o?void 0:o.options.hooks)||void 0===e?void 0:e.ReplaceTryItAuthPanel;return i?React.createElement(React.Fragment,null,React.createElement(Form,{onChange:this.handleChange,getApi:this.setFormApi,style:__assign(__assign({},flexColumn),{margin:0})},React.createElement(Accordion,{initialActiveIdx:r.security.length&&m?1:0},r.security.length&&React.createElement(TryItPanel,{header:l("tryItAuth"),"data-cy":"security-trigger",renderChildrenHidden:!0,error:!m&&!!u.auth,success:!!m},v?React.createElement(AuthPanelHook,{field:"auth",validate:requiredValidator},(function(e){return React.createElement(RenderHook,{Hook:v,props:{server:c,operation:r,onChange:e,OAuth2:OAuth2}})})):React.createElement(AuthPanel,{formApi:this.formApi,form:s,operation:r,activeServer:c.url,authCorsProxyUrl:o.options.authCorsProxyUrl}))||null,r.requestBody&&React.createElement(TryItPanel,{header:l("tryItBody"),"data-cy":"body-trigger",renderChildrenHidden:!0,error:!!u.body},React.createElement(RequestBody,{validate:this.validateBody,console:this,body:r.requestBody,id:r.id,resolvedBody:d.requestBody,properties:n}))||null,h.length&&React.createElement(TryItPanel,{header:l("tryItParameters"),"data-cy":"parameters-trigger",error:p,renderChildrenHidden:!0},React.createElement(OperationParameters,{operation:r,values:s.values,errors:s.errors||{}}))||null)),React.createElement(ServerChooser,{operation:r,onChange:this.handleServerChange})):"Loading..."}}),Object.defineProperty(t.prototype,"renderResponse",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.state,t=e.response,r=e.error,o=e.time;return React.createElement(ResponsePanel,{response:t,error:r,time:o})}}),t=__decorate([observer],t)}(React.Component);export{Console};function ConsoleWrapHook(e){var t=e.shaking,r=e.className,o=e.children,n=e.rootElement,a=useDimensions(n)[0];return React.createElement(ConsoleWrap,{shaking:t,className:r,"data-cy":"console",fullWidth:null==a?void 0:a.width},o)}function AuthPanelHook(e){var t=useField(__assign({},e)),r=t.fieldApi,o=t.render,n=t.userProps,a=r.setValue,s=n.children;return o(React.createElement(React.Fragment,null,s(a)))}function TryItPanel(e){return React.createElement(StyledTryItPanel,__assign({},e,{header:function(t){var r=t.toggle,o=t.expanded;return React.createElement(Header,{onClick:r,isExpanded:o,"data-cy":e["data-cy"]},React.createElement(Trigger,null,React.createElement(Title,null,e.header),React.createElement(ShelfIcon,{direction:o?"down":"right"})),e.error&&React.createElement(CrossIcon,{size:"14px",color:"#ff908b"})||null,e.success&&React.createElement(LockIcon,{size:"14px",color:"#56ff26"})||null)}}))}var templateObject_1,StyledTryItPanel=styled(Panel)(templateObject_1||(templateObject_1=__makeTemplateObject(["\n "," {\n color: white;\n border: 1px solid ",";\n padding: 10px;\n }\n\n "," path {\n fill: white;\n }\n\n "," {\n padding: 15px 10px;\n background-color: #3e4c59;\n border: 1px solid ",";\n border-top: 0;\n }\n"],["\n "," {\n color: white;\n border: 1px solid ",";\n padding: 10px;\n }\n\n "," path {\n fill: white;\n }\n\n "," {\n padding: 15px 10px;\n background-color: #3e4c59;\n border: 1px solid ",";\n border-top: 0;\n }\n"])),Header,(function(e){return e.error?"#ff908b":"#89949f"}),ShelfIcon,PanelBody,(function(e){return e.error?"#ff908b":"#89949f"}));
1
+ import{__assign,__awaiter,__decorate,__extends,__generator,__makeTemplateObject}from"tslib";import*as React from"react";import{Form,useField}from"informed";import{observer}from"mobx-react";import{get,useDimensions,unescapeFormId}from"../../utils";import{CloseButton,ConsoleBody,ConsoleWrap}from"./styled.components";import{ServerChooser}from"./ServerDropdown";import{OperationParameters}from"./OperationParameters";import{ActionPanel}from"./ActionPanel";import{ResponsePanel}from"./ResponsePanel";import{RequestBody}from"./RequestBody";import{ConsoleBadges}from"./ConsoleBadges";import{AuthPanel,requiredValidator}from"./AuthPanel";import{AnalyticsEventType}from"../../services";import Swagger from"swagger-client";import{JsonPointer,ShelfIcon,CrossIcon,LockIcon}from"../../redoc-lib";import{RenderHook}from"../../redoc-lib/src/components/helper";import{l}from"../../redoc-lib/src/services/Labels";import styled from"../../redoc-lib/src/styled-components";import{CodeHeader,Panel,Header,Accordion,Trigger,Title}from"../Panel";import{OAuth2}from"../../services/OAuth2";import{PanelBody}from"../Panel/PanelBody";import{getParameters,updateStorage}from"./utils";import{isFileUploadMime}from"../common/FileUpload/helper";function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}var flexColumn={flex:1,display:"flex",flexDirection:"column"},Console=function(e){function t(t){var r=e.call(this,t)||this;return Object.defineProperty(r,"formApi",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(r,"setFormApi",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.formApi=e,setTimeout((function(){r.setState({form:r.formApi.getState()})}),0)}}),Object.defineProperty(r,"handleChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({form:e}),updateStorage(e)}}),Object.defineProperty(r,"handleTabChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({activeTab:e})}}),Object.defineProperty(r,"handleServerChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){r.setState({server:e})}}),Object.defineProperty(r,"handleExecute",{enumerable:!0,configurable:!0,writable:!0,value:function(){return __awaiter(r,void 0,void 0,(function(){var e,t,r,o,n,a,s,i,l,c,u,p,d,m,h,v,f,g,y,b,_,P,R,S,C,I,w,E,A,T,k,x,O,B,q,j=this;return __generator(this,(function(F){switch(F.label){case 0:if(e=this.props,t=e.store,r=e.operation,o=e.onResponse,this.formApi.submitForm(),n=this.formApi.getState(),a=n.values,n.invalid)return this.setState({shaking:!0}),setTimeout((function(){return j.setState({shaking:!1})}),1e3),null===(T=null===(A=null==t?void 0:t.options.events)||void 0===A?void 0:A.tryItSent)||void 0===T||T.call(A,{eventType:AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"ValidationFailed",operationId:r.operationId,operationPath:r.path,operationHttpVerb:r.httpVerb,operationSummary:r.description}),[2];if(s=this.props.operation.requestBody,i=s&&s.content&&s.content.active&&s.content.active.name||"",l=a.body,/json/.test(i))try{l=JSON.parse(l)}catch(e){console.error(e)}if(this.setState({loading:!0}),c=t.dereferencedRawSpec,!(u=get(c,["paths",r.path,(r.httpVerb||"").toLowerCase(),"servers"])||get(c,["paths",r.path,"servers"])||get(c,["servers"])))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");p=u.find((function(e){return j.state.server.url.endsWith(e.url.endsWith("/")?e.url.substring(0,e.url.length-1):e.url)})),d=Date.now(),m=!!window.document.documentMode,v=a.auth,a.auth?(f=Object.keys(a.auth)[0],g=unescapeFormId(f),h=__assign(__assign({},c),{components:__assign(__assign({},c.components),{securitySchemes:__assign(__assign({},c.components.securitySchemes),(w={},w[g]=__assign(__assign({},c.components.securitySchemes[g]),{type:"openIdConnect"===c.components.securitySchemes[g].type?"oauth2":c.components.securitySchemes[g].type}),w))})}),v=__assign(__assign({},v),((E={})[g]=v[f],E))):h=__assign({},c),(y=t.options.corsProxyUrl)&&c.servers&&c.servers.length&&(h.servers=c.servers.map((function(e){return __assign(__assign({},e),{url:y+normalizeUrlProtocol(e.url)})}))),(b=(null===(x=null===(k=null==s?void 0:s.content)||void 0===k?void 0:k.active)||void 0===x?void 0:x.name)||null)&&l&&isFileUploadMime(b)&&(_=Object.values(l),l=_.length>1?_:_[0]),P={userFetch:m&&require("cross-fetch").fetch,server:y?y+normalizeUrlProtocol(p.url):p.url,serverVariables:this.state.server.variables,spec:h,pathName:r.path,method:r.httpVerb,parameters:__assign(__assign(__assign(__assign({},a.path),a.query),a.header),a.cookie),securities:{authorized:v},requestBody:l,requestContentType:b,responseContentType:(null===(O=a.header)||void 0===O?void 0:O.Accept)||null,requestInterceptor:t.options.requestInterceptor&&function(e){var o,n;return null===(n=(o=t.options).requestInterceptor)||void 0===n?void 0:n.call(o,e,r)}||void 0},F.label=1;case 1:return F.trys.push([1,5,8,9]),[4,Swagger.execute(P)];case 2:return(R=F.sent())&&R.data instanceof Blob?(S=R,[4,R.data.text()]):[3,4];case 3:S.data=F.sent(),F.label=4;case 4:return this.setState({response:R,error:void 0}),[3,9];case 5:return(C=F.sent())&&C.response&&C.response.data instanceof Blob?(I=C.response,[4,C.response.data.text()]):[3,7];case 6:I.data=F.sent(),F.label=7;case 7:return this.setState({response:void 0,error:C}),[3,9];case 8:return this.setState({loading:!1,activeTab:1,time:Date.now()-d}),null===(q=null===(B=null==t?void 0:t.options.events)||void 0===B?void 0:B.tryItSent)||void 0===q||q.call(B,{eventType:AnalyticsEventType.TryItSent,resource:"Redocly_OperationTryIt",action:"Sent",operationId:r.operationId,operationPath:r.path,operationHttpVerb:r.httpVerb,operationSummary:r.description}),this.state.response&&(null==o||o({request:P,response:this.state.response})),[7];case 9:return[2]}}))}))}}),Object.defineProperty(r,"validateBody",{enumerable:!0,configurable:!0,writable:!0,value:function(){}}),r.state={form:{values:{path:getParameters(t.operation.parameters,"path"),cookie:getParameters(t.operation.parameters,"cookie"),header:getParameters(t.operation.parameters,"header"),query:getParameters(t.operation.parameters,"query")}},shaking:!1,loading:!1,activeTab:0,server:{}},r}return __extends(t,e),Object.defineProperty(t.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){return __awaiter(this,void 0,void 0,(function(){var e,t,r,o,n;return __generator(this,(function(a){switch(a.label){case 0:return e=this.props,t=e.store,r=e.specIdx,o=e.operation,[4,t.dereferenceSpecForTryIt(r||0,o)];case 1:return n=a.sent(),this.setState({resolvedRawSpec:n}),this.formApi.setValues({}),[2]}}))}))}}),Object.defineProperty(t.prototype,"componentDidUpdate",{enumerable:!1,configurable:!0,writable:!0,value:function(e){e.operation!==this.props.operation&&this.setState({response:void 0,error:void 0,activeTab:0})}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.props,t=e.operation,r=e.className,o=e.rootElement,n=this.state,a=n.shaking,s=n.activeTab,i=n.form,l=n.response,c=n.loading,u=n.error,p=!(!l&&!u);return React.createElement(ConsoleWrapHook,{shaking:a,className:r,rootElement:o},React.createElement(CodeHeader,null,React.createElement(ConsoleBadges,{active:s,hasResponse:p,onChange:this.handleTabChange}),this.props.onClose&&React.createElement(CloseButton,{onClick:this.props.onClose}," ✕ ")),React.createElement(ConsoleBody,{hidden:0!==s},this.renderRequest()),React.createElement(ConsoleBody,{hidden:1!==s},this.renderResponse()),React.createElement(ActionPanel,{hasResponse:p,params:i.values&&__assign({},i.values),operation:t,loading:c,execute:this.handleExecute}))}}),Object.defineProperty(t.prototype,"renderRequest",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e,t=this.props,r=t.operation,o=t.store,n=t.properties,a=t.securityDefaults,s=this.state,i=s.form,c=s.resolvedRawSpec,u=s.server,p=i.errors||{},d=p.path||p.cookie||p.header||p.query,m=c&&JsonPointer.get(c,r.pointer),h=i.values&&i.values.auth&&Object.keys(i.values.auth)[0];h&&i.values.auth[h]||(h=void 0),!h||void 0===i.values.auth[h].token&&void 0===i.values.auth[h].client_id&&void 0===i.values.auth[h].client_secret||i.values.auth[h].token&&i.values.auth[h].token.access_token||(h=void 0),h&&null!=i.values.auth[h].username&&(i.values.auth[h].username&&i.values.auth[h].password||(h=void 0));var v=r.parameters||[],f=null===(e=null==o?void 0:o.options.hooks)||void 0===e?void 0:e.ReplaceTryItAuthPanel;return c?React.createElement(React.Fragment,null,React.createElement(Form,{onChange:this.handleChange,getApi:this.setFormApi,style:__assign(__assign({},flexColumn),{margin:0})},React.createElement(Accordion,{initialActiveIdx:r.security.length&&h?1:0},r.security.length&&React.createElement(TryItPanel,{header:l("tryItAuth"),"data-cy":"security-trigger",renderChildrenHidden:!0,error:!h&&!!p.auth,success:!!h},f?React.createElement(AuthPanelHook,{field:"auth",validate:requiredValidator},(function(e){return React.createElement(RenderHook,{Hook:f,props:{server:u,operation:r,onChange:e,OAuth2:OAuth2}})})):React.createElement(AuthPanel,{formApi:this.formApi,form:i,operation:r,activeServer:u.url,authCorsProxyUrl:o.options.authCorsProxyUrl,securityDefaults:a}))||null,r.requestBody&&React.createElement(TryItPanel,{header:l("tryItBody"),"data-cy":"body-trigger",renderChildrenHidden:!0,error:!!p.body},React.createElement(RequestBody,{validate:this.validateBody,console:this,body:r.requestBody,id:r.id,resolvedBody:m.requestBody,properties:n}))||null,v.length&&React.createElement(TryItPanel,{header:l("tryItParameters"),"data-cy":"parameters-trigger",error:d,renderChildrenHidden:!0},React.createElement(OperationParameters,{operation:r,values:i.values,errors:i.errors||{}}))||null)),React.createElement(ServerChooser,{operation:r,onChange:this.handleServerChange})):"Loading..."}}),Object.defineProperty(t.prototype,"renderResponse",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.state,t=e.response,r=e.error,o=e.time;return React.createElement(ResponsePanel,{response:t,error:r,time:o})}}),t=__decorate([observer],t)}(React.Component);export{Console};function ConsoleWrapHook(e){var t=e.shaking,r=e.className,o=e.children,n=e.rootElement,a=useDimensions(n)[0];return React.createElement(ConsoleWrap,{shaking:t,className:r,"data-cy":"console",fullWidth:null==a?void 0:a.width},o)}function AuthPanelHook(e){var t=useField(__assign({},e)),r=t.fieldApi,o=t.render,n=t.userProps,a=r.setValue,s=n.children;return o(React.createElement(React.Fragment,null,s(a)))}function TryItPanel(e){return React.createElement(StyledTryItPanel,__assign({},e,{header:function(t){var r=t.toggle,o=t.expanded;return React.createElement(Header,{onClick:r,isExpanded:o,"data-cy":e["data-cy"]},React.createElement(Trigger,null,React.createElement(Title,null,e.header),React.createElement(ShelfIcon,{direction:o?"down":"right"})),e.error&&React.createElement(CrossIcon,{size:"14px",color:"#ff908b"})||null,e.success&&React.createElement(LockIcon,{size:"14px",color:"#56ff26"})||null)}}))}var templateObject_1,StyledTryItPanel=styled(Panel)(templateObject_1||(templateObject_1=__makeTemplateObject(["\n "," {\n color: white;\n border: 1px solid ",";\n padding: 10px;\n }\n\n "," path {\n fill: white;\n }\n\n "," {\n padding: 15px 10px;\n background-color: #3e4c59;\n border: 1px solid ",";\n border-top: 0;\n }\n"],["\n "," {\n color: white;\n border: 1px solid ",";\n padding: 10px;\n }\n\n "," path {\n fill: white;\n }\n\n "," {\n padding: 15px 10px;\n background-color: #3e4c59;\n border: 1px solid ",";\n border-top: 0;\n }\n"])),Header,(function(e){return e.error?"#ff908b":"#89949f"}),ShelfIcon,PanelBody,(function(e){return e.error?"#ff908b":"#89949f"}));
2
2
  //# sourceMappingURL=Console.js.map
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { SecurityDetails } from '../../utils';
2
3
  import { FormApi, FormState } from 'informed';
3
4
  import { RedocProNormalizedOptions } from '../../services';
4
5
  export interface OAuth2FlowProps {
@@ -12,6 +13,7 @@ export interface OAuth2FlowProps {
12
13
  formApi: FormApi;
13
14
  flow: 'implicit' | 'authorizationCode';
14
15
  clientId?: string;
16
+ defaultValues?: SecurityDetails;
15
17
  }
16
18
  interface OAuth2FlowState {
17
19
  error: string | null;
@@ -1,2 +1,2 @@
1
- import{__assign,__extends,__makeTemplateObject}from"tslib";import*as React from"react";import{styled,OptionsContext}from"../../redoc-lib";import{LinearProgress}from"../common/LinearProgress";import{FormControl,FormLabel,FormError,FormWrapper,FormWarning}from"../common/form";import{OAuth2}from"../../services/OAuth2";import{fromStorage,getSecurityDetailsOptions}from"../../utils";import Scope from"./Scope";import{Button}from"../shared";import{FormDropdown,FormTextField,TextField}from"../common/TextField";import{normalizeUrlProtocol}from"./utils";function requiredValidator(e){if(!e)return"Field is required"}var OAuth2Flow=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{error:null,loading:!1}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token","")}}),t}return __extends(t,e),Object.defineProperty(t.prototype,"values",{get:function(){return this.props.form.values&&this.props.form.values.auth&&this.props.form.values.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.props.form.errors&&this.props.form.errors.auth&&this.props.form.errors.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"handleAuthorize",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=this;if(e){this.props.formApi.validate();var r=this.props,o=r.flow,a=r.id,l=r.tokenUrl,n=r.authCorsProxyUrl;if(this.values.client_id&&("authorizationCode"!==o||this.values.client_secret)){this.setState({loading:!0,error:null});var i=n?n+normalizeUrlProtocol(e):e,s=n&&l?n+normalizeUrlProtocol(l):l,c=this.props.formApi.getValue("auth."+a+".scopes"),u={authorizationUrl:i.startsWith("http")?i:this.props.server+i,clientId:this.values.client_id,scopes:c,redirectUri:this.context.oAuth2RedirectURI,routingBasePath:this.context.routingBasePath,successCallback:function(e){t.props.formApi.setValue("auth."+t.props.id+".token",e),t.setState({loading:!1,error:null})},errorCallback:function(e){t.setState({loading:!1,error:(null==e?void 0:e.message)||"Failed to retrieve the access token"})}};"implicit"===o&&OAuth2.authorizeImplicit(u),"authorizationCode"===o&&OAuth2.authorizeAuthorizationCode(__assign(__assign({},u),{tokenUrl:(null==s?void 0:s.startsWith("http"))?s:this.props.server+s,clientSecret:this.values.client_secret}))}}}}),Object.defineProperty(t.prototype,"handleLogout",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.clearToken(),this.setState({error:null})}}),Object.defineProperty(t.prototype,"handleCancel",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.setState({loading:!1,error:null}),OAuth2.clearRedirectData(this.props.flow)}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e,t,r=this,o=this.state,a=o.error,l=o.loading,n=this.props,i=n.id,s=n.scopes,c=n.authorizationUrl,u=n.flow;if(!c)return React.createElement(FormError,null,"No flow info");var p=fromStorage("auth."+i+".token");p=p?JSON.parse(p):"";var m=getSecurityDetailsOptions(i,"client_id"),d={field:"auth."+i+".client_id",fullWidth:!0,initialValue:fromStorage("auth."+i+".client_id")||this.props.clientId,initValue:fromStorage("auth."+i+".client_id")||this.props.clientId,placeholder:"Your OAuth2 app Client ID",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: "),m?React.createElement(FormDropdown,__assign({},d,{options:m})):React.createElement(FormTextField,__assign({},d))),"authorizationCode"===u&&React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client Secret:"),React.createElement(FormTextField,{type:"password",fullWidth:!0,field:"auth."+i+".client_secret",initialValue:fromStorage("auth."+i+".client_secret"),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0})),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+i+".token",type:"hidden",initialValue:p,validate:requiredValidator}),React.createElement(Scope,{id:i,scopes:s}),this.values.token&&this.values.token.access_token?React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token: "),React.createElement(TextField,{disabled:!0,type:"password",fullWidth:!0,value:this.values.token.access_token})):null),React.createElement(ButtonsWrapper,null,this.values.token&&this.values.token.access_token?React.createElement(Button,{fullWidth:!0,onClick:function(){r.handleLogout()}},"Log out"):React.createElement(React.Fragment,null,l?React.createElement(React.Fragment,null,React.createElement(Button,{fullWidth:!0,onClick:function(){r.handleCancel()}},"Cancel"),React.createElement(LinearProgress,null)):React.createElement(Button,{fullWidth:!0,disabled:(null===(t=null===(e=this.props)||void 0===e?void 0:e.formApi)||void 0===t?void 0:t.getTouched("auth."+i+".client_id"))&&!this.values.client_id,onClick:function(){r.handleAuthorize(c)}},"Authorize"))),l||a||!this.values.token||!this.values.token.access_token&&React.createElement(FormWrapper,null,React.createElement(FormControl,null,l?React.createElement(FormWarning,null,"Please, finish your authorization flow or cancel authorization."):a?React.createElement(React.Fragment,null,React.createElement(OriginalErrorMessage,null,React.createElement(FormError,null,a))):this.values.token&&this.values.token.access_token?null:React.createElement(FormWarning,null," No Access Token. Please, Authorize. "))))}}),Object.defineProperty(t,"contextType",{enumerable:!0,configurable:!0,writable:!0,value:OptionsContext}),t}(React.Component);export{OAuth2Flow};var templateObject_1,templateObject_2,OriginalErrorMessage=styled.div(templateObject_1||(templateObject_1=__makeTemplateObject(["\n font-family: monospace;\n margin-top: 10px;\n line-height: 1;\n padding-left: 10px;\n border-left: 1px solid gray;\n"],["\n font-family: monospace;\n margin-top: 10px;\n line-height: 1;\n padding-left: 10px;\n border-left: 1px solid gray;\n"]))),ButtonsWrapper=styled.div(templateObject_2||(templateObject_2=__makeTemplateObject(["\n margin-bottom: 15px;\n"],["\n margin-bottom: 15px;\n"])));
1
+ import{__assign,__extends,__makeTemplateObject}from"tslib";import*as React from"react";import{styled,OptionsContext}from"../../redoc-lib";import{LinearProgress}from"../common/LinearProgress";import{FormControl,FormLabel,FormError,FormWrapper,FormWarning}from"../common/form";import{OAuth2}from"../../services/OAuth2";import{fromStorage,getSecurityDetailsOptions}from"../../utils";import Scope from"./Scope";import{Button}from"../shared";import{FormDropdown,FormTextField,TextField}from"../common/TextField";import{normalizeUrlProtocol}from"./utils";function requiredValidator(e){if(!e)return"Field is required"}var OAuth2Flow=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{error:null,loading:!1}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token","")}}),t}return __extends(t,e),Object.defineProperty(t.prototype,"values",{get:function(){return this.props.form.values&&this.props.form.values.auth&&this.props.form.values.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.props.form.errors&&this.props.form.errors.auth&&this.props.form.errors.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"handleAuthorize",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=this;if(e){this.props.formApi.validate();var r=this.props,o=r.flow,l=r.id,a=r.tokenUrl,i=r.authCorsProxyUrl;if(this.values.client_id&&("authorizationCode"!==o||this.values.client_secret)){this.setState({loading:!0,error:null});var n=i?i+normalizeUrlProtocol(e):e,s=i&&a?i+normalizeUrlProtocol(a):a,c=this.props.formApi.getValue("auth."+l+".scopes"),u={authorizationUrl:n.startsWith("http")?n:this.props.server+n,clientId:this.values.client_id,scopes:c,redirectUri:this.context.oAuth2RedirectURI,routingBasePath:this.context.routingBasePath,successCallback:function(e){t.props.formApi.setValue("auth."+t.props.id+".token",e),t.setState({loading:!1,error:null})},errorCallback:function(e){t.setState({loading:!1,error:(null==e?void 0:e.message)||"Failed to retrieve the access token"})}};"implicit"===o&&OAuth2.authorizeImplicit(u),"authorizationCode"===o&&OAuth2.authorizeAuthorizationCode(__assign(__assign({},u),{tokenUrl:(null==s?void 0:s.startsWith("http"))?s:this.props.server+s,clientSecret:this.values.client_secret}))}}}}),Object.defineProperty(t.prototype,"handleLogout",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.clearToken(),this.setState({error:null})}}),Object.defineProperty(t.prototype,"handleCancel",{enumerable:!1,configurable:!0,writable:!0,value:function(){this.setState({loading:!1,error:null}),OAuth2.clearRedirectData(this.props.flow)}}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e,t,r=this,o=this.state,l=o.error,a=o.loading,i=this.props,n=i.id,s=i.scopes,c=i.authorizationUrl,u=i.flow,p=i.defaultValues;if(!c)return React.createElement(FormError,null,"No flow info");var m=fromStorage("auth."+n+".token")||JSON.stringify(null==p?void 0:p.token);m=m?JSON.parse(m):"";var d=getSecurityDetailsOptions(n,"client_id"),h={field:"auth."+n+".client_id",fullWidth:!0,initialValue:fromStorage("auth."+n+".client_id")||this.props.clientId||(null==p?void 0:p.client_id),initValue:fromStorage("auth."+n+".client_id")||this.props.clientId||(null==p?void 0:p.client_id),placeholder:"Your OAuth2 app Client ID",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: "),d?React.createElement(FormDropdown,__assign({},h,{options:d})):React.createElement(FormTextField,__assign({},h,{"data-cy":"client-id-input"}))),"authorizationCode"===u&&React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client Secret:"),React.createElement(FormTextField,{type:"password",fullWidth:!0,field:"auth."+n+".client_secret",initialValue:fromStorage("auth."+n+".client_secret")||(null==p?void 0:p.client_secret),validate:requiredValidator,validateOnBlur:!0,validateOnChange:!0,"data-cy":"client-secret-input"})),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+n+".token",type:"hidden",initialValue:m,validate:requiredValidator}),React.createElement(Scope,{id:n,scopes:s}),this.values.token&&this.values.token.access_token?React.createElement(FormControl,null,React.createElement(FormLabel,null," Access Token: "),React.createElement(TextField,{disabled:!0,type:"password",fullWidth:!0,value:this.values.token.access_token})):null),React.createElement(ButtonsWrapper,null,this.values.token&&this.values.token.access_token?React.createElement(Button,{fullWidth:!0,onClick:function(){r.handleLogout()}},"Log out"):React.createElement(React.Fragment,null,a?React.createElement(React.Fragment,null,React.createElement(Button,{fullWidth:!0,onClick:function(){r.handleCancel()}},"Cancel"),React.createElement(LinearProgress,null)):React.createElement(Button,{fullWidth:!0,disabled:(null===(t=null===(e=this.props)||void 0===e?void 0:e.formApi)||void 0===t?void 0:t.getTouched("auth."+n+".client_id"))&&!this.values.client_id,onClick:function(){r.handleAuthorize(c)}},"Authorize"))),a||l||!this.values.token||!this.values.token.access_token&&React.createElement(FormWrapper,null,React.createElement(FormControl,null,a?React.createElement(FormWarning,null,"Please, finish your authorization flow or cancel authorization."):l?React.createElement(React.Fragment,null,React.createElement(OriginalErrorMessage,null,React.createElement(FormError,null,l))):this.values.token&&this.values.token.access_token?null:React.createElement(FormWarning,null," No Access Token. Please, Authorize. "))))}}),Object.defineProperty(t,"contextType",{enumerable:!0,configurable:!0,writable:!0,value:OptionsContext}),t}(React.Component);export{OAuth2Flow};var templateObject_1,templateObject_2,OriginalErrorMessage=styled.div(templateObject_1||(templateObject_1=__makeTemplateObject(["\n font-family: monospace;\n margin-top: 10px;\n line-height: 1;\n padding-left: 10px;\n border-left: 1px solid gray;\n"],["\n font-family: monospace;\n margin-top: 10px;\n line-height: 1;\n padding-left: 10px;\n border-left: 1px solid gray;\n"]))),ButtonsWrapper=styled.div(templateObject_2||(templateObject_2=__makeTemplateObject(["\n margin-bottom: 15px;\n"],["\n margin-bottom: 15px;\n"])));
2
2
  //# sourceMappingURL=OAuth2Flow.js.map
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { SecurityDetails } from '../../utils';
2
3
  export interface OAuth2TokenInputProps {
3
4
  flow: {
4
5
  refreshUrl?: string;
@@ -14,6 +15,7 @@ export interface OAuth2TokenInputProps {
14
15
  };
15
16
  formApi: any;
16
17
  clientId?: string;
18
+ defaultValues?: SecurityDetails;
17
19
  }
18
20
  interface OAuth2TokenInputState {
19
21
  error: string;
@@ -1,2 +1,2 @@
1
- import{__assign,__awaiter,__extends,__generator}from"tslib";import*as React from"react";import{FormControl,FormLabel,FormError,FormWrapper,FormHeader,TokenField,TokenValue,TokenClear,TokenShowHide}from"../common/form";import{fromStorage,getSecurityDetailsOptions,toStorage}from"../../utils";import Scope from"./Scope";import{OAuth2}from"../../services/OAuth2";import{Button}from"../shared";import{FormDropdown,FormTextField}from"../common/TextField";import{normalizeUrlProtocol}from"./utils";function validateToken(e){if(!e)return"Token is required"}var OAuth2TokenInput=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{error:"",loading:!1,tokenMasked:!0}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token",""),toStorage("auth."+t.props.id+".token","")}}),Object.defineProperty(t,"toggleTokenMask",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.setState({tokenMasked:!t.state.tokenMasked})}}),Object.defineProperty(t,"requestToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){return __awaiter(t,void 0,void 0,(function(){var e,t,r,o,n,a,l,i=this;return __generator(this,(function(s){switch(s.label){case 0:return this.state.loading?[2]:(e=this.props,t=e.server,r=e.flow,o=e.authCorsProxyUrl,n=o&&r.tokenUrl?o+normalizeUrlProtocol(r.tokenUrl):r.tokenUrl,this.errors.client_id||this.errors.client_secret?(console.log("Provide client_id and client_secret"),[2]):(a=this.values.client_id,l=this.values.client_secret,a&&l?(this.setState({loading:!0}),[4,OAuth2.authorizeClientCredentials({tokenUrl:n.startsWith("http")?n:t+n,clientId:a,clientSecret:l,scopes:this.values.scopes,successCallback:function(e){i.props.formApi.setValue("auth."+i.props.id+".token",e),i.setState({loading:!1})},errorCallback:function(e){i.clearToken(),i.setState({error:e.message,loading:!1})}})]):(console.log("Provide client_id and client_secret"),[2])));case 1:return s.sent(),[2]}}))}))}}),t}return __extends(t,e),Object.defineProperty(t.prototype,"values",{get:function(){return this.props.form.values&&this.props.form.values.auth&&this.props.form.values.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.props.form.errors&&this.props.form.errors.auth&&this.props.form.errors.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.state,t=e.loading,r=e.error,o=e.tokenMasked,n=this.props.id,a=Object.keys(this.props.flow.scopes),l=fromStorage("auth."+n+".token");l=l?JSON.parse(l):"";var i=getSecurityDetailsOptions(n,"client_id"),s={field:"auth."+n+".client_id",fullWidth:!0,initialValue:fromStorage("auth."+n+".client_id")||this.props.clientId,initValue:fromStorage("auth."+n+".client_id")||this.props.clientId,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:"),i?React.createElement(FormDropdown,__assign({},s,{options:i})):React.createElement(FormTextField,__assign({},s,{type:"password"}))),React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client Secret:"),React.createElement(FormTextField,{type:"password",fullWidth:!0,field:"auth."+n+".client_secret",initialValue:fromStorage("auth."+n+".client_secret")})),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+n+".token",type:"hidden",initialValue:l,validate:validateToken}),React.createElement(Scope,{id:n,scopes:a})),React.createElement(Button,{color:"primary",onClick:this.requestToken,blinking:t},t?"Loading...":"Request Token"),React.createElement(FormHeader,null," Access Token "),r?React.createElement(FormError,{style:{marginBottom:"1em"}},"Failed to request token: ",React.createElement("pre",null,r)," "):this.values.token&&this.values.token.access_token?React.createElement(TokenField,null,React.createElement(TokenValue,{length:this.values.token.access_token.length,masked:o},this.values.token.access_token),React.createElement(TokenShowHide,{onClick:this.toggleTokenMask},o?"Show":"Hide"," "),React.createElement(TokenClear,{onClick:this.clearToken}," Clear ")):React.createElement(FormError,{style:{marginBottom:"1em"}},"No token"))}}),t}(React.Component);export{OAuth2TokenInput};export default OAuth2TokenInput;
1
+ import{__assign,__awaiter,__extends,__generator}from"tslib";import*as React from"react";import{FormControl,FormLabel,FormError,FormWrapper,FormHeader,TokenField,TokenValue,TokenClear,TokenShowHide}from"../common/form";import{fromStorage,getSecurityDetailsOptions,toStorage}from"../../utils";import Scope from"./Scope";import{OAuth2}from"../../services/OAuth2";import{Button}from"../shared";import{FormDropdown,FormTextField}from"../common/TextField";import{normalizeUrlProtocol}from"./utils";function validateToken(e){if(!e)return"Token is required"}var OAuth2TokenInput=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return Object.defineProperty(t,"state",{enumerable:!0,configurable:!0,writable:!0,value:{error:"",loading:!1,tokenMasked:!0}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token",""),toStorage("auth."+t.props.id+".token","")}}),Object.defineProperty(t,"toggleTokenMask",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.setState({tokenMasked:!t.state.tokenMasked})}}),Object.defineProperty(t,"requestToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){return __awaiter(t,void 0,void 0,(function(){var e,t,r,o,n,a,l,i=this;return __generator(this,(function(s){switch(s.label){case 0:return this.state.loading?[2]:(e=this.props,t=e.server,r=e.flow,o=e.authCorsProxyUrl,n=o&&r.tokenUrl?o+normalizeUrlProtocol(r.tokenUrl):r.tokenUrl,this.errors.client_id||this.errors.client_secret?(console.log("Provide client_id and client_secret"),[2]):(a=this.values.client_id,l=this.values.client_secret,a&&l?(this.setState({loading:!0}),[4,OAuth2.authorizeClientCredentials({tokenUrl:n.startsWith("http")?n:t+n,clientId:a,clientSecret:l,scopes:this.values.scopes,successCallback:function(e){i.props.formApi.setValue("auth."+i.props.id+".token",e),i.setState({loading:!1})},errorCallback:function(e){i.clearToken(),i.setState({error:e.message,loading:!1})}})]):(console.log("Provide client_id and client_secret"),[2])));case 1:return s.sent(),[2]}}))}))}}),t}return __extends(t,e),Object.defineProperty(t.prototype,"values",{get:function(){return this.props.form.values&&this.props.form.values.auth&&this.props.form.values.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){return this.props.form.errors&&this.props.form.errors.auth&&this.props.form.errors.auth[this.props.id]||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this.state,t=e.loading,r=e.error,o=e.tokenMasked,n=this.props,a=n.id,l=n.defaultValues,i=Object.keys(this.props.flow.scopes),s=fromStorage("auth."+a+".token")||JSON.stringify(null==l?void 0:l.token);s=s?JSON.parse(s):"";var c=getSecurityDetailsOptions(a,"client_id"),u={field:"auth."+a+".client_id",fullWidth:!0,initialValue:fromStorage("auth."+a+".client_id")||this.props.clientId||(null==l?void 0:l.client_id),initValue:fromStorage("auth."+a+".client_id")||this.props.clientId||(null==l?void 0:l.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:"),c?React.createElement(FormDropdown,__assign({},u,{options:c})):React.createElement(FormTextField,__assign({},u,{type:"password"}))),React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client Secret:"),React.createElement(FormTextField,{type:"password",fullWidth:!0,field:"auth."+a+".client_secret",initialValue:fromStorage("auth."+a+".client_secret")||(null==l?void 0:l.client_secret)})),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+a+".token",type:"hidden",initialValue:s,validate:validateToken}),React.createElement(Scope,{id:a,scopes:i})),React.createElement(Button,{color:"primary",onClick:this.requestToken,blinking:t},t?"Loading...":"Request Token"),React.createElement(FormHeader,null," Access Token "),r?React.createElement(FormError,{style:{marginBottom:"1em"}},"Failed to request token: ",React.createElement("pre",null,r)," "):this.values.token&&this.values.token.access_token?React.createElement(TokenField,null,React.createElement(TokenValue,{length:this.values.token.access_token.length,masked:o},this.values.token.access_token),React.createElement(TokenShowHide,{onClick:this.toggleTokenMask},o?"Show":"Hide"," "),React.createElement(TokenClear,{onClick:this.clearToken}," Clear ")):React.createElement(FormError,{style:{marginBottom:"1em"}},"No token"))}}),t}(React.Component);export{OAuth2TokenInput};export default OAuth2TokenInput;
2
2
  //# sourceMappingURL=OAuth2TokenInput.js.map
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import { FormApi, FormState } from 'informed';
3
3
  import { SecurityScheme } from '../../redoc-lib';
4
+ import { SecurityDetails } from '../../utils';
4
5
  export interface OpenIDConnectProps {
5
6
  server: string;
6
7
  authCorsProxyUrl: Maybe<string>;
@@ -9,5 +10,6 @@ export interface OpenIDConnectProps {
9
10
  formApi: FormApi;
10
11
  scheme: SecurityScheme;
11
12
  clientId?: string;
13
+ defaultValues?: SecurityDetails;
12
14
  }
13
15
  export declare function OpenIDConnect(props: OpenIDConnectProps): JSX.Element;
@@ -1,2 +1,2 @@
1
- import{__awaiter,__generator,__makeTemplateObject}from"tslib";import*as React from"react";import{styled}from"../../redoc-lib";import{discoverOpenIDConnect}from"../../services/OpenIDConnect";import{OAuth2Flow}from"./OAuth2Flow";import{LinearProgress}from"../common/LinearProgress";import{FormError}from"../common/form";export function OpenIDConnect(e){var t,r=this,n=e.scheme,o=React.useState({}),a=o[0],c=o[1],l=React.useState(),i=l[0],m=l[1],s=React.useState(!1),p=s[0],u=s[1];React.useEffect((function(){d(n.openIdConnectUrl)}),[n.openIdConnectUrl]);var d=function(e){return __awaiter(r,void 0,void 0,(function(){var t,r;return __generator(this,(function(n){switch(n.label){case 0:u(!0),m(""),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,discoverOpenIDConnect(e)];case 2:return t=n.sent(),c(t),[3,4];case 3:return r=n.sent(),m(r.message),[3,4];case 4:return u(!1),[2]}}))}))};return React.createElement("div",null,p?React.createElement("div",null,React.createElement("div",null,"Fetching OpenID Connect metadata..."),React.createElement(LinearProgress,null)):React.createElement("div",null,i?React.createElement(FormError,null,i):(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,form:e.form,formApi:e.formApi,clientId:e.clientId,flow:"implicit"})):React.createElement("div",null,"Unsupported flow")))}var templateObject_1,FlowName=styled.div(templateObject_1||(templateObject_1=__makeTemplateObject(["\n margin-top: 5px;\n margin-bottom: 10px;\n"],["\n margin-top: 5px;\n margin-bottom: 10px;\n"])));
1
+ import{__awaiter,__generator,__makeTemplateObject}from"tslib";import*as React from"react";import{styled}from"../../redoc-lib";import{discoverOpenIDConnect}from"../../services/OpenIDConnect";import{OAuth2Flow}from"./OAuth2Flow";import{LinearProgress}from"../common/LinearProgress";import{FormError}from"../common/form";export function OpenIDConnect(e){var t,r=this,n=e.scheme,o=e.defaultValues,a=React.useState({}),l=a[0],c=a[1],i=React.useState(),m=i[0],s=i[1],u=React.useState(!1),p=u[0],d=u[1];React.useEffect((function(){f(n.openIdConnectUrl)}),[n.openIdConnectUrl]);var f=function(e){return __awaiter(r,void 0,void 0,(function(){var t,r;return __generator(this,(function(n){switch(n.label){case 0:d(!0),s(""),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,discoverOpenIDConnect(e)];case 2:return t=n.sent(),c(t),[3,4];case 3:return r=n.sent(),s(r.message),[3,4];case 4:return d(!1),[2]}}))}))};return React.createElement("div",null,p?React.createElement("div",null,React.createElement("div",null,"Fetching OpenID Connect metadata..."),React.createElement(LinearProgress,null)):React.createElement("div",null,m?React.createElement(FormError,null,m):(null===(t=null==l?void 0:l.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:l.authorization_endpoint,authCorsProxyUrl:e.authCorsProxyUrl,scopes:l.scopes_supported,server:e.server,id:e.id,form:e.form,formApi:e.formApi,clientId:e.clientId,flow:"implicit",defaultValues:o})):React.createElement("div",null,"Unsupported flow")))}var templateObject_1,FlowName=styled.div(templateObject_1||(templateObject_1=__makeTemplateObject(["\n margin-top: 5px;\n margin-bottom: 10px;\n"],["\n margin-top: 5px;\n margin-bottom: 10px;\n"])));
2
2
  //# sourceMappingURL=OpenIDConnect.js.map
@@ -2,5 +2,5 @@ export * from './components';
2
2
  export * from './services';
3
3
  export * from './redoc-lib';
4
4
  export * from './models';
5
- export { setSecurityDetails, setSecurityDetailsVariants, setParameterValue } from './utils';
5
+ export { setSecurityDetails, setSecurityDetailsVariants, setParameterValue, SecurityDetails, } from './utils';
6
6
  export type { OAuth2 } from './services/OAuth2';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/reference-docs",
3
- "version": "2.2.2",
3
+ "version": "2.2.3",
4
4
  "description": "Redocly Reference Docs",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",