docusaurus-theme-openapi-docs 1.1.12 → 1.2.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.
- package/lib/theme/ApiDemoPanel/Authorization/auth-types.js +4 -0
- package/lib/theme/ApiDemoPanel/Authorization/index.js +125 -0
- package/lib/theme/ApiDemoPanel/Authorization/slice.js +1 -1
- package/lib/theme/ApiDemoPanel/Body/index.js +7 -6
- package/lib/theme/ApiDemoPanel/Execute/index.js +168 -0
- package/lib/theme/ApiDemoPanel/Execute/makeRequest.js +204 -0
- package/lib/theme/ApiDemoPanel/FormItem/index.js +7 -0
- package/lib/theme/ApiDemoPanel/FormItem/styles.module.css +5 -0
- package/lib/theme/ApiDemoPanel/ParamOptions/index.js +1 -1
- package/lib/theme/ApiDemoPanel/Request/index.js +78 -0
- package/lib/theme/ApiDemoPanel/Request/styles.module.css +17 -0
- package/lib/theme/ApiDemoPanel/Response/index.js +16 -12
- package/lib/theme/ApiDemoPanel/SecuritySchemes/index.js +24 -19
- package/lib/theme/ApiDemoPanel/Server/index.js +1 -0
- package/lib/theme/ApiDemoPanel/buildPostmanRequest.js +25 -3
- package/lib/theme/ApiDemoPanel/index.js +5 -13
- package/lib/theme/ApiDemoPanel/persistanceMiddleware.js +1 -1
- package/lib/theme/ApiDemoPanel/react-modal.d.ts +8 -0
- package/lib/theme/ApiItem/Layout/styles.module.css +56 -0
- package/lib/theme/ParamsItem/index.js +5 -1
- package/lib-next/theme/ApiDemoPanel/Authorization/auth-types.js +4 -0
- package/lib-next/theme/ApiDemoPanel/Authorization/index.js +149 -0
- package/lib-next/theme/ApiDemoPanel/Authorization/slice.js +1 -1
- package/lib-next/theme/ApiDemoPanel/Body/index.js +28 -6
- package/lib-next/theme/ApiDemoPanel/Execute/index.js +170 -0
- package/lib-next/theme/ApiDemoPanel/Execute/makeRequest.js +190 -0
- package/lib-next/theme/ApiDemoPanel/FormItem/index.js +9 -1
- package/lib-next/theme/ApiDemoPanel/FormItem/styles.module.css +5 -0
- package/lib-next/theme/ApiDemoPanel/ParamOptions/index.js +1 -1
- package/lib-next/theme/ApiDemoPanel/Request/index.js +60 -0
- package/lib-next/theme/ApiDemoPanel/Request/styles.module.css +17 -0
- package/lib-next/theme/ApiDemoPanel/Response/index.js +18 -13
- package/lib-next/theme/ApiDemoPanel/SecuritySchemes/index.js +22 -20
- package/lib-next/theme/ApiDemoPanel/Server/index.js +1 -0
- package/lib-next/theme/ApiDemoPanel/buildPostmanRequest.js +25 -3
- package/lib-next/theme/ApiDemoPanel/index.js +4 -13
- package/lib-next/theme/ApiDemoPanel/persistanceMiddleware.js +1 -1
- package/lib-next/theme/ApiDemoPanel/react-modal.d.ts +8 -0
- package/lib-next/theme/ApiItem/Layout/styles.module.css +56 -0
- package/lib-next/theme/ParamsItem/index.js +5 -1
- package/package.json +5 -4
- package/src/theme/ApiDemoPanel/Authorization/auth-types.ts +4 -0
- package/src/theme/ApiDemoPanel/Authorization/index.tsx +154 -0
- package/src/theme/ApiDemoPanel/Authorization/slice.ts +1 -1
- package/src/theme/ApiDemoPanel/Body/index.tsx +28 -6
- package/src/theme/ApiDemoPanel/Execute/index.tsx +188 -0
- package/src/theme/ApiDemoPanel/Execute/makeRequest.ts +197 -0
- package/src/theme/ApiDemoPanel/FormItem/index.tsx +11 -2
- package/src/theme/ApiDemoPanel/FormItem/styles.module.css +5 -0
- package/src/theme/ApiDemoPanel/ParamOptions/index.tsx +1 -1
- package/src/theme/ApiDemoPanel/Request/index.tsx +71 -0
- package/src/theme/ApiDemoPanel/Request/styles.module.css +17 -0
- package/src/theme/ApiDemoPanel/Response/index.tsx +19 -13
- package/src/theme/ApiDemoPanel/SecuritySchemes/index.tsx +22 -17
- package/src/theme/ApiDemoPanel/Server/index.tsx +1 -0
- package/src/theme/ApiDemoPanel/buildPostmanRequest.ts +22 -3
- package/src/theme/ApiDemoPanel/index.tsx +4 -13
- package/src/theme/ApiDemoPanel/persistanceMiddleware.ts +1 -1
- package/src/theme/ApiDemoPanel/react-modal.d.ts +8 -0
- package/src/theme/ApiItem/Layout/styles.module.css +56 -0
- package/src/theme/ParamsItem/index.js +5 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _FormItem = _interopRequireDefault(require("../FormItem"));
|
|
11
|
+
|
|
12
|
+
var _FormSelect = _interopRequireDefault(require("../FormSelect"));
|
|
13
|
+
|
|
14
|
+
var _FormTextInput = _interopRequireDefault(require("../FormTextInput"));
|
|
15
|
+
|
|
16
|
+
var _hooks = require("../hooks");
|
|
17
|
+
|
|
18
|
+
var _slice = require("./slice");
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
/* ============================================================================
|
|
23
|
+
* Copyright (c) Palo Alto Networks
|
|
24
|
+
*
|
|
25
|
+
* This source code is licensed under the MIT license found in the
|
|
26
|
+
* LICENSE file in the root directory of this source tree.
|
|
27
|
+
* ========================================================================== */
|
|
28
|
+
function Authorization() {
|
|
29
|
+
const data = (0, _hooks.useTypedSelector)(state => state.auth.data);
|
|
30
|
+
const options = (0, _hooks.useTypedSelector)(state => state.auth.options);
|
|
31
|
+
const selected = (0, _hooks.useTypedSelector)(state => state.auth.selected);
|
|
32
|
+
const dispatch = (0, _hooks.useTypedDispatch)();
|
|
33
|
+
|
|
34
|
+
if (selected === undefined) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const selectedAuth = options[selected];
|
|
39
|
+
const optionKeys = Object.keys(options);
|
|
40
|
+
return <div>
|
|
41
|
+
{optionKeys.length > 1 && <_FormItem.default label="Security Scheme">
|
|
42
|
+
<_FormSelect.default options={optionKeys} value={selected} onChange={e => {
|
|
43
|
+
dispatch((0, _slice.setSelectedAuth)(e.target.value));
|
|
44
|
+
}} />
|
|
45
|
+
</_FormItem.default>}
|
|
46
|
+
{selectedAuth.map(a => {
|
|
47
|
+
if (a.type === "http" && a.scheme === "bearer") {
|
|
48
|
+
var _data$a$key$token;
|
|
49
|
+
|
|
50
|
+
return <_FormItem.default label="Bearer Token" key={a.key + "-bearer"}>
|
|
51
|
+
<_FormTextInput.default placeholder="Bearer Token" value={(_data$a$key$token = data[a.key].token) !== null && _data$a$key$token !== void 0 ? _data$a$key$token : ""} onChange={e => {
|
|
52
|
+
const value = e.target.value.trim();
|
|
53
|
+
dispatch((0, _slice.setAuthData)({
|
|
54
|
+
scheme: a.key,
|
|
55
|
+
key: "token",
|
|
56
|
+
value: value ? value : undefined
|
|
57
|
+
}));
|
|
58
|
+
}} />
|
|
59
|
+
</_FormItem.default>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (a.type === "oauth2") {
|
|
63
|
+
var _data$a$key$token2;
|
|
64
|
+
|
|
65
|
+
return <_FormItem.default label="Bearer Token" key={a.key + "-oauth2"}>
|
|
66
|
+
<_FormTextInput.default placeholder="Bearer Token" value={(_data$a$key$token2 = data[a.key].token) !== null && _data$a$key$token2 !== void 0 ? _data$a$key$token2 : ""} onChange={e => {
|
|
67
|
+
const value = e.target.value.trim();
|
|
68
|
+
dispatch((0, _slice.setAuthData)({
|
|
69
|
+
scheme: a.key,
|
|
70
|
+
key: "token",
|
|
71
|
+
value: value ? value : undefined
|
|
72
|
+
}));
|
|
73
|
+
}} />
|
|
74
|
+
</_FormItem.default>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (a.type === "http" && a.scheme === "basic") {
|
|
78
|
+
var _data$a$key$username, _data$a$key$password;
|
|
79
|
+
|
|
80
|
+
return <_react.default.Fragment key={a.key + "-basic"}>
|
|
81
|
+
<_FormItem.default label="Username">
|
|
82
|
+
<_FormTextInput.default placeholder="Username" value={(_data$a$key$username = data[a.key].username) !== null && _data$a$key$username !== void 0 ? _data$a$key$username : ""} onChange={e => {
|
|
83
|
+
const value = e.target.value.trim();
|
|
84
|
+
dispatch((0, _slice.setAuthData)({
|
|
85
|
+
scheme: a.key,
|
|
86
|
+
key: "username",
|
|
87
|
+
value: value ? value : undefined
|
|
88
|
+
}));
|
|
89
|
+
}} />
|
|
90
|
+
</_FormItem.default>
|
|
91
|
+
<_FormItem.default label="Password">
|
|
92
|
+
<_FormTextInput.default placeholder="Password" password value={(_data$a$key$password = data[a.key].password) !== null && _data$a$key$password !== void 0 ? _data$a$key$password : ""} onChange={e => {
|
|
93
|
+
const value = e.target.value.trim();
|
|
94
|
+
dispatch((0, _slice.setAuthData)({
|
|
95
|
+
scheme: a.key,
|
|
96
|
+
key: "password",
|
|
97
|
+
value: value ? value : undefined
|
|
98
|
+
}));
|
|
99
|
+
}} />
|
|
100
|
+
</_FormItem.default>
|
|
101
|
+
</_react.default.Fragment>;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (a.type === "apiKey") {
|
|
105
|
+
var _data$a$key$apiKey;
|
|
106
|
+
|
|
107
|
+
return <_FormItem.default label={`${a.key}`} key={a.key + "-apikey"}>
|
|
108
|
+
<_FormTextInput.default placeholder={`${a.key}`} value={(_data$a$key$apiKey = data[a.key].apiKey) !== null && _data$a$key$apiKey !== void 0 ? _data$a$key$apiKey : ""} onChange={e => {
|
|
109
|
+
const value = e.target.value.trim();
|
|
110
|
+
dispatch((0, _slice.setAuthData)({
|
|
111
|
+
scheme: a.key,
|
|
112
|
+
key: "apiKey",
|
|
113
|
+
value: value ? value : undefined
|
|
114
|
+
}));
|
|
115
|
+
}} />
|
|
116
|
+
</_FormItem.default>;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return null;
|
|
120
|
+
})}
|
|
121
|
+
</div>;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
var _default = Authorization;
|
|
125
|
+
exports.default = _default;
|
|
@@ -52,7 +52,7 @@ function createAuth({
|
|
|
52
52
|
}) {
|
|
53
53
|
var _persisted;
|
|
54
54
|
|
|
55
|
-
const storage = (0, _storageUtils.createStorage)(
|
|
55
|
+
const storage = (0, _storageUtils.createStorage)("sessionStorage");
|
|
56
56
|
let data = {};
|
|
57
57
|
let options = {};
|
|
58
58
|
|
|
@@ -61,6 +61,7 @@ function Body({
|
|
|
61
61
|
var _requestBodyMetadata$, _requestBodyMetadata$2;
|
|
62
62
|
|
|
63
63
|
const contentType = (0, _hooks.useTypedSelector)(state => state.contentType.value);
|
|
64
|
+
const required = requestBodyMetadata === null || requestBodyMetadata === void 0 ? void 0 : requestBodyMetadata.required;
|
|
64
65
|
const dispatch = (0, _hooks.useTypedDispatch)(); // Lot's of possible content-types:
|
|
65
66
|
// - application/json
|
|
66
67
|
// - application/xml
|
|
@@ -83,7 +84,7 @@ function Body({
|
|
|
83
84
|
const schema = requestBodyMetadata === null || requestBodyMetadata === void 0 ? void 0 : (_requestBodyMetadata$ = requestBodyMetadata.content) === null || _requestBodyMetadata$ === void 0 ? void 0 : (_requestBodyMetadata$2 = _requestBodyMetadata$[contentType]) === null || _requestBodyMetadata$2 === void 0 ? void 0 : _requestBodyMetadata$2.schema;
|
|
84
85
|
|
|
85
86
|
if ((schema === null || schema === void 0 ? void 0 : schema.format) === "binary") {
|
|
86
|
-
return <_FormItem.default label="Body">
|
|
87
|
+
return <_FormItem.default label="Body" required={required}>
|
|
87
88
|
<_FormFileUpload.default placeholder={schema.description || "Body"} onChange={file => {
|
|
88
89
|
if (file === undefined) {
|
|
89
90
|
dispatch((0, _slice.clearRawBody)());
|
|
@@ -101,7 +102,7 @@ function Body({
|
|
|
101
102
|
if ((contentType === "multipart/form-data" || contentType === "application/x-www-form-urlencoded") && (schema === null || schema === void 0 ? void 0 : schema.type) === "object") {
|
|
102
103
|
var _schema$properties;
|
|
103
104
|
|
|
104
|
-
return <_FormItem.default label="Body">
|
|
105
|
+
return <_FormItem.default label="Body" required={required}>
|
|
105
106
|
<div style={{
|
|
106
107
|
marginTop: "calc(var(--ifm-pre-padding) / 2)",
|
|
107
108
|
borderRadius: "4px",
|
|
@@ -110,7 +111,7 @@ function Body({
|
|
|
110
111
|
}}>
|
|
111
112
|
{Object.entries((_schema$properties = schema.properties) !== null && _schema$properties !== void 0 ? _schema$properties : {}).map(([key, val]) => {
|
|
112
113
|
if (val.format === "binary") {
|
|
113
|
-
return <_FormItem.default key={key} label={key}>
|
|
114
|
+
return <_FormItem.default key={key} label={key} required={Array.isArray(schema.required) && schema.required.includes(key)}>
|
|
114
115
|
<_FormFileUpload.default placeholder={val.description || key} onChange={file => {
|
|
115
116
|
if (file === undefined) {
|
|
116
117
|
dispatch((0, _slice.clearFormBodyKey)(key));
|
|
@@ -129,7 +130,7 @@ function Body({
|
|
|
129
130
|
}
|
|
130
131
|
|
|
131
132
|
if (val.enum) {
|
|
132
|
-
return <_FormItem.default key={key} label={key}>
|
|
133
|
+
return <_FormItem.default key={key} label={key} required={Array.isArray(schema.required) && schema.required.includes(key)}>
|
|
133
134
|
<_FormSelect.default options={["---", ...val.enum]} onChange={e => {
|
|
134
135
|
const val = e.target.value;
|
|
135
136
|
|
|
@@ -146,7 +147,7 @@ function Body({
|
|
|
146
147
|
} // TODO: support all the other types.
|
|
147
148
|
|
|
148
149
|
|
|
149
|
-
return <_FormItem.default key={key} label={key}>
|
|
150
|
+
return <_FormItem.default key={key} label={key} required={Array.isArray(schema.required) && schema.required.includes(key)}>
|
|
150
151
|
<_FormTextInput.default placeholder={val.description || key} onChange={e => {
|
|
151
152
|
dispatch((0, _slice.setStringFormBody)({
|
|
152
153
|
key: key,
|
|
@@ -186,7 +187,7 @@ function Body({
|
|
|
186
187
|
language = "xml";
|
|
187
188
|
}
|
|
188
189
|
|
|
189
|
-
return <_FormItem.default label="Body">
|
|
190
|
+
return <_FormItem.default label="Body" required={required}>
|
|
190
191
|
<_LiveEditor.default action={dispatch} language={language}>
|
|
191
192
|
{exampleBodyString}
|
|
192
193
|
</_LiveEditor.default>
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _reactModal = _interopRequireDefault(require("react-modal"));
|
|
11
|
+
|
|
12
|
+
var _hooks = require("../hooks");
|
|
13
|
+
|
|
14
|
+
var _slice = require("../Response/slice");
|
|
15
|
+
|
|
16
|
+
var _buildPostmanRequest = _interopRequireDefault(require("./../buildPostmanRequest"));
|
|
17
|
+
|
|
18
|
+
var _makeRequest = _interopRequireDefault(require("./makeRequest"));
|
|
19
|
+
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
|
|
22
|
+
/* ============================================================================
|
|
23
|
+
* Copyright (c) Palo Alto Networks
|
|
24
|
+
*
|
|
25
|
+
* This source code is licensed under the MIT license found in the
|
|
26
|
+
* LICENSE file in the root directory of this source tree.
|
|
27
|
+
* ========================================================================== */
|
|
28
|
+
function validateRequest(params) {
|
|
29
|
+
for (let paramList of Object.values(params)) {
|
|
30
|
+
for (let param of paramList) {
|
|
31
|
+
if (param.required && !param.value) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function Execute({
|
|
41
|
+
postman,
|
|
42
|
+
proxy
|
|
43
|
+
}) {
|
|
44
|
+
const pathParams = (0, _hooks.useTypedSelector)(state => state.params.path);
|
|
45
|
+
const queryParams = (0, _hooks.useTypedSelector)(state => state.params.query);
|
|
46
|
+
const cookieParams = (0, _hooks.useTypedSelector)(state => state.params.cookie);
|
|
47
|
+
const headerParams = (0, _hooks.useTypedSelector)(state => state.params.header);
|
|
48
|
+
const contentType = (0, _hooks.useTypedSelector)(state => state.contentType.value);
|
|
49
|
+
const body = (0, _hooks.useTypedSelector)(state => state.body);
|
|
50
|
+
const accept = (0, _hooks.useTypedSelector)(state => state.accept.value);
|
|
51
|
+
const server = (0, _hooks.useTypedSelector)(state => state.server.value);
|
|
52
|
+
const params = (0, _hooks.useTypedSelector)(state => state.params);
|
|
53
|
+
const auth = (0, _hooks.useTypedSelector)(state => state.auth);
|
|
54
|
+
const isValidRequest = validateRequest(params);
|
|
55
|
+
const dispatch = (0, _hooks.useTypedDispatch)();
|
|
56
|
+
const postmanRequest = (0, _buildPostmanRequest.default)(postman, {
|
|
57
|
+
queryParams,
|
|
58
|
+
pathParams,
|
|
59
|
+
cookieParams,
|
|
60
|
+
contentType,
|
|
61
|
+
accept,
|
|
62
|
+
headerParams,
|
|
63
|
+
body,
|
|
64
|
+
server,
|
|
65
|
+
auth
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
|
|
69
|
+
|
|
70
|
+
function openModal() {
|
|
71
|
+
setIsOpen(true);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function closeModal() {
|
|
75
|
+
setIsOpen(false);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function acceptAgreement() {
|
|
79
|
+
setIsOpen(false);
|
|
80
|
+
setAgreementAccepted(true);
|
|
81
|
+
sessionStorage.setItem("agreement-ack", "true");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const [modalIsOpen, setIsOpen] = _react.default.useState(false); // Set the following as default value to persist to session and enable modal
|
|
85
|
+
// sessionStorage.getItem("agreement-ack") === "true"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
const [agreementAccepted, setAgreementAccepted] = _react.default.useState(true);
|
|
89
|
+
|
|
90
|
+
const customStyles = {
|
|
91
|
+
overlay: {
|
|
92
|
+
backdropFilter: "blur(10px)",
|
|
93
|
+
backgroundColor: "transparent"
|
|
94
|
+
},
|
|
95
|
+
content: {
|
|
96
|
+
top: "50%",
|
|
97
|
+
left: "50%",
|
|
98
|
+
right: "auto",
|
|
99
|
+
bottom: "auto",
|
|
100
|
+
marginRight: "-50%",
|
|
101
|
+
border: "none",
|
|
102
|
+
padding: "none",
|
|
103
|
+
borderRadius: "var(--openapi-card-border-radius)",
|
|
104
|
+
background: "var(--ifm-card-background-color)",
|
|
105
|
+
transform: "translate(-50%, -50%)",
|
|
106
|
+
maxWidth: "550px"
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
if (agreementAccepted) {
|
|
111
|
+
return <button className="button button--sm button--secondary" disabled={!isValidRequest} onClick={async () => {
|
|
112
|
+
dispatch((0, _slice.setResponse)("Fetching..."));
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
await delay(1200);
|
|
116
|
+
const res = await (0, _makeRequest.default)(postmanRequest, proxy, body);
|
|
117
|
+
dispatch((0, _slice.setResponse)(res));
|
|
118
|
+
} catch (e) {
|
|
119
|
+
console.log(e);
|
|
120
|
+
dispatch((0, _slice.setResponse)("Connection failed"));
|
|
121
|
+
}
|
|
122
|
+
}}>
|
|
123
|
+
Send API Request
|
|
124
|
+
</button>;
|
|
125
|
+
} else {
|
|
126
|
+
return <_react.default.Fragment>
|
|
127
|
+
<button className="button button--sm button--secondary" onClick={openModal}>
|
|
128
|
+
Send API Request
|
|
129
|
+
</button>
|
|
130
|
+
<_reactModal.default isOpen={modalIsOpen} onRequestClose={closeModal} style={customStyles} contentLabel="Terms of Use">
|
|
131
|
+
<form>
|
|
132
|
+
<div className="card">
|
|
133
|
+
<div className="card__header">
|
|
134
|
+
<h2>Terms of Use</h2>
|
|
135
|
+
<hr></hr>
|
|
136
|
+
</div>
|
|
137
|
+
<div className="card__body">
|
|
138
|
+
<p>
|
|
139
|
+
By accepting this agreement the end user acknowledges the
|
|
140
|
+
risks of performing authenticated and non-authenticated API
|
|
141
|
+
requests from the browser.
|
|
142
|
+
</p>
|
|
143
|
+
<p>
|
|
144
|
+
The end user also accepts the responsibility of safeguarding
|
|
145
|
+
API credentials and any potentially sensitive data returned by
|
|
146
|
+
the API.
|
|
147
|
+
</p>
|
|
148
|
+
<br></br>
|
|
149
|
+
</div>
|
|
150
|
+
<div className="card__footer">
|
|
151
|
+
<div className="button-group button-group--block">
|
|
152
|
+
<button className="button button--sm button--outline button--success" onClick={acceptAgreement}>
|
|
153
|
+
AGREE
|
|
154
|
+
</button>
|
|
155
|
+
<button className="button button--sm button--outline button--danger" onClick={closeModal}>
|
|
156
|
+
DISAGREE
|
|
157
|
+
</button>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</form>
|
|
162
|
+
</_reactModal.default>
|
|
163
|
+
</_react.default.Fragment>;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
var _default = Execute;
|
|
168
|
+
exports.default = _default;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
/* ============================================================================
|
|
9
|
+
* Copyright (c) Palo Alto Networks
|
|
10
|
+
*
|
|
11
|
+
* This source code is licensed under the MIT license found in the
|
|
12
|
+
* LICENSE file in the root directory of this source tree.
|
|
13
|
+
* ========================================================================== */
|
|
14
|
+
function fetchWithtimeout(url, options, timeout = 5000) {
|
|
15
|
+
return Promise.race([fetch(url, options), new Promise((_, reject) => setTimeout(() => reject(new Error("Request timed out")), timeout))]);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function loadImage(content) {
|
|
19
|
+
return new Promise((accept, reject) => {
|
|
20
|
+
const reader = new FileReader();
|
|
21
|
+
|
|
22
|
+
reader.onabort = () => {
|
|
23
|
+
console.log("file reading was aborted");
|
|
24
|
+
reject();
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
reader.onerror = () => {
|
|
28
|
+
console.log("file reading has failed");
|
|
29
|
+
reject();
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
reader.onload = () => {
|
|
33
|
+
// Do whatever you want with the file contents
|
|
34
|
+
const binaryStr = reader.result;
|
|
35
|
+
accept(binaryStr);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
reader.readAsArrayBuffer(content);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
async function makeRequest(request, proxy, _body) {
|
|
43
|
+
var _request$body;
|
|
44
|
+
|
|
45
|
+
const headers = request.toJSON().header;
|
|
46
|
+
let myHeaders = new Headers();
|
|
47
|
+
|
|
48
|
+
if (headers) {
|
|
49
|
+
headers.forEach(header => {
|
|
50
|
+
if (header.key && header.value) {
|
|
51
|
+
myHeaders.append(header.key, header.value);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
} // The following code handles multiple files in the same formdata param.
|
|
55
|
+
// It removes the form data params where the src property is an array of filepath strings
|
|
56
|
+
// Splits that array into different form data params with src set as a single filepath string
|
|
57
|
+
// TODO:
|
|
58
|
+
// if (request.body && request.body.mode === 'formdata') {
|
|
59
|
+
// let formdata = request.body.formdata,
|
|
60
|
+
// formdataArray = [];
|
|
61
|
+
// formdata.members.forEach((param) => {
|
|
62
|
+
// let key = param.key,
|
|
63
|
+
// type = param.type,
|
|
64
|
+
// disabled = param.disabled,
|
|
65
|
+
// contentType = param.contentType;
|
|
66
|
+
// // check if type is file or text
|
|
67
|
+
// if (type === 'file') {
|
|
68
|
+
// // if src is not of type string we check for array(multiple files)
|
|
69
|
+
// if (typeof param.src !== 'string') {
|
|
70
|
+
// // if src is an array(not empty), iterate over it and add files as separate form fields
|
|
71
|
+
// if (Array.isArray(param.src) && param.src.length) {
|
|
72
|
+
// param.src.forEach((filePath) => {
|
|
73
|
+
// addFormParam(
|
|
74
|
+
// formdataArray,
|
|
75
|
+
// key,
|
|
76
|
+
// param.type,
|
|
77
|
+
// filePath,
|
|
78
|
+
// disabled,
|
|
79
|
+
// contentType
|
|
80
|
+
// );
|
|
81
|
+
// });
|
|
82
|
+
// }
|
|
83
|
+
// // if src is not an array or string, or is an empty array, add a placeholder for file path(no files case)
|
|
84
|
+
// else {
|
|
85
|
+
// addFormParam(
|
|
86
|
+
// formdataArray,
|
|
87
|
+
// key,
|
|
88
|
+
// param.type,
|
|
89
|
+
// '/path/to/file',
|
|
90
|
+
// disabled,
|
|
91
|
+
// contentType
|
|
92
|
+
// );
|
|
93
|
+
// }
|
|
94
|
+
// }
|
|
95
|
+
// // if src is string, directly add the param with src as filepath
|
|
96
|
+
// else {
|
|
97
|
+
// addFormParam(
|
|
98
|
+
// formdataArray,
|
|
99
|
+
// key,
|
|
100
|
+
// param.type,
|
|
101
|
+
// param.src,
|
|
102
|
+
// disabled,
|
|
103
|
+
// contentType
|
|
104
|
+
// );
|
|
105
|
+
// }
|
|
106
|
+
// }
|
|
107
|
+
// // if type is text, directly add it to formdata array
|
|
108
|
+
// else {
|
|
109
|
+
// addFormParam(
|
|
110
|
+
// formdataArray,
|
|
111
|
+
// key,
|
|
112
|
+
// param.type,
|
|
113
|
+
// param.value,
|
|
114
|
+
// disabled,
|
|
115
|
+
// contentType
|
|
116
|
+
// );
|
|
117
|
+
// }
|
|
118
|
+
// });
|
|
119
|
+
// request.body.update({
|
|
120
|
+
// mode: 'formdata',
|
|
121
|
+
// formdata: formdataArray,
|
|
122
|
+
// });
|
|
123
|
+
// }
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
const body = (_request$body = request.body) === null || _request$body === void 0 ? void 0 : _request$body.toJSON();
|
|
127
|
+
let myBody = undefined;
|
|
128
|
+
|
|
129
|
+
if (body !== undefined && Object.keys(body).length > 0) {
|
|
130
|
+
switch (body.mode) {
|
|
131
|
+
case "urlencoded":
|
|
132
|
+
{
|
|
133
|
+
myBody = new URLSearchParams();
|
|
134
|
+
|
|
135
|
+
if (Array.isArray(body.urlencoded)) {
|
|
136
|
+
for (const data of body.urlencoded) {
|
|
137
|
+
if (data.key && data.value) {
|
|
138
|
+
myBody.append(data.key, data.value);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
case "raw":
|
|
147
|
+
{
|
|
148
|
+
var _body$raw;
|
|
149
|
+
|
|
150
|
+
myBody = ((_body$raw = body.raw) !== null && _body$raw !== void 0 ? _body$raw : "").toString();
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
case "formdata":
|
|
155
|
+
{
|
|
156
|
+
myBody = new FormData();
|
|
157
|
+
|
|
158
|
+
if (Array.isArray(body.formdata)) {
|
|
159
|
+
for (const data of body.formdata) {
|
|
160
|
+
if (data.key && data.value) {
|
|
161
|
+
myBody.append(data.key, data.value);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
case "file":
|
|
170
|
+
{
|
|
171
|
+
var _body$content;
|
|
172
|
+
|
|
173
|
+
if (_body.type === "raw" && ((_body$content = _body.content) === null || _body$content === void 0 ? void 0 : _body$content.type) === "file") {
|
|
174
|
+
myBody = await loadImage(_body.content.value.content);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
default:
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const requestOptions = {
|
|
186
|
+
method: request.method,
|
|
187
|
+
headers: myHeaders,
|
|
188
|
+
body: myBody
|
|
189
|
+
};
|
|
190
|
+
let finalUrl = request.url.toString();
|
|
191
|
+
|
|
192
|
+
if (proxy) {
|
|
193
|
+
// Ensure the proxy ends with a slash.
|
|
194
|
+
let normalizedProxy = proxy.replace(/\/$/, "") + "/";
|
|
195
|
+
finalUrl = normalizedProxy + request.url.toString();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return await fetchWithtimeout(finalUrl, requestOptions).then(response => {
|
|
199
|
+
return response.text();
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
var _default = makeRequest;
|
|
204
|
+
exports.default = _default;
|
|
@@ -20,6 +20,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
20
20
|
function FormItem({
|
|
21
21
|
label,
|
|
22
22
|
type,
|
|
23
|
+
required,
|
|
23
24
|
children
|
|
24
25
|
}) {
|
|
25
26
|
return <div className={_stylesModule.default.formItem}>
|
|
@@ -27,6 +28,12 @@ function FormItem({
|
|
|
27
28
|
{type && <span style={{
|
|
28
29
|
opacity: 0.6
|
|
29
30
|
}}> — {type}</span>}
|
|
31
|
+
{required && <span>
|
|
32
|
+
{" "}
|
|
33
|
+
<small>
|
|
34
|
+
<strong className={_stylesModule.default.required}> required</strong>
|
|
35
|
+
</small>
|
|
36
|
+
</span>}
|
|
30
37
|
<div>{children}</div>
|
|
31
38
|
</div>;
|
|
32
39
|
}
|
|
@@ -64,7 +64,7 @@ function ParamOption({
|
|
|
64
64
|
function ParamOptionWrapper({
|
|
65
65
|
param
|
|
66
66
|
}) {
|
|
67
|
-
return <_FormItem.default label={param.name} type={param.in}>
|
|
67
|
+
return <_FormItem.default label={param.name} type={param.in} required={param.required}>
|
|
68
68
|
<ParamOption param={param} />
|
|
69
69
|
</_FormItem.default>;
|
|
70
70
|
}
|