@redocly/reference-docs 2.30.0 → 2.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/bin/cli/commands/redocly-docs-cli.min.js +6 -6
  2. package/bin/cli/commands/redocly-docs-cli.min.js.LICENSE.txt +1 -1
  3. package/dist/console.redocly-reference-docs.min.js +110 -110
  4. package/dist/oauth2-redirect.js +1 -1
  5. package/dist/redocly-reference-docs.min.js +382 -382
  6. package/lib/components/console/AuthPanel.js +1 -1
  7. package/lib/components/console/OAuth2Flow.d.ts +1 -0
  8. package/lib/components/console/OAuth2Flow.js +1 -1
  9. package/lib/components/console/OAuth2TokenInput.d.ts +1 -0
  10. package/lib/components/console/OAuth2TokenInput.js +1 -1
  11. package/lib/components/console/utils.d.ts +6 -0
  12. package/lib/components/console/utils.js +1 -1
  13. package/lib/redoc-lib/src/components/SecuritySchemes/helpers.d.ts +4 -0
  14. package/lib/redoc-lib/src/types/open-api.d.ts +3 -0
  15. package/lib/redoc-lib/src/utils/openapi.d.ts +3 -2
  16. package/lib/redoc-lib/src/utils/openapi.js +1 -1
  17. package/lib/services/OAuth2.d.ts +4 -2
  18. package/lib/services/OAuth2.js +1 -1
  19. package/lib-esm/components/console/AuthPanel.js +1 -1
  20. package/lib-esm/components/console/OAuth2Flow.d.ts +1 -0
  21. package/lib-esm/components/console/OAuth2Flow.js +1 -1
  22. package/lib-esm/components/console/OAuth2TokenInput.d.ts +1 -0
  23. package/lib-esm/components/console/OAuth2TokenInput.js +1 -1
  24. package/lib-esm/components/console/utils.d.ts +6 -0
  25. package/lib-esm/components/console/utils.js +1 -1
  26. package/lib-esm/redoc-lib/src/components/SecuritySchemes/helpers.d.ts +4 -0
  27. package/lib-esm/redoc-lib/src/types/open-api.d.ts +3 -0
  28. package/lib-esm/redoc-lib/src/utils/openapi.d.ts +3 -2
  29. package/lib-esm/redoc-lib/src/utils/openapi.js +1 -1
  30. package/lib-esm/services/OAuth2.d.ts +4 -2
  31. package/lib-esm/services/OAuth2.js +1 -1
  32. package/package.json +1 -1
@@ -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")),utils_1=require("../../utils"),TextField_1=require("../common/TextField"),form_1=require("../common/form"),Labels_1=require("../../redoc-lib/src/services/Labels"),Dropdown_1=require("../common/Dropdown"),OpenIDConnect_1=require("./OpenIDConnect"),OAuth2Flow_1=require("./OAuth2Flow"),OAuth2TokenInput_1=(0,tslib_1.__importDefault)(require("./OAuth2TokenInput"));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.toSessionStorage)("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.fromSessionStorage)("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,l=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===l.length?null:React.createElement(React.Fragment,null,React.createElement(form_1.FormWrapper,null,l.length>1&&React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Security scheme: "),React.createElement(Dropdown_1.Dropdown,{variant:"dark",fullWidth:!0,options:l,value:l[r].value,onChange:this.handleSchemeChange}))||null,o[r].schemes.map((function(r){var o,l,a,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.fromSessionStorage)("auth."+c)||(null==t?void 0:t[c]),initValue:fromCookie(r)||(0,utils_1.fromSessionStorage)("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.fromSessionStorage)("auth."+c+".username")||(null===(o=null==t?void 0:t[c])||void 0===o?void 0:o.username),initValue:(0,utils_1.fromSessionStorage)("auth."+c+".username")||(null===(l=null==t?void 0:t[c])||void 0===l?void 0:l.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",initialValue:(0,utils_1.fromSessionStorage)("auth."+c+".password")||(null===(a=null==t?void 0:t[c])||void 0===a?void 0:a.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.fromSessionStorage)("auth."+c)||(null==t?void 0:t[c]),initValue:(0,utils_1.fromSessionStorage)("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",usePkce:r.flows.authorizationCode["x-usePkce"],defaultValues:null==t?void 0:t[c]});if("oauth2"===r.type){var h=(0,utils_1.fromSessionStorage)("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;
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")),utils_1=require("../../utils"),TextField_1=require("../common/TextField"),form_1=require("../common/form"),Labels_1=require("../../redoc-lib/src/services/Labels"),Dropdown_1=require("../common/Dropdown"),OpenIDConnect_1=require("./OpenIDConnect"),OAuth2Flow_1=require("./OAuth2Flow"),OAuth2TokenInput_1=(0,tslib_1.__importDefault)(require("./OAuth2TokenInput"));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.toSessionStorage)("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.fromSessionStorage)("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,l=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===l.length?null:React.createElement(React.Fragment,null,React.createElement(form_1.FormWrapper,null,l.length>1&&React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null," Security scheme: "),React.createElement(Dropdown_1.Dropdown,{variant:"dark",fullWidth:!0,options:l,value:l[r].value,onChange:this.handleSchemeChange}))||null,o[r].schemes.map((function(r){var o,l,a,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.fromSessionStorage)("auth."+c)||(null==t?void 0:t[c]),initValue:fromCookie(r)||(0,utils_1.fromSessionStorage)("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.fromSessionStorage)("auth."+c+".username")||(null===(o=null==t?void 0:t[c])||void 0===o?void 0:o.username),initValue:(0,utils_1.fromSessionStorage)("auth."+c+".username")||(null===(l=null==t?void 0:t[c])||void 0===l?void 0:l.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",initialValue:(0,utils_1.fromSessionStorage)("auth."+c+".password")||(null===(a=null==t?void 0:t[c])||void 0===a?void 0:a.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.fromSessionStorage)("auth."+c)||(null==t?void 0:t[c]),initValue:(0,utils_1.fromSessionStorage)("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",tokenEndpointAuthMethod:r.flows.authorizationCode["x-tokenEndpointAuthMethod"],usePkce:r.flows.authorizationCode["x-usePkce"],defaultValues:null==t?void 0:t[c]});if("oauth2"===r.type){var h=(0,utils_1.fromSessionStorage)("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
@@ -17,6 +17,7 @@ export interface OAuth2FlowProps {
17
17
  form: FormState;
18
18
  formApi: FormApi;
19
19
  flow: 'implicit' | 'authorizationCode';
20
+ tokenEndpointAuthMethod?: string;
20
21
  clientId?: string;
21
22
  defaultValues?: SecurityDetails;
22
23
  }
@@ -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"),TextField_1=require("../common/TextField"),Checkbox_1=require("../common/Checkbox"),shared_1=require("../shared"),OAuth2_1=require("../../services/OAuth2"),utils_1=require("../../utils"),utils_2=require("../../services/utils"),utils_3=require("./utils"),Scope_1=(0,tslib_1.__importDefault)(require("./Scope"));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,showPkceOptions:!1}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token","")}}),Object.defineProperty(t,"togglePkceOptions",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.setState((function(e){return{showPkceOptions:!e.showPkceOptions}}))}}),Object.defineProperty(t,"handleCodeVerifierChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){var r=e.target.value;return(0,tslib_1.__awaiter)(t,void 0,void 0,(function(){var e;return(0,tslib_1.__generator)(this,(function(t){switch(t.label){case 0:return[4,(0,OAuth2_1.deriveCodeChallenge)(r)];case 1:return e=t.sent(),this.setState({codeVerifier:r,validCodeChallenge:e}),[2]}}))}))}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"values",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.values)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.errors)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"pkceInputActionButtonProps",{get:function(){var e=this;if(void 0!==this.state.codeVerifier&&this.state.codeChallenge!==this.state.validCodeChallenge)return{label:"sync",onClick:function(){e.state.codeVerifier&&e.setState({codeChallenge:e.state.validCodeChallenge})}}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this;if(this.props.usePkce){var t=(0,utils_2.randString)(43);(0,OAuth2_1.deriveCodeChallenge)(t).then((function(r){e.setState({codeVerifier:t,codeChallenge:r,validCodeChallenge:r})}))}}}),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.usePkce,n=r.id,a=r.tokenUrl,o=r.authCorsProxyUrl;if((0,utils_2.isEmptyObject)(this.errors)){this.setState({loading:!0,error:null});var c=o?o+(0,utils_3.normalizeUrlProtocol)(e):e,s=o&&a?o+(0,utils_3.normalizeUrlProtocol)(a):a,u=this.props.formApi.getValue("auth."+n+".scopes"),d={authorizationUrl:c.startsWith("http")?c:this.props.server+c,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(d),"authorizationCode"===l&&OAuth2_1.OAuth2.authorizeAuthorizationCode((0,tslib_1.__assign)((0,tslib_1.__assign)((0,tslib_1.__assign)({},d),{tokenUrl:(null==s?void 0:s.startsWith("http"))?s:this.props.server+s,clientSecret:this.values.client_secret}),i&&{codeVerifier:this.state.codeVerifier,codeChallenge:this.state.codeChallenge}))}}}}),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=this,t=this.state,r=t.error,l=t.loading,i=this.props,n=i.id,a=i.scopes,o=i.authorizationUrl,c=i.flow,s=i.usePkce,u=i.defaultValues;if(!o)return React.createElement(form_1.FormError,null,"No flow info");var d=(0,utils_1.fromSessionStorage)("auth."+n+".token")||JSON.stringify(null==u?void 0:u.token);d=d?JSON.parse(d):"";var p=(0,utils_1.getSecurityDetailsOptions)(n,"client_id"),h={field:"auth."+n+".client_id",fullWidth:!0,initialValue:(0,utils_1.fromSessionStorage)("auth."+n+".client_id")||this.props.clientId||(null==u?void 0:u.client_id),initValue:(0,utils_1.fromSessionStorage)("auth."+n+".client_id")||this.props.clientId||(null==u?void 0:u.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: "),p?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},h,{options:p})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},h,{"data-cy":"client-id-input"}))),"authorizationCode"===c&&React.createElement(React.Fragment,null,(!(null==s?void 0:s.hideClientSecretInput)||!s)&&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.fromSessionStorage)("auth."+n+".client_secret")||(null==u?void 0:u.client_secret),validateOnBlur:!0,validateOnChange:!0,"data-cy":"client-secret-input"})),s&&!s.disableManualConfiguration&&React.createElement(PkceOptionsWrapper,null,React.createElement(Checkbox_1.Checkbox,{id:"pkce-opitons-toggle",label:"Configure PKCE manually",checked:this.state.showPkceOptions,onChange:this.togglePkceOptions,"data-cy":"pkce-options-toggle"}),this.state.showPkceOptions&&React.createElement(PkceDetails,null,React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Code Verifier"),React.createElement(TextField_1.TextField,{fullWidth:!0,value:this.state.codeVerifier,onChange:this.handleCodeVerifierChange,"data-cy":"code-verifier-input"})),React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Code Challenge"),React.createElement(TextField_1.TextField,{fullWidth:!0,value:this.state.codeChallenge,onChange:function(t){var r=t.target.value;e.setState({codeChallenge:r})},inputActionButton:this.pkceInputActionButtonProps,"data-cy":"code-challenge-input"}))))),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+n+".token",type:"hidden",initialValue:d}),React.createElement(Scope_1.default,{id:n,scopes:a}),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(){e.handleLogout()}},"Log out"):l?React.createElement(React.Fragment,null,React.createElement(shared_1.Button,{fullWidth:!0,onClick:function(){e.handleCancel()}},"Cancel"),React.createElement(LinearProgress_1.LinearProgress,null)):React.createElement(shared_1.Button,{fullWidth:!0,disabled:!(0,utils_2.isEmptyObject)(this.errors),onClick:function(){e.handleAuthorize(o)}},"Authorize")),l||r||!this.values.token||!this.values.token.access_token&&React.createElement(form_1.FormWrapper,null,React.createElement(form_1.FormControl,null,l?React.createElement(form_1.FormWarning,null,"Please, finish your authorization flow or cancel authorization."):r?React.createElement(React.Fragment,null,React.createElement(OriginalErrorMessage,null,React.createElement(form_1.FormError,null,r))):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,templateObject_3,templateObject_4,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"]))),PkceOptionsWrapper=redoc_lib_1.styled.div(templateObject_3||(templateObject_3=(0,tslib_1.__makeTemplateObject)(["\n padding: 8px 0 20px;\n"],["\n padding: 8px 0 20px;\n"]))),PkceDetails=redoc_lib_1.styled.div(templateObject_4||(templateObject_4=(0,tslib_1.__makeTemplateObject)(["\n padding: 4px 0;\n"],["\n padding: 4px 0;\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"),TextField_1=require("../common/TextField"),Checkbox_1=require("../common/Checkbox"),shared_1=require("../shared"),OAuth2_1=require("../../services/OAuth2"),utils_1=require("../../utils"),utils_2=require("../../services/utils"),utils_3=require("./utils"),Scope_1=(0,tslib_1.__importDefault)(require("./Scope"));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,showPkceOptions:!1}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token","")}}),Object.defineProperty(t,"togglePkceOptions",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.setState((function(e){return{showPkceOptions:!e.showPkceOptions}}))}}),Object.defineProperty(t,"handleCodeVerifierChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){var r=e.target.value;return(0,tslib_1.__awaiter)(t,void 0,void 0,(function(){var e;return(0,tslib_1.__generator)(this,(function(t){switch(t.label){case 0:return[4,(0,OAuth2_1.deriveCodeChallenge)(r)];case 1:return e=t.sent(),this.setState({codeVerifier:r,validCodeChallenge:e}),[2]}}))}))}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"values",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.values)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.errors)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"pkceInputActionButtonProps",{get:function(){var e=this;if(void 0!==this.state.codeVerifier&&this.state.codeChallenge!==this.state.validCodeChallenge)return{label:"sync",onClick:function(){e.state.codeVerifier&&e.setState({codeChallenge:e.state.validCodeChallenge})}}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this;if(this.props.usePkce){var t=(0,utils_2.randString)(43);(0,OAuth2_1.deriveCodeChallenge)(t).then((function(r){e.setState({codeVerifier:t,codeChallenge:r,validCodeChallenge:r})}))}}}),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.usePkce,n=r.id,o=r.tokenUrl,a=r.authCorsProxyUrl,c=r.tokenEndpointAuthMethod;if((0,utils_2.isEmptyObject)(this.errors)){this.setState({loading:!0,error:null});var s=a?a+(0,utils_3.normalizeUrlProtocol)(e):e,u=a&&o?a+(0,utils_3.normalizeUrlProtocol)(o):o,d=this.props.formApi.getValue("auth."+n+".scopes"),p={authorizationUrl:s.startsWith("http")?s:this.props.server+s,clientId:this.values.client_id,scopes:d,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(p),(0,utils_3.validateTokenEndpointMethod)(c)?"authorizationCode"===l&&OAuth2_1.OAuth2.authorizeAuthorizationCode((0,tslib_1.__assign)((0,tslib_1.__assign)((0,tslib_1.__assign)({},p),{tokenUrl:(null==u?void 0:u.startsWith("http"))?u:this.props.server+u,clientSecret:this.values.client_secret,extraHeaders:(0,utils_3.getOAuth2TokenEndpointAuthHeader)({authMethod:c,clientId:this.values.client_id,clientSecret:this.values.client_secret})}),i&&{codeVerifier:this.state.codeVerifier,codeChallenge:this.state.codeChallenge})):console.log("Unsupported token endpoint auth method: "+c)}}}}),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=this,t=this.state,r=t.error,l=t.loading,i=this.props,n=i.id,o=i.scopes,a=i.authorizationUrl,c=i.flow,s=i.usePkce,u=i.defaultValues;if(!a)return React.createElement(form_1.FormError,null,"No flow info");var d=(0,utils_1.fromSessionStorage)("auth."+n+".token")||JSON.stringify(null==u?void 0:u.token);d=d?JSON.parse(d):"";var p=(0,utils_1.getSecurityDetailsOptions)(n,"client_id"),h={field:"auth."+n+".client_id",fullWidth:!0,initialValue:(0,utils_1.fromSessionStorage)("auth."+n+".client_id")||this.props.clientId||(null==u?void 0:u.client_id),initValue:(0,utils_1.fromSessionStorage)("auth."+n+".client_id")||this.props.clientId||(null==u?void 0:u.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: "),p?React.createElement(TextField_1.FormDropdown,(0,tslib_1.__assign)({},h,{options:p})):React.createElement(TextField_1.FormTextField,(0,tslib_1.__assign)({},h,{"data-cy":"client-id-input"}))),"authorizationCode"===c&&React.createElement(React.Fragment,null,(!(null==s?void 0:s.hideClientSecretInput)||!s)&&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.fromSessionStorage)("auth."+n+".client_secret")||(null==u?void 0:u.client_secret),validateOnBlur:!0,validateOnChange:!0,"data-cy":"client-secret-input"})),s&&!s.disableManualConfiguration&&React.createElement(PkceOptionsWrapper,null,React.createElement(Checkbox_1.Checkbox,{id:"pkce-opitons-toggle",label:"Configure PKCE manually",checked:this.state.showPkceOptions,onChange:this.togglePkceOptions,"data-cy":"pkce-options-toggle"}),this.state.showPkceOptions&&React.createElement(PkceDetails,null,React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Code Verifier"),React.createElement(TextField_1.TextField,{fullWidth:!0,value:this.state.codeVerifier,onChange:this.handleCodeVerifierChange,"data-cy":"code-verifier-input"})),React.createElement(form_1.FormControl,null,React.createElement(form_1.FormLabel,null,"Code Challenge"),React.createElement(TextField_1.TextField,{fullWidth:!0,value:this.state.codeChallenge,onChange:function(t){var r=t.target.value;e.setState({codeChallenge:r})},inputActionButton:this.pkceInputActionButtonProps,"data-cy":"code-challenge-input"}))))),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+n+".token",type:"hidden",initialValue:d}),React.createElement(Scope_1.default,{id:n,scopes:o}),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(){e.handleLogout()}},"Log out"):l?React.createElement(React.Fragment,null,React.createElement(shared_1.Button,{fullWidth:!0,onClick:function(){e.handleCancel()}},"Cancel"),React.createElement(LinearProgress_1.LinearProgress,null)):React.createElement(shared_1.Button,{fullWidth:!0,disabled:!(0,utils_2.isEmptyObject)(this.errors),onClick:function(){e.handleAuthorize(a)}},"Authorize")),l||r||!this.values.token||!this.values.token.access_token&&React.createElement(form_1.FormWrapper,null,React.createElement(form_1.FormControl,null,l?React.createElement(form_1.FormWarning,null,"Please, finish your authorization flow or cancel authorization."):r?React.createElement(React.Fragment,null,React.createElement(OriginalErrorMessage,null,React.createElement(form_1.FormError,null,r))):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,templateObject_3,templateObject_4,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"]))),PkceOptionsWrapper=redoc_lib_1.styled.div(templateObject_3||(templateObject_3=(0,tslib_1.__makeTemplateObject)(["\n padding: 8px 0 20px;\n"],["\n padding: 8px 0 20px;\n"]))),PkceDetails=redoc_lib_1.styled.div(templateObject_4||(templateObject_4=(0,tslib_1.__makeTemplateObject)(["\n padding: 4px 0;\n"],["\n padding: 4px 0;\n"])));
2
2
  //# sourceMappingURL=OAuth2Flow.js.map
@@ -3,6 +3,7 @@ import type { SecurityDetails } from '../../utils';
3
3
  export interface OAuth2TokenInputProps {
4
4
  flow: {
5
5
  refreshUrl?: string;
6
+ 'x-tokenEndpointAuthMethod'?: 'none' | 'client_secret_basic' | string;
6
7
  scopes: Record<string, string>;
7
8
  tokenUrl: string;
8
9
  };
@@ -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"),OAuth2_1=require("../../services/OAuth2"),shared_1=require("../shared"),TextField_1=require("../common/TextField"),Scope_1=(0,tslib_1.__importDefault)(require("./Scope")),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.toSessionStorage)("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(){var e,t,r;return(null===(r=null===(t=null===(e=this.props.form)||void 0===e?void 0:e.values)||void 0===t?void 0:t.auth)||void 0===r?void 0:r[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.errors)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[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,l=i.id,n=i.defaultValues,a=Object.keys(this.props.flow.scopes),s=(0,utils_1.fromSessionStorage)("auth."+l+".token")||JSON.stringify(null==n?void 0:n.token);s=s?JSON.parse(s):"";var u=(0,utils_1.getSecurityDetailsOptions)(l,"client_id"),c={field:"auth."+l+".client_id",fullWidth:!0,initialValue:(0,utils_1.fromSessionStorage)("auth."+l+".client_id")||this.props.clientId||(null==n?void 0:n.client_id),initValue:(0,utils_1.fromSessionStorage)("auth."+l+".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."+l+".client_secret",initialValue:(0,utils_1.fromSessionStorage)("auth."+l+".client_secret")||(null==n?void 0:n.client_secret)})),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+l+".token",type:"hidden",initialValue:s,validate:validateToken}),React.createElement(Scope_1.default,{id:l,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;
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"),OAuth2_1=require("../../services/OAuth2"),shared_1=require("../shared"),TextField_1=require("../common/TextField"),Scope_1=(0,tslib_1.__importDefault)(require("./Scope")),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.toSessionStorage)("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,n,l,a,s=this;return(0,tslib_1.__generator)(this,(function(u){switch(u.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]):(n=this.values.client_id,l=this.values.client_secret,n&&l?(this.setState({loading:!0}),a=r["x-tokenEndpointAuthMethod"],(0,utils_2.validateTokenEndpointMethod)(a)?[4,OAuth2_1.OAuth2.authorizeClientCredentials({tokenUrl:i.startsWith("http")?i:t+i,clientId:n,clientSecret:l,scopes:this.values.scopes,extraHeaders:(0,utils_2.getOAuth2TokenEndpointAuthHeader)({authMethod:a,clientId:n,clientSecret:l}),successCallback:function(e){s.props.formApi.setValue("auth."+s.props.id+".token",e),s.setState({loading:!1})},errorCallback:function(e){s.clearToken(),s.setState({error:e.message,loading:!1})}})]:(console.log("Unsupported token endpoint auth method: "+a),[2])):(console.log("Provide client_id and client_secret"),[2])));case 1:return u.sent(),[2]}}))}))}}),t}return(0,tslib_1.__extends)(t,e),Object.defineProperty(t.prototype,"values",{get:function(){var e,t,r;return(null===(r=null===(t=null===(e=this.props.form)||void 0===e?void 0:e.values)||void 0===t?void 0:t.auth)||void 0===r?void 0:r[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.errors)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[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,n=i.id,l=i.defaultValues,a=Object.keys(this.props.flow.scopes),s=(0,utils_1.fromSessionStorage)("auth."+n+".token")||JSON.stringify(null==l?void 0:l.token);s=s?JSON.parse(s):"";var u=(0,utils_1.getSecurityDetailsOptions)(n,"client_id"),c={field:"auth."+n+".client_id",fullWidth:!0,initialValue:(0,utils_1.fromSessionStorage)("auth."+n+".client_id")||this.props.clientId||(null==l?void 0:l.client_id),initValue:(0,utils_1.fromSessionStorage)("auth."+n+".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(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."+n+".client_secret",initialValue:(0,utils_1.fromSessionStorage)("auth."+n+".client_secret")||(null==l?void 0:l.client_secret)})),React.createElement(TextField_1.FormTextField,{fullWidth:!0,field:"auth."+n+".token",type:"hidden",initialValue:s,validate:validateToken}),React.createElement(Scope_1.default,{id:n,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
@@ -12,3 +12,9 @@ export declare function updateVariablesStorage(name: string, value: string): voi
12
12
  export declare function unescapeQueryParams(params: GenericObject): GenericObject;
13
13
  export declare function getFileNameFromHeaders(headers: Record<string, string>): string;
14
14
  export declare const makeRequestInterceptor: ({ requestInterceptor, sendXUserAgentInTryIt, disableTryItRequestUrlEncoding, }: Pick<RedocProNormalizedOptions, 'requestInterceptor' | 'sendXUserAgentInTryIt' | 'disableTryItRequestUrlEncoding'>, operation: OperationModel, securitySchemaAuth?: string | undefined) => (req: Request) => void | Request;
15
+ export declare const validateTokenEndpointMethod: (token: string[] | string | undefined) => boolean;
16
+ export declare const getOAuth2TokenEndpointAuthHeader: ({ authMethod, clientId, clientSecret, }: {
17
+ authMethod?: string | string[] | undefined;
18
+ clientId: string;
19
+ clientSecret: string;
20
+ }) => Record<'Authorization', string> | GenericObject;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.makeRequestInterceptor=exports.getFileNameFromHeaders=exports.unescapeQueryParams=exports.updateVariablesStorage=exports.getDefaultOrStoredVariables=exports.expandDefaultServerVariables=exports.expandVariables=exports.getInitialServerWithVariables=exports.getServerWithVariables=exports.getParameters=exports.updateStorage=exports.normalizeUrlProtocol=void 0;var tslib_1=require("tslib"),utils_1=require("../../utils");function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}function updateStorage(e){if(e.values.auth)for(var r=0,t=Object.keys(e.values.auth);r<t.length;r++){var a=t[r],i=e.values.auth[a];(0,utils_1.setSecurityDetails)(a,i)}updateParameterStorage(e)}function updateParameterStorage(e){for(var r,t=0,a=["path","query","header","cookie"];t<a.length;t++){var i=a[t];if(null===(r=e.values)||void 0===r?void 0:r[i])for(var s=0,o=Object.keys(e.values[i]);s<o.length;s++){var n=o[s];(0,utils_1.setParameterValue)(i,n,e.values[i][n])}}}exports.normalizeUrlProtocol=normalizeUrlProtocol,exports.updateStorage=updateStorage;var getParameters=function(e,r){return e.filter((function(e){return e.in===r})).reduce((function(e,r){var t=r.in,a=r.name;return e[a]=(0,utils_1.getParameterValue)(t||"",a),e}),{})};exports.getParameters=getParameters;var pathTemplateRegExp=/(?:{)(\w+)(?:})/g;function getServerWithVariables(e,r){void 0===r&&(r=0);var t=e[r],a=getDefaultOrStoredVariables(t);return(0,tslib_1.__assign)((0,tslib_1.__assign)({},t),{variables:a})}function getInitialServerWithVariables(e){var r=(0,utils_1.fromSessionStorage)("serverUrl"),t=e.find((function(e){return e.url===r}))||e[0],a=getDefaultOrStoredVariables(t);return(0,tslib_1.__assign)((0,tslib_1.__assign)({},t),{variables:a})}function expandVariables(e,r){return void 0===r&&(r={}),e.replace(pathTemplateRegExp,(function(e,t){return r[t]||e}))}function expandDefaultServerVariables(e,r){return void 0===r&&(r={}),e.replace(pathTemplateRegExp,(function(e,t){return r[t]&&r[t].default||e}))}function getDefaultOrStoredVariables(e){if(!(null==e?void 0:e.variables))return{};var r=(0,utils_1.fromSessionStorage)("variables"),t=r&&JSON.parse(r)||{},a={};return Object.entries(e.variables||{}).forEach((function(e){var r=e[0],i=e[1];a[r]=t[r]||i.default||""})),a}function updateVariablesStorage(e,r){var t,a=(0,utils_1.fromSessionStorage)("variables"),i=a&&JSON.parse(a)||{};(0,utils_1.toSessionStorage)("variables",JSON.stringify((0,tslib_1.__assign)((0,tslib_1.__assign)({},i),((t={})[e]=r,t))))}function unescapeQueryParams(e){return Object.entries(e).reduce((function(e,r){var t=r[0],a=r[1];return e[(0,utils_1.unescapeFormId)(t)]=a,e}),{})}function getFileNameFromHeaders(e){for(var r="filename=",t=0,a=Object.entries(e);t<a.length;t++){var i=a[t],s=i[0],o=i[1];if("content-disposition"===s.toLowerCase()){var n=o.split(";").find((function(e){return e.trim().startsWith(r)}));if(n)return n.split(r)[1]}}return""}exports.getServerWithVariables=getServerWithVariables,exports.getInitialServerWithVariables=getInitialServerWithVariables,exports.expandVariables=expandVariables,exports.expandDefaultServerVariables=expandDefaultServerVariables,exports.getDefaultOrStoredVariables=getDefaultOrStoredVariables,exports.updateVariablesStorage=updateVariablesStorage,exports.unescapeQueryParams=unescapeQueryParams,exports.getFileNameFromHeaders=getFileNameFromHeaders;var makeRequestInterceptor=function(e,r,t){var a=e.requestInterceptor,i=e.sendXUserAgentInTryIt,s=e.disableTryItRequestUrlEncoding;return function(e){var o,n,l,u;s&&(e=(0,tslib_1.__assign)((0,tslib_1.__assign)({},e),{url:decodeURIComponent(e.url)})),i&&(e.headers["X-User-Agent"]="Redocly Try it API console");var p=(null===(n=null===(o=null==r?void 0:r.requestValues)||void 0===o?void 0:o.header)||void 0===n?void 0:n.authorization)||(null===(u=null===(l=null==r?void 0:r.requestValues)||void 0===l?void 0:l.header)||void 0===u?void 0:u.Authorization);return!t&&p&&(e.headers.Authorization=p),a?a(e,r):e}};exports.makeRequestInterceptor=makeRequestInterceptor;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getOAuth2TokenEndpointAuthHeader=exports.validateTokenEndpointMethod=exports.makeRequestInterceptor=exports.getFileNameFromHeaders=exports.unescapeQueryParams=exports.updateVariablesStorage=exports.getDefaultOrStoredVariables=exports.expandDefaultServerVariables=exports.expandVariables=exports.getInitialServerWithVariables=exports.getServerWithVariables=exports.getParameters=exports.updateStorage=exports.normalizeUrlProtocol=void 0;var tslib_1=require("tslib"),utils_1=require("../../utils");function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}function updateStorage(e){if(e.values.auth)for(var r=0,t=Object.keys(e.values.auth);r<t.length;r++){var a=t[r],i=e.values.auth[a];(0,utils_1.setSecurityDetails)(a,i)}updateParameterStorage(e)}function updateParameterStorage(e){for(var r,t=0,a=["path","query","header","cookie"];t<a.length;t++){var i=a[t];if(null===(r=e.values)||void 0===r?void 0:r[i])for(var n=0,s=Object.keys(e.values[i]);n<s.length;n++){var o=s[n];(0,utils_1.setParameterValue)(i,o,e.values[i][o])}}}exports.normalizeUrlProtocol=normalizeUrlProtocol,exports.updateStorage=updateStorage;var getParameters=function(e,r){return e.filter((function(e){return e.in===r})).reduce((function(e,r){var t=r.in,a=r.name;return e[a]=(0,utils_1.getParameterValue)(t||"",a),e}),{})};exports.getParameters=getParameters;var pathTemplateRegExp=/(?:{)(\w+)(?:})/g;function getServerWithVariables(e,r){void 0===r&&(r=0);var t=e[r],a=getDefaultOrStoredVariables(t);return(0,tslib_1.__assign)((0,tslib_1.__assign)({},t),{variables:a})}function getInitialServerWithVariables(e){var r=(0,utils_1.fromSessionStorage)("serverUrl"),t=e.find((function(e){return e.url===r}))||e[0],a=getDefaultOrStoredVariables(t);return(0,tslib_1.__assign)((0,tslib_1.__assign)({},t),{variables:a})}function expandVariables(e,r){return void 0===r&&(r={}),e.replace(pathTemplateRegExp,(function(e,t){return r[t]||e}))}function expandDefaultServerVariables(e,r){return void 0===r&&(r={}),e.replace(pathTemplateRegExp,(function(e,t){return r[t]&&r[t].default||e}))}function getDefaultOrStoredVariables(e){if(!(null==e?void 0:e.variables))return{};var r=(0,utils_1.fromSessionStorage)("variables"),t=r&&JSON.parse(r)||{},a={};return Object.entries(e.variables||{}).forEach((function(e){var r=e[0],i=e[1];a[r]=t[r]||i.default||""})),a}function updateVariablesStorage(e,r){var t,a=(0,utils_1.fromSessionStorage)("variables"),i=a&&JSON.parse(a)||{};(0,utils_1.toSessionStorage)("variables",JSON.stringify((0,tslib_1.__assign)((0,tslib_1.__assign)({},i),((t={})[e]=r,t))))}function unescapeQueryParams(e){return Object.entries(e).reduce((function(e,r){var t=r[0],a=r[1];return e[(0,utils_1.unescapeFormId)(t)]=a,e}),{})}function getFileNameFromHeaders(e){for(var r="filename=",t=0,a=Object.entries(e);t<a.length;t++){var i=a[t],n=i[0],s=i[1];if("content-disposition"===n.toLowerCase()){var o=s.split(";").find((function(e){return e.trim().startsWith(r)}));if(o)return o.split(r)[1]}}return""}exports.getServerWithVariables=getServerWithVariables,exports.getInitialServerWithVariables=getInitialServerWithVariables,exports.expandVariables=expandVariables,exports.expandDefaultServerVariables=expandDefaultServerVariables,exports.getDefaultOrStoredVariables=getDefaultOrStoredVariables,exports.updateVariablesStorage=updateVariablesStorage,exports.unescapeQueryParams=unescapeQueryParams,exports.getFileNameFromHeaders=getFileNameFromHeaders;var makeRequestInterceptor=function(e,r,t){var a=e.requestInterceptor,i=e.sendXUserAgentInTryIt,n=e.disableTryItRequestUrlEncoding;return function(e){var s,o,l,u;n&&(e=(0,tslib_1.__assign)((0,tslib_1.__assign)({},e),{url:decodeURIComponent(e.url)})),i&&(e.headers["X-User-Agent"]="Redocly Try it API console");var d=(null===(o=null===(s=null==r?void 0:r.requestValues)||void 0===s?void 0:s.header)||void 0===o?void 0:o.authorization)||(null===(u=null===(l=null==r?void 0:r.requestValues)||void 0===l?void 0:l.header)||void 0===u?void 0:u.Authorization);return!t&&d&&(e.headers.Authorization=d),a?a(e,r):e}};exports.makeRequestInterceptor=makeRequestInterceptor;var validateTokenEndpointMethod=function(e){if(!e)return!0;var r=Array.isArray(e)?e:[e];return!(r.length&&!r.includes("none")&&!r.includes("client_secret_basic"))};exports.validateTokenEndpointMethod=validateTokenEndpointMethod;var getOAuth2TokenEndpointAuthHeader=function(e){var r=e.authMethod,t=e.clientId,a=e.clientSecret;return"client_secret_basic"===r||Array.isArray(r)&&r.includes("client_secret_basic")?{Authorization:"Basic "+btoa(t+":"+a)}:{}};exports.getOAuth2TokenEndpointAuthHeader=getOAuth2TokenEndpointAuthHeader;
2
2
  //# sourceMappingURL=utils.js.map
@@ -4,12 +4,14 @@ export declare const hasAuthorizationUrl: (type: string, flow: OAuthFlowProps['f
4
4
  scopes: Record<string, string>;
5
5
  authorizationUrl: string;
6
6
  'x-defaultClientId'?: string | undefined;
7
+ 'x-tokenEndpointAuthMethod'?: string | undefined;
7
8
  } | {
8
9
  refreshUrl?: string | undefined;
9
10
  scopes: Record<string, string>;
10
11
  authorizationUrl: string;
11
12
  tokenUrl: string;
12
13
  'x-defaultClientId'?: string | undefined;
14
+ 'x-tokenEndpointAuthMethod'?: string | undefined;
13
15
  } | undefined;
14
16
  export declare const hasTokenUrl: (type: string, flow: OAuthFlowProps['flow']) => flow is {
15
17
  refreshUrl?: string | undefined;
@@ -21,10 +23,12 @@ export declare const hasTokenUrl: (type: string, flow: OAuthFlowProps['flow']) =
21
23
  scopes: Record<string, string>;
22
24
  tokenUrl: string;
23
25
  'x-defaultClientId'?: string | undefined;
26
+ 'x-tokenEndpointAuthMethod'?: string | undefined;
24
27
  } | {
25
28
  refreshUrl?: string | undefined;
26
29
  scopes: Record<string, string>;
27
30
  authorizationUrl: string;
28
31
  tokenUrl: string;
29
32
  'x-defaultClientId'?: string | undefined;
33
+ 'x-tokenEndpointAuthMethod'?: string | undefined;
30
34
  } | undefined;
@@ -280,6 +280,7 @@ export interface OpenAPISecurityScheme {
280
280
  scopes: Record<string, string>;
281
281
  authorizationUrl: string;
282
282
  'x-defaultClientId'?: string;
283
+ 'x-tokenEndpointAuthMethod'?: string;
283
284
  };
284
285
  password?: {
285
286
  refreshUrl?: string;
@@ -292,6 +293,7 @@ export interface OpenAPISecurityScheme {
292
293
  scopes: Record<string, string>;
293
294
  tokenUrl: string;
294
295
  'x-defaultClientId'?: string;
296
+ 'x-tokenEndpointAuthMethod'?: string;
295
297
  };
296
298
  authorizationCode?: {
297
299
  refreshUrl?: string;
@@ -299,6 +301,7 @@ export interface OpenAPISecurityScheme {
299
301
  authorizationUrl: string;
300
302
  tokenUrl: string;
301
303
  'x-defaultClientId'?: string;
304
+ 'x-tokenEndpointAuthMethod'?: string;
302
305
  };
303
306
  };
304
307
  openIdConnectUrl?: string;
@@ -1,10 +1,11 @@
1
+ import type { ExtendedOpenAPIOperation } from '../services';
1
2
  import type { FieldModel } from '../services/models';
2
3
  import type { OpenAPIParser } from '../services/OpenAPIParser';
3
- import type { OpenAPIEncoding, OpenAPIMediaType, OpenAPIOperation, OpenAPIParameter, OpenAPIParameterStyle, OpenAPISchema, OpenAPIServer, Referenced, OpenAPIResponse, OpenAPIRequestBody } from '../types';
4
+ import type { OpenAPIEncoding, OpenAPIMediaType, OpenAPIParameter, OpenAPIParameterStyle, OpenAPISchema, OpenAPIServer, Referenced, OpenAPIResponse, OpenAPIRequestBody } from '../types';
4
5
  export declare function isStatusCode(statusCode: string): boolean;
5
6
  export declare function getStatusCodeType(statusCode: string | number, defaultAsError?: boolean): string;
6
7
  export declare function isOperationName(key: string): boolean;
7
- export declare function getOperationSummary(operation: OpenAPIOperation): string;
8
+ export declare function getOperationSummary(operation: ExtendedOpenAPIOperation): string;
8
9
  export declare function detectType(schema: OpenAPISchema): string;
9
10
  export declare function isPrimitiveType(schema: OpenAPISchema, type?: string | string[] | undefined): boolean;
10
11
  export declare function isJsonLike(contentType: string): boolean;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getContentWithLegacyExamples=exports.pluralizeType=exports.extractExtensions=exports.isRedocExtension=exports.shortenHTTPVerb=exports.SCHEMA_DEFINITION_JSX_NAME=exports.SECURITY_DEFINITIONS_JSX_NAME=exports.SECURITY_DEFINITIONS_COMPONENT_NAME=exports.normalizeServers=exports.expandDefaultServerVariables=exports.mergeSimilarMediaTypes=exports.mergeParams=exports.sortByField=exports.sortByRequired=exports.humanizeConstraints=exports.humanizeNumberRange=exports.getDefinitionName=exports.isNamedDefinition=exports.langFromMime=exports.serializeParameterValue=exports.serializeParameterValueWithMime=exports.serializeQueryParameter=exports.urlFormEncodePayload=exports.isFormUrlEncoded=exports.isJsonLike=exports.isPrimitiveType=exports.detectType=exports.getOperationSummary=exports.isOperationName=exports.getStatusCodeType=exports.isStatusCode=void 0;var tslib_1=require("tslib"),path_1=require("path"),url_template_1=(0,tslib_1.__importDefault)(require("url-template")),types_1=require("../../../types"),dom_1=require("./dom"),helpers_1=require("./helpers");function isWildcardStatusCode(e){return"string"==typeof e&&/\dxx/i.test(e)}function isStatusCode(e){return"default"===e||(0,helpers_1.isNumeric)(e)||isWildcardStatusCode(e)}function getStatusCodeType(e,r){if(void 0===r&&(r=!1),"default"===e)return r?"error":"success";var t="string"==typeof e?parseInt(e,10):e;if(isWildcardStatusCode(e)&&(t*=100),t<100||t>599)throw new Error("invalid HTTP code");var i="success";return t>=300&&t<400?i="redirect":t>=400?i="error":t<200&&(i="info"),i}exports.isStatusCode=isStatusCode,exports.getStatusCodeType=getStatusCodeType;var operationNames={get:!0,post:!0,put:!0,head:!0,patch:!0,delete:!0,options:!0,$ref:!0};function isOperationName(e){return e in operationNames}function getOperationSummary(e){return e.summary||e.operationId||e.description&&e.description.substring(0,50)||"<no summary>"}exports.isOperationName=isOperationName,exports.getOperationSummary=getOperationSummary;var schemaKeywordTypes={multipleOf:"number",maximum:"number",exclusiveMaximum:"number",minimum:"number",exclusiveMinimum:"number",maxLength:"string",minLength:"string",pattern:"string",contentEncoding:"string",contentMediaType:"string",items:"array",maxItems:"array",minItems:"array",uniqueItems:"array",maxProperties:"object",minProperties:"object",required:"object",additionalProperties:"object",unevaluatedProperties:"object",patternProperties:"object",properties:"object"};function detectType(e){if(void 0!==e.type&&!Array.isArray(e.type))return e.type;for(var r=0,t=Object.keys(schemaKeywordTypes);r<t.length;r++){var i=t[r],a=schemaKeywordTypes[i];if(void 0!==e[i])return a}return"any"}function isPrimitiveType(e,r){if(void 0===r&&(r=e.type),e["x-circular-ref"])return!0;if(void 0!==e.oneOf||void 0!==e.anyOf)return!1;if(e.if&&e.then||e.if&&e.else)return!1;var t=!0,i=Array.isArray(r);return("object"===r||i&&(null==r?void 0:r.includes("object")))&&(t=void 0!==e.properties?0===Object.keys(e.properties).length:void 0===e.additionalProperties&&void 0===e.unevaluatedProperties&&void 0===e.patternProperties),!Array.isArray(e.items)&&!Array.isArray(e.prefixItems)&&(void 0!==e.items&&"boolean"!=typeof e.items&&("array"===r||i&&(null==r?void 0:r.includes("array")))&&(t=isPrimitiveType(e.items,e.items.type)),t)}function isJsonLike(e){return-1!==e.search(/json/i)}function isFormUrlEncoded(e){return e===types_1.MediaTypes.URL_ENCODED}function delimitedEncodeField(e,r,t){return Array.isArray(e)?e.map((function(e){return e.toString()})).join(t):"object"==typeof e?Object.keys(e).map((function(r){return""+r+t+e[r]})).join(t):r+"="+e.toString()}function deepObjectEncodeField(e,r){return Array.isArray(e)?(console.warn("deepObject style cannot be used with array value:"+e.toString()),""):"object"==typeof e?Object.keys(e).map((function(t){return e[t]?r+"["+t+"]="+e[t]:void 0})).filter(Boolean).join("&"):(console.warn("deepObject style cannot be used with non-object value:"+e.toString()),"")}function serializeFormValue(e,r,t){var i,a="__redoc_param_name__",n=r?"*":"";return url_template_1.default.parse("{?"+a+n+"}").expand((i={},i[a]=t,i)).substring(1).replace(/__redoc_param_name__/g,e)}function serializeSimpleValue(e,r){var t,i=e?"*":"",a="__redoc_param_name__",n=url_template_1.default.parse("{"+a+i+"}");return decodeURIComponent(n.expand(((t={})[a]=r,t)))}function urlFormEncodePayload(e,r){if(void 0===r&&(r={}),Array.isArray(e))throw new Error("Payload must have fields: "+e.toString());return Object.keys(e).map((function(t){var i=e[t],a=r[t]||{},n=a.style,o=void 0===n?"form":n,s=a.explode,u=void 0===s||s;switch(o){case"form":return serializeFormValue(t,u,i);case"spaceDelimited":return delimitedEncodeField(i,t,"%20");case"pipeDelimited":return delimitedEncodeField(i,t,"|");case"deepObject":return deepObjectEncodeField(i,t);default:return console.warn("Incorrect or unsupported encoding style: "+o),""}})).join("&")}function serializePathParameter(e,r,t,i){var a,n=t?"*":"",o="";"label"===r?o=".":"matrix"===r&&(o=";");var s="__redoc_param_name__";return url_template_1.default.parse("{"+o+s+n+"}").expand((a={},a[s]=i,a)).replace(/__redoc_param_name__/g,e)}function serializeQueryParameter(e,r,t,i){var a=function(a){switch(r){case"form":return serializeFormValue(e,t,a);case"spaceDelimited":return Array.isArray(a)?t?serializeFormValue(e,t,a):e+"="+a.join("%20"):(console.warn("The style spaceDelimited is only applicable to arrays"),"");case"pipeDelimited":return Array.isArray(a)?t?serializeFormValue(e,t,a):e+"="+a.join("|"):(console.warn("The style pipeDelimited is only applicable to arrays"),"");case"deepObject":return!t||Array.isArray(a)||"object"!=typeof a?(console.warn("The style deepObject is only applicable for objects with explode=true"),""):deepObjectEncodeField(a,e);case"simple":return serializeSimpleValue(t,i);default:return console.warn("Unexpected style for query: "+r),""}};return(0,helpers_1.isArrayOfObjects)(i)&&(i=(0,helpers_1.deleteEmptyArrayItem)(i).map((function(e){return a(e)}))),a(i)}function serializeHeaderParameter(e,r,t){return"simple"===e?serializeSimpleValue(r,t):(console.warn("Unexpected style for header: "+e),"")}function serializeCookieParameter(e,r,t,i){return"form"===r?serializeFormValue(e,t,i):(console.warn("Unexpected style for cookie: "+r),"")}function serializeParameterValueWithMime(e,r){return isJsonLike(r)?JSON.stringify(e):(console.warn("Parameter serialization as "+r+" is not supported"),"")}function serializeParameterValue(e,r){var t=e.name,i=e.style,a=e.explode,n=void 0!==a&&a,o=e.serializationMime;if(o)switch(e.in){case"path":case"header":return serializeParameterValueWithMime(r,o);case"cookie":case"query":return t+"="+serializeParameterValueWithMime(r,o);default:return console.warn("Unexpected parameter location: "+e.in),""}if(!i)return console.warn("Missing style attribute or content for parameter "+t),"";switch(e.in){case"path":return serializePathParameter(t,i,n,r);case"query":return serializeQueryParameter(t,i,n,r);case"header":return serializeHeaderParameter(i,n,r);case"cookie":return serializeCookieParameter(t,i,n,r);default:return console.warn("Unexpected parameter location: "+e.in),""}}function langFromMime(e){return-1!==e.search(/xml/i)?"xml":"clike"}exports.detectType=detectType,exports.isPrimitiveType=isPrimitiveType,exports.isJsonLike=isJsonLike,exports.isFormUrlEncoded=isFormUrlEncoded,exports.urlFormEncodePayload=urlFormEncodePayload,exports.serializeQueryParameter=serializeQueryParameter,exports.serializeParameterValueWithMime=serializeParameterValueWithMime,exports.serializeParameterValue=serializeParameterValue,exports.langFromMime=langFromMime;var DEFINITION_NAME_REGEX=/^#\/components\/(schemas|pathItems)\/([^/]+)$/;function isNamedDefinition(e){return DEFINITION_NAME_REGEX.test(e||"")}function getDefinitionName(e){var r;return null===(r=null==e?void 0:e.match(DEFINITION_NAME_REGEX))||void 0===r?void 0:r.pop()}function humanizeMultipleOfConstraint(e){if(void 0!==e){var r=e.toString(10);return/^0\.0*1$/.test(r)?"decimal places <= "+r.split(".")[1].length:"multiple of "+r}}function humanizeRangeConstraint(e,r,t){var i;return void 0!==r&&void 0!==t?i=r===t?"= "+r+" "+e:"[ "+r+" .. "+t+" ] "+e:void 0!==t?i="<= "+t+" "+e:void 0!==r&&(i=1===r?"non-empty":">= "+r+" "+e),i}function humanizeNumberRange(e){var r,t,i="number"==typeof e.exclusiveMinimum?Math.min(e.exclusiveMinimum,null!==(r=e.minimum)&&void 0!==r?r:1/0):e.minimum,a="number"==typeof e.exclusiveMaximum?Math.max(e.exclusiveMaximum,null!==(t=e.maximum)&&void 0!==t?t:-1/0):e.maximum,n="number"==typeof e.exclusiveMinimum||e.exclusiveMinimum,o="number"==typeof e.exclusiveMaximum||e.exclusiveMaximum;return void 0!==i&&void 0!==a?(n?"( ":"[ ")+i+" .. "+a+(o?" )":" ]"):void 0!==a?(o?"< ":"<= ")+a:void 0!==i?(n?"> ":">= ")+i:void 0}function humanizeConstraints(e){var r=[],t=humanizeRangeConstraint("characters",e.minLength,e.maxLength);void 0!==t&&r.push(t);var i=humanizeRangeConstraint("items",e.minItems,e.maxItems);void 0!==i&&r.push(i);var a=humanizeRangeConstraint("properties",e.minProperties,e.maxProperties);void 0!==a&&r.push(a);var n=humanizeMultipleOfConstraint(e.multipleOf);void 0!==n&&r.push(n);var o=humanizeNumberRange(e);return void 0!==o&&r.push(o),e.uniqueItems&&r.push("unique"),r}function sortByRequired(e,r){void 0===r&&(r=[]);var t=[],i=[],a=[];return e.forEach((function(e){e.required?r.includes(e.name)?i.push(e):a.push(e):t.push(e)})),i.sort((function(e,t){return r.indexOf(e.name)-r.indexOf(t.name)})),(0,tslib_1.__spreadArray)((0,tslib_1.__spreadArray)((0,tslib_1.__spreadArray)([],i,!0),a,!0),t,!0)}function sortByField(e,r){return(0,tslib_1.__spreadArray)([],e,!0).sort((function(e,t){return e[r].localeCompare(t[r])}))}function mergeParams(e,r,t){void 0===r&&(r=[]),void 0===t&&(t=[]);var i={};return t.forEach((function(r){r=e.deref(r).resolved,i[r.name+"_"+r.in]=!0})),(r=r.filter((function(r){return r=e.deref(r).resolved,!i[r.name+"_"+r.in]}))).concat(t)}function mergeSimilarMediaTypes(e){var r={};return Object.keys(e).forEach((function(t){var i=e[t],a=t.split(";")[0].trim();r[a]?r[a]=(0,tslib_1.__assign)((0,tslib_1.__assign)({},r[a]),i):r[a]=i})),r}function expandDefaultServerVariables(e,r){return void 0===r&&(r={}),e.replace(/(?:{)([\w-.]+)(?:})/g,(function(e,t){return r[t]&&r[t].default||e}))}function normalizeServers(e,r){var t=void 0===e?(0,helpers_1.removeQueryStringAndHash)(function(){if(!dom_1.IS_BROWSER)return"";var e=window.location.href;return e.endsWith(".html")?(0,path_1.dirname)(e):e}()):(0,path_1.dirname)(e);return 0===r.length&&(r=[{url:"/"}]),r.map((function(e){return(0,tslib_1.__assign)((0,tslib_1.__assign)({},e),{url:(r=e.url,(0,helpers_1.resolveUrl)(t,r)),description:e.description||""});var r}))}exports.isNamedDefinition=isNamedDefinition,exports.getDefinitionName=getDefinitionName,exports.humanizeNumberRange=humanizeNumberRange,exports.humanizeConstraints=humanizeConstraints,exports.sortByRequired=sortByRequired,exports.sortByField=sortByField,exports.mergeParams=mergeParams,exports.mergeSimilarMediaTypes=mergeSimilarMediaTypes,exports.expandDefaultServerVariables=expandDefaultServerVariables,exports.normalizeServers=normalizeServers,exports.SECURITY_DEFINITIONS_COMPONENT_NAME="security-definitions",exports.SECURITY_DEFINITIONS_JSX_NAME="SecurityDefinitions",exports.SCHEMA_DEFINITION_JSX_NAME="SchemaDefinition";var shortenHTTPVerb=function(e){return{delete:"del",options:"opts"}[e]||e};function isRedocExtension(e){return e in{"x-circular-ref":!0,"x-parentRefs":!0,"x-refsStack":!0,"x-code-samples":!0,"x-codeSamples":!0,"x-displayName":!0,"x-examples":!0,"x-ignoredHeaderParameters":!0,"x-logo":!0,"x-nullable":!0,"x-servers":!0,"x-tagGroups":!0,"x-traitTag":!0,"x-additionalPropertiesName":!0,"x-explicitMappingOnly":!0,"x-enumDescriptions":!0,"x-hideTryItPanel":!0}}function extractExtensions(e,r){return Object.keys(e).filter((function(e){return!0===r?e.startsWith("x-")&&!isRedocExtension(e):e.startsWith("x-")&&r.indexOf(e)>-1})).reduce((function(r,t){return r[t]=e[t],r}),{})}function pluralizeType(e){return e.split(" or ").map((function(e){return e.replace(/^(string|object|number|integer|array|boolean)s?( ?.*)/,"$1s$2")})).join(" or ")}function getContentWithLegacyExamples(e){var r=e.content,t=e["x-examples"],i=e["x-example"];if(t){r=(0,tslib_1.__assign)({},r);for(var a=0,n=Object.keys(t);a<n.length;a++){var o=t[l=n[a]];r[l]=(0,tslib_1.__assign)((0,tslib_1.__assign)({},r[l]),{examples:o})}}else if(i){r=(0,tslib_1.__assign)({},r);for(var s=0,u=Object.keys(i);s<u.length;s++){var l,m=i[l=u[s]];r[l]=(0,tslib_1.__assign)((0,tslib_1.__assign)({},r[l]),{example:m})}}return r}exports.shortenHTTPVerb=shortenHTTPVerb,exports.isRedocExtension=isRedocExtension,exports.extractExtensions=extractExtensions,exports.pluralizeType=pluralizeType,exports.getContentWithLegacyExamples=getContentWithLegacyExamples;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getContentWithLegacyExamples=exports.pluralizeType=exports.extractExtensions=exports.isRedocExtension=exports.shortenHTTPVerb=exports.SCHEMA_DEFINITION_JSX_NAME=exports.SECURITY_DEFINITIONS_JSX_NAME=exports.SECURITY_DEFINITIONS_COMPONENT_NAME=exports.normalizeServers=exports.expandDefaultServerVariables=exports.mergeSimilarMediaTypes=exports.mergeParams=exports.sortByField=exports.sortByRequired=exports.humanizeConstraints=exports.humanizeNumberRange=exports.getDefinitionName=exports.isNamedDefinition=exports.langFromMime=exports.serializeParameterValue=exports.serializeParameterValueWithMime=exports.serializeQueryParameter=exports.urlFormEncodePayload=exports.isFormUrlEncoded=exports.isJsonLike=exports.isPrimitiveType=exports.detectType=exports.getOperationSummary=exports.isOperationName=exports.getStatusCodeType=exports.isStatusCode=void 0;var tslib_1=require("tslib"),path_1=require("path"),url_template_1=(0,tslib_1.__importDefault)(require("url-template")),types_1=require("../../../types"),dom_1=require("./dom"),helpers_1=require("./helpers");function isWildcardStatusCode(e){return"string"==typeof e&&/\dxx/i.test(e)}function isStatusCode(e){return"default"===e||(0,helpers_1.isNumeric)(e)||isWildcardStatusCode(e)}function getStatusCodeType(e,r){if(void 0===r&&(r=!1),"default"===e)return r?"error":"success";var t="string"==typeof e?parseInt(e,10):e;if(isWildcardStatusCode(e)&&(t*=100),t<100||t>599)throw new Error("invalid HTTP code");var i="success";return t>=300&&t<400?i="redirect":t>=400?i="error":t<200&&(i="info"),i}exports.isStatusCode=isStatusCode,exports.getStatusCodeType=getStatusCodeType;var operationNames={get:!0,post:!0,put:!0,head:!0,patch:!0,delete:!0,options:!0,$ref:!0};function isOperationName(e){return e in operationNames}function getOperationSummary(e){return e.summary||e.operationId||e.description&&e.description.substring(0,50)||e.pathName||"<no summary>"}exports.isOperationName=isOperationName,exports.getOperationSummary=getOperationSummary;var schemaKeywordTypes={multipleOf:"number",maximum:"number",exclusiveMaximum:"number",minimum:"number",exclusiveMinimum:"number",maxLength:"string",minLength:"string",pattern:"string",contentEncoding:"string",contentMediaType:"string",items:"array",maxItems:"array",minItems:"array",uniqueItems:"array",maxProperties:"object",minProperties:"object",required:"object",additionalProperties:"object",unevaluatedProperties:"object",patternProperties:"object",properties:"object"};function detectType(e){if(void 0!==e.type&&!Array.isArray(e.type))return e.type;for(var r=0,t=Object.keys(schemaKeywordTypes);r<t.length;r++){var i=t[r],a=schemaKeywordTypes[i];if(void 0!==e[i])return a}return"any"}function isPrimitiveType(e,r){if(void 0===r&&(r=e.type),e["x-circular-ref"])return!0;if(void 0!==e.oneOf||void 0!==e.anyOf)return!1;if(e.if&&e.then||e.if&&e.else)return!1;var t=!0,i=Array.isArray(r);return("object"===r||i&&(null==r?void 0:r.includes("object")))&&(t=void 0!==e.properties?0===Object.keys(e.properties).length:void 0===e.additionalProperties&&void 0===e.unevaluatedProperties&&void 0===e.patternProperties),!Array.isArray(e.items)&&!Array.isArray(e.prefixItems)&&(void 0!==e.items&&"boolean"!=typeof e.items&&("array"===r||i&&(null==r?void 0:r.includes("array")))&&(t=isPrimitiveType(e.items,e.items.type)),t)}function isJsonLike(e){return-1!==e.search(/json/i)}function isFormUrlEncoded(e){return e===types_1.MediaTypes.URL_ENCODED}function delimitedEncodeField(e,r,t){return Array.isArray(e)?e.map((function(e){return e.toString()})).join(t):"object"==typeof e?Object.keys(e).map((function(r){return""+r+t+e[r]})).join(t):r+"="+e.toString()}function deepObjectEncodeField(e,r){return Array.isArray(e)?(console.warn("deepObject style cannot be used with array value:"+e.toString()),""):"object"==typeof e?Object.keys(e).map((function(t){return e[t]?r+"["+t+"]="+e[t]:void 0})).filter(Boolean).join("&"):(console.warn("deepObject style cannot be used with non-object value:"+e.toString()),"")}function serializeFormValue(e,r,t){var i,a="__redoc_param_name__",n=r?"*":"";return url_template_1.default.parse("{?"+a+n+"}").expand((i={},i[a]=t,i)).substring(1).replace(/__redoc_param_name__/g,e)}function serializeSimpleValue(e,r){var t,i=e?"*":"",a="__redoc_param_name__",n=url_template_1.default.parse("{"+a+i+"}");return decodeURIComponent(n.expand(((t={})[a]=r,t)))}function urlFormEncodePayload(e,r){if(void 0===r&&(r={}),Array.isArray(e))throw new Error("Payload must have fields: "+e.toString());return Object.keys(e).map((function(t){var i=e[t],a=r[t]||{},n=a.style,o=void 0===n?"form":n,s=a.explode,u=void 0===s||s;switch(o){case"form":return serializeFormValue(t,u,i);case"spaceDelimited":return delimitedEncodeField(i,t,"%20");case"pipeDelimited":return delimitedEncodeField(i,t,"|");case"deepObject":return deepObjectEncodeField(i,t);default:return console.warn("Incorrect or unsupported encoding style: "+o),""}})).join("&")}function serializePathParameter(e,r,t,i){var a,n=t?"*":"",o="";"label"===r?o=".":"matrix"===r&&(o=";");var s="__redoc_param_name__";return url_template_1.default.parse("{"+o+s+n+"}").expand((a={},a[s]=i,a)).replace(/__redoc_param_name__/g,e)}function serializeQueryParameter(e,r,t,i){var a=function(a){switch(r){case"form":return serializeFormValue(e,t,a);case"spaceDelimited":return Array.isArray(a)?t?serializeFormValue(e,t,a):e+"="+a.join("%20"):(console.warn("The style spaceDelimited is only applicable to arrays"),"");case"pipeDelimited":return Array.isArray(a)?t?serializeFormValue(e,t,a):e+"="+a.join("|"):(console.warn("The style pipeDelimited is only applicable to arrays"),"");case"deepObject":return!t||Array.isArray(a)||"object"!=typeof a?(console.warn("The style deepObject is only applicable for objects with explode=true"),""):deepObjectEncodeField(a,e);case"simple":return serializeSimpleValue(t,i);default:return console.warn("Unexpected style for query: "+r),""}};return(0,helpers_1.isArrayOfObjects)(i)&&(i=(0,helpers_1.deleteEmptyArrayItem)(i).map((function(e){return a(e)}))),a(i)}function serializeHeaderParameter(e,r,t){return"simple"===e?serializeSimpleValue(r,t):(console.warn("Unexpected style for header: "+e),"")}function serializeCookieParameter(e,r,t,i){return"form"===r?serializeFormValue(e,t,i):(console.warn("Unexpected style for cookie: "+r),"")}function serializeParameterValueWithMime(e,r){return isJsonLike(r)?JSON.stringify(e):(console.warn("Parameter serialization as "+r+" is not supported"),"")}function serializeParameterValue(e,r){var t=e.name,i=e.style,a=e.explode,n=void 0!==a&&a,o=e.serializationMime;if(o)switch(e.in){case"path":case"header":return serializeParameterValueWithMime(r,o);case"cookie":case"query":return t+"="+serializeParameterValueWithMime(r,o);default:return console.warn("Unexpected parameter location: "+e.in),""}if(!i)return console.warn("Missing style attribute or content for parameter "+t),"";switch(e.in){case"path":return serializePathParameter(t,i,n,r);case"query":return serializeQueryParameter(t,i,n,r);case"header":return serializeHeaderParameter(i,n,r);case"cookie":return serializeCookieParameter(t,i,n,r);default:return console.warn("Unexpected parameter location: "+e.in),""}}function langFromMime(e){return-1!==e.search(/xml/i)?"xml":"clike"}exports.detectType=detectType,exports.isPrimitiveType=isPrimitiveType,exports.isJsonLike=isJsonLike,exports.isFormUrlEncoded=isFormUrlEncoded,exports.urlFormEncodePayload=urlFormEncodePayload,exports.serializeQueryParameter=serializeQueryParameter,exports.serializeParameterValueWithMime=serializeParameterValueWithMime,exports.serializeParameterValue=serializeParameterValue,exports.langFromMime=langFromMime;var DEFINITION_NAME_REGEX=/^#\/components\/(schemas|pathItems)\/([^/]+)$/;function isNamedDefinition(e){return DEFINITION_NAME_REGEX.test(e||"")}function getDefinitionName(e){var r;return null===(r=null==e?void 0:e.match(DEFINITION_NAME_REGEX))||void 0===r?void 0:r.pop()}function humanizeMultipleOfConstraint(e){if(void 0!==e){var r=e.toString(10);return/^0\.0*1$/.test(r)?"decimal places <= "+r.split(".")[1].length:"multiple of "+r}}function humanizeRangeConstraint(e,r,t){var i;return void 0!==r&&void 0!==t?i=r===t?"= "+r+" "+e:"[ "+r+" .. "+t+" ] "+e:void 0!==t?i="<= "+t+" "+e:void 0!==r&&(i=1===r?"non-empty":">= "+r+" "+e),i}function humanizeNumberRange(e){var r,t,i="number"==typeof e.exclusiveMinimum?Math.min(e.exclusiveMinimum,null!==(r=e.minimum)&&void 0!==r?r:1/0):e.minimum,a="number"==typeof e.exclusiveMaximum?Math.max(e.exclusiveMaximum,null!==(t=e.maximum)&&void 0!==t?t:-1/0):e.maximum,n="number"==typeof e.exclusiveMinimum||e.exclusiveMinimum,o="number"==typeof e.exclusiveMaximum||e.exclusiveMaximum;return void 0!==i&&void 0!==a?(n?"( ":"[ ")+i+" .. "+a+(o?" )":" ]"):void 0!==a?(o?"< ":"<= ")+a:void 0!==i?(n?"> ":">= ")+i:void 0}function humanizeConstraints(e){var r=[],t=humanizeRangeConstraint("characters",e.minLength,e.maxLength);void 0!==t&&r.push(t);var i=humanizeRangeConstraint("items",e.minItems,e.maxItems);void 0!==i&&r.push(i);var a=humanizeRangeConstraint("properties",e.minProperties,e.maxProperties);void 0!==a&&r.push(a);var n=humanizeMultipleOfConstraint(e.multipleOf);void 0!==n&&r.push(n);var o=humanizeNumberRange(e);return void 0!==o&&r.push(o),e.uniqueItems&&r.push("unique"),r}function sortByRequired(e,r){void 0===r&&(r=[]);var t=[],i=[],a=[];return e.forEach((function(e){e.required?r.includes(e.name)?i.push(e):a.push(e):t.push(e)})),i.sort((function(e,t){return r.indexOf(e.name)-r.indexOf(t.name)})),(0,tslib_1.__spreadArray)((0,tslib_1.__spreadArray)((0,tslib_1.__spreadArray)([],i,!0),a,!0),t,!0)}function sortByField(e,r){return(0,tslib_1.__spreadArray)([],e,!0).sort((function(e,t){return e[r].localeCompare(t[r])}))}function mergeParams(e,r,t){void 0===r&&(r=[]),void 0===t&&(t=[]);var i={};return t.forEach((function(r){r=e.deref(r).resolved,i[r.name+"_"+r.in]=!0})),(r=r.filter((function(r){return r=e.deref(r).resolved,!i[r.name+"_"+r.in]}))).concat(t)}function mergeSimilarMediaTypes(e){var r={};return Object.keys(e).forEach((function(t){var i=e[t],a=t.split(";")[0].trim();r[a]?r[a]=(0,tslib_1.__assign)((0,tslib_1.__assign)({},r[a]),i):r[a]=i})),r}function expandDefaultServerVariables(e,r){return void 0===r&&(r={}),e.replace(/(?:{)([\w-.]+)(?:})/g,(function(e,t){return r[t]&&r[t].default||e}))}function normalizeServers(e,r){var t=void 0===e?(0,helpers_1.removeQueryStringAndHash)(function(){if(!dom_1.IS_BROWSER)return"";var e=window.location.href;return e.endsWith(".html")?(0,path_1.dirname)(e):e}()):(0,path_1.dirname)(e);return 0===r.length&&(r=[{url:"/"}]),r.map((function(e){return(0,tslib_1.__assign)((0,tslib_1.__assign)({},e),{url:(r=e.url,(0,helpers_1.resolveUrl)(t,r)),description:e.description||""});var r}))}exports.isNamedDefinition=isNamedDefinition,exports.getDefinitionName=getDefinitionName,exports.humanizeNumberRange=humanizeNumberRange,exports.humanizeConstraints=humanizeConstraints,exports.sortByRequired=sortByRequired,exports.sortByField=sortByField,exports.mergeParams=mergeParams,exports.mergeSimilarMediaTypes=mergeSimilarMediaTypes,exports.expandDefaultServerVariables=expandDefaultServerVariables,exports.normalizeServers=normalizeServers,exports.SECURITY_DEFINITIONS_COMPONENT_NAME="security-definitions",exports.SECURITY_DEFINITIONS_JSX_NAME="SecurityDefinitions",exports.SCHEMA_DEFINITION_JSX_NAME="SchemaDefinition";var shortenHTTPVerb=function(e){return{delete:"del",options:"opts"}[e]||e};function isRedocExtension(e){return e in{"x-circular-ref":!0,"x-parentRefs":!0,"x-refsStack":!0,"x-code-samples":!0,"x-codeSamples":!0,"x-displayName":!0,"x-examples":!0,"x-ignoredHeaderParameters":!0,"x-logo":!0,"x-nullable":!0,"x-servers":!0,"x-tagGroups":!0,"x-traitTag":!0,"x-additionalPropertiesName":!0,"x-explicitMappingOnly":!0,"x-enumDescriptions":!0,"x-hideTryItPanel":!0,"x-tokenEndpointAuthMethod":!0}}function extractExtensions(e,r){return Object.keys(e).filter((function(e){return!0===r?e.startsWith("x-")&&!isRedocExtension(e):e.startsWith("x-")&&r.indexOf(e)>-1})).reduce((function(r,t){return r[t]=e[t],r}),{})}function pluralizeType(e){return e.split(" or ").map((function(e){return e.replace(/^(string|object|number|integer|array|boolean)s?( ?.*)/,"$1s$2")})).join(" or ")}function getContentWithLegacyExamples(e){var r=e.content,t=e["x-examples"],i=e["x-example"];if(t){r=(0,tslib_1.__assign)({},r);for(var a=0,n=Object.keys(t);a<n.length;a++){var o=t[l=n[a]];r[l]=(0,tslib_1.__assign)((0,tslib_1.__assign)({},r[l]),{examples:o})}}else if(i){r=(0,tslib_1.__assign)({},r);for(var s=0,u=Object.keys(i);s<u.length;s++){var l,p=i[l=u[s]];r[l]=(0,tslib_1.__assign)((0,tslib_1.__assign)({},r[l]),{example:p})}}return r}exports.shortenHTTPVerb=shortenHTTPVerb,exports.isRedocExtension=isRedocExtension,exports.extractExtensions=extractExtensions,exports.pluralizeType=pluralizeType,exports.getContentWithLegacyExamples=getContentWithLegacyExamples;
2
2
  //# sourceMappingURL=openapi.js.map
@@ -9,7 +9,7 @@ export declare class OAuth2 {
9
9
  successCallback: OAuth2SuccessCallback;
10
10
  errorCallback: OAuth2ErrorCallback;
11
11
  }): void;
12
- static authorizeAuthorizationCode({ authorizationUrl, tokenUrl, clientId, clientSecret, codeVerifier, codeChallenge, scopes, extraParams, routingBasePath, redirectUri, successCallback, errorCallback, }: {
12
+ static authorizeAuthorizationCode({ authorizationUrl, tokenUrl, clientId, clientSecret, codeVerifier, codeChallenge, scopes, extraParams, extraHeaders, routingBasePath, redirectUri, successCallback, errorCallback, }: {
13
13
  authorizationUrl: string;
14
14
  tokenUrl: string;
15
15
  clientId: string;
@@ -20,16 +20,18 @@ export declare class OAuth2 {
20
20
  redirectUri?: string | null;
21
21
  routingBasePath?: string;
22
22
  extraParams?: Record<string, string>;
23
+ extraHeaders?: Record<string, string>;
23
24
  successCallback: OAuth2SuccessCallback;
24
25
  errorCallback: OAuth2ErrorCallback;
25
26
  }): void;
26
27
  static clearRedirectData(flow: 'implicit' | 'authorizationCode'): void;
27
- static authorizeClientCredentials({ tokenUrl, clientId, clientSecret, scopes, extraParams, successCallback, errorCallback, }: {
28
+ static authorizeClientCredentials({ tokenUrl, clientId, clientSecret, scopes, extraParams, extraHeaders, successCallback, errorCallback, }: {
28
29
  tokenUrl: string;
29
30
  clientId: string;
30
31
  clientSecret: string;
31
32
  scopes?: string[];
32
33
  extraParams?: Record<string, string>;
34
+ extraHeaders?: Record<string, string>;
33
35
  successCallback: OAuth2SuccessCallback;
34
36
  errorCallback: OAuth2ErrorCallback;
35
37
  }): Promise<void>;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deriveCodeChallenge=exports.oauth2Instance=exports.OAuth2=void 0;var tslib_1=require("tslib"),qs=(0,tslib_1.__importStar)(require("querystring")),utils_1=require("./utils"),DEFAULT_OAUTH2_REDIRECT_PAGE="/oauth2-redirect.html",OAuth2=function(){function e(){}return Object.defineProperty(e,"authorizeImplicit",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var r=t.authorizationUrl,a=t.clientId,i=t.scopes,n=t.extraParams,s=void 0===n?{}:n,o=t.routingBasePath,c=t.redirectUri,l=t.successCallback,u=t.errorCallback,d=(0,utils_1.encodeState)({date:(new Date).toString()}),h=new URL(r),_="/"===o?"":o,b=""+window.location.origin+_+DEFAULT_OAUTH2_REDIRECT_PAGE;for(var p in h.searchParams.set("client_id",a),h.searchParams.set("redirect_uri",c||b),h.searchParams.set("response_type","token"),h.searchParams.set("state",d),Array.isArray(i)&&h.searchParams.set("scope",i.join(" ")),s)h.searchParams.set(p,s[p]);window.redirectOAuth2={flow:"implicit",data:{authorizationUrl:r,clientId:a,scopes:i},state:d,successCallback:function(t){l(t),e.clearRedirectData("implicit")},errorCallback:function(t){u(t),e.clearRedirectData("implicit")}},window.open(h.toString())}}),Object.defineProperty(e,"authorizeAuthorizationCode",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var r=this,a=t.authorizationUrl,i=t.tokenUrl,n=t.clientId,s=t.clientSecret,o=t.codeVerifier,c=t.codeChallenge,l=t.scopes,u=t.extraParams,d=void 0===u?{}:u,h=t.routingBasePath,_=t.redirectUri,b=t.successCallback,p=t.errorCallback,f=new URL(a),w="/"===h?"":h,v=""+window.location.origin+w+DEFAULT_OAUTH2_REDIRECT_PAGE,C=(0,utils_1.encodeState)({date:(new Date).toString()});for(var g in f.searchParams.set("client_id",n),f.searchParams.set("redirect_uri",_||v),f.searchParams.set("response_type","code"),f.searchParams.set("state",C),Array.isArray(l)&&f.searchParams.set("scope",l.join(" ")),c&&(f.searchParams.set("code_challenge",c),f.searchParams.set("code_challenge_method","S256")),d)f.searchParams.set(g,d[g]);window.redirectOAuth2={flow:"authorizationCode",data:{authorizationUrl:a,clientId:n,scopes:l},state:C,successCallback:function(t){var a=t.auth_code;return(0,tslib_1.__awaiter)(r,void 0,void 0,(function(){var t;return(0,tslib_1.__generator)(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),[4,fetch(i,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},body:qs.stringify((0,tslib_1.__assign)((0,tslib_1.__assign)((0,tslib_1.__assign)({client_id:n,client_secret:s},o&&{code_verifier:o}),{code:a,grant_type:"authorization_code",redirect_uri:_||v}),d))})];case 1:return[4,handleResponseCallback(r.sent(),b,p)];case 2:return r.sent(),[3,4];case 3:return t=r.sent(),p(t),[3,4];case 4:return e.clearRedirectData("authorizationCode"),[2]}}))}))},errorCallback:function(t){p(t),e.clearRedirectData("authorizationCode")}},window.open(f.toString())}}),Object.defineProperty(e,"clearRedirectData",{enumerable:!1,configurable:!0,writable:!0,value:function(e){window.redirectOAuth2={flow:e,data:{authorizationUrl:"",clientId:"",scopes:[]},state:"",successCallback:function(){},errorCallback:function(){}}}}),Object.defineProperty(e,"authorizeClientCredentials",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=e.tokenUrl,r=e.clientId,a=e.clientSecret,i=e.scopes,n=void 0===i?[]:i,s=e.extraParams,o=void 0===s?{}:s,c=e.successCallback,l=e.errorCallback;return(0,tslib_1.__awaiter)(this,void 0,void 0,(function(){var e;return(0,tslib_1.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,3,,4]),[4,fetch(t,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},body:qs.stringify((0,tslib_1.__assign)({client_id:r,client_secret:a,grant_type:"client_credentials",scope:Array.isArray(n)?n.join(" "):void 0},o))})];case 1:return[4,handleResponseCallback(i.sent(),c,l)];case 2:return i.sent(),[3,4];case 3:return e=i.sent(),l(e),[3,4];case 4:return[2]}}))}))}}),e}();function handleResponseCallback(e,t,r){return(0,tslib_1.__awaiter)(this,void 0,void 0,(function(){var a,i,n,s,o,c;return(0,tslib_1.__generator)(this,(function(l){switch(l.label){case 0:return e.ok?[4,e.json()]:[3,2];case 1:return a=l.sent(),t(a),[3,7];case 2:return i=r,n=Error.bind,(e.headers.get("Content-Type")||"").indexOf("json")>-1?(c=(o=JSON).stringify,[4,e.json()]):[3,4];case 3:return s=c.apply(o,[l.sent()]),[3,6];case 4:return[4,e.text()];case 5:s=l.sent(),l.label=6;case 6:i.apply(void 0,[new(n.apply(Error,[void 0,s]))]),l.label=7;case 7:return[2]}}))}))}function deriveCodeChallenge(e){return(0,tslib_1.__awaiter)(this,void 0,void 0,(function(){var t;return(0,tslib_1.__generator)(this,(function(r){switch(r.label){case 0:return t=utils_1.base64UrlEncode,[4,(0,utils_1.sha256)(e)];case 1:return[2,t.apply(void 0,[r.sent()])]}}))}))}exports.OAuth2=OAuth2,exports.oauth2Instance=new OAuth2,exports.deriveCodeChallenge=deriveCodeChallenge;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deriveCodeChallenge=exports.oauth2Instance=exports.OAuth2=void 0;var tslib_1=require("tslib"),qs=(0,tslib_1.__importStar)(require("querystring")),utils_1=require("./utils"),DEFAULT_OAUTH2_REDIRECT_PAGE="/oauth2-redirect.html",OAuth2=function(){function e(){}return Object.defineProperty(e,"authorizeImplicit",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var r=t.authorizationUrl,a=t.clientId,i=t.scopes,s=t.extraParams,n=void 0===s?{}:s,o=t.routingBasePath,c=t.redirectUri,l=t.successCallback,u=t.errorCallback,d=(0,utils_1.encodeState)({date:(new Date).toString()}),_=new URL(r),h="/"===o?"":o,b=""+window.location.origin+h+DEFAULT_OAUTH2_REDIRECT_PAGE;for(var p in _.searchParams.set("client_id",a),_.searchParams.set("redirect_uri",c||b),_.searchParams.set("response_type","token"),_.searchParams.set("state",d),Array.isArray(i)&&_.searchParams.set("scope",i.join(" ")),n)_.searchParams.set(p,n[p]);window.redirectOAuth2={flow:"implicit",data:{authorizationUrl:r,clientId:a,scopes:i},state:d,successCallback:function(t){l(t),e.clearRedirectData("implicit")},errorCallback:function(t){u(t),e.clearRedirectData("implicit")}},window.open(_.toString())}}),Object.defineProperty(e,"authorizeAuthorizationCode",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var r=this,a=t.authorizationUrl,i=t.tokenUrl,s=t.clientId,n=t.clientSecret,o=t.codeVerifier,c=t.codeChallenge,l=t.scopes,u=t.extraParams,d=void 0===u?{}:u,_=t.extraHeaders,h=void 0===_?{}:_,b=t.routingBasePath,p=t.redirectUri,f=t.successCallback,w=t.errorCallback,v=new URL(a),g="/"===b?"":b,C=""+window.location.origin+g+DEFAULT_OAUTH2_REDIRECT_PAGE,m=(0,utils_1.encodeState)({date:(new Date).toString()});for(var y in v.searchParams.set("client_id",s),v.searchParams.set("redirect_uri",p||C),v.searchParams.set("response_type","code"),v.searchParams.set("state",m),Array.isArray(l)&&v.searchParams.set("scope",l.join(" ")),c&&(v.searchParams.set("code_challenge",c),v.searchParams.set("code_challenge_method","S256")),d)v.searchParams.set(y,d[y]);window.redirectOAuth2={flow:"authorizationCode",data:{authorizationUrl:a,clientId:s,scopes:l},state:m,successCallback:function(t){var a=t.auth_code;return(0,tslib_1.__awaiter)(r,void 0,void 0,(function(){var t;return(0,tslib_1.__generator)(this,(function(r){switch(r.label){case 0:return r.trys.push([0,3,,4]),[4,fetch(i,{method:"POST",headers:(0,tslib_1.__assign)({"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},h),body:qs.stringify((0,tslib_1.__assign)((0,tslib_1.__assign)((0,tslib_1.__assign)({client_id:s,client_secret:n},o&&{code_verifier:o}),{code:a,grant_type:"authorization_code",redirect_uri:p||C}),d))})];case 1:return[4,handleResponseCallback(r.sent(),f,w)];case 2:return r.sent(),[3,4];case 3:return t=r.sent(),w(t),[3,4];case 4:return e.clearRedirectData("authorizationCode"),[2]}}))}))},errorCallback:function(t){w(t),e.clearRedirectData("authorizationCode")}},window.open(v.toString())}}),Object.defineProperty(e,"clearRedirectData",{enumerable:!1,configurable:!0,writable:!0,value:function(e){window.redirectOAuth2={flow:e,data:{authorizationUrl:"",clientId:"",scopes:[]},state:"",successCallback:function(){},errorCallback:function(){}}}}),Object.defineProperty(e,"authorizeClientCredentials",{enumerable:!1,configurable:!0,writable:!0,value:function(e){var t=e.tokenUrl,r=e.clientId,a=e.clientSecret,i=e.scopes,s=void 0===i?[]:i,n=e.extraParams,o=void 0===n?{}:n,c=e.extraHeaders,l=void 0===c?{}:c,u=e.successCallback,d=e.errorCallback;return(0,tslib_1.__awaiter)(this,void 0,void 0,(function(){var e;return(0,tslib_1.__generator)(this,(function(i){switch(i.label){case 0:return i.trys.push([0,3,,4]),[4,fetch(t,{method:"POST",headers:(0,tslib_1.__assign)({"Content-Type":"application/x-www-form-urlencoded;charset=UTF-8"},l),body:qs.stringify((0,tslib_1.__assign)({client_id:r,client_secret:a,grant_type:"client_credentials",scope:Array.isArray(s)?s.join(" "):void 0},o))})];case 1:return[4,handleResponseCallback(i.sent(),u,d)];case 2:return i.sent(),[3,4];case 3:return e=i.sent(),d(e),[3,4];case 4:return[2]}}))}))}}),e}();function handleResponseCallback(e,t,r){return(0,tslib_1.__awaiter)(this,void 0,void 0,(function(){var a,i,s,n,o,c;return(0,tslib_1.__generator)(this,(function(l){switch(l.label){case 0:return e.ok?[4,e.json()]:[3,2];case 1:return a=l.sent(),t(a),[3,7];case 2:return i=r,s=Error.bind,(e.headers.get("Content-Type")||"").indexOf("json")>-1?(c=(o=JSON).stringify,[4,e.json()]):[3,4];case 3:return n=c.apply(o,[l.sent()]),[3,6];case 4:return[4,e.text()];case 5:n=l.sent(),l.label=6;case 6:i.apply(void 0,[new(s.apply(Error,[void 0,n]))]),l.label=7;case 7:return[2]}}))}))}function deriveCodeChallenge(e){return(0,tslib_1.__awaiter)(this,void 0,void 0,(function(){var t;return(0,tslib_1.__generator)(this,(function(r){switch(r.label){case 0:return t=utils_1.base64UrlEncode,[4,(0,utils_1.sha256)(e)];case 1:return[2,t.apply(void 0,[r.sent()])]}}))}))}exports.OAuth2=OAuth2,exports.oauth2Instance=new OAuth2,exports.deriveCodeChallenge=deriveCodeChallenge;
2
2
  //# sourceMappingURL=OAuth2.js.map
@@ -1,2 +1,2 @@
1
- import{__assign,__extends}from"tslib";import*as React from"react";import{fromSessionStorage,getSecurityDetailsOptions,toSessionStorage,escapeFormId}from"../../utils";import{FormDropdown,FormTextField}from"../common/TextField";import{FormControl,FormLabel,FormWrapper}from"../common/form";import{l}from"../../redoc-lib/src/services/Labels";import{Dropdown}from"../common/Dropdown";import{OpenIDConnect}from"./OpenIDConnect";import{OAuth2Flow}from"./OAuth2Flow";import OAuth2TokenInput from"./OAuth2TokenInput";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}),toSessionStorage("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=fromSessionStorage("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(FormLabel,null," Security scheme: "),React.createElement(Dropdown,{variant:"dark",fullWidth:!0,options:a,value:a[r].value,onChange:this.handleSchemeChange}))||null,o[r].schemes.map((function(r){var o,a,n,i,u,s,c,m=escapeFormId(r.id);if("apiKey"===r.type){var d=getSecurityDetailsOptions(m,""),p={field:"auth."+m,fullWidth:!0,initialValue:fromCookie(r)||fromSessionStorage("auth."+m)||(null==t?void 0:t[m]),initValue:fromCookie(r)||fromSessionStorage("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:fromSessionStorage("auth."+m+".username")||(null===(o=null==t?void 0:t[m])||void 0===o?void 0:o.username),initValue:fromSessionStorage("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",initialValue:fromSessionStorage("auth."+m+".password")||(null===(n=null==t?void 0:t[m])||void 0===n?void 0:n.password)||"",validateOnBlur:!0,validateOnChange:!0})))}if("bearer"===r.scheme){var h=getSecurityDetailsOptions(m,"");p={field:"auth."+m,fullWidth:!0,initialValue:fromSessionStorage("auth."+m)||(null==t?void 0:t[m]),initValue:fromSessionStorage("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===(i=null==r?void 0:r.flows)||void 0===i?void 0:i.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===(s=r.flows.authorizationCode)||void 0===s?void 0:s.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",usePkce:r.flows.authorizationCode["x-usePkce"],defaultValues:null==t?void 0:t[m]});if("oauth2"===r.type){var v=fromSessionStorage("auth."+m+".token")||JSON.stringify(null===(c=null==t?void 0:t[m])||void 0===c?void 0:c.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};
1
+ import{__assign,__extends}from"tslib";import*as React from"react";import{fromSessionStorage,getSecurityDetailsOptions,toSessionStorage,escapeFormId}from"../../utils";import{FormDropdown,FormTextField}from"../common/TextField";import{FormControl,FormLabel,FormWrapper}from"../common/form";import{l}from"../../redoc-lib/src/services/Labels";import{Dropdown}from"../common/Dropdown";import{OpenIDConnect}from"./OpenIDConnect";import{OAuth2Flow}from"./OAuth2Flow";import OAuth2TokenInput from"./OAuth2TokenInput";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}),toSessionStorage("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=fromSessionStorage("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(FormLabel,null," Security scheme: "),React.createElement(Dropdown,{variant:"dark",fullWidth:!0,options:a,value:a[r].value,onChange:this.handleSchemeChange}))||null,o[r].schemes.map((function(r){var o,a,n,i,u,s,c,m=escapeFormId(r.id);if("apiKey"===r.type){var d=getSecurityDetailsOptions(m,""),p={field:"auth."+m,fullWidth:!0,initialValue:fromCookie(r)||fromSessionStorage("auth."+m)||(null==t?void 0:t[m]),initValue:fromCookie(r)||fromSessionStorage("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:fromSessionStorage("auth."+m+".username")||(null===(o=null==t?void 0:t[m])||void 0===o?void 0:o.username),initValue:fromSessionStorage("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",initialValue:fromSessionStorage("auth."+m+".password")||(null===(n=null==t?void 0:t[m])||void 0===n?void 0:n.password)||"",validateOnBlur:!0,validateOnChange:!0})))}if("bearer"===r.scheme){var h=getSecurityDetailsOptions(m,"");p={field:"auth."+m,fullWidth:!0,initialValue:fromSessionStorage("auth."+m)||(null==t?void 0:t[m]),initValue:fromSessionStorage("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===(i=null==r?void 0:r.flows)||void 0===i?void 0:i.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===(s=r.flows.authorizationCode)||void 0===s?void 0:s.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",tokenEndpointAuthMethod:r.flows.authorizationCode["x-tokenEndpointAuthMethod"],usePkce:r.flows.authorizationCode["x-usePkce"],defaultValues:null==t?void 0:t[m]});if("oauth2"===r.type){var v=fromSessionStorage("auth."+m+".token")||JSON.stringify(null===(c=null==t?void 0:t[m])||void 0===c?void 0:c.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
@@ -17,6 +17,7 @@ export interface OAuth2FlowProps {
17
17
  form: FormState;
18
18
  formApi: FormApi;
19
19
  flow: 'implicit' | 'authorizationCode';
20
+ tokenEndpointAuthMethod?: string;
20
21
  clientId?: string;
21
22
  defaultValues?: SecurityDetails;
22
23
  }
@@ -1,2 +1,2 @@
1
- import{__assign,__awaiter,__extends,__generator,__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{FormDropdown,FormTextField,TextField}from"../common/TextField";import{Checkbox}from"../common/Checkbox";import{Button}from"../shared";import{OAuth2,deriveCodeChallenge}from"../../services/OAuth2";import{fromSessionStorage,getSecurityDetailsOptions}from"../../utils";import{isEmptyObject,randString}from"../../services/utils";import{normalizeUrlProtocol}from"./utils";import Scope from"./Scope";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,showPkceOptions:!1}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token","")}}),Object.defineProperty(t,"togglePkceOptions",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.setState((function(e){return{showPkceOptions:!e.showPkceOptions}}))}}),Object.defineProperty(t,"handleCodeVerifierChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){var r=e.target.value;return __awaiter(t,void 0,void 0,(function(){var e;return __generator(this,(function(t){switch(t.label){case 0:return[4,deriveCodeChallenge(r)];case 1:return e=t.sent(),this.setState({codeVerifier:r,validCodeChallenge:e}),[2]}}))}))}}),t}return __extends(t,e),Object.defineProperty(t.prototype,"values",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.values)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.errors)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"pkceInputActionButtonProps",{get:function(){var e=this;if(void 0!==this.state.codeVerifier&&this.state.codeChallenge!==this.state.validCodeChallenge)return{label:"sync",onClick:function(){e.state.codeVerifier&&e.setState({codeChallenge:e.state.validCodeChallenge})}}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this;if(this.props.usePkce){var t=randString(43);deriveCodeChallenge(t).then((function(r){e.setState({codeVerifier:t,codeChallenge:r,validCodeChallenge:r})}))}}}),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,n=r.flow,o=r.usePkce,a=r.id,l=r.tokenUrl,i=r.authCorsProxyUrl;if(isEmptyObject(this.errors)){this.setState({loading:!0,error:null});var c=i?i+normalizeUrlProtocol(e):e,s=i&&l?i+normalizeUrlProtocol(l):l,u=this.props.formApi.getValue("auth."+a+".scopes"),p={authorizationUrl:c.startsWith("http")?c:this.props.server+c,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"===n&&OAuth2.authorizeImplicit(p),"authorizationCode"===n&&OAuth2.authorizeAuthorizationCode(__assign(__assign(__assign({},p),{tokenUrl:(null==s?void 0:s.startsWith("http"))?s:this.props.server+s,clientSecret:this.values.client_secret}),o&&{codeVerifier:this.state.codeVerifier,codeChallenge:this.state.codeChallenge}))}}}}),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=this,t=this.state,r=t.error,n=t.loading,o=this.props,a=o.id,l=o.scopes,i=o.authorizationUrl,c=o.flow,s=o.usePkce,u=o.defaultValues;if(!i)return React.createElement(FormError,null,"No flow info");var p=fromSessionStorage("auth."+a+".token")||JSON.stringify(null==u?void 0:u.token);p=p?JSON.parse(p):"";var d=getSecurityDetailsOptions(a,"client_id"),m={field:"auth."+a+".client_id",fullWidth:!0,initialValue:fromSessionStorage("auth."+a+".client_id")||this.props.clientId||(null==u?void 0:u.client_id),initValue:fromSessionStorage("auth."+a+".client_id")||this.props.clientId||(null==u?void 0:u.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({},m,{options:d})):React.createElement(FormTextField,__assign({},m,{"data-cy":"client-id-input"}))),"authorizationCode"===c&&React.createElement(React.Fragment,null,(!(null==s?void 0:s.hideClientSecretInput)||!s)&&React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client Secret:"),React.createElement(FormTextField,{type:"password",fullWidth:!0,field:"auth."+a+".client_secret",initialValue:fromSessionStorage("auth."+a+".client_secret")||(null==u?void 0:u.client_secret),validateOnBlur:!0,validateOnChange:!0,"data-cy":"client-secret-input"})),s&&!s.disableManualConfiguration&&React.createElement(PkceOptionsWrapper,null,React.createElement(Checkbox,{id:"pkce-opitons-toggle",label:"Configure PKCE manually",checked:this.state.showPkceOptions,onChange:this.togglePkceOptions,"data-cy":"pkce-options-toggle"}),this.state.showPkceOptions&&React.createElement(PkceDetails,null,React.createElement(FormControl,null,React.createElement(FormLabel,null,"Code Verifier"),React.createElement(TextField,{fullWidth:!0,value:this.state.codeVerifier,onChange:this.handleCodeVerifierChange,"data-cy":"code-verifier-input"})),React.createElement(FormControl,null,React.createElement(FormLabel,null,"Code Challenge"),React.createElement(TextField,{fullWidth:!0,value:this.state.codeChallenge,onChange:function(t){var r=t.target.value;e.setState({codeChallenge:r})},inputActionButton:this.pkceInputActionButtonProps,"data-cy":"code-challenge-input"}))))),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+a+".token",type:"hidden",initialValue:p}),React.createElement(Scope,{id:a,scopes:l}),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(){e.handleLogout()}},"Log out"):n?React.createElement(React.Fragment,null,React.createElement(Button,{fullWidth:!0,onClick:function(){e.handleCancel()}},"Cancel"),React.createElement(LinearProgress,null)):React.createElement(Button,{fullWidth:!0,disabled:!isEmptyObject(this.errors),onClick:function(){e.handleAuthorize(i)}},"Authorize")),n||r||!this.values.token||!this.values.token.access_token&&React.createElement(FormWrapper,null,React.createElement(FormControl,null,n?React.createElement(FormWarning,null,"Please, finish your authorization flow or cancel authorization."):r?React.createElement(React.Fragment,null,React.createElement(OriginalErrorMessage,null,React.createElement(FormError,null,r))):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,templateObject_3,templateObject_4,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"]))),PkceOptionsWrapper=styled.div(templateObject_3||(templateObject_3=__makeTemplateObject(["\n padding: 8px 0 20px;\n"],["\n padding: 8px 0 20px;\n"]))),PkceDetails=styled.div(templateObject_4||(templateObject_4=__makeTemplateObject(["\n padding: 4px 0;\n"],["\n padding: 4px 0;\n"])));
1
+ import{__assign,__awaiter,__extends,__generator,__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{FormDropdown,FormTextField,TextField}from"../common/TextField";import{Checkbox}from"../common/Checkbox";import{Button}from"../shared";import{OAuth2,deriveCodeChallenge}from"../../services/OAuth2";import{fromSessionStorage,getSecurityDetailsOptions}from"../../utils";import{isEmptyObject,randString}from"../../services/utils";import{getOAuth2TokenEndpointAuthHeader,normalizeUrlProtocol,validateTokenEndpointMethod}from"./utils";import Scope from"./Scope";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,showPkceOptions:!1}}),Object.defineProperty(t,"clearToken",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.props.formApi.setValue("auth."+t.props.id+".token","")}}),Object.defineProperty(t,"togglePkceOptions",{enumerable:!0,configurable:!0,writable:!0,value:function(){t.setState((function(e){return{showPkceOptions:!e.showPkceOptions}}))}}),Object.defineProperty(t,"handleCodeVerifierChange",{enumerable:!0,configurable:!0,writable:!0,value:function(e){var r=e.target.value;return __awaiter(t,void 0,void 0,(function(){var e;return __generator(this,(function(t){switch(t.label){case 0:return[4,deriveCodeChallenge(r)];case 1:return e=t.sent(),this.setState({codeVerifier:r,validCodeChallenge:e}),[2]}}))}))}}),t}return __extends(t,e),Object.defineProperty(t.prototype,"values",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.values)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.errors)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"pkceInputActionButtonProps",{get:function(){var e=this;if(void 0!==this.state.codeVerifier&&this.state.codeChallenge!==this.state.validCodeChallenge)return{label:"sync",onClick:function(){e.state.codeVerifier&&e.setState({codeChallenge:e.state.validCodeChallenge})}}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"componentDidMount",{enumerable:!1,configurable:!0,writable:!0,value:function(){var e=this;if(this.props.usePkce){var t=randString(43);deriveCodeChallenge(t).then((function(r){e.setState({codeVerifier:t,codeChallenge:r,validCodeChallenge:r})}))}}}),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,n=r.flow,o=r.usePkce,a=r.id,l=r.tokenUrl,i=r.authCorsProxyUrl,c=r.tokenEndpointAuthMethod;if(isEmptyObject(this.errors)){this.setState({loading:!0,error:null});var s=i?i+normalizeUrlProtocol(e):e,u=i&&l?i+normalizeUrlProtocol(l):l,d=this.props.formApi.getValue("auth."+a+".scopes"),p={authorizationUrl:s.startsWith("http")?s:this.props.server+s,clientId:this.values.client_id,scopes:d,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"===n&&OAuth2.authorizeImplicit(p),validateTokenEndpointMethod(c)?"authorizationCode"===n&&OAuth2.authorizeAuthorizationCode(__assign(__assign(__assign({},p),{tokenUrl:(null==u?void 0:u.startsWith("http"))?u:this.props.server+u,clientSecret:this.values.client_secret,extraHeaders:getOAuth2TokenEndpointAuthHeader({authMethod:c,clientId:this.values.client_id,clientSecret:this.values.client_secret})}),o&&{codeVerifier:this.state.codeVerifier,codeChallenge:this.state.codeChallenge})):console.log("Unsupported token endpoint auth method: "+c)}}}}),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=this,t=this.state,r=t.error,n=t.loading,o=this.props,a=o.id,l=o.scopes,i=o.authorizationUrl,c=o.flow,s=o.usePkce,u=o.defaultValues;if(!i)return React.createElement(FormError,null,"No flow info");var d=fromSessionStorage("auth."+a+".token")||JSON.stringify(null==u?void 0:u.token);d=d?JSON.parse(d):"";var p=getSecurityDetailsOptions(a,"client_id"),m={field:"auth."+a+".client_id",fullWidth:!0,initialValue:fromSessionStorage("auth."+a+".client_id")||this.props.clientId||(null==u?void 0:u.client_id),initValue:fromSessionStorage("auth."+a+".client_id")||this.props.clientId||(null==u?void 0:u.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: "),p?React.createElement(FormDropdown,__assign({},m,{options:p})):React.createElement(FormTextField,__assign({},m,{"data-cy":"client-id-input"}))),"authorizationCode"===c&&React.createElement(React.Fragment,null,(!(null==s?void 0:s.hideClientSecretInput)||!s)&&React.createElement(FormControl,null,React.createElement(FormLabel,null,"Client Secret:"),React.createElement(FormTextField,{type:"password",fullWidth:!0,field:"auth."+a+".client_secret",initialValue:fromSessionStorage("auth."+a+".client_secret")||(null==u?void 0:u.client_secret),validateOnBlur:!0,validateOnChange:!0,"data-cy":"client-secret-input"})),s&&!s.disableManualConfiguration&&React.createElement(PkceOptionsWrapper,null,React.createElement(Checkbox,{id:"pkce-opitons-toggle",label:"Configure PKCE manually",checked:this.state.showPkceOptions,onChange:this.togglePkceOptions,"data-cy":"pkce-options-toggle"}),this.state.showPkceOptions&&React.createElement(PkceDetails,null,React.createElement(FormControl,null,React.createElement(FormLabel,null,"Code Verifier"),React.createElement(TextField,{fullWidth:!0,value:this.state.codeVerifier,onChange:this.handleCodeVerifierChange,"data-cy":"code-verifier-input"})),React.createElement(FormControl,null,React.createElement(FormLabel,null,"Code Challenge"),React.createElement(TextField,{fullWidth:!0,value:this.state.codeChallenge,onChange:function(t){var r=t.target.value;e.setState({codeChallenge:r})},inputActionButton:this.pkceInputActionButtonProps,"data-cy":"code-challenge-input"}))))),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+a+".token",type:"hidden",initialValue:d}),React.createElement(Scope,{id:a,scopes:l}),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(){e.handleLogout()}},"Log out"):n?React.createElement(React.Fragment,null,React.createElement(Button,{fullWidth:!0,onClick:function(){e.handleCancel()}},"Cancel"),React.createElement(LinearProgress,null)):React.createElement(Button,{fullWidth:!0,disabled:!isEmptyObject(this.errors),onClick:function(){e.handleAuthorize(i)}},"Authorize")),n||r||!this.values.token||!this.values.token.access_token&&React.createElement(FormWrapper,null,React.createElement(FormControl,null,n?React.createElement(FormWarning,null,"Please, finish your authorization flow or cancel authorization."):r?React.createElement(React.Fragment,null,React.createElement(OriginalErrorMessage,null,React.createElement(FormError,null,r))):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,templateObject_3,templateObject_4,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"]))),PkceOptionsWrapper=styled.div(templateObject_3||(templateObject_3=__makeTemplateObject(["\n padding: 8px 0 20px;\n"],["\n padding: 8px 0 20px;\n"]))),PkceDetails=styled.div(templateObject_4||(templateObject_4=__makeTemplateObject(["\n padding: 4px 0;\n"],["\n padding: 4px 0;\n"])));
2
2
  //# sourceMappingURL=OAuth2Flow.js.map
@@ -3,6 +3,7 @@ import type { SecurityDetails } from '../../utils';
3
3
  export interface OAuth2TokenInputProps {
4
4
  flow: {
5
5
  refreshUrl?: string;
6
+ 'x-tokenEndpointAuthMethod'?: 'none' | 'client_secret_basic' | string;
6
7
  scopes: Record<string, string>;
7
8
  tokenUrl: string;
8
9
  };
@@ -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{fromSessionStorage,getSecurityDetailsOptions,toSessionStorage}from"../../utils";import{OAuth2}from"../../services/OAuth2";import{Button}from"../shared";import{FormDropdown,FormTextField}from"../common/TextField";import Scope from"./Scope";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",""),toSessionStorage("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,o,r,n,i,l,a=this;return __generator(this,(function(s){switch(s.label){case 0:return this.state.loading?[2]:(e=this.props,t=e.server,o=e.flow,r=e.authCorsProxyUrl,n=r&&o.tokenUrl?r+normalizeUrlProtocol(o.tokenUrl):o.tokenUrl,this.errors.client_id||this.errors.client_secret?(console.log("Provide client_id and client_secret"),[2]):(i=this.values.client_id,l=this.values.client_secret,i&&l?(this.setState({loading:!0}),[4,OAuth2.authorizeClientCredentials({tokenUrl:n.startsWith("http")?n:t+n,clientId:i,clientSecret:l,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 __extends(t,e),Object.defineProperty(t.prototype,"values",{get:function(){var e,t,o;return(null===(o=null===(t=null===(e=this.props.form)||void 0===e?void 0:e.values)||void 0===t?void 0:t.auth)||void 0===o?void 0:o[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.errors)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[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,o=e.error,r=e.tokenMasked,n=this.props,i=n.id,l=n.defaultValues,a=Object.keys(this.props.flow.scopes),s=fromSessionStorage("auth."+i+".token")||JSON.stringify(null==l?void 0:l.token);s=s?JSON.parse(s):"";var c=getSecurityDetailsOptions(i,"client_id"),u={field:"auth."+i+".client_id",fullWidth:!0,initialValue:fromSessionStorage("auth."+i+".client_id")||this.props.clientId||(null==l?void 0:l.client_id),initValue:fromSessionStorage("auth."+i+".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."+i+".client_secret",initialValue:fromSessionStorage("auth."+i+".client_secret")||(null==l?void 0:l.client_secret)})),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+i+".token",type:"hidden",initialValue:s,validate:validateToken}),React.createElement(Scope,{id:i,scopes:a})),React.createElement(Button,{color:"primary",onClick:this.requestToken,blinking:t},t?"Loading...":"Request Token"),React.createElement(FormHeader,null," Access Token "),o?React.createElement(FormError,{style:{marginBottom:"1em"}},"Failed to request token: ",React.createElement("pre",null,o)," "):this.values.token&&this.values.token.access_token?React.createElement(TokenField,null,React.createElement(TokenValue,{length:this.values.token.access_token.length,masked:r},this.values.token.access_token),React.createElement(TokenShowHide,{onClick:this.toggleTokenMask},r?"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{fromSessionStorage,getSecurityDetailsOptions,toSessionStorage}from"../../utils";import{OAuth2}from"../../services/OAuth2";import{Button}from"../shared";import{FormDropdown,FormTextField}from"../common/TextField";import Scope from"./Scope";import{getOAuth2TokenEndpointAuthHeader,normalizeUrlProtocol,validateTokenEndpointMethod}from"./utils";function validateToken(e){if(!e)return"Token is required"}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",""),toSessionStorage("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,o,r,n,i,l,a,s=this;return __generator(this,(function(c){switch(c.label){case 0:return this.state.loading?[2]:(e=this.props,t=e.server,o=e.flow,r=e.authCorsProxyUrl,n=r&&o.tokenUrl?r+normalizeUrlProtocol(o.tokenUrl):o.tokenUrl,this.errors.client_id||this.errors.client_secret?(console.log("Provide client_id and client_secret"),[2]):(i=this.values.client_id,l=this.values.client_secret,i&&l?(this.setState({loading:!0}),a=o["x-tokenEndpointAuthMethod"],validateTokenEndpointMethod(a)?[4,OAuth2.authorizeClientCredentials({tokenUrl:n.startsWith("http")?n:t+n,clientId:i,clientSecret:l,scopes:this.values.scopes,extraHeaders:getOAuth2TokenEndpointAuthHeader({authMethod:a,clientId:i,clientSecret:l}),successCallback:function(e){s.props.formApi.setValue("auth."+s.props.id+".token",e),s.setState({loading:!1})},errorCallback:function(e){s.clearToken(),s.setState({error:e.message,loading:!1})}})]:(console.log("Unsupported token endpoint auth method: "+a),[2])):(console.log("Provide client_id and client_secret"),[2])));case 1:return c.sent(),[2]}}))}))}}),t}return __extends(t,e),Object.defineProperty(t.prototype,"values",{get:function(){var e,t,o;return(null===(o=null===(t=null===(e=this.props.form)||void 0===e?void 0:e.values)||void 0===t?void 0:t.auth)||void 0===o?void 0:o[this.props.id])||{}},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"errors",{get:function(){var e,t;return(null===(t=null===(e=this.props.form.errors)||void 0===e?void 0:e.auth)||void 0===t?void 0:t[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,o=e.error,r=e.tokenMasked,n=this.props,i=n.id,l=n.defaultValues,a=Object.keys(this.props.flow.scopes),s=fromSessionStorage("auth."+i+".token")||JSON.stringify(null==l?void 0:l.token);s=s?JSON.parse(s):"";var c=getSecurityDetailsOptions(i,"client_id"),u={field:"auth."+i+".client_id",fullWidth:!0,initialValue:fromSessionStorage("auth."+i+".client_id")||this.props.clientId||(null==l?void 0:l.client_id),initValue:fromSessionStorage("auth."+i+".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."+i+".client_secret",initialValue:fromSessionStorage("auth."+i+".client_secret")||(null==l?void 0:l.client_secret)})),React.createElement(FormTextField,{fullWidth:!0,field:"auth."+i+".token",type:"hidden",initialValue:s,validate:validateToken}),React.createElement(Scope,{id:i,scopes:a})),React.createElement(Button,{color:"primary",onClick:this.requestToken,blinking:t},t?"Loading...":"Request Token"),React.createElement(FormHeader,null," Access Token "),o?React.createElement(FormError,{style:{marginBottom:"1em"}},"Failed to request token: ",React.createElement("pre",null,o)," "):this.values.token&&this.values.token.access_token?React.createElement(TokenField,null,React.createElement(TokenValue,{length:this.values.token.access_token.length,masked:r},this.values.token.access_token),React.createElement(TokenShowHide,{onClick:this.toggleTokenMask},r?"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
@@ -12,3 +12,9 @@ export declare function updateVariablesStorage(name: string, value: string): voi
12
12
  export declare function unescapeQueryParams(params: GenericObject): GenericObject;
13
13
  export declare function getFileNameFromHeaders(headers: Record<string, string>): string;
14
14
  export declare const makeRequestInterceptor: ({ requestInterceptor, sendXUserAgentInTryIt, disableTryItRequestUrlEncoding, }: Pick<RedocProNormalizedOptions, 'requestInterceptor' | 'sendXUserAgentInTryIt' | 'disableTryItRequestUrlEncoding'>, operation: OperationModel, securitySchemaAuth?: string | undefined) => (req: Request) => void | Request;
15
+ export declare const validateTokenEndpointMethod: (token: string[] | string | undefined) => boolean;
16
+ export declare const getOAuth2TokenEndpointAuthHeader: ({ authMethod, clientId, clientSecret, }: {
17
+ authMethod?: string | string[] | undefined;
18
+ clientId: string;
19
+ clientSecret: string;
20
+ }) => Record<'Authorization', string> | GenericObject;
@@ -1,2 +1,2 @@
1
- import{__assign}from"tslib";import{fromSessionStorage,getParameterValue,setParameterValue,setSecurityDetails,toSessionStorage,unescapeFormId}from"../../utils";export function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}export function updateStorage(e){if(e.values.auth)for(var r=0,t=Object.keys(e.values.auth);r<t.length;r++){var a=t[r],n=e.values.auth[a];setSecurityDetails(a,n)}updateParameterStorage(e)}function updateParameterStorage(e){for(var r,t=0,a=["path","query","header","cookie"];t<a.length;t++){var n=a[t];if(null===(r=e.values)||void 0===r?void 0:r[n])for(var i=0,o=Object.keys(e.values[n]);i<o.length;i++){var s=o[i];setParameterValue(n,s,e.values[n][s])}}}export var getParameters=function(e,r){return e.filter((function(e){return e.in===r})).reduce((function(e,r){var t=r.in,a=r.name;return e[a]=getParameterValue(t||"",a),e}),{})};var pathTemplateRegExp=/(?:{)(\w+)(?:})/g;export function getServerWithVariables(e,r){void 0===r&&(r=0);var t=e[r],a=getDefaultOrStoredVariables(t);return __assign(__assign({},t),{variables:a})}export function getInitialServerWithVariables(e){var r=fromSessionStorage("serverUrl"),t=e.find((function(e){return e.url===r}))||e[0],a=getDefaultOrStoredVariables(t);return __assign(__assign({},t),{variables:a})}export function expandVariables(e,r){return void 0===r&&(r={}),e.replace(pathTemplateRegExp,(function(e,t){return r[t]||e}))}export function expandDefaultServerVariables(e,r){return void 0===r&&(r={}),e.replace(pathTemplateRegExp,(function(e,t){return r[t]&&r[t].default||e}))}export function getDefaultOrStoredVariables(e){if(!(null==e?void 0:e.variables))return{};var r=fromSessionStorage("variables"),t=r&&JSON.parse(r)||{},a={};return Object.entries(e.variables||{}).forEach((function(e){var r=e[0],n=e[1];a[r]=t[r]||n.default||""})),a}export function updateVariablesStorage(e,r){var t,a=fromSessionStorage("variables"),n=a&&JSON.parse(a)||{};toSessionStorage("variables",JSON.stringify(__assign(__assign({},n),((t={})[e]=r,t))))}export function unescapeQueryParams(e){return Object.entries(e).reduce((function(e,r){var t=r[0],a=r[1];return e[unescapeFormId(t)]=a,e}),{})}export function getFileNameFromHeaders(e){for(var r="filename=",t=0,a=Object.entries(e);t<a.length;t++){var n=a[t],i=n[0],o=n[1];if("content-disposition"===i.toLowerCase()){var s=o.split(";").find((function(e){return e.trim().startsWith(r)}));if(s)return s.split(r)[1]}}return""}export var makeRequestInterceptor=function(e,r,t){var a=e.requestInterceptor,n=e.sendXUserAgentInTryIt,i=e.disableTryItRequestUrlEncoding;return function(e){var o,s,u,l;i&&(e=__assign(__assign({},e),{url:decodeURIComponent(e.url)})),n&&(e.headers["X-User-Agent"]="Redocly Try it API console");var v=(null===(s=null===(o=null==r?void 0:r.requestValues)||void 0===o?void 0:o.header)||void 0===s?void 0:s.authorization)||(null===(l=null===(u=null==r?void 0:r.requestValues)||void 0===u?void 0:u.header)||void 0===l?void 0:l.Authorization);return!t&&v&&(e.headers.Authorization=v),a?a(e,r):e}};
1
+ import{__assign}from"tslib";import{fromSessionStorage,getParameterValue,setParameterValue,setSecurityDetails,toSessionStorage,unescapeFormId}from"../../utils";export function normalizeUrlProtocol(e){return e.startsWith("//")?"https:"+e:e}export function updateStorage(e){if(e.values.auth)for(var r=0,t=Object.keys(e.values.auth);r<t.length;r++){var a=t[r],n=e.values.auth[a];setSecurityDetails(a,n)}updateParameterStorage(e)}function updateParameterStorage(e){for(var r,t=0,a=["path","query","header","cookie"];t<a.length;t++){var n=a[t];if(null===(r=e.values)||void 0===r?void 0:r[n])for(var i=0,o=Object.keys(e.values[n]);i<o.length;i++){var s=o[i];setParameterValue(n,s,e.values[n][s])}}}export var getParameters=function(e,r){return e.filter((function(e){return e.in===r})).reduce((function(e,r){var t=r.in,a=r.name;return e[a]=getParameterValue(t||"",a),e}),{})};var pathTemplateRegExp=/(?:{)(\w+)(?:})/g;export function getServerWithVariables(e,r){void 0===r&&(r=0);var t=e[r],a=getDefaultOrStoredVariables(t);return __assign(__assign({},t),{variables:a})}export function getInitialServerWithVariables(e){var r=fromSessionStorage("serverUrl"),t=e.find((function(e){return e.url===r}))||e[0],a=getDefaultOrStoredVariables(t);return __assign(__assign({},t),{variables:a})}export function expandVariables(e,r){return void 0===r&&(r={}),e.replace(pathTemplateRegExp,(function(e,t){return r[t]||e}))}export function expandDefaultServerVariables(e,r){return void 0===r&&(r={}),e.replace(pathTemplateRegExp,(function(e,t){return r[t]&&r[t].default||e}))}export function getDefaultOrStoredVariables(e){if(!(null==e?void 0:e.variables))return{};var r=fromSessionStorage("variables"),t=r&&JSON.parse(r)||{},a={};return Object.entries(e.variables||{}).forEach((function(e){var r=e[0],n=e[1];a[r]=t[r]||n.default||""})),a}export function updateVariablesStorage(e,r){var t,a=fromSessionStorage("variables"),n=a&&JSON.parse(a)||{};toSessionStorage("variables",JSON.stringify(__assign(__assign({},n),((t={})[e]=r,t))))}export function unescapeQueryParams(e){return Object.entries(e).reduce((function(e,r){var t=r[0],a=r[1];return e[unescapeFormId(t)]=a,e}),{})}export function getFileNameFromHeaders(e){for(var r="filename=",t=0,a=Object.entries(e);t<a.length;t++){var n=a[t],i=n[0],o=n[1];if("content-disposition"===i.toLowerCase()){var s=o.split(";").find((function(e){return e.trim().startsWith(r)}));if(s)return s.split(r)[1]}}return""}export var makeRequestInterceptor=function(e,r,t){var a=e.requestInterceptor,n=e.sendXUserAgentInTryIt,i=e.disableTryItRequestUrlEncoding;return function(e){var o,s,u,l;i&&(e=__assign(__assign({},e),{url:decodeURIComponent(e.url)})),n&&(e.headers["X-User-Agent"]="Redocly Try it API console");var c=(null===(s=null===(o=null==r?void 0:r.requestValues)||void 0===o?void 0:o.header)||void 0===s?void 0:s.authorization)||(null===(l=null===(u=null==r?void 0:r.requestValues)||void 0===u?void 0:u.header)||void 0===l?void 0:l.Authorization);return!t&&c&&(e.headers.Authorization=c),a?a(e,r):e}};export var validateTokenEndpointMethod=function(e){if(!e)return!0;var r=Array.isArray(e)?e:[e];return!(r.length&&!r.includes("none")&&!r.includes("client_secret_basic"))};export var getOAuth2TokenEndpointAuthHeader=function(e){var r=e.authMethod,t=e.clientId,a=e.clientSecret;return"client_secret_basic"===r||Array.isArray(r)&&r.includes("client_secret_basic")?{Authorization:"Basic "+btoa(t+":"+a)}:{}};
2
2
  //# sourceMappingURL=utils.js.map