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.cjs +9 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/package.json +8 -6
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
|
-
|
|
407
|
-
|
|
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 }, "\
|
|
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"]}
|