sales-frontend-debug 0.0.25 โ†’ 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -379,9 +379,6 @@ var MenuPanel = ({ menuItems: menuItems2, onMenuItemClick, onClose, serviceCode
379
379
  cookieClient.deleteCookie("x-channel-platformversion");
380
380
  cookieClient.deleteCookie("x-channel-screenid");
381
381
  cookieClient.deleteCookie("x-channel-business-work-division-code");
382
- cookieClient.deleteCookie("accessToken");
383
- cookieClient.deleteCookie("dsp-debug-mode");
384
- cookieClient.deleteCookie("Debug-Step-Validation-Off");
385
382
  alert("\uCEE4\uC2A4\uD140\uCFE0\uD0A4\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
386
383
  console.log("\uCEE4\uC2A4\uD140\uCFE0\uD0A4\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", {
387
384
  "x-channel-appversion": cookieClient.getCookie("x-channel-appversion"),
@@ -398,16 +395,19 @@ var MenuPanel = ({ menuItems: menuItems2, onMenuItemClick, onClose, serviceCode
398
395
  };
399
396
  const handleDeleteTokenCookie = () => {
400
397
  cookieClient.deleteCookie("accessToken");
401
- cookieClient.deleteCookie("dsp-debug-mode");
402
- cookieClient.deleteCookie("Debug-Step-Validation-Off");
403
398
  alert("\uD1A0\uD070\uCFE0\uD0A4\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
404
399
  console.log("\uD1A0\uD070\uCFE0\uD0A4\uAC00 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", {
405
- accessToken: cookieClient.getCookie("accessToken"),
406
- "dsp-debug-mode": cookieClient.getCookie("dsp-debug-mode"),
407
- "Debug-Step-Validation-Off": cookieClient.getCookie("Debug-Step-Validation-Off")
400
+ accessToken: cookieClient.getCookie("accessToken")
401
+ });
402
+ };
403
+ const handleFormFactor = (formFactor) => {
404
+ cookieClient.setCookie("x-channel-formfactor", formFactor);
405
+ alert(`\uD3FC\uD329\uD130\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.:${formFactor}`);
406
+ console.log("\uD3FC\uD329\uD130\uAC00 \uBCC0\uACBD\uB418\uC5C8\uC2B5\uB2C8\uB2E4.", {
407
+ "x-channel-formfactor": cookieClient.getCookie("x-channel-formfactor")
408
408
  });
409
409
  };
410
- return /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement("div", { style: modalOverlayStyle, onClick: onClose }), /* @__PURE__ */ React4.createElement("div", { style: debugMenuPanelStyle }, /* @__PURE__ */ React4.createElement("div", { style: panelHeaderStyle }, /* @__PURE__ */ React4.createElement("h2", { style: h2Style }, "Debug Menu"), /* @__PURE__ */ React4.createElement("button", { onClick: onClose }, "X")), /* @__PURE__ */ React4.createElement("ul", null, menuItems2.map((item) => /* @__PURE__ */ React4.createElement("li", { key: item.id, onClick: () => onMenuItemClick(item.component), style: menuItemStyle }, item.label))), serviceCode === "dsp" && /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement("div", { style: panelHeaderStyle }, /* @__PURE__ */ React4.createElement("h2", { style: h2Style }, "\uD504\uB9AC\uC14B")), /* @__PURE__ */ React4.createElement("ul", null, /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle }, "\uC544\uC774\uD3F0"), /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle }, "\uC548\uB4DC\uB85C\uC774\uB4DC"), /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle }, "\uD0DC\uBE14\uB9BF")), /* @__PURE__ */ React4.createElement("div", { style: panelHeaderStyle }, /* @__PURE__ */ React4.createElement("h2", { style: h2Style }, "\uCD08\uAE30\uD654")), /* @__PURE__ */ React4.createElement("ul", null, /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle }, /* @__PURE__ */ React4.createElement("button", { onClick: handleDeleteCustomCookie }, "\uCEE4\uC2A4\uD140(x-channel-) \uC0AD\uC81C")), /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle }, /* @__PURE__ */ React4.createElement("button", { onClick: handleDeleteTokenCookie }, "\uD1A0\uD070 \uC0AD\uC81C"))))));
410
+ return /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement("div", { style: modalOverlayStyle, onClick: onClose }), /* @__PURE__ */ React4.createElement("div", { style: debugMenuPanelStyle }, /* @__PURE__ */ React4.createElement("div", { style: panelHeaderStyle }, /* @__PURE__ */ React4.createElement("h2", { style: h2Style }, "Debug Menu"), /* @__PURE__ */ React4.createElement("button", { onClick: onClose }, "X")), /* @__PURE__ */ React4.createElement("ul", null, menuItems2.map((item) => /* @__PURE__ */ React4.createElement("li", { key: item.id, onClick: () => onMenuItemClick(item.component), style: menuItemStyle }, item.label))), serviceCode === "dsp" && /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement("div", { style: panelHeaderStyle }, /* @__PURE__ */ React4.createElement("h2", { style: h2Style }, "\uD3FC\uD329\uD130")), /* @__PURE__ */ React4.createElement("ul", null, /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle, onClick: () => handleFormFactor("tablet") }, "Tablet"), /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle, onClick: () => handleFormFactor("phone") }, "Phone"), /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle, onClick: () => handleFormFactor("pc") }, "PC")), /* @__PURE__ */ React4.createElement("div", { style: panelHeaderStyle }, /* @__PURE__ */ React4.createElement("h2", { style: h2Style }, "\uCD08\uAE30\uD654")), /* @__PURE__ */ React4.createElement("ul", null, /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle }, /* @__PURE__ */ React4.createElement("button", { onClick: handleDeleteCustomCookie }, "\uCEE4\uC2A4\uD140(x-channel-) \uC0AD\uC81C")), /* @__PURE__ */ React4.createElement("li", { style: menuItemStyle }, /* @__PURE__ */ React4.createElement("button", { onClick: handleDeleteTokenCookie }, "\uD1A0\uD070 \uC0AD\uC81C"))))));
411
411
  };
412
412
  var menu_panel_default = MenuPanel;
413
413
  var globalLogs = [];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles/styles.ts","../src/components/floating-button.tsx","../src/features/storage/use-storage.ts","../src/components/menu-panel.tsx","../src/features/console-log/use-console-log.ts","../src/features/console-log/console-log-panel.tsx","../src/features/login-dsp/login-panel.tsx","../src/features/network-log/index.tsx","../src/features/page-navigation/page-navigation-panel.tsx","../src/features/script-executor/script-executor-panel.tsx","../src/features/storage/storage-panel.tsx","../src/config.tsx","../src/hooks/use-environment.ts","../src/debug-tool.tsx","../src/interceptor-function.ts","../src/debug-utils.ts"],"names":["React","useState","menuItems","useEffect","useCallback","useRef","useMemo","logTypeStyles","safeStringify","getEnvironmentFromHostname","useDebugStore"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\n\nimport { LogType } from '../types';\n\nexport const debugFloatingButtonStyle: React.CSSProperties = {\n position: 'fixed',\n right: '10px',\n bottom: '80px',\n borderRadius: '50%',\n backgroundColor: '#f0f0f0',\n border: '1px solid #ccc',\n padding: '8px 12px',\n fontWeight: 'bold',\n zIndex: 9999\n};\n\nexport const debugMenuPanelStyle: React.CSSProperties = {\n position: 'fixed',\n right: '20px',\n bottom: '90px',\n display: 'flex',\n flexDirection: 'column',\n // maxHeight: '500px',\n backgroundColor: '#ffffff',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',\n zIndex: 10000\n};\n\nexport const panelHeaderStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 15px',\n backgroundColor: '#f5f5f5',\n borderBottom: '1px solid #e0e0e0',\n flexShrink: 0\n};\n\nexport const h2Style: React.CSSProperties = {\n margin: 0,\n fontSize: '16px'\n};\n\nexport const modalOverlayStyle: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 9999\n};\n\nexport const debugFeaturePanelStyle: React.CSSProperties = {\n margin: '20px',\n position: 'fixed',\n top: 0,\n left: 0,\n width: 'calc(100% - 40px)',\n height: 'calc(100% - 40px)',\n backgroundColor: '#ffffff',\n zIndex: 10001,\n display: 'flex',\n flexDirection: 'column'\n};\n\nexport const panelToolbarStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: '10px',\n borderBottom: '1px solid #e0e0e0',\n gap: '8px',\n flexShrink: 0\n};\n\nexport const logListContainerStyle: React.CSSProperties = {\n flex: 1,\n padding: '10px',\n overflowY: 'auto',\n fontFamily: 'monospace',\n fontSize: '12px',\n backgroundColor: '#ffffff'\n};\n\nexport const logItemStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n padding: '4px 0',\n borderBottom: '1px solid #e0e0e0'\n};\n\nexport const logTimestampStyle: React.CSSProperties = {\n marginRight: '10px',\n color: '#888888'\n};\n\nexport const logMessageStyle: React.CSSProperties = {\n margin: 0,\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap'\n};\n\nexport const logTypeStyles: { [key in LogType | 'return']: React.CSSProperties } = {\n log: { color: '#333333' },\n info: { color: '#007bff' },\n warn: { color: '#ffc107' },\n error: { color: '#dc3545' },\n debug: { color: '#6c757d' },\n return: { color: '#8a2be2' }\n};\n\nexport const loginFormContainerStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n gap: '15px',\n padding: '20px',\n overflowY: 'auto'\n};\n\nexport const formActionsStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-start',\n marginTop: '10px'\n};\n\nexport const searchContainerStyle: React.CSSProperties = {\n display: 'flex',\n gap: '8px',\n marginBottom: '16px',\n alignItems: 'center'\n};\n\nexport const logListStyle: React.CSSProperties = {\n overflowY: 'auto'\n};\n\nexport const logSummaryStyle: React.CSSProperties = {\n wordBreak: 'break-all',\n margin: 0,\n cursor: 'pointer'\n};\n\nexport const logContentStyle: React.CSSProperties = {\n padding: '8px',\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap',\n backgroundColor: '#f5f5f5',\n borderRadius: '4px'\n};\n\nexport const pageNavigationContentStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n padding: '20px'\n};\n\nexport const h3Style: React.CSSProperties = {\n margin: 0,\n fontSize: '16px'\n};\n\nexport const scriptExecutorContentStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n overflow: 'hidden'\n};\n\nexport const scriptInputSectionStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n minHeight: '150px',\n borderBottom: '1px solid #e0e0e0'\n};\n\nexport const scriptTextareaStyle: React.CSSProperties = {\n flex: 1,\n width: '100%',\n padding: '10px',\n fontFamily: 'monospace',\n fontSize: '14px',\n resize: 'none',\n outline: 'none',\n border: 'none'\n};\n\nexport const scriptActionsStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '8px',\n padding: '8px',\n borderTop: '1px solid #e0e0e0'\n};\n\nexport const scriptOutputSectionStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n overflow: 'hidden'\n};\n\nexport const storageSearchInputStyle: React.CSSProperties = {\n width: '100%',\n padding: '8px',\n border: '1px solid #ccc',\n borderRadius: '4px'\n};\n\nexport const storageTableContainerStyle: React.CSSProperties = {\n flex: 1,\n overflowY: 'auto',\n padding: '10px'\n};\n\nexport const menuItemStyle: React.CSSProperties = {\n cursor: 'pointer',\n padding: '8px 12px'\n};\n\nexport const clearButtonStyle: React.CSSProperties = {\n marginLeft: 'auto'\n};\n\nexport const networkLogContainerStyle: React.CSSProperties = {\n padding: '10px',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'hidden'\n};\n\nexport const flex1Style: React.CSSProperties = {\n flex: 1\n};\n\nexport const holdButtonsContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n marginBottom: '10px'\n};\n\nexport const textareaStyle: React.CSSProperties = {\n width: '100%',\n minHeight: '80px'\n};\n","import React, { useState, useRef } from 'react';\n\n/**\n * @file ๋””๋ฒ„๊ทธ ํˆด์„ ์—ด๊ธฐ ์œ„ํ•œ ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description ํ™”๋ฉด ์šฐ์ธก ํ•˜๋‹จ์— ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ํด๋ฆญ ์‹œ ๋ฉ”๋‰ด ํŒจ๋„์„ ํ† ๊ธ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ์œ„์น˜๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n */\n\nimport { debugFloatingButtonStyle } from '../styles/styles';\n\ninterface FloatingButtonProps {\n /** ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜ */\n onClick: () => void;\n}\n\nconst FloatingButton: React.FC<FloatingButtonProps> = ({ onClick }) => {\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const dragHappened = useRef(false);\n const dragStartPos = useRef({ x: 0, y: 0 });\n const elementStartPos = useRef({ x: 0, y: 0 });\n\n const handleMouseDown = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (e.button !== 0) {\n return;\n }\n dragHappened.current = false;\n setIsDragging(true);\n dragStartPos.current = { x: e.clientX, y: e.clientY };\n elementStartPos.current = { ...position };\n\n const handleMouseMove = (event: MouseEvent) => {\n const dx = event.clientX - dragStartPos.current.x;\n const dy = event.clientY - dragStartPos.current.y;\n\n if (!dragHappened.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\n dragHappened.current = true;\n }\n\n setPosition({\n x: elementStartPos.current.x + dx,\n y: elementStartPos.current.y + dy\n });\n };\n\n const handleMouseUp = () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n setIsDragging(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n };\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (dragHappened.current) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n onClick();\n };\n\n const buttonStyle: React.CSSProperties = {\n ...debugFloatingButtonStyle,\n transform: `translate(${position.x}px, ${position.y}px)`,\n cursor: isDragging ? 'grabbing' : 'grab'\n };\n\n return (\n <button\n style={buttonStyle}\n onMouseDown={handleMouseDown}\n onClick={handleClick}\n >\n DEBUG\n </button>\n );\n};\n\nexport default FloatingButton;","import { useState, useEffect, useCallback } from 'react';\n\nimport { StorageType, StorageItem } from '../../types';\n\n/**\n * ํด๋ผ์ด์–ธํŠธ์šฉ ์ฟ ํ‚ค ํ•จ์ˆ˜\n */\nexport const cookieClient = {\n getCookie(name: string): string {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n },\n\n setCookie(\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n ): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n },\n deleteCookie(name: string, options: { path?: string; domain?: string } = {}): void {\n cookieClient.setCookie(name, '', { ...options, expires: -1 });\n }\n};\n\n/**\n * @file '์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ' ๊ธฐ๋Šฅ์˜ ํ•ต์‹ฌ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ํ›…์ž…๋‹ˆ๋‹ค.\n * @description\n * - `localStorage`์™€ `document.cookie`์˜ ๋ณต์žกํ•œ API๋ฅผ ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.\n * - `storageType` prop์— ๋”ฐ๋ผ ๋‘ ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ CRUD ๋กœ์ง์„ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.\n */\n\n/**\n * `localStorage` ๋˜๋Š” `cookie` ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ›…์ž…๋‹ˆ๋‹ค.\n * @param storageType - ๊ด€๋ฆฌํ•  ์Šคํ† ๋ฆฌ์ง€์˜ ์ข…๋ฅ˜ ('localStorage' ๋˜๋Š” 'cookie')\n * @returns { items, setItem, removeItem, loadItems }\n */\nexport const useStorage = (storageType: StorageType) => {\n const [items, setItems] = useState<StorageItem[]>([]);\n\n // ์Šคํ† ๋ฆฌ์ง€์—์„œ ๋ชจ๋“  ์•„์ดํ…œ์„ ๋ถˆ๋Ÿฌ์™€ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.\n const loadItems = useCallback(() => {\n const newItems: StorageItem[] = [];\n if (storageType === 'localStorage') {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key) {\n newItems.push({ key, value: localStorage.getItem(key) || '' });\n }\n }\n } else {\n const cookies = document.cookie.split(';');\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n const key = parts.shift()?.trim();\n if (key) {\n newItems.push({ key, value: decodeURIComponent(parts.join('=')) });\n }\n });\n }\n setItems(newItems);\n }, [storageType]);\n\n // ์ปดํฌ๋„ŒํŠธ ๋งˆ์šดํŠธ ์‹œ ์•„์ดํ…œ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // ์Šคํ† ๋ฆฌ์ง€์— ์•„์ดํ…œ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.\n const setItem = useCallback(\n (key: string, value: string) => {\n if (storageType === 'localStorage') {\n localStorage.setItem(key, value);\n } else {\n cookieClient.setCookie(key, value);\n }\n loadItems(); // ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n // ์Šคํ† ๋ฆฌ์ง€์—์„œ ์•„์ดํ…œ์„ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.\n const removeItem = useCallback(\n (key: string) => {\n if (storageType === 'localStorage') {\n localStorage.removeItem(key);\n } else {\n cookieClient.deleteCookie(key);\n }\n loadItems(); // ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n return { items, setItem, removeItem, loadItems };\n};\n","import React from 'react';\n\nimport { cookieClient } from '../features/storage/use-storage';\nimport { debugMenuPanelStyle, h2Style, menuItemStyle, modalOverlayStyle, panelHeaderStyle } from '../styles/styles';\nimport { DebugToolServiceCode, MenuItem } from '../types';\n\n/**\n * @file ๋””๋ฒ„๊ทธ ํˆด์˜ ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฉ”๋‰ด ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description `config.ts`์—์„œ ์ •์˜๋œ ๋ฉ”๋‰ด ์•„์ดํ…œ๋“ค์„ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.\n */\n\ninterface MenuPanelProps {\n /** ํ‘œ์‹œํ•  ๋ฉ”๋‰ด ์•„์ดํ…œ์˜ ๋ฐฐ์—ด */\n menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n /** ๋ฉ”๋‰ด ์•„์ดํ…œ ํด๋ฆญ ์‹œ ํ˜ธ์ถœ๋  ์ฝœ๋ฐฑ ํ•จ์ˆ˜ */\n onMenuItemClick: (component: React.ComponentType) => void;\n /** ํŒจ๋„์„ ๋‹ซ์„ ๋•Œ ํ˜ธ์ถœ๋  ์ฝœ๋ฐฑ ํ•จ์ˆ˜ */\n onClose: () => void;\n serviceCode: DebugToolServiceCode;\n}\n\nconst MenuPanel: React.FC<MenuPanelProps> = ({ menuItems, onMenuItemClick, onClose, serviceCode }) => {\n const handleDeleteCustomCookie = () => {\n cookieClient.deleteCookie('x-channel-appversion');\n cookieClient.deleteCookie('x-channel-deviceid');\n cookieClient.deleteCookie('x-channel-devicemodel');\n cookieClient.deleteCookie('x-channel-formfactor');\n cookieClient.deleteCookie('x-channel-loginchannel');\n cookieClient.deleteCookie('x-channel-logintype');\n cookieClient.deleteCookie('x-channel-platformname');\n cookieClient.deleteCookie('x-channel-platformversion');\n cookieClient.deleteCookie('x-channel-screenid');\n cookieClient.deleteCookie('x-channel-business-work-division-code');\n cookieClient.deleteCookie('accessToken');\n cookieClient.deleteCookie('dsp-debug-mode');\n cookieClient.deleteCookie('Debug-Step-Validation-Off');\n alert('์ปค์Šคํ…€์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('์ปค์Šคํ…€์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'x-channel-appversion': cookieClient.getCookie('x-channel-appversion'),\n 'x-channel-deviceid': cookieClient.getCookie('x-channel-deviceid'),\n 'x-channel-devicemodel': cookieClient.getCookie('x-channel-devicemodel'),\n 'x-channel-formfactor': cookieClient.getCookie('x-channel-formfactor'),\n 'x-channel-loginchannel': cookieClient.getCookie('x-channel-loginchannel'),\n 'x-channel-logintype': cookieClient.getCookie('x-channel-logintype'),\n 'x-channel-platformname': cookieClient.getCookie('x-channel-platformname'),\n 'x-channel-platformversion': cookieClient.getCookie('x-channel-platformversion'),\n 'x-channel-screenid': cookieClient.getCookie('x-channel-screenid'),\n 'x-channel-business-work-division-code': cookieClient.getCookie('x-channel-business-work-division-code')\n });\n };\n\n const handleDeleteTokenCookie = () => {\n cookieClient.deleteCookie('accessToken');\n cookieClient.deleteCookie('dsp-debug-mode');\n cookieClient.deleteCookie('Debug-Step-Validation-Off');\n alert('ํ† ํฐ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('ํ† ํฐ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n accessToken: cookieClient.getCookie('accessToken'),\n 'dsp-debug-mode': cookieClient.getCookie('dsp-debug-mode'),\n 'Debug-Step-Validation-Off': cookieClient.getCookie('Debug-Step-Validation-Off')\n });\n };\n\n const handleDeleteAllCookies = () => {\n handleDeleteCustomCookie();\n handleDeleteTokenCookie();\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugMenuPanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Debug Menu</h2>\n <button onClick={onClose}>X</button>\n </div>\n <ul>\n {menuItems.map((item) => (\n <li key={item.id} onClick={() => onMenuItemClick(item.component)} style={menuItemStyle}>\n {item.label}\n </li>\n ))}\n </ul>\n {serviceCode === 'dsp' && (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>ํ”„๋ฆฌ์…‹</h2>\n </div>\n <ul>\n <li style={menuItemStyle}>์•„์ดํฐ</li>\n <li style={menuItemStyle}>์•ˆ๋“œ๋กœ์ด๋“œ</li>\n <li style={menuItemStyle}>ํƒœ๋ธ”๋ฆฟ</li>\n </ul>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์ดˆ๊ธฐํ™”</h2>\n </div>\n <ul>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteCustomCookie}>์ปค์Šคํ…€(x-channel-) ์‚ญ์ œ</button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteTokenCookie}>ํ† ํฐ ์‚ญ์ œ</button>\n </li>\n </ul>\n </>\n )}\n </div>\n </>\n );\n};\n\nexport default MenuPanel;\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { LogEntry, LogType } from '../../types';\n\n/**\n * @file '์ฝ˜์†” ๋กœ๊ทธ ํ™•์ธ' ๊ธฐ๋Šฅ์˜ ํ•ต์‹ฌ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ํ›…์ž…๋‹ˆ๋‹ค.\n * @description\n * - ์ „์—ญ(๋ชจ๋“ˆ ์Šค์ฝ”ํ”„) ์ƒํƒœ๋กœ ๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ, ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.\n * - `console` ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๊ฐ€๋กœ์ฑ•๋‹ˆ๋‹ค.\n * - ์˜ต์ €๋ฒ„ ํŒจํ„ด(listeners)์„ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋กœ๊ทธ ์ƒํƒœ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.\n */\n\n// ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋กœ๊ทธ ๋ฐฐ์—ด. ์•ฑ ์ „์ฒด์˜ ๋กœ๊ทธ๊ฐ€ ์—ฌ๊ธฐ์— ์Œ“์ž…๋‹ˆ๋‹ค.\nlet globalLogs: LogEntry[] = [];\n// ๋กœ๊ทธ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ์„ ๊ตฌ๋…ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ(์˜ setState ํ•จ์ˆ˜) ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.\nlet listeners: React.Dispatch<React.SetStateAction<LogEntry[]>>[] = [];\n\n// ๊ธฐ์กด console ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐฑ์—…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.\nconst originalConsoleMethods: { [key in LogType]?: (...args: any[]) => void } = {};\n// ์ฝ˜์†”์ด ์ด๋ฏธ ์˜ค๋ฒ„๋ผ์ด๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.\nlet isConsoleOverridden = false;\n\n// ์ƒˆ๋กœ์šด ๋กœ๊ทธ๋ฅผ ์ „์—ญ ๋กœ๊ทธ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋ชจ๋“  ๊ตฌ๋…์ž์—๊ฒŒ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.\nconst addLog = (type: LogType, ...args: any[]) => {\n const newLog: LogEntry = {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n };\n globalLogs = [...globalLogs, newLog];\n listeners.forEach((listener) => listener([...globalLogs]));\n};\n\n/**\n * `console` ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋กœ๊ทธ ์ˆ˜์ง‘์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.\n * ์ค‘๋ณต ์‹คํ–‰์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `isConsoleOverridden` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.\n */\nexport const initializeConsoleLogOverride = () => {\n if (!isClient() || isConsoleOverridden) {\n return;\n }\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n\n logTypes.forEach((type) => {\n // ๊ธฐ์กด ๋ฉ”์„œ๋“œ ์ €์žฅ\n originalConsoleMethods[type] = console[type];\n\n // ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋“œ\n console[type] = (...args: any[]) => {\n // ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์—๋Š” ์ •์ƒ์ ์œผ๋กœ ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.\n if (originalConsoleMethods[type]) {\n originalConsoleMethods[type]?.apply(console, args);\n }\n // ๊ทธ ๋‹ค์Œ, ๋””๋ฒ„๊ทธ ํˆด์˜ ๋กœ๊ทธ ์ƒํƒœ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.\n addLog(type, ...args);\n };\n });\n\n isConsoleOverridden = true;\n};\n\n/**\n * ์˜ค๋ฒ„๋ผ์ด๋“œํ–ˆ๋˜ `console` ๋ฉ”์„œ๋“œ๋ฅผ ์›๋ž˜๋Œ€๋กœ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.\n * `DebugTool` ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.\n */\nexport const restoreConsoleLog = () => {\n if (!isClient() || !isConsoleOverridden) {\n return;\n }\n\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n logTypes.forEach((type) => {\n if (originalConsoleMethods[type]) {\n console[type] = originalConsoleMethods[type];\n }\n });\n isConsoleOverridden = false;\n};\n\n/**\n * ์ปดํฌ๋„ŒํŠธ์—์„œ ์ฝ˜์†” ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ›…์ž…๋‹ˆ๋‹ค.\n * @returns { logs, clearLogs }\n */\nexport const useConsoleLog = () => {\n const [logs, setLogs] = useState<LogEntry[]>(globalLogs);\n\n useEffect(() => {\n // ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ, ์ž์‹ ์˜ setState ํ•จ์ˆ˜๋ฅผ listener๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.\n listeners.push(setLogs);\n\n // ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋  ๋•Œ, listener์—์„œ ์ œ๊ฑฐํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.\n return () => {\n listeners = listeners.filter((l) => l !== setLogs);\n };\n }, []);\n\n // ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ง€์šฐ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.\n const clearLogs = useCallback(() => {\n globalLogs = [];\n listeners.forEach((listener) => listener([]));\n }, []);\n\n return { logs, clearLogs };\n};\n","import React, { useState, useRef, useMemo, useEffect } from 'react';\n\nimport {\n clearButtonStyle,\n debugFeaturePanelStyle,\n h2Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n logTypeStyles,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LogType, LogEntry } from '../../types';\n\nimport { useConsoleLog } from './use-console-log';\n\nconst safeStringify = (obj: any): string => {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst LogMessage: React.FC<{ entry: LogEntry }> = ({ entry }: { entry: LogEntry }) => {\n const messageParts = entry.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const style = { ...logMessageStyle, ...logTypeStyles[entry.type] };\n\n return <pre style={style}>{messageParts.join(' ')}</pre>;\n};\n\nconst ConsoleLogPanel: React.FC<FeaturePanelProps> = ({ onClose }: { onClose: () => void }) => {\n const { logs, clearLogs } = useConsoleLog();\n const [filter, setFilter] = useState<LogType | 'all'>('all');\n const logContainerRef = useRef<HTMLDivElement>(null);\n\n const filteredLogs = useMemo(() => {\n if (filter === 'all') {\n return logs;\n }\n\n return logs.filter((log) => log.type === filter);\n }, [logs, filter]);\n\n useEffect(() => {\n if (logContainerRef.current) {\n logContainerRef.current.scrollTop = logContainerRef.current.scrollHeight;\n }\n }, [filteredLogs]);\n\n const segmentOptions: (LogType | 'all')[] = ['all', 'log', 'warn', 'error'];\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Console Logs</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <div>\n {segmentOptions.map((option) => (\n <button key={option} onClick={() => setFilter(option)} disabled={filter === option}>\n {option.charAt(0).toUpperCase() + option.slice(1)}\n </button>\n ))}\n </div>\n <button onClick={clearLogs} style={clearButtonStyle}>\n Clear\n </button>\n </div>\n <div style={logListContainerStyle} ref={logContainerRef}>\n {filteredLogs.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <LogMessage entry={log} />\n </div>\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default ConsoleLogPanel;\n","import React, { useState, useMemo, useEffect } from 'react';\n\nimport { loginTypes } from '../../config';\nimport {\n debugFeaturePanelStyle,\n formActionsStyle,\n h2Style,\n loginFormContainerStyle,\n modalOverlayStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LoginTypeConfig } from '../../types';\nimport { cookieClient } from '../storage/use-storage';\n\n/**\n * @file '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ' ๊ธฐ๋Šฅ์˜ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description\n * - `config.ts`์˜ `loginTypes` ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ ์ธ ๋กœ๊ทธ์ธ ํผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.\n * - ์‹ค์ œ ๋กœ๊ทธ์ธ ๋กœ์ง์€ `onLogin` prop์œผ๋กœ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›์•„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n * ์ด ์ปดํฌ๋„ŒํŠธ๋Š” UI์™€ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์˜ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.\n */\n\ninterface LoginPanelProps extends FeaturePanelProps {\n onLogin: (loginType: LoginTypeConfig['id'], data: Record<string, string>) => void;\n}\n\nconst LoginPanel: React.FC<LoginPanelProps> = ({ onClose, onLogin }) => {\n const [selectedTypeId, setSelectedTypeId] = useState<string>(loginTypes[0]?.id || '');\n const [formData, setFormData] = useState<Record<string, string>>({});\n const [mode, setMode] = useState<boolean>(cookieClient.getCookie('dsp-debug-mode') === 'on');\n const [stepValidationOff, SetStepValidationOff] = useState<boolean>(\n cookieClient.getCookie('Debug-Step-Validation-Off') === 'true'\n );\n const selectedType = useMemo(() => loginTypes.find((t) => t.id === selectedTypeId), [selectedTypeId]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (selectedType) {\n onLogin(selectedType.id, formData);\n onClose();\n }\n };\n\n /**\n * @description\n * ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ์ฒดํฌ๋˜๋ฉด,\n * ์ฟ ํ‚ค์— 'dsp-debug-mode' ๊ฐ’์„ 'on' ์œผ๋กœ ์ถ”๊ฐ€\n *\n * ์ฒดํฌ๊ฐ€ ํ•ด์ œ๋˜๋ฉด\n * 'dsp-debug-mode' ๊ฐ’์„ 'off' ๋กœ ๋ณ€๊ฒฝ\n */\n const handleDebugOn = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkbox = e.target as HTMLInputElement;\n if (checkbox.checked) {\n cookieClient.setCookie('dsp-debug-mode', 'on', { path: '/' });\n setMode(true);\n } else {\n cookieClient.setCookie('dsp-debug-mode', 'off', { path: '/' });\n setMode(false);\n }\n };\n\n /**\n * @description\n * ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ์ฒดํฌ๋˜๋ฉด, ์„œ์‹์˜ step validation์„ ๋„๋Š” ์ฟ ํ‚ค๋ฅผ ์ถ”๊ฐ€\n * ์ฟ ํ‚ค์— 'Debug-Step-Validation-Off' ๊ฐ’์„ 'true' ๋กœ ์ถ”๊ฐ€\n *\n * ์ฒดํฌ๊ฐ€ ํ•ด์ œ๋˜๋ฉด\n * 'Debug-Step-Validation-Off' ๊ฐ’์„ 'false' ๋กœ ๋ณ€๊ฒฝ\n */\n const handleStepValidationOff = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkbox = e.target as HTMLInputElement;\n if (checkbox.checked) {\n cookieClient.setCookie('Debug-Step-Validation-Off', 'true', { path: '/' });\n SetStepValidationOff(true);\n } else {\n cookieClient.setCookie('Debug-Step-Validation-Off', 'false', { path: '/' });\n SetStepValidationOff(false);\n }\n };\n\n useEffect(() => {\n setFormData({});\n }, [selectedType]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๊ฐ„ํŽธ ๋กœ๊ทธ์ธ</h2>\n <button onClick={onClose}>X</button>\n </div>\n\n <form style={loginFormContainerStyle} onSubmit={handleSubmit}>\n <div>\n <ul style={{ listStyleType: 'circle' }}>\n <li>\n <label htmlFor=\"debug-on\">Debug On</label>\n <input type=\"checkbox\" id=\"debug-on\" onChange={handleDebugOn} checked={mode} />\n <ul style={{ listStyleType: 'square', paddingLeft: '20px' }}>\n <li>(์ฟ ํ‚ค์— ์…‹ํŒ…๋œ ํ† ํฐ๊ฐ’์œผ๋กœ ํ—ค๋”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„ํŽธ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์‹œ ํ•„์ˆ˜์ฒดํฌ)</li>\n </ul>\n </li>\n <li>\n <label htmlFor=\"step-validation-off\">์„œ์‹ Validation Off</label>\n <input\n type=\"checkbox\"\n id=\"step-validation-off\"\n onChange={handleStepValidationOff}\n checked={stepValidationOff}\n />\n <ul style={{ listStyleType: 'square', paddingLeft: '20px' }}>\n <li>(์„œ์‹ ๋‹จ๊ณ„ ์ด๋™์‹œ, validation์„ ๋„๊ณ  ๋ฏธ์ž‘์„ฑ ๋‹จ๊ณ„๋„ ์ด๋™๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.)</li>\n </ul>\n </li>\n </ul>\n <br /> <br />\n <label htmlFor=\"login-type-select\">๋กœ๊ทธ์ธ ์œ ํ˜•</label>\n <select id=\"login-type-select\" value={selectedTypeId} onChange={(e) => setSelectedTypeId(e.target.value)}>\n {loginTypes.map((type) => (\n <option key={type.id} value={type.id}>\n {type.label}\n </option>\n ))}\n </select>\n </div>\n\n {selectedType?.fields.map((field) => (\n <div key={field.name}>\n <label htmlFor={field.name}>{field.label}</label>\n <input\n type={field.type}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder}\n value={formData[field.name] || ''}\n onChange={handleInputChange}\n required\n />\n </div>\n ))}\n\n <div style={formActionsStyle}>\n <button type=\"submit\">๋กœ๊ทธ์ธ</button>\n </div>\n </form>\n </div>\n </>\n );\n};\n\nexport default LoginPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n type RequestInfo,\n type ResponseInfo,\n type ErrorInfo,\n type HeldRequest,\n type HeldResponse,\n type HeldError,\n useDebugStore\n} from 'sales-frontend-stores';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n holdButtonsContainerStyle,\n logContentStyle,\n logListStyle,\n logSummaryStyle,\n modalOverlayStyle,\n networkLogContainerStyle,\n panelHeaderStyle,\n searchContainerStyle\n} from '../../styles/styles';\n\ninterface NetworkLogProps {\n onClose: () => void;\n}\n\nconst SEARCH_SECTIONS = [\n { value: 'all', label: '์ „์ฒด' },\n { value: 'url', label: '์ฃผ์†Œ' },\n { value: 'headers', label: 'ํ—ค๋”' },\n { value: 'params', label: 'ํŒŒ๋ผ๋ฏธํ„ฐ' },\n { value: 'data', label: '์š”์ฒญ' },\n { value: 'response', label: '์‘๋‹ต' },\n { value: 'error', label: '์—๋Ÿฌ' }\n];\n\ntype Log = (RequestInfo | ResponseInfo | ErrorInfo | HeldRequest | HeldResponse | HeldError) & {\n type: string;\n holdStatus?: 'held' | 'playing';\n};\n\nconst getLogInfo = (log: Log): RequestInfo | ResponseInfo | ErrorInfo => {\n if (log.holdStatus === 'held') {\n if ('request' in log) {\n return (log as HeldRequest).request;\n }\n if ('response' in log) {\n return (log as HeldResponse).response;\n }\n if ('error' in log) {\n return (log as HeldError).error;\n }\n }\n\n return log as RequestInfo | ResponseInfo | ErrorInfo;\n};\n\nconst NetworkLog: React.FC<NetworkLogProps> = ({ onClose }) => {\n const {\n requests,\n responses,\n errors,\n clear,\n isHold,\n toggleHold,\n heldRequests,\n heldResponses,\n heldErrors,\n playAllRequests,\n playAllResponses\n } = useDebugStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [searchSection, setSearchSection] = useState(SEARCH_SECTIONS[0]?.value);\n\n const allLogs = useMemo(() => {\n const logs: Log[] = [];\n requests.forEach((req: RequestInfo) => logs.push({ ...req, type: 'request' }));\n responses.forEach((res: ResponseInfo) => logs.push({ ...res, type: 'response' }));\n errors.forEach((err: ErrorInfo) => logs.push({ ...err, type: 'error' }));\n heldRequests.forEach((req: HeldRequest) => logs.push({ ...req, type: 'request', holdStatus: 'held' }));\n heldResponses.forEach((res: HeldResponse) => logs.push({ ...res, type: 'response', holdStatus: 'held' }));\n heldErrors.forEach((err: HeldError) => logs.push({ ...err, type: 'error', holdStatus: 'held' }));\n\n logs.sort((a, b) => {\n const aInfo = getLogInfo(a);\n const bInfo = getLogInfo(b);\n const aTime = 'startTime' in aInfo ? aInfo.startTime : 0;\n const bTime = 'startTime' in bInfo ? bInfo.startTime : 0;\n\n return bTime - aTime;\n });\n\n return logs;\n }, [requests, responses, errors, heldRequests, heldResponses, heldErrors]);\n\n const filteredLogs = useMemo(() => {\n if (!searchTerm) {\n return allLogs;\n }\n const lowercasedTerm = searchTerm.toLowerCase();\n\n return allLogs.filter((log: Log) => {\n const logInfo = getLogInfo(log);\n switch (searchSection) {\n case 'url':\n return logInfo.url?.toLowerCase().includes(lowercasedTerm);\n case 'headers':\n return (\n 'headers' in logInfo &&\n logInfo.headers &&\n JSON.stringify(logInfo.headers)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'params':\n return (\n 'params' in logInfo &&\n logInfo.params &&\n JSON.stringify(logInfo.params)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'data':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'request' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'response':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'response' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'error':\n return log.type === 'error' && JSON.stringify(logInfo)?.toLowerCase().includes(lowercasedTerm);\n case 'all':\n default:\n return JSON.stringify(logInfo).toLowerCase().includes(lowercasedTerm);\n }\n });\n }, [allLogs, searchTerm, searchSection]);\n\n const renderLogSummary = (log: Log) => {\n const logInfo = getLogInfo(log);\n const prefix = log.holdStatus === 'held' ? '[HELD] ' : '';\n if (log.type === 'request') {\n return `${prefix}[REQ] ${logInfo.method.toUpperCase()} ${logInfo.url}`;\n }\n if (log.type === 'response' && 'status' in logInfo) {\n return `${prefix}[RES] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.status}`;\n }\n if (log.type === 'error' && 'message' in logInfo) {\n return `${prefix}[ERR] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.message}`;\n }\n\n return 'Unknown Log';\n };\n\n const renderLogContent = (log: Log) => {\n const logInfo = getLogInfo(log);\n\n return <pre>{JSON.stringify(logInfo, null, 2)}</pre>;\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๋„คํŠธ์›Œํฌ ๋กœ๊ทธ</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={networkLogContainerStyle}>\n <div style={searchContainerStyle}>\n <select value={searchSection} onChange={(e) => setSearchSection(e.target.value)}>\n {SEARCH_SECTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <input\n type=\"text\"\n placeholder=\"๊ฒ€์ƒ‰...\"\n value={searchTerm}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n style={flex1Style}\n />\n <label>\n <input type=\"checkbox\" id=\"hold-checkbox\" checked={isHold} onChange={toggleHold} />\n Hold\n </label>\n <button onClick={clear}>clear</button>\n </div>\n {isHold && (\n <div style={holdButtonsContainerStyle}>\n <button onClick={() => playAllRequests()}>REQ Resolve</button>\n <button onClick={() => playAllResponses()}>RES Resolve</button>\n </div>\n )}\n <div style={logListStyle}>\n {filteredLogs.length === 0 ? (\n <p>ํ‘œ์‹œํ•  ๋กœ๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.</p>\n ) : (\n <div>\n {filteredLogs.map((log, index) => (\n <details key={index}>\n <summary style={logSummaryStyle}>{renderLogSummary(log)}</summary>\n <div style={logContentStyle}>{renderLogContent(log)}</div>\n </details>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default NetworkLog;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n modalOverlayStyle,\n pageNavigationContentStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps } from '../../types';\n\n/**\n * @todo ๊ณ ๊ฐ/fp ์ž…๋ ฅ๋‹จ๊ฒŒ ์ฃผ์†Œ ๋ฐ ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์…‹ํŒ…\n */\nconst URL_MAP = {\n FP_1: '/fp-input-step?ticketId=',\n FP_2: '/fp-input-step?ticketId=',\n FP_3: '/fp-input-step?ticketId=',\n FP_4: '/fp-input-step?ticketId=',\n CUST_1: '',\n CUST_2: '',\n CUST_3: '',\n CUST_4: '',\n CUST_5: '',\n none: ''\n};\n\n/**\n * @file 'ํŽ˜์ด์ง€ ์ด๋™' ๊ธฐ๋Šฅ์˜ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ URL๋กœ ํŽ˜์ด์ง€๋ฅผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.\n */\nconst PageNavigationPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [url, setUrl] = useState<string>('');\n // const [urltype, setUrltype] = useState<string>('');\n\n const handleNavigate = () => {\n if (url) {\n self.location.href = url;\n }\n };\n\n const handleUrlTypeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const urlType = e.target.value as keyof typeof URL_MAP;\n // setUrltype(urlType);\n if (urlType !== 'none') {\n setUrl(URL_MAP[urlType]);\n } else {\n setUrl('');\n }\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>ํŽ˜์ด์ง€ ์ด๋™</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={pageNavigationContentStyle}>\n <select onChange={handleUrlTypeChange}>\n {/**\n * @todo ๊ณ ๊ฐ/fp ์ž…๋ ฅ๋‹จ๊ฒŒ ์ฃผ์†Œ ๋ฐ ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์…‹ํŒ…\n */}\n <option>์„ ํƒ</option>\n <option value=\"FP_1\">FP-์ž…๋ ฅ๋‹จ๊ณ„_์‹œ์ž‘ํ•˜๊ธฐ</option>\n <option value=\"FP_2\">FP-์ž…๋ ฅ๋‹จ๊ณ„_2</option>\n <option value=\"FP_3\">FP-์ž…๋ ฅ๋‹จ๊ณ„_3</option>\n <option value=\"FP_4\">FP-์ž…๋ ฅ๋‹จ๊ณ„_4</option>\n <option value=\"FP_5\">FP-์ž…๋ ฅ๋‹จ๊ณ„_5</option>\n <option value=\"CUST_1\">๊ณ ๊ฐ-์ž…๋ ฅ๋‹จ๊ณ„_1</option>\n <option value=\"CUST_2\">๊ณ ๊ฐ-์ž…๋ ฅ๋‹จ๊ณ„_2</option>\n <option value=\"CUST_3\">๊ณ ๊ฐ-์ž…๋ ฅ๋‹จ๊ณ„_3</option>\n <option value=\"CUST_4\">๊ณ ๊ฐ-์ž…๋ ฅ๋‹จ๊ณ„_4</option>\n <option value=\"none\">์ง์ ‘์ž…๋ ฅ</option>\n </select>\n <input\n type=\"text\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"์ด๋™ํ•  URL์„ ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: /main)\"\n style={flex1Style}\n />\n <button onClick={handleNavigate}>์ด๋™</button>\n </div>\n </div>\n </>\n );\n};\n\nexport default PageNavigationPanel;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n h3Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n scriptActionsStyle,\n scriptExecutorContentStyle,\n scriptInputSectionStyle,\n scriptOutputSectionStyle,\n scriptTextareaStyle\n} from '../../styles/styles';\n\nimport type { FeaturePanelProps } from '../../types';\n\n/**\n * @file '์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰' ๊ธฐ๋Šฅ์˜ UI ๋ฐ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n */\n\ntype ResultLogType = 'log' | 'warn' | 'error' | 'return';\n\ninterface ResultLog {\n id: number;\n type: ResultLogType;\n timestamp: string;\n message: any[];\n}\n\nconst logTypeStyles: { [key in ResultLogType]: React.CSSProperties } = {\n log: { color: '#333333' },\n warn: { color: '#ffc107' },\n error: { color: '#dc3545' },\n return: { color: '#8a2be2' }\n};\n\nconst safeStringify = (obj: any): string => {\n try {\n const replacer = (key: any, value: any) => (typeof value === 'bigint' ? value.toString() : value);\n\n return JSON.stringify(obj, replacer, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst ResultMessage: React.FC<{ log: ResultLog }> = ({ log }) => {\n const messageParts = log.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const prefix = log.type === 'return' ? 'โ†ฉ ' : '';\n const style = { ...logMessageStyle, ...logTypeStyles[log.type] };\n\n return (\n <pre style={style}>\n {prefix}\n {messageParts.join(' ')}\n </pre>\n );\n};\n\nexport const ScriptExecutorPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [code, setCode] = useState<string>('// ์—ฌ๊ธฐ์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”\\nconsole.log(\"Hello, World!\");');\n const [results, setResults] = useState<ResultLog[]>([]);\n\n const addResult = (type: ResultLogType, ...args: any[]) => {\n setResults((prevResults) => [\n ...prevResults,\n {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n }\n ]);\n };\n\n const handleExecute = () => {\n const originalConsole = { ...console };\n const newConsole = {\n log: (...args: any[]) => {\n originalConsole.log(...args);\n addResult('log', ...args);\n },\n warn: (...args: any[]) => {\n originalConsole.warn(...args);\n addResult('warn', ...args);\n },\n error: (...args: any[]) => {\n originalConsole.error(...args);\n addResult('error', ...args);\n }\n };\n\n try {\n Object.assign(console, newConsole);\n // eslint-disable-next-line no-new-func\n const result = new Function(code)();\n if (result !== undefined) {\n addResult('return', result);\n }\n } catch (e: any) {\n addResult('error', e.name, e.message);\n } finally {\n Object.assign(console, originalConsole);\n }\n };\n\n const handleClear = () => {\n setResults([]);\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={{ ...debugFeaturePanelStyle, ...scriptExecutorContentStyle }}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={scriptExecutorContentStyle}>\n <div style={scriptInputSectionStyle}>\n <textarea\n style={scriptTextareaStyle}\n value={code}\n onChange={(e) => setCode(e.target.value)}\n spellCheck=\"false\"\n />\n <div style={scriptActionsStyle}>\n <button onClick={handleExecute}>์‹คํ–‰ (โ–ถ)</button>\n <button onClick={handleClear}>๊ฒฐ๊ณผ ์ง€์šฐ๊ธฐ</button>\n </div>\n </div>\n <div style={scriptOutputSectionStyle}>\n <div style={panelHeaderStyle}>\n <h3 style={h3Style}>๊ฒฐ๊ณผ</h3>\n </div>\n <div style={logListContainerStyle}>\n {results.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <ResultMessage log={log} />\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ScriptExecutorPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n logContentStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle,\n storageSearchInputStyle,\n storageTableContainerStyle,\n textareaStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, StorageType, StorageItem } from '../../types';\n\nimport { useStorage } from './use-storage';\n\n/**\n * @file '์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ' ๊ธฐ๋Šฅ์˜ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n */\n\ninterface StoragePanelProps extends FeaturePanelProps {\n storageType: StorageType;\n}\n\nconst ValueDisplay: React.FC<{ value: string }> = ({ value }) => {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === 'object' && parsed !== null) {\n return <pre style={logContentStyle}>{JSON.stringify(parsed, null, 2)}</pre>;\n }\n } catch (e) {\n //\n }\n\n return <div style={logContentStyle}>{value}</div>;\n};\n\nconst EditableRow: React.FC<{\n item: StorageItem;\n onSave: (key: string, value: string) => void;\n onRemove: (key: string) => void;\n}> = ({ item, onSave, onRemove }) => {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(item.value);\n\n const handleSave = () => {\n onSave(item.key, value);\n setIsEditing(false);\n };\n\n const handleEdit = () => {\n setValue(item.value);\n setIsEditing(true);\n };\n\n return (\n <details>\n <summary>{item.key}</summary>\n <div>\n {isEditing ? <button onClick={handleSave}>Save</button> : <button onClick={handleEdit}>Edit</button>}\n <button onClick={() => onRemove(item.key)}>Remove</button>\n {isEditing ? (\n <textarea value={value} onChange={(e) => setValue(e.target.value)} style={textareaStyle} />\n ) : (\n <ValueDisplay value={item.value} />\n )}\n </div>\n </details>\n );\n};\n\nconst StoragePanel: React.FC<StoragePanelProps> = ({ onClose, storageType }) => {\n const { items, setItem, removeItem } = useStorage(storageType);\n const [filter, setFilter] = useState('');\n\n const filteredItems = useMemo(() => {\n if (!filter) {\n return items;\n }\n\n return items.filter(\n (item) =>\n item.key.toLowerCase().includes(filter.toLowerCase()) || item.value.toLowerCase().includes(filter.toLowerCase())\n );\n }, [items, filter]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>{storageType === 'localStorage' ? 'Local Storage' : 'Cookies'}</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <input\n type=\"text\"\n placeholder=\"Search key or value...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n style={storageSearchInputStyle}\n />\n </div>\n <div style={storageTableContainerStyle}>\n {filteredItems.map((item) => (\n <EditableRow key={item.key} item={item} onSave={setItem} onRemove={removeItem} />\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default StoragePanel;\n","import React from 'react';\n\nimport ConsoleLogPanel from './features/console-log/console-log-panel';\nimport LoginPanel from './features/login-dsp/login-panel';\nimport NetworkLog from './features/network-log';\nimport PageNavigationPanel from './features/page-navigation/page-navigation-panel';\nimport ScriptExecutorPanel from './features/script-executor/script-executor-panel';\nimport StoragePanel from './features/storage/storage-panel';\nimport { MenuItem, LoginTypeConfig } from './types';\n\n/**\n * @file ๋””๋ฒ„๊ทธ ํˆด์˜ ๋ชจ๋“  ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์•™ ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.\n * @description\n * - ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์ˆ˜์ •/์ œ๊ฑฐํ•  ๋•Œ ์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.\n * - `menuItems`: ๋””๋ฒ„๊ทธ ํˆด์— ํ‘œ์‹œ๋  ๋ฉ”๋‰ด ๋ชฉ๋ก์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.\n * - `loginTypes`: '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ' ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉํ•  ๋กœ๊ทธ์ธ ์œ ํ˜•๊ณผ ํ•„๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.\n */\n\n// '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ' ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉํ•  ๋กœ๊ทธ์ธ ์œ ํ˜• ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.\n// ์ƒˆ๋กœ์šด ๋กœ๊ทธ์ธ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ด ๋ฐฐ์—ด์— ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.\nexport const loginTypes: LoginTypeConfig[] = [\n {\n id: 'fp',\n label: 'FP ๋กœ๊ทธ์ธ',\n fields: [{ name: 'employeeId', label: '์‚ฌ๋ฒˆ', type: 'text', placeholder: '์‚ฌ๋ฒˆ์„ ์ž…๋ ฅํ•˜์„ธ์š”' }]\n },\n {\n id: 'customer',\n label: '๊ณ ๊ฐ ๋กœ๊ทธ์ธ',\n fields: [\n { name: 'name', label: '์ด๋ฆ„', type: 'text', placeholder: '์ด๋ฆ„' },\n { name: 'phone', label: '์ „ํ™”๋ฒˆํ˜ธ', type: 'tel', placeholder: '์ „ํ™”๋ฒˆํ˜ธ' },\n { name: 'residentNumber', label: '์ฃผ๋ฏผ๋ฒˆํ˜ธ', type: 'text', placeholder: '์ฃผ๋ฏผ๋ฒˆํ˜ธ ์•ž 7์ž๋ฆฌ' },\n { name: 'userId', label: '์•„์ด๋””', type: 'text', placeholder: '์•„์ด๋””' },\n { name: 'password', label: '๋น„๋ฐ€๋ฒˆํ˜ธ', type: 'password', placeholder: '๋น„๋ฐ€๋ฒˆํ˜ธ' }\n ]\n }\n];\n\n/**\n * ๋””๋ฒ„๊ทธ ํˆด์— ํ‘œ์‹œ๋  ๋ฉ”๋‰ด ์•„์ดํ…œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.\n * ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฉ”๋‰ด์— ๋…ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n *\n * @property {string} id - ๋ฉ”๋‰ด์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.\n * @property {string} label - ๋ฉ”๋‰ด์— ํ‘œ์‹œ๋  ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.\n * @property {React.ComponentType} component - ๋ฉ”๋‰ด ํด๋ฆญ ์‹œ ๋ Œ๋”๋ง๋  ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @property {boolean} display - `true`์ผ ๊ฒฝ์šฐ ๋ฉ”๋‰ด์— ํ‘œ์‹œ๋˜๊ณ , `false`์ผ ๊ฒฝ์šฐ ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์ธ ๊ธฐ๋Šฅ์„ ์ˆจ๊ธธ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.\n */\nexport const menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[] = [\n {\n id: 'network-log',\n label: '๋„คํŠธ์›Œํฌ ๋กœ๊ทธ',\n component: NetworkLog,\n display: true\n },\n {\n id: 'console-log',\n label: '์ฝ˜์†” ๋กœ๊ทธ ํ™•์ธ',\n component: ConsoleLogPanel,\n display: true\n },\n {\n id: 'local-storage',\n label: '๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ',\n // StoragePanel์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ์ด๋ฏ€๋กœ, props๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋‹ค๋ฃฐ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.\n component: (props) => <StoragePanel {...props} storageType=\"localStorage\" />,\n display: true\n },\n {\n id: 'cookie-management',\n label: '์ฟ ํ‚ค ๊ด€๋ฆฌ',\n component: (props) => <StoragePanel {...props} storageType=\"cookie\" />,\n display: true\n },\n {\n id: 'quick-login',\n label: '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ',\n component: LoginPanel,\n display: true // ์‹ค์ œ ํ‘œ์‹œ๋Š” DebugTool.tsx์—์„œ onLogin prop ์กด์žฌ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.\n },\n {\n id: 'script-executor',\n label: '์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰',\n component: ScriptExecutorPanel,\n display: true\n },\n {\n id: 'page-navigation',\n label: 'ํŽ˜์ด์ง€ ์ด๋™',\n component: PageNavigationPanel,\n display: true\n }\n];\n","import { useState, useEffect } from 'react';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { EnvironmentInfo } from '../types';\n\n/**\n * ํ˜„์žฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ํ™˜๊ฒฝ(ํ˜ธ์ŠคํŠธ ๊ธฐ์ค€)์„ ๊ฐ์ง€ํ•˜๋Š” ํ›…์ž…๋‹ˆ๋‹ค.\n * @returns {EnvironmentInfo} ํ™˜๊ฒฝ ์ •๋ณด ๊ฐ์ฒด (e.g., { env: 'local' })\n */\nexport const useEnvironment = (): EnvironmentInfo => {\n const [envInfo, setEnvInfo] = useState<EnvironmentInfo>({\n env: 'prd'\n });\n\n useEffect(() => {\n const { hostname } = window.location;\n setEnvInfo({ env: getEnvironmentFromHostname(hostname) });\n }, []);\n\n return envInfo;\n};\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\nimport FloatingButton from './components/floating-button';\nimport MenuPanel from './components/menu-panel';\nimport { menuItems as defaultMenuItems } from './config';\nimport { initializeConsoleLogOverride, restoreConsoleLog } from './features/console-log/use-console-log';\nimport { useEnvironment } from './hooks/use-environment';\nimport { DebugToolServiceCode, Environment, MenuItem } from './types';\n\n/**\n * @file DebugTool์˜ ๋ฉ”์ธ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.\n * @description\n * - ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋””๋ฒ„๊ทธ ํˆด์˜ ๋…ธ์ถœ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.\n * - ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ๊ณผ ๋ฉ”๋‰ด ํŒจ๋„์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n * - ์„ ํƒ๋œ ๊ธฐ๋Šฅ(Feature) ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.\n * - `onLogin`, `envOverride`, `menuItemsOverride` ๋“ฑ์˜ props๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n */\n\n// onLogin ์ฝœ๋ฐฑ์„ optional prop์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.\ninterface DebugToolProps {\n /** ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜. ์ด ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋˜์–ด์•ผ '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ' ๋ฉ”๋‰ด๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. */\n onLogin?: (loginType: string, data: Record<string, string>) => void;\n /** ํ˜„์žฌ ํ™˜๊ฒฝ์„ ๊ฐ•์ œ๋กœ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. 'prod' ํ™˜๊ฒฝ์—์„œ๋„ ๋””๋ฒ„๊ทธ ํˆด์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. */\n envOverride?: Environment;\n /** ๊ธฐ๋ณธ ๋ฉ”๋‰ด ์„ค์ •์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋™์ ์œผ๋กœ ๋ฉ”๋‰ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. */\n menuItemsOverride?: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n serviceCode?: DebugToolServiceCode;\n}\n\nexport const DebugTool: React.FC<DebugToolProps> = ({\n onLogin,\n envOverride,\n menuItemsOverride,\n serviceCode = 'etc'\n}) => {\n // ๋งˆ์šดํŠธ ์‹œ ์ฝ˜์†” ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์–ธ๋งˆ์šดํŠธ ์‹œ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.\n // ์ด๋ฅผ ํ†ตํ•ด '์ฝ˜์†” ๋กœ๊ทธ' ๊ธฐ๋Šฅ์ด ํŽ˜์ด์ง€์˜ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n useEffect(() => {\n initializeConsoleLogOverride();\n\n return () => {\n restoreConsoleLog();\n };\n }, []); // ๋นˆ ์˜์กด์„ฑ ๋ฐฐ์—ด์€ ๋งˆ์šดํŠธ์™€ ์–ธ๋งˆ์šดํŠธ ์‹œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.\n\n const environment = useEnvironment();\n // envOverride prop์ด ์žˆ์œผ๋ฉด ํ™˜๊ฒฝ์„ ๊ฐ•์ œ๋กœ ์„ค์ •ํ•˜๊ณ , ์—†์œผ๋ฉด ๊ฐ์ง€๋œ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.\n const env = envOverride || environment.env;\n\n // menuItemsOverride prop์ด ์žˆ์œผ๋ฉด ๋ฉ”๋‰ด๋ฅผ ๊ฐ•์ œ๋กœ ์„ค์ •ํ•˜๊ณ , ์—†์œผ๋ฉด config ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.\n const menuItems = menuItemsOverride || defaultMenuItems;\n const [isMenuOpen, setMenuOpen] = useState(false);\n // ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. null์ด๋ฉด ๋ฉ”๋‰ด๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค.\n const [activeFeature, setActiveFeature] = useState<React.ComponentType<any> | null>(null);\n\n // 'local', 'dev', 'stg' ํ™˜๊ฒฝ์—์„œ๋งŒ ํˆด์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.\n const isVisible = ['local', 'dev', 'stg'].includes(env);\n\n // ๋ฉ”๋‰ด ์•„์ดํ…œ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค.\n const handleMenuClick = (itemComponent: React.ComponentType<any>) => {\n setActiveFeature(() => itemComponent); // ํด๋ฆญ๋œ ๊ธฐ๋Šฅ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.\n setMenuOpen(false); // ๋ฉ”๋‰ด ํŒจ๋„์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.\n };\n\n // ๊ธฐ๋Šฅ ํŒจ๋„์˜ ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค.\n const handleCloseFeature = () => {\n setActiveFeature(null); // ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ๋ฅผ null๋กœ ๋งŒ๋“ค์–ด ๋ฉ”๋‰ด๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.\n };\n\n // ํ—ˆ์šฉ๋œ ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.\n if (!isVisible) {\n return null;\n }\n\n // ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ฉ”๋‰ด ํŒจ๋„์˜ ์—ด๋ฆผ/๋‹ซํž˜ ์ƒํƒœ๋ฅผ ํ† ๊ธ€ํ•ฉ๋‹ˆ๋‹ค.\n const toggleMenu = () => {\n setMenuOpen((prev) => !prev);\n // ๋ฉ”๋‰ด๊ฐ€ ์—ด๋ฆด ๋•Œ, ์ด์ „์— ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋‹ค๋ฉด ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.\n if (!isMenuOpen) {\n setActiveFeature(null);\n }\n };\n\n // ์‹ค์ œ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ๋ฉ”๋‰ด ์•„์ดํ…œ ๋ชฉ๋ก์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.\n const availableMenuItems = menuItems.filter(\n (item) =>\n item.display && // config์—์„œ display๊ฐ€ true์ธ ํ•ญ๋ชฉ๋งŒ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.\n // 'quick-login' ๊ธฐ๋Šฅ์€ onLogin prop์ด ์ œ๊ณต๋œ ๊ฒฝ์šฐ์—๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.\n (item.id !== 'quick-login' || (item.id === 'quick-login' && onLogin))\n );\n\n // ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.\n if (activeFeature) {\n const FeatureComponent = activeFeature;\n\n // ๋ชจ๋“  ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ์— ๊ณตํ†ต์ ์œผ๋กœ onClose ํ•ธ๋“ค๋Ÿฌ์™€ onLogin ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.\n return <FeatureComponent onClose={handleCloseFeature} onLogin={onLogin} />;\n }\n\n // ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฉด ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ๊ณผ ๋ฉ”๋‰ด ํŒจ๋„(isMenuOpen์ด true์ผ ๊ฒฝ์šฐ)์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.\n return (\n <div\n style={{\n position: 'fixed',\n right: '20px',\n bottom: '20px',\n zIndex: 9999\n }}\n >\n <FloatingButton onClick={toggleMenu} />\n {isMenuOpen && (\n <MenuPanel\n menuItems={availableMenuItems}\n onMenuItemClick={handleMenuClick}\n onClose={() => setMenuOpen(false)}\n serviceCode={serviceCode}\n />\n )}\n </div>\n );\n};\n","import { useDebugStore } from 'sales-frontend-stores';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n\n/** debug-tool ์—์„œ ์‚ฌ์šฉ๋  ๋กœ๊ทธ ์ €์žฅ */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest } = useDebugStore.getState();\n const startTime = Date.now();\n const requestInfo = {\n url: config.url || '',\n method: config.method || '',\n headers: config.headers,\n params: config.params,\n data: config.data,\n startTime\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdRequest({ request: requestInfo, resolver });\n });\n } else {\n addRequest(requestInfo);\n }\n }\n}\n\n/** debug-tool ์—์„œ ์‚ฌ์šฉ๋  ๋กœ๊ทธ ์ €์žฅ */\nexport function addResponseLog(response: AxiosResponse) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse } = useDebugStore.getState();\n const { config } = response;\n const responseInfo = {\n url: config.url || '',\n method: config.method || '',\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdResponse({ response: responseInfo, resolver });\n });\n } else {\n addResponse(responseInfo);\n }\n }\n}\n\nexport function addErrorLog(error: AxiosError) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError } = useDebugStore.getState();\n const { config } = error;\n const errorInfo = {\n url: config?.url || '',\n method: config?.method || '',\n message: error.message,\n config: error.config,\n response: error.response\n ? {\n url: error.response.config?.url || '',\n method: error.response.config?.method || '',\n status: error.response.status,\n statusText: error.response.statusText,\n headers: error.response.headers,\n data: error.response.data\n }\n : undefined\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdError({ error: errorInfo, resolver });\n });\n } else {\n addError(errorInfo);\n }\n }\n}\n","import { cookieClient } from './features/storage/use-storage';\n\nexport function isDebugStepValidationOff(): boolean {\n const DebugStepValidationOff = cookieClient.getCookie('Debug-Step-Validation-Off') === 'true';\n\n return DebugStepValidationOff;\n}\n"]}
1
+ {"version":3,"sources":["../src/styles/styles.ts","../src/components/floating-button.tsx","../src/features/storage/use-storage.ts","../src/components/menu-panel.tsx","../src/features/console-log/use-console-log.ts","../src/features/console-log/console-log-panel.tsx","../src/features/login-dsp/login-panel.tsx","../src/features/network-log/index.tsx","../src/features/page-navigation/page-navigation-panel.tsx","../src/features/script-executor/script-executor-panel.tsx","../src/features/storage/storage-panel.tsx","../src/config.tsx","../src/hooks/use-environment.ts","../src/debug-tool.tsx","../src/interceptor-function.ts","../src/debug-utils.ts"],"names":["React","useState","menuItems","useEffect","useCallback","useRef","useMemo","logTypeStyles","safeStringify","getEnvironmentFromHostname","useDebugStore"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\n\nimport { LogType } from '../types';\n\nexport const debugFloatingButtonStyle: React.CSSProperties = {\n position: 'fixed',\n right: '10px',\n bottom: '80px',\n borderRadius: '50%',\n backgroundColor: '#f0f0f0',\n border: '1px solid #ccc',\n padding: '8px 12px',\n fontWeight: 'bold',\n zIndex: 9999\n};\n\nexport const debugMenuPanelStyle: React.CSSProperties = {\n position: 'fixed',\n right: '20px',\n bottom: '90px',\n display: 'flex',\n flexDirection: 'column',\n // maxHeight: '500px',\n backgroundColor: '#ffffff',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n boxShadow: '0 4px 8px rgba(0, 0, 0, 0.1)',\n zIndex: 10000\n};\n\nexport const panelHeaderStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 15px',\n backgroundColor: '#f5f5f5',\n borderBottom: '1px solid #e0e0e0',\n flexShrink: 0\n};\n\nexport const h2Style: React.CSSProperties = {\n margin: 0,\n fontSize: '16px'\n};\n\nexport const modalOverlayStyle: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 9999\n};\n\nexport const debugFeaturePanelStyle: React.CSSProperties = {\n margin: '20px',\n position: 'fixed',\n top: 0,\n left: 0,\n width: 'calc(100% - 40px)',\n height: 'calc(100% - 40px)',\n backgroundColor: '#ffffff',\n zIndex: 10001,\n display: 'flex',\n flexDirection: 'column'\n};\n\nexport const panelToolbarStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: '10px',\n borderBottom: '1px solid #e0e0e0',\n gap: '8px',\n flexShrink: 0\n};\n\nexport const logListContainerStyle: React.CSSProperties = {\n flex: 1,\n padding: '10px',\n overflowY: 'auto',\n fontFamily: 'monospace',\n fontSize: '12px',\n backgroundColor: '#ffffff'\n};\n\nexport const logItemStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n padding: '4px 0',\n borderBottom: '1px solid #e0e0e0'\n};\n\nexport const logTimestampStyle: React.CSSProperties = {\n marginRight: '10px',\n color: '#888888'\n};\n\nexport const logMessageStyle: React.CSSProperties = {\n margin: 0,\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap'\n};\n\nexport const logTypeStyles: { [key in LogType | 'return']: React.CSSProperties } = {\n log: { color: '#333333' },\n info: { color: '#007bff' },\n warn: { color: '#ffc107' },\n error: { color: '#dc3545' },\n debug: { color: '#6c757d' },\n return: { color: '#8a2be2' }\n};\n\nexport const loginFormContainerStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n gap: '15px',\n padding: '20px',\n overflowY: 'auto'\n};\n\nexport const formActionsStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-start',\n marginTop: '10px'\n};\n\nexport const searchContainerStyle: React.CSSProperties = {\n display: 'flex',\n gap: '8px',\n marginBottom: '16px',\n alignItems: 'center'\n};\n\nexport const logListStyle: React.CSSProperties = {\n overflowY: 'auto'\n};\n\nexport const logSummaryStyle: React.CSSProperties = {\n wordBreak: 'break-all',\n margin: 0,\n cursor: 'pointer'\n};\n\nexport const logContentStyle: React.CSSProperties = {\n padding: '8px',\n wordBreak: 'break-all',\n whiteSpace: 'pre-wrap',\n backgroundColor: '#f5f5f5',\n borderRadius: '4px'\n};\n\nexport const pageNavigationContentStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n padding: '20px'\n};\n\nexport const h3Style: React.CSSProperties = {\n margin: 0,\n fontSize: '16px'\n};\n\nexport const scriptExecutorContentStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n overflow: 'hidden'\n};\n\nexport const scriptInputSectionStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n minHeight: '150px',\n borderBottom: '1px solid #e0e0e0'\n};\n\nexport const scriptTextareaStyle: React.CSSProperties = {\n flex: 1,\n width: '100%',\n padding: '10px',\n fontFamily: 'monospace',\n fontSize: '14px',\n resize: 'none',\n outline: 'none',\n border: 'none'\n};\n\nexport const scriptActionsStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: '8px',\n padding: '8px',\n borderTop: '1px solid #e0e0e0'\n};\n\nexport const scriptOutputSectionStyle: React.CSSProperties = {\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n overflow: 'hidden'\n};\n\nexport const storageSearchInputStyle: React.CSSProperties = {\n width: '100%',\n padding: '8px',\n border: '1px solid #ccc',\n borderRadius: '4px'\n};\n\nexport const storageTableContainerStyle: React.CSSProperties = {\n flex: 1,\n overflowY: 'auto',\n padding: '10px'\n};\n\nexport const menuItemStyle: React.CSSProperties = {\n cursor: 'pointer',\n padding: '8px 12px'\n};\n\nexport const clearButtonStyle: React.CSSProperties = {\n marginLeft: 'auto'\n};\n\nexport const networkLogContainerStyle: React.CSSProperties = {\n padding: '10px',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflow: 'hidden'\n};\n\nexport const flex1Style: React.CSSProperties = {\n flex: 1\n};\n\nexport const holdButtonsContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n marginBottom: '10px'\n};\n\nexport const textareaStyle: React.CSSProperties = {\n width: '100%',\n minHeight: '80px'\n};\n","import React, { useState, useRef } from 'react';\n\n/**\n * @file ๋””๋ฒ„๊ทธ ํˆด์„ ์—ด๊ธฐ ์œ„ํ•œ ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description ํ™”๋ฉด ์šฐ์ธก ํ•˜๋‹จ์— ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ํด๋ฆญ ์‹œ ๋ฉ”๋‰ด ํŒจ๋„์„ ํ† ๊ธ€ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ์œ„์น˜๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n */\n\nimport { debugFloatingButtonStyle } from '../styles/styles';\n\ninterface FloatingButtonProps {\n /** ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜ */\n onClick: () => void;\n}\n\nconst FloatingButton: React.FC<FloatingButtonProps> = ({ onClick }) => {\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const dragHappened = useRef(false);\n const dragStartPos = useRef({ x: 0, y: 0 });\n const elementStartPos = useRef({ x: 0, y: 0 });\n\n const handleMouseDown = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (e.button !== 0) {\n return;\n }\n dragHappened.current = false;\n setIsDragging(true);\n dragStartPos.current = { x: e.clientX, y: e.clientY };\n elementStartPos.current = { ...position };\n\n const handleMouseMove = (event: MouseEvent) => {\n const dx = event.clientX - dragStartPos.current.x;\n const dy = event.clientY - dragStartPos.current.y;\n\n if (!dragHappened.current && (Math.abs(dx) > 5 || Math.abs(dy) > 5)) {\n dragHappened.current = true;\n }\n\n setPosition({\n x: elementStartPos.current.x + dx,\n y: elementStartPos.current.y + dy\n });\n };\n\n const handleMouseUp = () => {\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n setIsDragging(false);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n };\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n if (dragHappened.current) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n onClick();\n };\n\n const buttonStyle: React.CSSProperties = {\n ...debugFloatingButtonStyle,\n transform: `translate(${position.x}px, ${position.y}px)`,\n cursor: isDragging ? 'grabbing' : 'grab'\n };\n\n return (\n <button\n style={buttonStyle}\n onMouseDown={handleMouseDown}\n onClick={handleClick}\n >\n DEBUG\n </button>\n );\n};\n\nexport default FloatingButton;","import { useState, useEffect, useCallback } from 'react';\n\nimport { StorageType, StorageItem } from '../../types';\n\n/**\n * ํด๋ผ์ด์–ธํŠธ์šฉ ์ฟ ํ‚ค ํ•จ์ˆ˜\n */\nexport const cookieClient = {\n getCookie(name: string): string {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n },\n\n setCookie(\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n ): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n },\n deleteCookie(name: string, options: { path?: string; domain?: string } = {}): void {\n cookieClient.setCookie(name, '', { ...options, expires: -1 });\n }\n};\n\n/**\n * @file '์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ' ๊ธฐ๋Šฅ์˜ ํ•ต์‹ฌ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ํ›…์ž…๋‹ˆ๋‹ค.\n * @description\n * - `localStorage`์™€ `document.cookie`์˜ ๋ณต์žกํ•œ API๋ฅผ ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.\n * - `storageType` prop์— ๋”ฐ๋ผ ๋‘ ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ CRUD ๋กœ์ง์„ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.\n */\n\n/**\n * `localStorage` ๋˜๋Š” `cookie` ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ›…์ž…๋‹ˆ๋‹ค.\n * @param storageType - ๊ด€๋ฆฌํ•  ์Šคํ† ๋ฆฌ์ง€์˜ ์ข…๋ฅ˜ ('localStorage' ๋˜๋Š” 'cookie')\n * @returns { items, setItem, removeItem, loadItems }\n */\nexport const useStorage = (storageType: StorageType) => {\n const [items, setItems] = useState<StorageItem[]>([]);\n\n // ์Šคํ† ๋ฆฌ์ง€์—์„œ ๋ชจ๋“  ์•„์ดํ…œ์„ ๋ถˆ๋Ÿฌ์™€ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.\n const loadItems = useCallback(() => {\n const newItems: StorageItem[] = [];\n if (storageType === 'localStorage') {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key) {\n newItems.push({ key, value: localStorage.getItem(key) || '' });\n }\n }\n } else {\n const cookies = document.cookie.split(';');\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n const key = parts.shift()?.trim();\n if (key) {\n newItems.push({ key, value: decodeURIComponent(parts.join('=')) });\n }\n });\n }\n setItems(newItems);\n }, [storageType]);\n\n // ์ปดํฌ๋„ŒํŠธ ๋งˆ์šดํŠธ ์‹œ ์•„์ดํ…œ์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // ์Šคํ† ๋ฆฌ์ง€์— ์•„์ดํ…œ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.\n const setItem = useCallback(\n (key: string, value: string) => {\n if (storageType === 'localStorage') {\n localStorage.setItem(key, value);\n } else {\n cookieClient.setCookie(key, value);\n }\n loadItems(); // ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n // ์Šคํ† ๋ฆฌ์ง€์—์„œ ์•„์ดํ…œ์„ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.\n const removeItem = useCallback(\n (key: string) => {\n if (storageType === 'localStorage') {\n localStorage.removeItem(key);\n } else {\n cookieClient.deleteCookie(key);\n }\n loadItems(); // ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n return { items, setItem, removeItem, loadItems };\n};\n","import React from 'react';\n\nimport { cookieClient } from '../features/storage/use-storage';\nimport { debugMenuPanelStyle, h2Style, menuItemStyle, modalOverlayStyle, panelHeaderStyle } from '../styles/styles';\nimport { DebugToolServiceCode, MenuItem } from '../types';\n\n/**\n * @file ๋””๋ฒ„๊ทธ ํˆด์˜ ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฉ”๋‰ด ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description `config.ts`์—์„œ ์ •์˜๋œ ๋ฉ”๋‰ด ์•„์ดํ…œ๋“ค์„ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.\n */\n\ninterface MenuPanelProps {\n /** ํ‘œ์‹œํ•  ๋ฉ”๋‰ด ์•„์ดํ…œ์˜ ๋ฐฐ์—ด */\n menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n /** ๋ฉ”๋‰ด ์•„์ดํ…œ ํด๋ฆญ ์‹œ ํ˜ธ์ถœ๋  ์ฝœ๋ฐฑ ํ•จ์ˆ˜ */\n onMenuItemClick: (component: React.ComponentType) => void;\n /** ํŒจ๋„์„ ๋‹ซ์„ ๋•Œ ํ˜ธ์ถœ๋  ์ฝœ๋ฐฑ ํ•จ์ˆ˜ */\n onClose: () => void;\n serviceCode: DebugToolServiceCode;\n}\n\nconst MenuPanel: React.FC<MenuPanelProps> = ({ menuItems, onMenuItemClick, onClose, serviceCode }) => {\n const handleDeleteCustomCookie = () => {\n cookieClient.deleteCookie('x-channel-appversion');\n cookieClient.deleteCookie('x-channel-deviceid');\n cookieClient.deleteCookie('x-channel-devicemodel');\n cookieClient.deleteCookie('x-channel-formfactor');\n cookieClient.deleteCookie('x-channel-loginchannel');\n cookieClient.deleteCookie('x-channel-logintype');\n cookieClient.deleteCookie('x-channel-platformname');\n cookieClient.deleteCookie('x-channel-platformversion');\n cookieClient.deleteCookie('x-channel-screenid');\n cookieClient.deleteCookie('x-channel-business-work-division-code');\n alert('์ปค์Šคํ…€์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('์ปค์Šคํ…€์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'x-channel-appversion': cookieClient.getCookie('x-channel-appversion'),\n 'x-channel-deviceid': cookieClient.getCookie('x-channel-deviceid'),\n 'x-channel-devicemodel': cookieClient.getCookie('x-channel-devicemodel'),\n 'x-channel-formfactor': cookieClient.getCookie('x-channel-formfactor'),\n 'x-channel-loginchannel': cookieClient.getCookie('x-channel-loginchannel'),\n 'x-channel-logintype': cookieClient.getCookie('x-channel-logintype'),\n 'x-channel-platformname': cookieClient.getCookie('x-channel-platformname'),\n 'x-channel-platformversion': cookieClient.getCookie('x-channel-platformversion'),\n 'x-channel-screenid': cookieClient.getCookie('x-channel-screenid'),\n 'x-channel-business-work-division-code': cookieClient.getCookie('x-channel-business-work-division-code')\n });\n };\n\n const handleDeleteTokenCookie = () => {\n cookieClient.deleteCookie('accessToken');\n alert('ํ† ํฐ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('ํ† ํฐ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n accessToken: cookieClient.getCookie('accessToken')\n });\n };\n\n const handleFormFactor = (formFactor: string) => {\n cookieClient.setCookie('x-channel-formfactor', formFactor);\n alert(`ํผํŒฉํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.` + `:${formFactor}`);\n console.log('ํผํŒฉํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'x-channel-formfactor': cookieClient.getCookie('x-channel-formfactor')\n });\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugMenuPanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Debug Menu</h2>\n <button onClick={onClose}>X</button>\n </div>\n <ul>\n {menuItems.map((item) => (\n <li key={item.id} onClick={() => onMenuItemClick(item.component)} style={menuItemStyle}>\n {item.label}\n </li>\n ))}\n </ul>\n {serviceCode === 'dsp' && (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>ํผํŒฉํ„ฐ</h2>\n </div>\n <ul>\n <li style={menuItemStyle} onClick={() => handleFormFactor('tablet')}>\n Tablet\n </li>\n <li style={menuItemStyle} onClick={() => handleFormFactor('phone')}>\n Phone\n </li>\n <li style={menuItemStyle} onClick={() => handleFormFactor('pc')}>\n PC\n </li>\n </ul>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์ดˆ๊ธฐํ™”</h2>\n </div>\n <ul>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteCustomCookie}>์ปค์Šคํ…€(x-channel-) ์‚ญ์ œ</button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteTokenCookie}>ํ† ํฐ ์‚ญ์ œ</button>\n </li>\n </ul>\n </>\n )}\n </div>\n </>\n );\n};\n\nexport default MenuPanel;\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { LogEntry, LogType } from '../../types';\n\n/**\n * @file '์ฝ˜์†” ๋กœ๊ทธ ํ™•์ธ' ๊ธฐ๋Šฅ์˜ ํ•ต์‹ฌ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ํ›…์ž…๋‹ˆ๋‹ค.\n * @description\n * - ์ „์—ญ(๋ชจ๋“ˆ ์Šค์ฝ”ํ”„) ์ƒํƒœ๋กœ ๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ, ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.\n * - `console` ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๊ฐ€๋กœ์ฑ•๋‹ˆ๋‹ค.\n * - ์˜ต์ €๋ฒ„ ํŒจํ„ด(listeners)์„ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋กœ๊ทธ ์ƒํƒœ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.\n */\n\n// ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” ๋กœ๊ทธ ๋ฐฐ์—ด. ์•ฑ ์ „์ฒด์˜ ๋กœ๊ทธ๊ฐ€ ์—ฌ๊ธฐ์— ์Œ“์ž…๋‹ˆ๋‹ค.\nlet globalLogs: LogEntry[] = [];\n// ๋กœ๊ทธ ์ƒํƒœ์˜ ๋ณ€๊ฒฝ์„ ๊ตฌ๋…ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ(์˜ setState ํ•จ์ˆ˜) ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.\nlet listeners: React.Dispatch<React.SetStateAction<LogEntry[]>>[] = [];\n\n// ๊ธฐ์กด console ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐฑ์—…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.\nconst originalConsoleMethods: { [key in LogType]?: (...args: any[]) => void } = {};\n// ์ฝ˜์†”์ด ์ด๋ฏธ ์˜ค๋ฒ„๋ผ์ด๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.\nlet isConsoleOverridden = false;\n\n// ์ƒˆ๋กœ์šด ๋กœ๊ทธ๋ฅผ ์ „์—ญ ๋กœ๊ทธ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋ชจ๋“  ๊ตฌ๋…์ž์—๊ฒŒ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.\nconst addLog = (type: LogType, ...args: any[]) => {\n const newLog: LogEntry = {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n };\n globalLogs = [...globalLogs, newLog];\n listeners.forEach((listener) => listener([...globalLogs]));\n};\n\n/**\n * `console` ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋กœ๊ทธ ์ˆ˜์ง‘์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.\n * ์ค‘๋ณต ์‹คํ–‰์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `isConsoleOverridden` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.\n */\nexport const initializeConsoleLogOverride = () => {\n if (!isClient() || isConsoleOverridden) {\n return;\n }\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n\n logTypes.forEach((type) => {\n // ๊ธฐ์กด ๋ฉ”์„œ๋“œ ์ €์žฅ\n originalConsoleMethods[type] = console[type];\n\n // ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋“œ\n console[type] = (...args: any[]) => {\n // ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์—๋Š” ์ •์ƒ์ ์œผ๋กœ ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.\n if (originalConsoleMethods[type]) {\n originalConsoleMethods[type]?.apply(console, args);\n }\n // ๊ทธ ๋‹ค์Œ, ๋””๋ฒ„๊ทธ ํˆด์˜ ๋กœ๊ทธ ์ƒํƒœ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.\n addLog(type, ...args);\n };\n });\n\n isConsoleOverridden = true;\n};\n\n/**\n * ์˜ค๋ฒ„๋ผ์ด๋“œํ–ˆ๋˜ `console` ๋ฉ”์„œ๋“œ๋ฅผ ์›๋ž˜๋Œ€๋กœ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.\n * `DebugTool` ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.\n */\nexport const restoreConsoleLog = () => {\n if (!isClient() || !isConsoleOverridden) {\n return;\n }\n\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n logTypes.forEach((type) => {\n if (originalConsoleMethods[type]) {\n console[type] = originalConsoleMethods[type];\n }\n });\n isConsoleOverridden = false;\n};\n\n/**\n * ์ปดํฌ๋„ŒํŠธ์—์„œ ์ฝ˜์†” ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ›…์ž…๋‹ˆ๋‹ค.\n * @returns { logs, clearLogs }\n */\nexport const useConsoleLog = () => {\n const [logs, setLogs] = useState<LogEntry[]>(globalLogs);\n\n useEffect(() => {\n // ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ, ์ž์‹ ์˜ setState ํ•จ์ˆ˜๋ฅผ listener๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.\n listeners.push(setLogs);\n\n // ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋  ๋•Œ, listener์—์„œ ์ œ๊ฑฐํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.\n return () => {\n listeners = listeners.filter((l) => l !== setLogs);\n };\n }, []);\n\n // ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ง€์šฐ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.\n const clearLogs = useCallback(() => {\n globalLogs = [];\n listeners.forEach((listener) => listener([]));\n }, []);\n\n return { logs, clearLogs };\n};\n","import React, { useState, useRef, useMemo, useEffect } from 'react';\n\nimport {\n clearButtonStyle,\n debugFeaturePanelStyle,\n h2Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n logTypeStyles,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LogType, LogEntry } from '../../types';\n\nimport { useConsoleLog } from './use-console-log';\n\nconst safeStringify = (obj: any): string => {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst LogMessage: React.FC<{ entry: LogEntry }> = ({ entry }: { entry: LogEntry }) => {\n const messageParts = entry.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const style = { ...logMessageStyle, ...logTypeStyles[entry.type] };\n\n return <pre style={style}>{messageParts.join(' ')}</pre>;\n};\n\nconst ConsoleLogPanel: React.FC<FeaturePanelProps> = ({ onClose }: { onClose: () => void }) => {\n const { logs, clearLogs } = useConsoleLog();\n const [filter, setFilter] = useState<LogType | 'all'>('all');\n const logContainerRef = useRef<HTMLDivElement>(null);\n\n const filteredLogs = useMemo(() => {\n if (filter === 'all') {\n return logs;\n }\n\n return logs.filter((log) => log.type === filter);\n }, [logs, filter]);\n\n useEffect(() => {\n if (logContainerRef.current) {\n logContainerRef.current.scrollTop = logContainerRef.current.scrollHeight;\n }\n }, [filteredLogs]);\n\n const segmentOptions: (LogType | 'all')[] = ['all', 'log', 'warn', 'error'];\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Console Logs</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <div>\n {segmentOptions.map((option) => (\n <button key={option} onClick={() => setFilter(option)} disabled={filter === option}>\n {option.charAt(0).toUpperCase() + option.slice(1)}\n </button>\n ))}\n </div>\n <button onClick={clearLogs} style={clearButtonStyle}>\n Clear\n </button>\n </div>\n <div style={logListContainerStyle} ref={logContainerRef}>\n {filteredLogs.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <LogMessage entry={log} />\n </div>\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default ConsoleLogPanel;\n","import React, { useState, useMemo, useEffect } from 'react';\n\nimport { loginTypes } from '../../config';\nimport {\n debugFeaturePanelStyle,\n formActionsStyle,\n h2Style,\n loginFormContainerStyle,\n modalOverlayStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LoginTypeConfig } from '../../types';\nimport { cookieClient } from '../storage/use-storage';\n\n/**\n * @file '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ' ๊ธฐ๋Šฅ์˜ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description\n * - `config.ts`์˜ `loginTypes` ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ ์ธ ๋กœ๊ทธ์ธ ํผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.\n * - ์‹ค์ œ ๋กœ๊ทธ์ธ ๋กœ์ง์€ `onLogin` prop์œผ๋กœ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›์•„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n * ์ด ์ปดํฌ๋„ŒํŠธ๋Š” UI์™€ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์˜ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.\n */\n\ninterface LoginPanelProps extends FeaturePanelProps {\n onLogin: (loginType: LoginTypeConfig['id'], data: Record<string, string>) => void;\n}\n\nconst LoginPanel: React.FC<LoginPanelProps> = ({ onClose, onLogin }) => {\n const [selectedTypeId, setSelectedTypeId] = useState<string>(loginTypes[0]?.id || '');\n const [formData, setFormData] = useState<Record<string, string>>({});\n const [mode, setMode] = useState<boolean>(cookieClient.getCookie('dsp-debug-mode') === 'on');\n const [stepValidationOff, SetStepValidationOff] = useState<boolean>(\n cookieClient.getCookie('Debug-Step-Validation-Off') === 'true'\n );\n const selectedType = useMemo(() => loginTypes.find((t) => t.id === selectedTypeId), [selectedTypeId]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (selectedType) {\n onLogin(selectedType.id, formData);\n onClose();\n }\n };\n\n /**\n * @description\n * ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ์ฒดํฌ๋˜๋ฉด,\n * ์ฟ ํ‚ค์— 'dsp-debug-mode' ๊ฐ’์„ 'on' ์œผ๋กœ ์ถ”๊ฐ€\n *\n * ์ฒดํฌ๊ฐ€ ํ•ด์ œ๋˜๋ฉด\n * 'dsp-debug-mode' ๊ฐ’์„ 'off' ๋กœ ๋ณ€๊ฒฝ\n */\n const handleDebugOn = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkbox = e.target as HTMLInputElement;\n if (checkbox.checked) {\n cookieClient.setCookie('dsp-debug-mode', 'on', { path: '/' });\n setMode(true);\n } else {\n cookieClient.setCookie('dsp-debug-mode', 'off', { path: '/' });\n setMode(false);\n }\n };\n\n /**\n * @description\n * ์ฒดํฌ๋ฐ•์Šค๊ฐ€ ์ฒดํฌ๋˜๋ฉด, ์„œ์‹์˜ step validation์„ ๋„๋Š” ์ฟ ํ‚ค๋ฅผ ์ถ”๊ฐ€\n * ์ฟ ํ‚ค์— 'Debug-Step-Validation-Off' ๊ฐ’์„ 'true' ๋กœ ์ถ”๊ฐ€\n *\n * ์ฒดํฌ๊ฐ€ ํ•ด์ œ๋˜๋ฉด\n * 'Debug-Step-Validation-Off' ๊ฐ’์„ 'false' ๋กœ ๋ณ€๊ฒฝ\n */\n const handleStepValidationOff = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkbox = e.target as HTMLInputElement;\n if (checkbox.checked) {\n cookieClient.setCookie('Debug-Step-Validation-Off', 'true', { path: '/' });\n SetStepValidationOff(true);\n } else {\n cookieClient.setCookie('Debug-Step-Validation-Off', 'false', { path: '/' });\n SetStepValidationOff(false);\n }\n };\n\n useEffect(() => {\n setFormData({});\n }, [selectedType]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๊ฐ„ํŽธ ๋กœ๊ทธ์ธ</h2>\n <button onClick={onClose}>X</button>\n </div>\n\n <form style={loginFormContainerStyle} onSubmit={handleSubmit}>\n <div>\n <ul style={{ listStyleType: 'circle' }}>\n <li>\n <label htmlFor=\"debug-on\">Debug On</label>\n <input type=\"checkbox\" id=\"debug-on\" onChange={handleDebugOn} checked={mode} />\n <ul style={{ listStyleType: 'square', paddingLeft: '20px' }}>\n <li>(์ฟ ํ‚ค์— ์…‹ํŒ…๋œ ํ† ํฐ๊ฐ’์œผ๋กœ ํ—ค๋”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„ํŽธ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์‹œ ํ•„์ˆ˜์ฒดํฌ)</li>\n </ul>\n </li>\n <li>\n <label htmlFor=\"step-validation-off\">์„œ์‹ Validation Off</label>\n <input\n type=\"checkbox\"\n id=\"step-validation-off\"\n onChange={handleStepValidationOff}\n checked={stepValidationOff}\n />\n <ul style={{ listStyleType: 'square', paddingLeft: '20px' }}>\n <li>(์„œ์‹ ๋‹จ๊ณ„ ์ด๋™์‹œ, validation์„ ๋„๊ณ  ๋ฏธ์ž‘์„ฑ ๋‹จ๊ณ„๋„ ์ด๋™๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.)</li>\n </ul>\n </li>\n </ul>\n <br /> <br />\n <label htmlFor=\"login-type-select\">๋กœ๊ทธ์ธ ์œ ํ˜•</label>\n <select id=\"login-type-select\" value={selectedTypeId} onChange={(e) => setSelectedTypeId(e.target.value)}>\n {loginTypes.map((type) => (\n <option key={type.id} value={type.id}>\n {type.label}\n </option>\n ))}\n </select>\n </div>\n\n {selectedType?.fields.map((field) => (\n <div key={field.name}>\n <label htmlFor={field.name}>{field.label}</label>\n <input\n type={field.type}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder}\n value={formData[field.name] || ''}\n onChange={handleInputChange}\n required\n />\n </div>\n ))}\n\n <div style={formActionsStyle}>\n <button type=\"submit\">๋กœ๊ทธ์ธ</button>\n </div>\n </form>\n </div>\n </>\n );\n};\n\nexport default LoginPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n type RequestInfo,\n type ResponseInfo,\n type ErrorInfo,\n type HeldRequest,\n type HeldResponse,\n type HeldError,\n useDebugStore\n} from 'sales-frontend-stores';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n holdButtonsContainerStyle,\n logContentStyle,\n logListStyle,\n logSummaryStyle,\n modalOverlayStyle,\n networkLogContainerStyle,\n panelHeaderStyle,\n searchContainerStyle\n} from '../../styles/styles';\n\ninterface NetworkLogProps {\n onClose: () => void;\n}\n\nconst SEARCH_SECTIONS = [\n { value: 'all', label: '์ „์ฒด' },\n { value: 'url', label: '์ฃผ์†Œ' },\n { value: 'headers', label: 'ํ—ค๋”' },\n { value: 'params', label: 'ํŒŒ๋ผ๋ฏธํ„ฐ' },\n { value: 'data', label: '์š”์ฒญ' },\n { value: 'response', label: '์‘๋‹ต' },\n { value: 'error', label: '์—๋Ÿฌ' }\n];\n\ntype Log = (RequestInfo | ResponseInfo | ErrorInfo | HeldRequest | HeldResponse | HeldError) & {\n type: string;\n holdStatus?: 'held' | 'playing';\n};\n\nconst getLogInfo = (log: Log): RequestInfo | ResponseInfo | ErrorInfo => {\n if (log.holdStatus === 'held') {\n if ('request' in log) {\n return (log as HeldRequest).request;\n }\n if ('response' in log) {\n return (log as HeldResponse).response;\n }\n if ('error' in log) {\n return (log as HeldError).error;\n }\n }\n\n return log as RequestInfo | ResponseInfo | ErrorInfo;\n};\n\nconst NetworkLog: React.FC<NetworkLogProps> = ({ onClose }) => {\n const {\n requests,\n responses,\n errors,\n clear,\n isHold,\n toggleHold,\n heldRequests,\n heldResponses,\n heldErrors,\n playAllRequests,\n playAllResponses\n } = useDebugStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [searchSection, setSearchSection] = useState(SEARCH_SECTIONS[0]?.value);\n\n const allLogs = useMemo(() => {\n const logs: Log[] = [];\n requests.forEach((req: RequestInfo) => logs.push({ ...req, type: 'request' }));\n responses.forEach((res: ResponseInfo) => logs.push({ ...res, type: 'response' }));\n errors.forEach((err: ErrorInfo) => logs.push({ ...err, type: 'error' }));\n heldRequests.forEach((req: HeldRequest) => logs.push({ ...req, type: 'request', holdStatus: 'held' }));\n heldResponses.forEach((res: HeldResponse) => logs.push({ ...res, type: 'response', holdStatus: 'held' }));\n heldErrors.forEach((err: HeldError) => logs.push({ ...err, type: 'error', holdStatus: 'held' }));\n\n logs.sort((a, b) => {\n const aInfo = getLogInfo(a);\n const bInfo = getLogInfo(b);\n const aTime = 'startTime' in aInfo ? aInfo.startTime : 0;\n const bTime = 'startTime' in bInfo ? bInfo.startTime : 0;\n\n return bTime - aTime;\n });\n\n return logs;\n }, [requests, responses, errors, heldRequests, heldResponses, heldErrors]);\n\n const filteredLogs = useMemo(() => {\n if (!searchTerm) {\n return allLogs;\n }\n const lowercasedTerm = searchTerm.toLowerCase();\n\n return allLogs.filter((log: Log) => {\n const logInfo = getLogInfo(log);\n switch (searchSection) {\n case 'url':\n return logInfo.url?.toLowerCase().includes(lowercasedTerm);\n case 'headers':\n return (\n 'headers' in logInfo &&\n logInfo.headers &&\n JSON.stringify(logInfo.headers)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'params':\n return (\n 'params' in logInfo &&\n logInfo.params &&\n JSON.stringify(logInfo.params)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'data':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'request' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'response':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'response' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'error':\n return log.type === 'error' && JSON.stringify(logInfo)?.toLowerCase().includes(lowercasedTerm);\n case 'all':\n default:\n return JSON.stringify(logInfo).toLowerCase().includes(lowercasedTerm);\n }\n });\n }, [allLogs, searchTerm, searchSection]);\n\n const renderLogSummary = (log: Log) => {\n const logInfo = getLogInfo(log);\n const prefix = log.holdStatus === 'held' ? '[HELD] ' : '';\n if (log.type === 'request') {\n return `${prefix}[REQ] ${logInfo.method.toUpperCase()} ${logInfo.url}`;\n }\n if (log.type === 'response' && 'status' in logInfo) {\n return `${prefix}[RES] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.status}`;\n }\n if (log.type === 'error' && 'message' in logInfo) {\n return `${prefix}[ERR] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.message}`;\n }\n\n return 'Unknown Log';\n };\n\n const renderLogContent = (log: Log) => {\n const logInfo = getLogInfo(log);\n\n return <pre>{JSON.stringify(logInfo, null, 2)}</pre>;\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๋„คํŠธ์›Œํฌ ๋กœ๊ทธ</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={networkLogContainerStyle}>\n <div style={searchContainerStyle}>\n <select value={searchSection} onChange={(e) => setSearchSection(e.target.value)}>\n {SEARCH_SECTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <input\n type=\"text\"\n placeholder=\"๊ฒ€์ƒ‰...\"\n value={searchTerm}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n style={flex1Style}\n />\n <label>\n <input type=\"checkbox\" id=\"hold-checkbox\" checked={isHold} onChange={toggleHold} />\n Hold\n </label>\n <button onClick={clear}>clear</button>\n </div>\n {isHold && (\n <div style={holdButtonsContainerStyle}>\n <button onClick={() => playAllRequests()}>REQ Resolve</button>\n <button onClick={() => playAllResponses()}>RES Resolve</button>\n </div>\n )}\n <div style={logListStyle}>\n {filteredLogs.length === 0 ? (\n <p>ํ‘œ์‹œํ•  ๋กœ๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.</p>\n ) : (\n <div>\n {filteredLogs.map((log, index) => (\n <details key={index}>\n <summary style={logSummaryStyle}>{renderLogSummary(log)}</summary>\n <div style={logContentStyle}>{renderLogContent(log)}</div>\n </details>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default NetworkLog;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n modalOverlayStyle,\n pageNavigationContentStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps } from '../../types';\n\n/**\n * @todo ๊ณ ๊ฐ/fp ์ž…๋ ฅ๋‹จ๊ฒŒ ์ฃผ์†Œ ๋ฐ ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์…‹ํŒ…\n */\nconst URL_MAP = {\n FP_1: '/fp-input-step?ticketId=',\n FP_2: '/fp-input-step?ticketId=',\n FP_3: '/fp-input-step?ticketId=',\n FP_4: '/fp-input-step?ticketId=',\n CUST_1: '',\n CUST_2: '',\n CUST_3: '',\n CUST_4: '',\n CUST_5: '',\n none: ''\n};\n\n/**\n * @file 'ํŽ˜์ด์ง€ ์ด๋™' ๊ธฐ๋Šฅ์˜ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ URL๋กœ ํŽ˜์ด์ง€๋ฅผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.\n */\nconst PageNavigationPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [url, setUrl] = useState<string>('');\n // const [urltype, setUrltype] = useState<string>('');\n\n const handleNavigate = () => {\n if (url) {\n self.location.href = url;\n }\n };\n\n const handleUrlTypeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const urlType = e.target.value as keyof typeof URL_MAP;\n // setUrltype(urlType);\n if (urlType !== 'none') {\n setUrl(URL_MAP[urlType]);\n } else {\n setUrl('');\n }\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>ํŽ˜์ด์ง€ ์ด๋™</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={pageNavigationContentStyle}>\n <select onChange={handleUrlTypeChange}>\n {/**\n * @todo ๊ณ ๊ฐ/fp ์ž…๋ ฅ๋‹จ๊ฒŒ ์ฃผ์†Œ ๋ฐ ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ ์…‹ํŒ…\n */}\n <option>์„ ํƒ</option>\n <option value=\"FP_1\">FP-์ž…๋ ฅ๋‹จ๊ณ„_์‹œ์ž‘ํ•˜๊ธฐ</option>\n <option value=\"FP_2\">FP-์ž…๋ ฅ๋‹จ๊ณ„_2</option>\n <option value=\"FP_3\">FP-์ž…๋ ฅ๋‹จ๊ณ„_3</option>\n <option value=\"FP_4\">FP-์ž…๋ ฅ๋‹จ๊ณ„_4</option>\n <option value=\"FP_5\">FP-์ž…๋ ฅ๋‹จ๊ณ„_5</option>\n <option value=\"CUST_1\">๊ณ ๊ฐ-์ž…๋ ฅ๋‹จ๊ณ„_1</option>\n <option value=\"CUST_2\">๊ณ ๊ฐ-์ž…๋ ฅ๋‹จ๊ณ„_2</option>\n <option value=\"CUST_3\">๊ณ ๊ฐ-์ž…๋ ฅ๋‹จ๊ณ„_3</option>\n <option value=\"CUST_4\">๊ณ ๊ฐ-์ž…๋ ฅ๋‹จ๊ณ„_4</option>\n <option value=\"none\">์ง์ ‘์ž…๋ ฅ</option>\n </select>\n <input\n type=\"text\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"์ด๋™ํ•  URL์„ ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: /main)\"\n style={flex1Style}\n />\n <button onClick={handleNavigate}>์ด๋™</button>\n </div>\n </div>\n </>\n );\n};\n\nexport default PageNavigationPanel;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n h3Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n scriptActionsStyle,\n scriptExecutorContentStyle,\n scriptInputSectionStyle,\n scriptOutputSectionStyle,\n scriptTextareaStyle\n} from '../../styles/styles';\n\nimport type { FeaturePanelProps } from '../../types';\n\n/**\n * @file '์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰' ๊ธฐ๋Šฅ์˜ UI ๋ฐ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n */\n\ntype ResultLogType = 'log' | 'warn' | 'error' | 'return';\n\ninterface ResultLog {\n id: number;\n type: ResultLogType;\n timestamp: string;\n message: any[];\n}\n\nconst logTypeStyles: { [key in ResultLogType]: React.CSSProperties } = {\n log: { color: '#333333' },\n warn: { color: '#ffc107' },\n error: { color: '#dc3545' },\n return: { color: '#8a2be2' }\n};\n\nconst safeStringify = (obj: any): string => {\n try {\n const replacer = (key: any, value: any) => (typeof value === 'bigint' ? value.toString() : value);\n\n return JSON.stringify(obj, replacer, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst ResultMessage: React.FC<{ log: ResultLog }> = ({ log }) => {\n const messageParts = log.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const prefix = log.type === 'return' ? 'โ†ฉ ' : '';\n const style = { ...logMessageStyle, ...logTypeStyles[log.type] };\n\n return (\n <pre style={style}>\n {prefix}\n {messageParts.join(' ')}\n </pre>\n );\n};\n\nexport const ScriptExecutorPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [code, setCode] = useState<string>('// ์—ฌ๊ธฐ์— ์‹คํ–‰ํ•  ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”\\nconsole.log(\"Hello, World!\");');\n const [results, setResults] = useState<ResultLog[]>([]);\n\n const addResult = (type: ResultLogType, ...args: any[]) => {\n setResults((prevResults) => [\n ...prevResults,\n {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n }\n ]);\n };\n\n const handleExecute = () => {\n const originalConsole = { ...console };\n const newConsole = {\n log: (...args: any[]) => {\n originalConsole.log(...args);\n addResult('log', ...args);\n },\n warn: (...args: any[]) => {\n originalConsole.warn(...args);\n addResult('warn', ...args);\n },\n error: (...args: any[]) => {\n originalConsole.error(...args);\n addResult('error', ...args);\n }\n };\n\n try {\n Object.assign(console, newConsole);\n // eslint-disable-next-line no-new-func\n const result = new Function(code)();\n if (result !== undefined) {\n addResult('return', result);\n }\n } catch (e: any) {\n addResult('error', e.name, e.message);\n } finally {\n Object.assign(console, originalConsole);\n }\n };\n\n const handleClear = () => {\n setResults([]);\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={{ ...debugFeaturePanelStyle, ...scriptExecutorContentStyle }}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={scriptExecutorContentStyle}>\n <div style={scriptInputSectionStyle}>\n <textarea\n style={scriptTextareaStyle}\n value={code}\n onChange={(e) => setCode(e.target.value)}\n spellCheck=\"false\"\n />\n <div style={scriptActionsStyle}>\n <button onClick={handleExecute}>์‹คํ–‰ (โ–ถ)</button>\n <button onClick={handleClear}>๊ฒฐ๊ณผ ์ง€์šฐ๊ธฐ</button>\n </div>\n </div>\n <div style={scriptOutputSectionStyle}>\n <div style={panelHeaderStyle}>\n <h3 style={h3Style}>๊ฒฐ๊ณผ</h3>\n </div>\n <div style={logListContainerStyle}>\n {results.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <ResultMessage log={log} />\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default ScriptExecutorPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n logContentStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle,\n storageSearchInputStyle,\n storageTableContainerStyle,\n textareaStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, StorageType, StorageItem } from '../../types';\n\nimport { useStorage } from './use-storage';\n\n/**\n * @file '์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ' ๊ธฐ๋Šฅ์˜ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n */\n\ninterface StoragePanelProps extends FeaturePanelProps {\n storageType: StorageType;\n}\n\nconst ValueDisplay: React.FC<{ value: string }> = ({ value }) => {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === 'object' && parsed !== null) {\n return <pre style={logContentStyle}>{JSON.stringify(parsed, null, 2)}</pre>;\n }\n } catch (e) {\n //\n }\n\n return <div style={logContentStyle}>{value}</div>;\n};\n\nconst EditableRow: React.FC<{\n item: StorageItem;\n onSave: (key: string, value: string) => void;\n onRemove: (key: string) => void;\n}> = ({ item, onSave, onRemove }) => {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(item.value);\n\n const handleSave = () => {\n onSave(item.key, value);\n setIsEditing(false);\n };\n\n const handleEdit = () => {\n setValue(item.value);\n setIsEditing(true);\n };\n\n return (\n <details>\n <summary>{item.key}</summary>\n <div>\n {isEditing ? <button onClick={handleSave}>Save</button> : <button onClick={handleEdit}>Edit</button>}\n <button onClick={() => onRemove(item.key)}>Remove</button>\n {isEditing ? (\n <textarea value={value} onChange={(e) => setValue(e.target.value)} style={textareaStyle} />\n ) : (\n <ValueDisplay value={item.value} />\n )}\n </div>\n </details>\n );\n};\n\nconst StoragePanel: React.FC<StoragePanelProps> = ({ onClose, storageType }) => {\n const { items, setItem, removeItem } = useStorage(storageType);\n const [filter, setFilter] = useState('');\n\n const filteredItems = useMemo(() => {\n if (!filter) {\n return items;\n }\n\n return items.filter(\n (item) =>\n item.key.toLowerCase().includes(filter.toLowerCase()) || item.value.toLowerCase().includes(filter.toLowerCase())\n );\n }, [items, filter]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>{storageType === 'localStorage' ? 'Local Storage' : 'Cookies'}</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <input\n type=\"text\"\n placeholder=\"Search key or value...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n style={storageSearchInputStyle}\n />\n </div>\n <div style={storageTableContainerStyle}>\n {filteredItems.map((item) => (\n <EditableRow key={item.key} item={item} onSave={setItem} onRemove={removeItem} />\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default StoragePanel;\n","import React from 'react';\n\nimport ConsoleLogPanel from './features/console-log/console-log-panel';\nimport LoginPanel from './features/login-dsp/login-panel';\nimport NetworkLog from './features/network-log';\nimport PageNavigationPanel from './features/page-navigation/page-navigation-panel';\nimport ScriptExecutorPanel from './features/script-executor/script-executor-panel';\nimport StoragePanel from './features/storage/storage-panel';\nimport { MenuItem, LoginTypeConfig } from './types';\n\n/**\n * @file ๋””๋ฒ„๊ทธ ํˆด์˜ ๋ชจ๋“  ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์•™ ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.\n * @description\n * - ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์ˆ˜์ •/์ œ๊ฑฐํ•  ๋•Œ ์ด ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.\n * - `menuItems`: ๋””๋ฒ„๊ทธ ํˆด์— ํ‘œ์‹œ๋  ๋ฉ”๋‰ด ๋ชฉ๋ก์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.\n * - `loginTypes`: '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ' ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉํ•  ๋กœ๊ทธ์ธ ์œ ํ˜•๊ณผ ํ•„๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.\n */\n\n// '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ' ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉํ•  ๋กœ๊ทธ์ธ ์œ ํ˜• ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.\n// ์ƒˆ๋กœ์šด ๋กœ๊ทธ์ธ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ด ๋ฐฐ์—ด์— ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.\nexport const loginTypes: LoginTypeConfig[] = [\n {\n id: 'fp',\n label: 'FP ๋กœ๊ทธ์ธ',\n fields: [{ name: 'employeeId', label: '์‚ฌ๋ฒˆ', type: 'text', placeholder: '์‚ฌ๋ฒˆ์„ ์ž…๋ ฅํ•˜์„ธ์š”' }]\n },\n {\n id: 'customer',\n label: '๊ณ ๊ฐ ๋กœ๊ทธ์ธ',\n fields: [\n { name: 'name', label: '์ด๋ฆ„', type: 'text', placeholder: '์ด๋ฆ„' },\n { name: 'phone', label: '์ „ํ™”๋ฒˆํ˜ธ', type: 'tel', placeholder: '์ „ํ™”๋ฒˆํ˜ธ' },\n { name: 'residentNumber', label: '์ฃผ๋ฏผ๋ฒˆํ˜ธ', type: 'text', placeholder: '์ฃผ๋ฏผ๋ฒˆํ˜ธ ์•ž 7์ž๋ฆฌ' },\n { name: 'userId', label: '์•„์ด๋””', type: 'text', placeholder: '์•„์ด๋””' },\n { name: 'password', label: '๋น„๋ฐ€๋ฒˆํ˜ธ', type: 'password', placeholder: '๋น„๋ฐ€๋ฒˆํ˜ธ' }\n ]\n }\n];\n\n/**\n * ๋””๋ฒ„๊ทธ ํˆด์— ํ‘œ์‹œ๋  ๋ฉ”๋‰ด ์•„์ดํ…œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.\n * ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฉ”๋‰ด์— ๋…ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n *\n * @property {string} id - ๋ฉ”๋‰ด์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.\n * @property {string} label - ๋ฉ”๋‰ด์— ํ‘œ์‹œ๋  ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.\n * @property {React.ComponentType} component - ๋ฉ”๋‰ด ํด๋ฆญ ์‹œ ๋ Œ๋”๋ง๋  ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @property {boolean} display - `true`์ผ ๊ฒฝ์šฐ ๋ฉ”๋‰ด์— ํ‘œ์‹œ๋˜๊ณ , `false`์ผ ๊ฒฝ์šฐ ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์ธ ๊ธฐ๋Šฅ์„ ์ˆจ๊ธธ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.\n */\nexport const menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[] = [\n {\n id: 'network-log',\n label: '๋„คํŠธ์›Œํฌ ๋กœ๊ทธ',\n component: NetworkLog,\n display: true\n },\n {\n id: 'console-log',\n label: '์ฝ˜์†” ๋กœ๊ทธ ํ™•์ธ',\n component: ConsoleLogPanel,\n display: true\n },\n {\n id: 'local-storage',\n label: '๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ',\n // StoragePanel์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ์ด๋ฏ€๋กœ, props๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋‹ค๋ฃฐ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.\n component: (props) => <StoragePanel {...props} storageType=\"localStorage\" />,\n display: true\n },\n {\n id: 'cookie-management',\n label: '์ฟ ํ‚ค ๊ด€๋ฆฌ',\n component: (props) => <StoragePanel {...props} storageType=\"cookie\" />,\n display: true\n },\n {\n id: 'quick-login',\n label: '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ',\n component: LoginPanel,\n display: true // ์‹ค์ œ ํ‘œ์‹œ๋Š” DebugTool.tsx์—์„œ onLogin prop ์กด์žฌ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.\n },\n {\n id: 'script-executor',\n label: '์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰',\n component: ScriptExecutorPanel,\n display: true\n },\n {\n id: 'page-navigation',\n label: 'ํŽ˜์ด์ง€ ์ด๋™',\n component: PageNavigationPanel,\n display: true\n }\n];\n","import { useState, useEffect } from 'react';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { EnvironmentInfo } from '../types';\n\n/**\n * ํ˜„์žฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ํ™˜๊ฒฝ(ํ˜ธ์ŠคํŠธ ๊ธฐ์ค€)์„ ๊ฐ์ง€ํ•˜๋Š” ํ›…์ž…๋‹ˆ๋‹ค.\n * @returns {EnvironmentInfo} ํ™˜๊ฒฝ ์ •๋ณด ๊ฐ์ฒด (e.g., { env: 'local' })\n */\nexport const useEnvironment = (): EnvironmentInfo => {\n const [envInfo, setEnvInfo] = useState<EnvironmentInfo>({\n env: 'prd'\n });\n\n useEffect(() => {\n const { hostname } = window.location;\n setEnvInfo({ env: getEnvironmentFromHostname(hostname) });\n }, []);\n\n return envInfo;\n};\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\nimport FloatingButton from './components/floating-button';\nimport MenuPanel from './components/menu-panel';\nimport { menuItems as defaultMenuItems } from './config';\nimport { initializeConsoleLogOverride, restoreConsoleLog } from './features/console-log/use-console-log';\nimport { useEnvironment } from './hooks/use-environment';\nimport { DebugToolServiceCode, Environment, MenuItem } from './types';\n\n/**\n * @file DebugTool์˜ ๋ฉ”์ธ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.\n * @description\n * - ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋””๋ฒ„๊ทธ ํˆด์˜ ๋…ธ์ถœ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.\n * - ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ๊ณผ ๋ฉ”๋‰ด ํŒจ๋„์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.\n * - ์„ ํƒ๋œ ๊ธฐ๋Šฅ(Feature) ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.\n * - `onLogin`, `envOverride`, `menuItemsOverride` ๋“ฑ์˜ props๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n */\n\n// onLogin ์ฝœ๋ฐฑ์„ optional prop์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.\ninterface DebugToolProps {\n /** ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜. ์ด ํ•จ์ˆ˜๊ฐ€ ์ œ๊ณต๋˜์–ด์•ผ '๊ฐ„ํŽธ ๋กœ๊ทธ์ธ' ๋ฉ”๋‰ด๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. */\n onLogin?: (loginType: string, data: Record<string, string>) => void;\n /** ํ˜„์žฌ ํ™˜๊ฒฝ์„ ๊ฐ•์ œ๋กœ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. 'prod' ํ™˜๊ฒฝ์—์„œ๋„ ๋””๋ฒ„๊ทธ ํˆด์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. */\n envOverride?: Environment;\n /** ๊ธฐ๋ณธ ๋ฉ”๋‰ด ์„ค์ •์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋™์ ์œผ๋กœ ๋ฉ”๋‰ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. */\n menuItemsOverride?: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n serviceCode?: DebugToolServiceCode;\n}\n\nexport const DebugTool: React.FC<DebugToolProps> = ({\n onLogin,\n envOverride,\n menuItemsOverride,\n serviceCode = 'etc'\n}) => {\n // ๋งˆ์šดํŠธ ์‹œ ์ฝ˜์†” ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์–ธ๋งˆ์šดํŠธ ์‹œ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.\n // ์ด๋ฅผ ํ†ตํ•ด '์ฝ˜์†” ๋กœ๊ทธ' ๊ธฐ๋Šฅ์ด ํŽ˜์ด์ง€์˜ ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.\n useEffect(() => {\n initializeConsoleLogOverride();\n\n return () => {\n restoreConsoleLog();\n };\n }, []); // ๋นˆ ์˜์กด์„ฑ ๋ฐฐ์—ด์€ ๋งˆ์šดํŠธ์™€ ์–ธ๋งˆ์šดํŠธ ์‹œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.\n\n const environment = useEnvironment();\n // envOverride prop์ด ์žˆ์œผ๋ฉด ํ™˜๊ฒฝ์„ ๊ฐ•์ œ๋กœ ์„ค์ •ํ•˜๊ณ , ์—†์œผ๋ฉด ๊ฐ์ง€๋œ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.\n const env = envOverride || environment.env;\n\n // menuItemsOverride prop์ด ์žˆ์œผ๋ฉด ๋ฉ”๋‰ด๋ฅผ ๊ฐ•์ œ๋กœ ์„ค์ •ํ•˜๊ณ , ์—†์œผ๋ฉด config ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.\n const menuItems = menuItemsOverride || defaultMenuItems;\n const [isMenuOpen, setMenuOpen] = useState(false);\n // ํ˜„์žฌ ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. null์ด๋ฉด ๋ฉ”๋‰ด๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค.\n const [activeFeature, setActiveFeature] = useState<React.ComponentType<any> | null>(null);\n\n // 'local', 'dev', 'stg' ํ™˜๊ฒฝ์—์„œ๋งŒ ํˆด์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.\n const isVisible = ['local', 'dev', 'stg'].includes(env);\n\n // ๋ฉ”๋‰ด ์•„์ดํ…œ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค.\n const handleMenuClick = (itemComponent: React.ComponentType<any>) => {\n setActiveFeature(() => itemComponent); // ํด๋ฆญ๋œ ๊ธฐ๋Šฅ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.\n setMenuOpen(false); // ๋ฉ”๋‰ด ํŒจ๋„์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.\n };\n\n // ๊ธฐ๋Šฅ ํŒจ๋„์˜ ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์ž…๋‹ˆ๋‹ค.\n const handleCloseFeature = () => {\n setActiveFeature(null); // ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ๋ฅผ null๋กœ ๋งŒ๋“ค์–ด ๋ฉ”๋‰ด๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.\n };\n\n // ํ—ˆ์šฉ๋œ ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.\n if (!isVisible) {\n return null;\n }\n\n // ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ฉ”๋‰ด ํŒจ๋„์˜ ์—ด๋ฆผ/๋‹ซํž˜ ์ƒํƒœ๋ฅผ ํ† ๊ธ€ํ•ฉ๋‹ˆ๋‹ค.\n const toggleMenu = () => {\n setMenuOpen((prev) => !prev);\n // ๋ฉ”๋‰ด๊ฐ€ ์—ด๋ฆด ๋•Œ, ์ด์ „์— ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋‹ค๋ฉด ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.\n if (!isMenuOpen) {\n setActiveFeature(null);\n }\n };\n\n // ์‹ค์ œ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ๋ฉ”๋‰ด ์•„์ดํ…œ ๋ชฉ๋ก์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.\n const availableMenuItems = menuItems.filter(\n (item) =>\n item.display && // config์—์„œ display๊ฐ€ true์ธ ํ•ญ๋ชฉ๋งŒ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.\n // 'quick-login' ๊ธฐ๋Šฅ์€ onLogin prop์ด ์ œ๊ณต๋œ ๊ฒฝ์šฐ์—๋งŒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.\n (item.id !== 'quick-login' || (item.id === 'quick-login' && onLogin))\n );\n\n // ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.\n if (activeFeature) {\n const FeatureComponent = activeFeature;\n\n // ๋ชจ๋“  ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ์— ๊ณตํ†ต์ ์œผ๋กœ onClose ํ•ธ๋“ค๋Ÿฌ์™€ onLogin ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.\n return <FeatureComponent onClose={handleCloseFeature} onLogin={onLogin} />;\n }\n\n // ํ™œ์„ฑํ™”๋œ ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฉด ํ”Œ๋กœํŒ… ๋ฒ„ํŠผ๊ณผ ๋ฉ”๋‰ด ํŒจ๋„(isMenuOpen์ด true์ผ ๊ฒฝ์šฐ)์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.\n return (\n <div\n style={{\n position: 'fixed',\n right: '20px',\n bottom: '20px',\n zIndex: 9999\n }}\n >\n <FloatingButton onClick={toggleMenu} />\n {isMenuOpen && (\n <MenuPanel\n menuItems={availableMenuItems}\n onMenuItemClick={handleMenuClick}\n onClose={() => setMenuOpen(false)}\n serviceCode={serviceCode}\n />\n )}\n </div>\n );\n};\n","import { useDebugStore } from 'sales-frontend-stores';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n\n/** debug-tool ์—์„œ ์‚ฌ์šฉ๋  ๋กœ๊ทธ ์ €์žฅ */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest } = useDebugStore.getState();\n const startTime = Date.now();\n const requestInfo = {\n url: config.url || '',\n method: config.method || '',\n headers: config.headers,\n params: config.params,\n data: config.data,\n startTime\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdRequest({ request: requestInfo, resolver });\n });\n } else {\n addRequest(requestInfo);\n }\n }\n}\n\n/** debug-tool ์—์„œ ์‚ฌ์šฉ๋  ๋กœ๊ทธ ์ €์žฅ */\nexport function addResponseLog(response: AxiosResponse) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse } = useDebugStore.getState();\n const { config } = response;\n const responseInfo = {\n url: config.url || '',\n method: config.method || '',\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdResponse({ response: responseInfo, resolver });\n });\n } else {\n addResponse(responseInfo);\n }\n }\n}\n\nexport function addErrorLog(error: AxiosError) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError } = useDebugStore.getState();\n const { config } = error;\n const errorInfo = {\n url: config?.url || '',\n method: config?.method || '',\n message: error.message,\n config: error.config,\n response: error.response\n ? {\n url: error.response.config?.url || '',\n method: error.response.config?.method || '',\n status: error.response.status,\n statusText: error.response.statusText,\n headers: error.response.headers,\n data: error.response.data\n }\n : undefined\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdError({ error: errorInfo, resolver });\n });\n } else {\n addError(errorInfo);\n }\n }\n}\n","import { cookieClient } from './features/storage/use-storage';\n\nexport function isDebugStepValidationOff(): boolean {\n const DebugStepValidationOff = cookieClient.getCookie('Debug-Step-Validation-Off') === 'true';\n\n return DebugStepValidationOff;\n}\n"]}