sales-frontend-debug 0.0.65 โ†’ 0.0.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles/styles.ts","../src/components/floating-button.tsx","../src/features/change-host/index.tsx","../src/features/filter/index.tsx","../src/features/form-factor/index.tsx","../src/features/init-refresh/index.tsx","../src/components/menu-panel.tsx","../src/debug-utils.ts","../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/use-storage.ts","../src/features/storage/storage-panel.tsx","../src/config.tsx","../src/hooks/use-environment.ts","../src/debug-tool.tsx","../src/interceptor-function.ts"],"names":["React","useEffect","filterName","getCookie","setCookie","deleteCookie","menuItems","useState","useRef","useMemo","logTypeStyles","safeStringify","useCallback","MAX_LOGS","isClient","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: '400px',\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 overflowY: 'auto'\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, useEffect } 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 [isVisible, setIsVisible] = useState(false);\n\n // Gesture detection refs\n const gestureStep = useRef<number>(0); // 0: initial, 1: down detected\n const gestureTimeout = useRef<NodeJS.Timeout | null>(null);\n const globalDragStart = useRef<{ x: number; y: number } | null>(null);\n\n const dragHappened = useRef(false);\n const dragStartPos = useRef({ x: 0, y: 0 });\n const elementStartPos = useRef({ x: 0, y: 0 });\n\n // Click detection refs\n const clickCount = useRef(0);\n const clickTimeout = useRef<NodeJS.Timeout | null>(null);\n\n // Global gesture detection\n useEffect(() => {\n const handleGlobalMouseDown = (e: MouseEvent) => {\n globalDragStart.current = { x: e.clientX, y: e.clientY };\n };\n\n const handleGlobalMouseUp = (e: MouseEvent) => {\n if (!globalDragStart.current) {\n return;\n }\n\n const dx = e.clientX - globalDragStart.current.x;\n const dy = e.clientY - globalDragStart.current.y;\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n\n //drag ์ œ์Šค์ฒ˜ ์ตœ์†Œ๊ฐ’\n const THRESHOLD = 200;\n\n //down ์ œ์Šค์ฒ˜\n if (dy > THRESHOLD && absDy > absDx) {\n if (gestureStep.current === 0) {\n gestureStep.current = 1;\n //์ œ์Šค์ฒ˜๊ฐ€ ๋๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด 2์ดˆ ํ›„์— ์ดˆ๊ธฐํ™”\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n gestureTimeout.current = setTimeout(() => {\n gestureStep.current = 0;\n }, 2000);\n }\n } else if (dx > THRESHOLD && absDx > absDy) {\n //right ์ œ์Šค์ฒ˜\n if (gestureStep.current === 1) {\n setIsVisible((prev) => !prev);\n gestureStep.current = 0;\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n } else {\n //Wrong sequence, reset\n gestureStep.current = 0;\n }\n } else {\n //Invalid gesture, reset\n // Optional: can make it stricter by resetting on any wrong click\n }\n\n globalDragStart.current = null;\n };\n\n window.addEventListener('mousedown', handleGlobalMouseDown);\n window.addEventListener('mouseup', handleGlobalMouseUp);\n\n return () => {\n window.removeEventListener('mousedown', handleGlobalMouseDown);\n window.removeEventListener('mouseup', handleGlobalMouseUp);\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n };\n }, []);\n\n // Global click detection for visibility toggle\n useEffect(() => {\n const handleGlobalClick = () => {\n clickCount.current += 1;\n\n if (clickCount.current === 1) {\n clickTimeout.current = setTimeout(() => {\n clickCount.current = 0;\n }, 3000);\n }\n\n if (clickCount.current >= 10) {\n setIsVisible((prev) => !prev);\n clickCount.current = 0;\n if (clickTimeout.current) {\n clearTimeout(clickTimeout.current);\n }\n }\n };\n\n window.addEventListener('click', handleGlobalClick);\n\n return () => {\n window.removeEventListener('click', handleGlobalClick);\n if (clickTimeout.current) {\n clearTimeout(clickTimeout.current);\n }\n };\n }, []);\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 display: isVisible ? 'flex' : 'none' // Hide until activated\n };\n\n return (\n <button style={buttonStyle} onMouseDown={handleMouseDown} onClick={handleClick}>\n DEBUG\n </button>\n );\n};\n\nexport default FloatingButton;\n","import React from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport function ChangeHost() {\n const handleHost = (host: 'prd' | 'stg' | 'dev' | 'local') => {\n setCookie('dsp-debug-mode-env', host);\n alert(`ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.` + `:${host}`);\n console.log('ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'dsp-debug-mode-env': getCookie('dsp-debug-mode-env')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>APIํ˜ธ์ŠคํŠธ</h2>\n </div>\n <ul>\n <li style={menuItemStyle} onClick={() => handleHost('local')}>\n local\n </li>\n <li style={menuItemStyle} onClick={() => handleHost('dev')}>\n dev\n </li>\n <li style={menuItemStyle} onClick={() => handleHost('stg')}>\n stg\n </li>\n {/* <li style={menuItemStyle} onClick={() => handleHost('prd')}>\n prd\n </li> */}\n </ul>\n </>\n );\n}\n","import React, { useEffect } from 'react';\n\nimport { deleteCookie, getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport const filterNameCookieKey = 'dsp-debug-mode-filter-name';\n\nexport type DebugFilterKey =\n | 'downloader'\n | 'console-log'\n | 'auth-token'\n | 'validation-off'\n | 'http-log'\n | 'data-init-button';\ninterface FilterInfo {\n key: DebugFilterKey;\n description: string;\n}\nconst filterList: FilterInfo[] = [\n {\n key: 'downloader',\n description: '๋‹ค์šด๋กœ๋” ํ›… ๋ถ„๊ธฐ ํ™•์ธ์šฉ'\n },\n {\n key: 'console-log',\n description: '์ฝ˜์†”๋กœ๊ทธ on/off'\n },\n {\n key: 'auth-token',\n description: '์ฟ ํ‚ค์—์„œ ํ† ํฐํš๋“'\n },\n {\n key: 'validation-off',\n description: '์œ ํšจ์„ฑ๊ฒ€์‚ฌ off'\n },\n {\n key: 'http-log',\n description: 'http ์š”์ฒญ/์‘๋‹ต ๋กœ๊ทธ on/off'\n },\n {\n key: 'data-init-button',\n description: '์„œ์‹๋‹จ๊ณ„,์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ ์ถ”๊ฐ€'\n }\n];\n\nexport function Filter() {\n const [filterName, setFilterName] = React.useState('');\n\n useEffect(() => {\n const filterName = getCookie(filterNameCookieKey);\n setFilterName(filterName);\n }, []);\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๋””๋ฒ„๊น… ์˜ต์…˜</h2>\n </div>\n <ul>\n {/* filterList ๋ฅผ ์ฒดํฌ๋ฐ•์Šค ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ฃผ๊ณ , ์ฒดํฌ์‹œ, filterName์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ฒดํฌํ•ด์ œ์‹œ, filterName์—์„œ ์ œ๊ฑฐํ•œ๋‹ค. */}\n {filterList.map((filter) => (\n <li style={menuItemStyle} key={filter.key}>\n <input\n type=\"checkbox\"\n checked={filterName.includes(filter.key)}\n onChange={(e) => {\n if (e.target.checked) {\n // prev๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ ์ถ”๊ฐ€ํ•˜๊ณ , ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ,๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ถ”๊ฐ€ํ•œ๋‹ค.\n setFilterName((prev) => {\n if (prev) {\n const newFilterName = `${prev},${filter.key}`;\n setCookie(filterNameCookieKey, newFilterName);\n\n return newFilterName;\n } else {\n setCookie(filterNameCookieKey, filter.key);\n\n return filter.key;\n }\n });\n } else {\n // prev๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ ์ œ๊ฑฐํ•˜๊ณ , ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ,๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ œ๊ฑฐํ•œ๋‹ค.\n setFilterName((prev) => {\n // 1๊ฐœ๋งŒ ๋‚จ์€ ๊ฒฝ์šฐ๋Š” ์‚ญ์ œ, 2๊ฐœ์ด์ƒ์ผ๊ฒฝ์šฐ๋งŒ replace๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.\n if (prev.includes(',')) {\n // ,๋ฅผ ๊ธฐ์ค€์œผ๋กœ splitํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค.\n const arr = prev.split(',');\n // filter.key๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.\n const newFilterName = arr.filter((item) => item !== filter.key).join(',');\n setCookie(filterNameCookieKey, newFilterName);\n\n return newFilterName;\n } else {\n deleteCookie(filterNameCookieKey);\n\n return '';\n }\n });\n }\n }}\n />\n {filter.key}\n </li>\n ))}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport function FormFactor() {\n const handleFormFactor = (formFactor: string) => {\n setCookie('x-channel-formfactor', formFactor);\n alert(`ํผํŒฉํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.` + `:${formFactor}`);\n console.log('ํผํŒฉํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'x-channel-formfactor': getCookie('x-channel-formfactor')\n });\n };\n\n return (\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 </>\n );\n}\n","import React from 'react';\n\nimport { deleteCookie, getCookie } from 'sales-frontend-utils/cookie';\n\nimport { h2Style, menuItemStyle, panelHeaderStyle } from '../../styles/styles';\n\nexport function InitRefresh() {\n const handleDeleteHostCookie = () => {\n deleteCookie('dsp-debug-mode-env');\n alert('ํ˜ธ์ŠคํŠธ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('ํ˜ธ์ŠคํŠธ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'dsp-debug-mode-env': getCookie('dsp-debug-mode-env')\n });\n };\n\n const handleDeleteTokenCookie = () => {\n deleteCookie('accessToken');\n alert('ํ† ํฐ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('ํ† ํฐ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n accessToken: getCookie('accessToken')\n });\n };\n const handleDeleteCustomCookie = () => {\n deleteCookie('x-channel-appversion');\n deleteCookie('x-channel-deviceid');\n deleteCookie('x-channel-devicemodel');\n deleteCookie('x-channel-formfactor');\n deleteCookie('x-channel-loginchannel');\n deleteCookie('x-channel-logintype');\n deleteCookie('x-channel-platformname');\n deleteCookie('x-channel-platformversion');\n deleteCookie('x-channel-screenid');\n deleteCookie('x-channel-business-work-division-code');\n alert('์ปค์Šคํ…€์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('์ปค์Šคํ…€์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'x-channel-appversion': getCookie('x-channel-appversion'),\n 'x-channel-deviceid': getCookie('x-channel-deviceid'),\n 'x-channel-devicemodel': getCookie('x-channel-devicemodel'),\n 'x-channel-formfactor': getCookie('x-channel-formfactor'),\n 'x-channel-loginchannel': getCookie('x-channel-loginchannel'),\n 'x-channel-logintype': getCookie('x-channel-logintype'),\n 'x-channel-platformname': getCookie('x-channel-platformname'),\n 'x-channel-platformversion': getCookie('x-channel-platformversion'),\n 'x-channel-screenid': getCookie('x-channel-screenid'),\n 'x-channel-business-work-division-code': getCookie('x-channel-business-work-division-code')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์ดˆ๊ธฐํ™”</h2>\n </div>\n <ul>\n <li style={menuItemStyle}>\n <button\n onClick={() => {\n window.location.reload();\n }}\n >\n ์ƒˆ๋กœ๊ณ ์นจ\n </button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteHostCookie}>Host ์‚ญ์ œ</button>\n </li>\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}\n","import React from 'react';\n\nimport { ChangeHost } from '../features/change-host';\nimport { Filter } from '../features/filter';\nimport { FormFactor } from '../features/form-factor';\nimport { InitRefresh } from '../features/init-refresh';\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 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 <Filter />\n <FormFactor />\n <ChangeHost />\n <InitRefresh />\n </>\n )}\n </div>\n </>\n );\n};\n\nexport default MenuPanel;\n","import { getCookie } from 'sales-frontend-utils/cookie';\n\nimport { DebugFilterKey, filterNameCookieKey } from './features/filter';\n\n\n/**\n * @deprecated isDebugByFilterName('validation-off') ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ์‚ญ์ œ ์˜ˆ์ •\n * @returns boolean\n */\nexport function isDebugStepValidationOff(): boolean {\n return isDebugByFilterName('validation-off');\n}\n\n/**\n * @description ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•˜์—ฌ true/false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.\n * @param name DebugFilterKey\n * @returns boolean\n */\nexport function isDebugByFilterName(name: DebugFilterKey): boolean {\n const filterNames = getCookie(filterNameCookieKey)?.split(',');\n\n return filterNames?.includes(name) || false;\n\n}","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { isDebugByFilterName } from '../../debug-utils';\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 MAX_LOGS = 10;\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\n //์ตœ๋Œ€์‚ฌ์ด์ฆˆ์— ๋„๋‹ฌํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.\n if (globalLogs.length >= MAX_LOGS) {\n\n //console-log๊ฐ€ ์ผœ์ง„ ๊ฒฝ์šฐ์—๋Š” ์ตœ๋Œ€์‚ฌ์ด์ฆˆ ๋ฌด์‹œํ•˜๊ณ  ๊ณ„์† ์ ์žฌํ•œ๋‹ค.\n if (!isDebugByFilterName('console-log')) {\n globalLogs.shift();\n }\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 { deleteCookie } from 'sales-frontend-utils';\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';\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 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 //๋กœ๊ทธ์ธ ์ „์— ํ† ํฐ์ดˆ๊ธฐํ™”\n deleteCookie('accessToken');\n onLogin(selectedType.id, formData);\n onClose();\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 <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/**\n * window.location ์•ˆ์— ๋ชจ๋“ ์†์„ฑ์„\n * ๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ๋ฆฌ์ŠคํŠธํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณด์—ฌ์ค€๋‹ค.\n * \n * ๊ฐ ์ •๋ณด์˜†์— ๋ณต์‚ฌ๋ฒ„ํŠผ ์ถ”๊ฐ€\n */\nconst LocationInfo = () => {\n return Object.keys(location).map(key => {\n const val = location[key as keyof Location];\n if (typeof val === 'string') {\n return <div key={key}>{key}: {val} {val && <button onClick={() => navigator.clipboard.writeText(val)} >๋ณต์‚ฌ</button>}</div>\n }\n })\n}\n\n\n/**\n * @file 'ํŽ˜์ด์ง€ ์ด๋™' ๊ธฐ๋Šฅ์˜ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ URL๋กœ ํŽ˜์ด์ง€๋ฅผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.\n */\nconst PageNavigationPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [url, setUrl] = useState<string>('');\n\n const handleNavigate = () => {\n if (url) {\n self.location.href = url;\n }\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 <br /><br />\n ํŽ˜์ด์ง€์ •๋ณด :\n <span style={{ whiteSpace: 'normal', wordBreak: 'break-all' }}>{LocationInfo()}</span>\n <br /><br />\n ํŽ˜์ด์ง€์ด๋™ :\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 { useState, useEffect, useCallback } from 'react';\n\nimport { deleteCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { StorageType, StorageItem } from '../../types';\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 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 deleteCookie(key);\n }\n loadItems(); // ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n return { items, setItem, removeItem, loadItems };\n};\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\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, isClient } from 'sales-frontend-utils';\n\nimport { isDebugByFilterName } from './debug-utils';\n\nimport type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n\n\n// ๋กœ๊ทธ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜\nconst MAX_LOGS = 20;\n\n/** debug-tool ์—์„œ ์‚ฌ์šฉ๋  ๋กœ๊ทธ ์ €์žฅ */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest, requests } = useDebugStore.getState();\n\n // ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.\n if (requests.length >= MAX_LOGS) {\n\n // http-log๊ฐ€ ์ผœ์ง€์ง€ ์•Š์•˜์„๋•Œ๋Š” ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค.\n if (!isDebugByFilterName('http-log')) {\n requests.shift();\n }\n\n }\n\n\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 if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse, responses } = useDebugStore.getState();\n\n // ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.\n if (responses.length >= MAX_LOGS) {\n\n // http-log๊ฐ€ ์ผœ์ง€์ง€ ์•Š์•˜์„๋•Œ๋Š” ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค.\n if (!isDebugByFilterName('http-log')) {\n responses.shift();\n }\n\n }\n\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 if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError, errors } = useDebugStore.getState();\n\n\n // ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.\n if (errors.length >= MAX_LOGS) {\n\n // http-log๊ฐ€ ์ผœ์ง€์ง€ ์•Š์•˜์„๋•Œ๋Š” ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค.\n if (!isDebugByFilterName('http-log')) {\n errors.shift();\n }\n }\n\n\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"]}
1
+ {"version":3,"sources":["../src/styles/styles.ts","../src/components/floating-button.tsx","../src/features/change-host/index.tsx","../src/features/filter/index.tsx","../src/features/form-factor/index.tsx","../src/features/init-refresh/index.tsx","../src/components/menu-panel.tsx","../src/debug-utils.ts","../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/use-storage.ts","../src/features/storage/storage-panel.tsx","../src/config.tsx","../src/hooks/use-environment.ts","../src/debug-tool.tsx","../src/interceptor-function.ts"],"names":["React","useEffect","filterName","getCookie","setCookie","deleteCookie","menuItems","useState","useRef","useMemo","logTypeStyles","safeStringify","useCallback","MAX_LOGS","isClient","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: '400px',\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 overflowY: 'auto'\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, useEffect } 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 [isVisible, setIsVisible] = useState(false);\n\n // Gesture detection refs\n const gestureStep = useRef<number>(0); // 0: initial, 1: down detected\n const gestureTimeout = useRef<NodeJS.Timeout | null>(null);\n const globalDragStart = useRef<{ x: number; y: number } | null>(null);\n\n const dragHappened = useRef(false);\n const dragStartPos = useRef({ x: 0, y: 0 });\n const elementStartPos = useRef({ x: 0, y: 0 });\n\n // Click detection refs\n const clickCount = useRef(0);\n const clickTimeout = useRef<NodeJS.Timeout | null>(null);\n\n // Global gesture detection\n useEffect(() => {\n const handleGlobalMouseDown = (e: MouseEvent) => {\n globalDragStart.current = { x: e.clientX, y: e.clientY };\n };\n\n const handleGlobalMouseUp = (e: MouseEvent) => {\n if (!globalDragStart.current) {\n return;\n }\n\n const dx = e.clientX - globalDragStart.current.x;\n const dy = e.clientY - globalDragStart.current.y;\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n\n //drag ์ œ์Šค์ฒ˜ ์ตœ์†Œ๊ฐ’\n const THRESHOLD = 200;\n\n //down ์ œ์Šค์ฒ˜\n if (dy > THRESHOLD && absDy > absDx) {\n if (gestureStep.current === 0) {\n gestureStep.current = 1;\n //์ œ์Šค์ฒ˜๊ฐ€ ๋๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด 2์ดˆ ํ›„์— ์ดˆ๊ธฐํ™”\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n gestureTimeout.current = setTimeout(() => {\n gestureStep.current = 0;\n }, 2000);\n }\n } else if (dx > THRESHOLD && absDx > absDy) {\n //right ์ œ์Šค์ฒ˜\n if (gestureStep.current === 1) {\n setIsVisible((prev) => !prev);\n gestureStep.current = 0;\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n } else {\n //Wrong sequence, reset\n gestureStep.current = 0;\n }\n } else {\n //Invalid gesture, reset\n // Optional: can make it stricter by resetting on any wrong click\n }\n\n globalDragStart.current = null;\n };\n\n window.addEventListener('mousedown', handleGlobalMouseDown);\n window.addEventListener('mouseup', handleGlobalMouseUp);\n\n return () => {\n window.removeEventListener('mousedown', handleGlobalMouseDown);\n window.removeEventListener('mouseup', handleGlobalMouseUp);\n if (gestureTimeout.current) {\n clearTimeout(gestureTimeout.current);\n }\n };\n }, []);\n\n // Global click detection for visibility toggle\n useEffect(() => {\n const handleGlobalClick = () => {\n clickCount.current += 1;\n\n if (clickCount.current === 1) {\n clickTimeout.current = setTimeout(() => {\n clickCount.current = 0;\n }, 3000);\n }\n\n if (clickCount.current >= 10) {\n setIsVisible((prev) => !prev);\n clickCount.current = 0;\n if (clickTimeout.current) {\n clearTimeout(clickTimeout.current);\n }\n }\n };\n\n window.addEventListener('click', handleGlobalClick);\n\n return () => {\n window.removeEventListener('click', handleGlobalClick);\n if (clickTimeout.current) {\n clearTimeout(clickTimeout.current);\n }\n };\n }, []);\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 display: isVisible ? 'flex' : 'none' // Hide until activated\n };\n\n return (\n <button style={buttonStyle} onMouseDown={handleMouseDown} onClick={handleClick}>\n DEBUG\n </button>\n );\n};\n\nexport default FloatingButton;\n","import React from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport function ChangeHost() {\n const handleHost = (host: 'prd' | 'stg' | 'dev' | 'local') => {\n setCookie('dsp-debug-mode-env', host);\n alert(`ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.` + `:${host}`);\n console.log('ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'dsp-debug-mode-env': getCookie('dsp-debug-mode-env')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>APIํ˜ธ์ŠคํŠธ</h2>\n </div>\n <ul>\n <li style={menuItemStyle} onClick={() => handleHost('local')}>\n local\n </li>\n <li style={menuItemStyle} onClick={() => handleHost('dev')}>\n dev\n </li>\n <li style={menuItemStyle} onClick={() => handleHost('stg')}>\n stg\n </li>\n {/* <li style={menuItemStyle} onClick={() => handleHost('prd')}>\n prd\n </li> */}\n </ul>\n </>\n );\n}\n","import React, { useEffect } from 'react';\n\nimport { deleteCookie, getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport const filterNameCookieKey = 'dsp-debug-mode-filter-name';\n\nexport type DebugFilterKey =\n | 'dropdown-transform-test'\n | 'downloader'\n | 'console-log'\n | 'auth-token'\n | 'validation-off'\n | 'http-log'\n | 'data-init-button';\ninterface FilterInfo {\n key: DebugFilterKey;\n description: string;\n}\nconst filterList: FilterInfo[] = [\n {\n key: 'dropdown-transform-test',\n description: '๋“œ๋กญ๋‹ค์šด transform์‹œ ์ •์ƒ ์ž‘๋™ ํ…Œ์ŠคํŠธ'\n },\n {\n key: 'downloader',\n description: '๋‹ค์šด๋กœ๋” ํ›… ๋ถ„๊ธฐ ํ™•์ธ์šฉ'\n },\n {\n key: 'console-log',\n description: '์ฝ˜์†”๋กœ๊ทธ on/off'\n },\n {\n key: 'auth-token',\n description: '์ฟ ํ‚ค์—์„œ ํ† ํฐํš๋“'\n },\n {\n key: 'validation-off',\n description: '์œ ํšจ์„ฑ๊ฒ€์‚ฌ off'\n },\n {\n key: 'http-log',\n description: 'http ์š”์ฒญ/์‘๋‹ต ๋กœ๊ทธ on/off'\n },\n {\n key: 'data-init-button',\n description: '์„œ์‹๋‹จ๊ณ„,์ดˆ๊ธฐํ™” ๋ฒ„ํŠผ ์ถ”๊ฐ€'\n }\n];\n\nexport function Filter() {\n const [filterName, setFilterName] = React.useState('');\n\n useEffect(() => {\n const filterName = getCookie(filterNameCookieKey);\n setFilterName(filterName);\n }, []);\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>๋””๋ฒ„๊น… ์˜ต์…˜</h2>\n </div>\n <ul>\n {/* filterList ๋ฅผ ์ฒดํฌ๋ฐ•์Šค ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ฃผ๊ณ , ์ฒดํฌ์‹œ, filterName์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ฒดํฌํ•ด์ œ์‹œ, filterName์—์„œ ์ œ๊ฑฐํ•œ๋‹ค. */}\n {filterList.map((filter) => (\n <li style={menuItemStyle} key={filter.key}>\n <input\n type=\"checkbox\"\n checked={filterName.includes(filter.key)}\n onChange={(e) => {\n if (e.target.checked) {\n // prev๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ ์ถ”๊ฐ€ํ•˜๊ณ , ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ,๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ถ”๊ฐ€ํ•œ๋‹ค.\n setFilterName((prev) => {\n if (prev) {\n const newFilterName = `${prev},${filter.key}`;\n setCookie(filterNameCookieKey, newFilterName);\n\n return newFilterName;\n } else {\n setCookie(filterNameCookieKey, filter.key);\n\n return filter.key;\n }\n });\n } else {\n // prev๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ ์ œ๊ฑฐํ•˜๊ณ , ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ,๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ œ๊ฑฐํ•œ๋‹ค.\n setFilterName((prev) => {\n // 1๊ฐœ๋งŒ ๋‚จ์€ ๊ฒฝ์šฐ๋Š” ์‚ญ์ œ, 2๊ฐœ์ด์ƒ์ผ๊ฒฝ์šฐ๋งŒ replace๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.\n if (prev.includes(',')) {\n // ,๋ฅผ ๊ธฐ์ค€์œผ๋กœ splitํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค.\n const arr = prev.split(',');\n // filter.key๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.\n const newFilterName = arr.filter((item) => item !== filter.key).join(',');\n setCookie(filterNameCookieKey, newFilterName);\n\n return newFilterName;\n } else {\n deleteCookie(filterNameCookieKey);\n\n return '';\n }\n });\n }\n }}\n />\n {filter.key}\n </li>\n ))}\n </ul>\n </>\n );\n}\n","import React from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport function FormFactor() {\n const handleFormFactor = (formFactor: string) => {\n setCookie('x-channel-formfactor', formFactor);\n alert(`ํผํŒฉํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.` + `:${formFactor}`);\n console.log('ํผํŒฉํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'x-channel-formfactor': getCookie('x-channel-formfactor')\n });\n };\n\n return (\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 </>\n );\n}\n","import React from 'react';\n\nimport { deleteCookie, getCookie } from 'sales-frontend-utils/cookie';\n\nimport { h2Style, menuItemStyle, panelHeaderStyle } from '../../styles/styles';\n\nexport function InitRefresh() {\n const handleDeleteHostCookie = () => {\n deleteCookie('dsp-debug-mode-env');\n alert('ํ˜ธ์ŠคํŠธ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('ํ˜ธ์ŠคํŠธ๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'dsp-debug-mode-env': getCookie('dsp-debug-mode-env')\n });\n };\n\n const handleDeleteTokenCookie = () => {\n deleteCookie('accessToken');\n alert('ํ† ํฐ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('ํ† ํฐ์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n accessToken: getCookie('accessToken')\n });\n };\n const handleDeleteCustomCookie = () => {\n deleteCookie('x-channel-appversion');\n deleteCookie('x-channel-deviceid');\n deleteCookie('x-channel-devicemodel');\n deleteCookie('x-channel-formfactor');\n deleteCookie('x-channel-loginchannel');\n deleteCookie('x-channel-logintype');\n deleteCookie('x-channel-platformname');\n deleteCookie('x-channel-platformversion');\n deleteCookie('x-channel-screenid');\n deleteCookie('x-channel-business-work-division-code');\n alert('์ปค์Šคํ…€์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.');\n console.log('์ปค์Šคํ…€์ฟ ํ‚ค๊ฐ€ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', {\n 'x-channel-appversion': getCookie('x-channel-appversion'),\n 'x-channel-deviceid': getCookie('x-channel-deviceid'),\n 'x-channel-devicemodel': getCookie('x-channel-devicemodel'),\n 'x-channel-formfactor': getCookie('x-channel-formfactor'),\n 'x-channel-loginchannel': getCookie('x-channel-loginchannel'),\n 'x-channel-logintype': getCookie('x-channel-logintype'),\n 'x-channel-platformname': getCookie('x-channel-platformname'),\n 'x-channel-platformversion': getCookie('x-channel-platformversion'),\n 'x-channel-screenid': getCookie('x-channel-screenid'),\n 'x-channel-business-work-division-code': getCookie('x-channel-business-work-division-code')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>์ดˆ๊ธฐํ™”</h2>\n </div>\n <ul>\n <li style={menuItemStyle}>\n <button\n onClick={() => {\n window.location.reload();\n }}\n >\n ์ƒˆ๋กœ๊ณ ์นจ\n </button>\n </li>\n <li style={menuItemStyle}>\n <button onClick={handleDeleteHostCookie}>Host ์‚ญ์ œ</button>\n </li>\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}\n","import React from 'react';\n\nimport { ChangeHost } from '../features/change-host';\nimport { Filter } from '../features/filter';\nimport { FormFactor } from '../features/form-factor';\nimport { InitRefresh } from '../features/init-refresh';\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 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 <Filter />\n <FormFactor />\n <ChangeHost />\n <InitRefresh />\n </>\n )}\n </div>\n </>\n );\n};\n\nexport default MenuPanel;\n","import { getCookie } from 'sales-frontend-utils/cookie';\n\nimport { DebugFilterKey, filterNameCookieKey } from './features/filter';\n\n\n/**\n * @deprecated isDebugByFilterName('validation-off') ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ์‚ญ์ œ ์˜ˆ์ •\n * @returns boolean\n */\nexport function isDebugStepValidationOff(): boolean {\n return isDebugByFilterName('validation-off');\n}\n\n/**\n * @description ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•˜์—ฌ true/false๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.\n * @param name DebugFilterKey\n * @returns boolean\n */\nexport function isDebugByFilterName(name: DebugFilterKey): boolean {\n const filterNames = getCookie(filterNameCookieKey)?.split(',');\n\n return filterNames?.includes(name) || false;\n\n}","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { isDebugByFilterName } from '../../debug-utils';\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 MAX_LOGS = 10;\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\n //์ตœ๋Œ€์‚ฌ์ด์ฆˆ์— ๋„๋‹ฌํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.\n if (globalLogs.length >= MAX_LOGS) {\n\n //console-log๊ฐ€ ์ผœ์ง„ ๊ฒฝ์šฐ์—๋Š” ์ตœ๋Œ€์‚ฌ์ด์ฆˆ ๋ฌด์‹œํ•˜๊ณ  ๊ณ„์† ์ ์žฌํ•œ๋‹ค.\n if (!isDebugByFilterName('console-log')) {\n globalLogs.shift();\n }\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 { deleteCookie } from 'sales-frontend-utils';\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';\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 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 //๋กœ๊ทธ์ธ ์ „์— ํ† ํฐ์ดˆ๊ธฐํ™”\n deleteCookie('accessToken');\n onLogin(selectedType.id, formData);\n onClose();\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 <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/**\n * window.location ์•ˆ์— ๋ชจ๋“ ์†์„ฑ์„\n * ๋ณด๊ธฐ ํŽธํ•˜๊ฒŒ ๋ฆฌ์ŠคํŠธํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณด์—ฌ์ค€๋‹ค.\n * \n * ๊ฐ ์ •๋ณด์˜†์— ๋ณต์‚ฌ๋ฒ„ํŠผ ์ถ”๊ฐ€\n */\nconst LocationInfo = () => {\n return Object.keys(location).map(key => {\n const val = location[key as keyof Location];\n if (typeof val === 'string') {\n return <div key={key}>{key}: {val} {val && <button onClick={() => navigator.clipboard.writeText(val)} >๋ณต์‚ฌ</button>}</div>\n }\n })\n}\n\n\n/**\n * @file 'ํŽ˜์ด์ง€ ์ด๋™' ๊ธฐ๋Šฅ์˜ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒจ๋„ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.\n * @description ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ URL๋กœ ํŽ˜์ด์ง€๋ฅผ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.\n */\nconst PageNavigationPanel: React.FC<FeaturePanelProps> = ({ onClose }) => {\n const [url, setUrl] = useState<string>('');\n\n const handleNavigate = () => {\n if (url) {\n self.location.href = url;\n }\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 <br /><br />\n ํŽ˜์ด์ง€์ •๋ณด :\n <span style={{ whiteSpace: 'normal', wordBreak: 'break-all' }}>{LocationInfo()}</span>\n <br /><br />\n ํŽ˜์ด์ง€์ด๋™ :\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 { useState, useEffect, useCallback } from 'react';\n\nimport { deleteCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { StorageType, StorageItem } from '../../types';\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 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 deleteCookie(key);\n }\n loadItems(); // ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ\n },\n [storageType, loadItems]\n );\n\n return { items, setItem, removeItem, loadItems };\n};\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\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, isClient } from 'sales-frontend-utils';\n\nimport { isDebugByFilterName } from './debug-utils';\n\nimport type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n\n\n// ๋กœ๊ทธ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜\nconst MAX_LOGS = 20;\n\n/** debug-tool ์—์„œ ์‚ฌ์šฉ๋  ๋กœ๊ทธ ์ €์žฅ */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest, requests } = useDebugStore.getState();\n\n // ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.\n if (requests.length >= MAX_LOGS) {\n\n // http-log๊ฐ€ ์ผœ์ง€์ง€ ์•Š์•˜์„๋•Œ๋Š” ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค.\n if (!isDebugByFilterName('http-log')) {\n requests.shift();\n }\n\n }\n\n\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 if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse, responses } = useDebugStore.getState();\n\n // ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.\n if (responses.length >= MAX_LOGS) {\n\n // http-log๊ฐ€ ์ผœ์ง€์ง€ ์•Š์•˜์„๋•Œ๋Š” ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค.\n if (!isDebugByFilterName('http-log')) {\n responses.shift();\n }\n\n }\n\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 if (!isClient()) {\n return;\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * ์šด์˜ํ™˜๊ฒฝ์ด ์•„๋‹๋•Œ๋งŒ ์ €์žฅ\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError, errors } = useDebugStore.getState();\n\n\n // ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ, ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๋กœ๊ทธ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.\n if (errors.length >= MAX_LOGS) {\n\n // http-log๊ฐ€ ์ผœ์ง€์ง€ ์•Š์•˜์„๋•Œ๋Š” ์ตœ๋Œ€ ๊ฐฏ์ˆ˜๋ฅผ ์ œํ•œํ•œ๋‹ค.\n if (!isDebugByFilterName('http-log')) {\n errors.shift();\n }\n }\n\n\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sales-frontend-debug",
3
- "version": "0.0.65",
3
+ "version": "0.0.66",
4
4
  "private": false,
5
5
  "description": "A package containing the DebugTool component and related features.",
6
6
  "type": "module",