diff --git a/ApiTestManager/src/APIClient.js b/ApiTestManager/src/APIClient.js index 88891ad..8f503a0 100644 --- a/ApiTestManager/src/APIClient.js +++ b/ApiTestManager/src/APIClient.js @@ -8,9 +8,9 @@ class APIClient { - CLIENT_URL = '/mgmt/api/test.do'; + CLIENT_URL = 'mgmt/api/test.do'; - constructor(contextPath) { + constructor() { window.globals = {}; this.variables = {}; this.abortController = null; diff --git a/src/main/resources/static/plugins/apitestmanager/app.bundle.js b/src/main/resources/static/plugins/apitestmanager/app.bundle.js index e844d6a..2a64111 100644 --- a/src/main/resources/static/plugins/apitestmanager/app.bundle.js +++ b/src/main/resources/static/plugins/apitestmanager/app.bundle.js @@ -510,7 +510,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * 처리 순서\n * 1. preRequestScript 실행 -> executePreRequestScript\n * 2. 변수 치환 -> replacePlaceholdersWithVariables\n * 3. API 호출 -> sendAPIRequest\n * 4. postRequestScript 실행 -> executePostRequestScript\n */\nvar APIClient = /*#__PURE__*/function () {\n function APIClient(contextPath) {\n _classCallCheck(this, APIClient);\n _defineProperty(this, \"CLIENT_URL\", '/mgmt/api/test.do');\n window.globals = {};\n this.variables = {};\n this.abortController = null;\n this.contextPath = document.querySelector('meta[name=\"context-path\"]').getAttribute('content');\n if (!this.contextPath) {\n this.contextPath = '/';\n }\n }\n _createClass(APIClient, [{\n key: \"getClientUrl\",\n value: function getClientUrl() {\n return this.contextPath + this.CLIENT_URL;\n }\n }, {\n key: \"sendAPIRequest\",\n value: function () {\n var _sendAPIRequest = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(model, preProcessCallback, consoleOutput) {\n var updatedModel, processedRequest, response, responseData, errorMessage, finalResponse;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.prev = 0;\n _context.next = 3;\n return this.executePreRequestScript(model, consoleOutput);\n case 3:\n updatedModel = _context.sent;\n processedRequest = this.replacePlaceholdersWithVariables(updatedModel);\n if (preProcessCallback) {\n preProcessCallback(processedRequest);\n }\n _context.next = 8;\n return this.makeAjaxRequest(processedRequest, model, consoleOutput);\n case 8:\n response = _context.sent;\n _context.next = 11;\n return response.json();\n case 11:\n responseData = _context.sent;\n if (response.ok) {\n _context.next = 15;\n break;\n }\n errorMessage = responseData.error || 'Unknown error';\n throw new Error(\"API \\uD638\\uCD9C \\uC911 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uC0AC\\uC720[\".concat(errorMessage, \"]\"));\n case 15:\n finalResponse = this.formatResponse(responseData);\n return _context.abrupt(\"return\", this.executePostRequestScript(model.postRequestScript, finalResponse, consoleOutput)[\"catch\"](function (error) {\n $('.toast-body').text(error);\n $('.toast').toast('show');\n return finalResponse; // Return the original response even if there's an error in the post-request script\n }));\n case 19:\n _context.prev = 19;\n _context.t0 = _context[\"catch\"](0);\n throw _context.t0;\n case 22:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this, [[0, 19]]);\n }));\n function sendAPIRequest(_x, _x2, _x3) {\n return _sendAPIRequest.apply(this, arguments);\n }\n return sendAPIRequest;\n }()\n }, {\n key: \"formatResponse\",\n value: function formatResponse(data) {\n // Format response as needed before post-request script\n var response = {};\n response.body = data.body;\n response.status = data.status;\n response.headers = {};\n response.size = data.size;\n _.forEach(data.headers, function (header) {\n response.headers[header.key] = header.value;\n });\n return response;\n }\n }, {\n key: \"abort\",\n value: function abort() {\n if (this.abortController) {\n this.abortController.abort(); // abort the fetch\n this.abortController = null; // reset the controller\n }\n }\n }, {\n key: \"makeAjaxRequest\",\n value: function makeAjaxRequest(processedRequest, model) {\n this.abortController = new AbortController();\n var signal = this.abortController.signal;\n try {\n return fetch(this.getClientUrl(), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-XSRF-TOKEN': $('meta[name=\"_csrf\"]').attr('content')\n },\n body: JSON.stringify(processedRequest),\n signal: signal // pass the signal to the fetch\n });\n } catch (error) {\n if (error.name !== 'AbortError') {\n console.error('Network request failed:', error);\n }\n throw error;\n }\n }\n }, {\n key: \"replacePlaceholdersWithVariables\",\n value: function replacePlaceholdersWithVariables(original) {\n var request = JSON.parse(JSON.stringify(original));\n var mergedVariables = {};\n _.forEach(window.globals, function (value, key) {\n mergedVariables[key] = value;\n });\n if (this.variables) {\n _.forEach(this.variables, function (value, key) {\n mergedVariables[key] = value;\n });\n }\n _.forEach(mergedVariables, function (value, key) {\n var placeholder = \"{{\".concat(key, \"}}\");\n // Replace in path\n request.path = request.path.replace(new RegExp(placeholder, 'g'), value);\n\n // Replace in requestBody\n if (request.requestBody) {\n request.requestBody = request.requestBody.replace(new RegExp(placeholder, 'g'), value);\n }\n\n // Replace in headers\n if (request.headers) {\n var replaced = JSON.stringify(request.headers).replace(new RegExp(placeholder, 'g'), value);\n request.headers = JSON.parse(replaced);\n }\n\n // Replace in queryParams\n if (request.queryParams) {\n var _replaced = JSON.stringify(request.queryParams).replace(new RegExp(placeholder, 'g'), value);\n request.queryParams = JSON.parse(_replaced);\n }\n });\n return request;\n }\n }, {\n key: \"executePreRequestScript\",\n value: function executePreRequestScript(model, consoleOutput) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var script = model.preRequestScript;\n var resultFrame = document.getElementById('preRequest');\n _this.variables = {};\n window.preRequestComplete = function (updatedModel, error) {\n if (error) {\n reject(error);\n } else {\n resolve(updatedModel);\n }\n };\n window.temp_variable = _this.variables;\n window.currentRequest = model;\n window.consoleOutput = consoleOutput;\n resultFrame.srcdoc = \"\");\n });\n }\n }, {\n key: \"executePostRequestScript\",\n value: function executePostRequestScript(script, response, consoleOutput) {\n var _this2 = this;\n return new Promise(function (resolve, reject) {\n var resultFrame = document.getElementById('postRequest');\n window.response = response;\n window.temp_variable = _this2.variables;\n window.postRequestComplete = function (response, error) {\n if (error) {\n reject(error);\n } else {\n resolve(response);\n }\n };\n window.consoleOutput = consoleOutput;\n resultFrame.srcdoc = \"\");\n });\n }\n }]);\n return APIClient;\n}();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (APIClient);\n\n//# sourceURL=webpack://APITestManager/./src/APIClient.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n/**\n * 처리 순서\n * 1. preRequestScript 실행 -> executePreRequestScript\n * 2. 변수 치환 -> replacePlaceholdersWithVariables\n * 3. API 호출 -> sendAPIRequest\n * 4. postRequestScript 실행 -> executePostRequestScript\n */\nvar APIClient = /*#__PURE__*/function () {\n function APIClient() {\n _classCallCheck(this, APIClient);\n _defineProperty(this, \"CLIENT_URL\", 'mgmt/api/test.do');\n window.globals = {};\n this.variables = {};\n this.abortController = null;\n this.contextPath = document.querySelector('meta[name=\"context-path\"]').getAttribute('content');\n if (!this.contextPath) {\n this.contextPath = '/';\n }\n }\n _createClass(APIClient, [{\n key: \"getClientUrl\",\n value: function getClientUrl() {\n return this.contextPath + this.CLIENT_URL;\n }\n }, {\n key: \"sendAPIRequest\",\n value: function () {\n var _sendAPIRequest = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(model, preProcessCallback, consoleOutput) {\n var updatedModel, processedRequest, response, responseData, errorMessage, finalResponse;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.prev = 0;\n _context.next = 3;\n return this.executePreRequestScript(model, consoleOutput);\n case 3:\n updatedModel = _context.sent;\n processedRequest = this.replacePlaceholdersWithVariables(updatedModel);\n if (preProcessCallback) {\n preProcessCallback(processedRequest);\n }\n _context.next = 8;\n return this.makeAjaxRequest(processedRequest, model, consoleOutput);\n case 8:\n response = _context.sent;\n _context.next = 11;\n return response.json();\n case 11:\n responseData = _context.sent;\n if (response.ok) {\n _context.next = 15;\n break;\n }\n errorMessage = responseData.error || 'Unknown error';\n throw new Error(\"API \\uD638\\uCD9C \\uC911 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uC0AC\\uC720[\".concat(errorMessage, \"]\"));\n case 15:\n finalResponse = this.formatResponse(responseData);\n return _context.abrupt(\"return\", this.executePostRequestScript(model.postRequestScript, finalResponse, consoleOutput)[\"catch\"](function (error) {\n $('.toast-body').text(error);\n $('.toast').toast('show');\n return finalResponse; // Return the original response even if there's an error in the post-request script\n }));\n case 19:\n _context.prev = 19;\n _context.t0 = _context[\"catch\"](0);\n throw _context.t0;\n case 22:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this, [[0, 19]]);\n }));\n function sendAPIRequest(_x, _x2, _x3) {\n return _sendAPIRequest.apply(this, arguments);\n }\n return sendAPIRequest;\n }()\n }, {\n key: \"formatResponse\",\n value: function formatResponse(data) {\n // Format response as needed before post-request script\n var response = {};\n response.body = data.body;\n response.status = data.status;\n response.headers = {};\n response.size = data.size;\n _.forEach(data.headers, function (header) {\n response.headers[header.key] = header.value;\n });\n return response;\n }\n }, {\n key: \"abort\",\n value: function abort() {\n if (this.abortController) {\n this.abortController.abort(); // abort the fetch\n this.abortController = null; // reset the controller\n }\n }\n }, {\n key: \"makeAjaxRequest\",\n value: function makeAjaxRequest(processedRequest, model) {\n this.abortController = new AbortController();\n var signal = this.abortController.signal;\n try {\n return fetch(this.getClientUrl(), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-XSRF-TOKEN': $('meta[name=\"_csrf\"]').attr('content')\n },\n body: JSON.stringify(processedRequest),\n signal: signal // pass the signal to the fetch\n });\n } catch (error) {\n if (error.name !== 'AbortError') {\n console.error('Network request failed:', error);\n }\n throw error;\n }\n }\n }, {\n key: \"replacePlaceholdersWithVariables\",\n value: function replacePlaceholdersWithVariables(original) {\n var request = JSON.parse(JSON.stringify(original));\n var mergedVariables = {};\n _.forEach(window.globals, function (value, key) {\n mergedVariables[key] = value;\n });\n if (this.variables) {\n _.forEach(this.variables, function (value, key) {\n mergedVariables[key] = value;\n });\n }\n _.forEach(mergedVariables, function (value, key) {\n var placeholder = \"{{\".concat(key, \"}}\");\n // Replace in path\n request.path = request.path.replace(new RegExp(placeholder, 'g'), value);\n\n // Replace in requestBody\n if (request.requestBody) {\n request.requestBody = request.requestBody.replace(new RegExp(placeholder, 'g'), value);\n }\n\n // Replace in headers\n if (request.headers) {\n var replaced = JSON.stringify(request.headers).replace(new RegExp(placeholder, 'g'), value);\n request.headers = JSON.parse(replaced);\n }\n\n // Replace in queryParams\n if (request.queryParams) {\n var _replaced = JSON.stringify(request.queryParams).replace(new RegExp(placeholder, 'g'), value);\n request.queryParams = JSON.parse(_replaced);\n }\n });\n return request;\n }\n }, {\n key: \"executePreRequestScript\",\n value: function executePreRequestScript(model, consoleOutput) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var script = model.preRequestScript;\n var resultFrame = document.getElementById('preRequest');\n _this.variables = {};\n window.preRequestComplete = function (updatedModel, error) {\n if (error) {\n reject(error);\n } else {\n resolve(updatedModel);\n }\n };\n window.temp_variable = _this.variables;\n window.currentRequest = model;\n window.consoleOutput = consoleOutput;\n resultFrame.srcdoc = \"\");\n });\n }\n }, {\n key: \"executePostRequestScript\",\n value: function executePostRequestScript(script, response, consoleOutput) {\n var _this2 = this;\n return new Promise(function (resolve, reject) {\n var resultFrame = document.getElementById('postRequest');\n window.response = response;\n window.temp_variable = _this2.variables;\n window.postRequestComplete = function (response, error) {\n if (error) {\n reject(error);\n } else {\n resolve(response);\n }\n };\n window.consoleOutput = consoleOutput;\n resultFrame.srcdoc = \"\");\n });\n }\n }]);\n return APIClient;\n}();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (APIClient);\n\n//# sourceURL=webpack://APITestManager/./src/APIClient.js?"); /***/ }),