sales-frontend-debug 0.0.46 → 0.0.48

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/storage/use-storage.ts","../src/features/change-host/index.tsx","../src/features/form-factor/index.tsx","../src/features/init-refresh/index.tsx","../src/components/menu-panel.tsx","../src/features/console-log/use-console-log.ts","../src/features/console-log/console-log-panel.tsx","../src/features/login-dsp/login-panel.tsx","../src/features/network-log/index.tsx","../src/features/page-navigation/page-navigation-panel.tsx","../src/features/script-executor/script-executor-panel.tsx","../src/features/storage/storage-panel.tsx","../src/config.tsx","../src/hooks/use-environment.ts","../src/debug-tool.tsx","../src/interceptor-function.ts","../src/debug-utils.ts"],"names":["React","useState","useEffect","menuItems","useCallback","useRef","useMemo","logTypeStyles","safeStringify","getEnvironmentFromHostname","useDebugStore"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\n\nimport { LogType } from '../types';\n\nexport const debugFloatingButtonStyle: React.CSSProperties = {\n position: 'fixed',\n right: '10px',\n bottom: '80px',\n borderRadius: '50%',\n backgroundColor: '#f0f0f0',\n border: '1px solid #ccc',\n padding: '8px 12px',\n fontWeight: 'bold',\n zIndex: 9999\n};\n\nexport const debugMenuPanelStyle: React.CSSProperties = {\n position: 'fixed',\n right: '20px',\n bottom: '90px',\n display: 'flex',\n flexDirection: 'column',\n maxHeight: '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 { useState, useEffect, useCallback } from 'react';\n\nimport { StorageType, StorageItem } from '../../types';\n\n/**\n * 클라이언트용 쿠키 함수\n */\nexport const cookieClient = {\n getCookie(name: string): string {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n },\n\n setCookie(\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n ): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n },\n deleteCookie(name: string, options: { path?: string; domain?: string } = {}): void {\n cookieClient.setCookie(name, '', { ...options, expires: -1 });\n }\n};\n\n/**\n * @file '스토리지 관리' 기능의 핵심 로직을 담당하는 훅입니다.\n * @description\n * - `localStorage`와 `document.cookie`의 복잡한 API를 추상화합니다.\n * - `storageType` prop에 따라 두 스토리지에 대한 CRUD 로직을 동일한 인터페이스로 제공합니다.\n */\n\n/**\n * `localStorage` 또는 `cookie` 데이터를 관리하기 위한 훅입니다.\n * @param storageType - 관리할 스토리지의 종류 ('localStorage' 또는 'cookie')\n * @returns { items, setItem, removeItem, loadItems }\n */\nexport const useStorage = (storageType: StorageType) => {\n const [items, setItems] = useState<StorageItem[]>([]);\n\n // 스토리지에서 모든 아이템을 불러와 상태를 업데이트하는 함수입니다.\n const loadItems = useCallback(() => {\n const newItems: StorageItem[] = [];\n if (storageType === 'localStorage') {\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key) {\n newItems.push({ key, value: localStorage.getItem(key) || '' });\n }\n }\n } else {\n const cookies = document.cookie.split(';');\n cookies.forEach((cookie) => {\n const parts = cookie.split('=');\n const key = parts.shift()?.trim();\n if (key) {\n newItems.push({ key, value: decodeURIComponent(parts.join('=')) });\n }\n });\n }\n setItems(newItems);\n }, [storageType]);\n\n // 컴포넌트 마운트 시 아이템을 불러옵니다.\n useEffect(() => {\n loadItems();\n }, [loadItems]);\n\n // 스토리지에 아이템을 추가하거나 수정하는 함수입니다.\n const setItem = useCallback(\n (key: string, value: string) => {\n if (storageType === 'localStorage') {\n localStorage.setItem(key, value);\n } else {\n cookieClient.setCookie(key, value);\n }\n loadItems(); // 목록 새로고침\n },\n [storageType, loadItems]\n );\n\n // 스토리지에서 아이템을 제거하는 함수입니다.\n const removeItem = useCallback(\n (key: string) => {\n if (storageType === 'localStorage') {\n localStorage.removeItem(key);\n } else {\n cookieClient.deleteCookie(key);\n }\n loadItems(); // 목록 새로고침\n },\n [storageType, loadItems]\n );\n\n return { items, setItem, removeItem, loadItems };\n};\n","import React from 'react';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from \"../../styles/styles\";\nimport { cookieClient } from \"../storage/use-storage\";\n\n\nexport function ChangeHost() {\n\n const handleHost = (host: 'prd' | 'stg' | 'dev' | 'local') => {\n cookieClient.setCookie('dsp-debug-mode-env', host);\n alert(`호스트가 변경되었습니다.` + `:${host}`);\n console.log('호스트가 변경되었습니다.', {\n 'dsp-debug-mode-env': cookieClient.getCookie('dsp-debug-mode-env')\n });\n };\n\n return <>\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}","import React from 'react';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from \"../../styles/styles\";\nimport { cookieClient } from \"../storage/use-storage\";\n\n\nexport function FormFactor() {\n const handleFormFactor = (formFactor: string) => {\n cookieClient.setCookie('x-channel-formfactor', formFactor);\n alert(`폼팩터가 변경되었습니다.` + `:${formFactor}`);\n console.log('폼팩터가 변경되었습니다.', {\n 'x-channel-formfactor': cookieClient.getCookie('x-channel-formfactor')\n });\n };\n\n\n return <>\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}","import React from 'react';\n\nimport { h2Style, menuItemStyle, panelHeaderStyle } from \"../../styles/styles\";\nimport { cookieClient } from \"../storage/use-storage\";\n\n\nexport function InitRefresh() {\n const handleDeleteHostCookie = () => {\n cookieClient.deleteCookie('dsp-debug-mode-env');\n alert('호스트가 삭제되었습니다.');\n console.log('호스트가 삭제되었습니다.', {\n 'dsp-debug-mode-env': cookieClient.getCookie('dsp-debug-mode-env')\n });\n };\n\n const handleDeleteTokenCookie = () => {\n cookieClient.deleteCookie('accessToken');\n alert('토큰쿠키가 삭제되었습니다.');\n console.log('토큰쿠키가 삭제되었습니다.', {\n accessToken: cookieClient.getCookie('accessToken')\n });\n };\n const handleDeleteCustomCookie = () => {\n cookieClient.deleteCookie('x-channel-appversion');\n cookieClient.deleteCookie('x-channel-deviceid');\n cookieClient.deleteCookie('x-channel-devicemodel');\n cookieClient.deleteCookie('x-channel-formfactor');\n cookieClient.deleteCookie('x-channel-loginchannel');\n cookieClient.deleteCookie('x-channel-logintype');\n cookieClient.deleteCookie('x-channel-platformname');\n cookieClient.deleteCookie('x-channel-platformversion');\n cookieClient.deleteCookie('x-channel-screenid');\n cookieClient.deleteCookie('x-channel-business-work-division-code');\n alert('커스텀쿠키가 삭제되었습니다.');\n console.log('커스텀쿠키가 삭제되었습니다.', {\n 'x-channel-appversion': cookieClient.getCookie('x-channel-appversion'),\n 'x-channel-deviceid': cookieClient.getCookie('x-channel-deviceid'),\n 'x-channel-devicemodel': cookieClient.getCookie('x-channel-devicemodel'),\n 'x-channel-formfactor': cookieClient.getCookie('x-channel-formfactor'),\n 'x-channel-loginchannel': cookieClient.getCookie('x-channel-loginchannel'),\n 'x-channel-logintype': cookieClient.getCookie('x-channel-logintype'),\n 'x-channel-platformname': cookieClient.getCookie('x-channel-platformname'),\n 'x-channel-platformversion': cookieClient.getCookie('x-channel-platformversion'),\n 'x-channel-screenid': cookieClient.getCookie('x-channel-screenid'),\n 'x-channel-business-work-division-code': cookieClient.getCookie('x-channel-business-work-division-code')\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>초기화</h2>\n </div>\n <ul>\n <li style={menuItemStyle}>\n <button onClick={() => {\n window.location.reload();\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}","import React from 'react';\n\nimport { ChangeHost } from '../features/change-host';\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\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 <FormFactor />\n <ChangeHost />\n <InitRefresh />\n </>\n )}\n </div>\n </>\n );\n};\n\nexport default MenuPanel;\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { LogEntry, LogType } from '../../types';\n\n/**\n * @file '콘솔 로그 확인' 기능의 핵심 로직을 담당하는 훅입니다.\n * @description\n * - 전역(모듈 스코프) 상태로 로그를 관리하여, 컴포넌트의 생명주기와 관계없이 로그를 수집합니다.\n * - `console` 객체의 메서드를 오버라이드하여 로그를 가로챕니다.\n * - 옵저버 패턴(listeners)을 사용해 여러 컴포넌트에서 로그 상태를 구독하고 업데이트를 받을 수 있도록 합니다.\n */\n\n// 전역으로 관리되는 로그 배열. 앱 전체의 로그가 여기에 쌓입니다.\nlet globalLogs: LogEntry[] = [];\n// 로그 상태의 변경을 구독하는 컴포넌트(의 setState 함수) 목록입니다.\nlet listeners: React.Dispatch<React.SetStateAction<LogEntry[]>>[] = [];\n\n// 기존 console 메서드를 백업하기 위한 객체입니다.\nconst originalConsoleMethods: { [key in LogType]?: (...args: any[]) => void } = {};\n// 콘솔이 이미 오버라이드되었는지 확인하는 플래그입니다.\nlet isConsoleOverridden = false;\n\n// 새로운 로그를 전역 로그 배열에 추가하고, 모든 구독자에게 알립니다.\nconst addLog = (type: LogType, ...args: any[]) => {\n const newLog: LogEntry = {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n };\n globalLogs = [...globalLogs, newLog];\n listeners.forEach((listener) => listener([...globalLogs]));\n};\n\n/**\n * `console` 객체의 메서드를 오버라이드하여 로그 수집을 시작합니다.\n * 중복 실행을 방지하기 위해 `isConsoleOverridden` 플래그를 사용합니다.\n */\nexport const initializeConsoleLogOverride = () => {\n if (!isClient() || isConsoleOverridden) {\n return;\n }\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n\n logTypes.forEach((type) => {\n // 기존 메서드 저장\n originalConsoleMethods[type] = console[type];\n\n // 메서드 오버라이드\n console[type] = (...args: any[]) => {\n // 기존 메서드를 먼저 호출하여 브라우저 콘솔에는 정상적으로 로그가 표시되도록 합니다.\n if (originalConsoleMethods[type]) {\n originalConsoleMethods[type]?.apply(console, args);\n }\n // 그 다음, 디버그 툴의 로그 상태에 추가합니다.\n addLog(type, ...args);\n };\n });\n\n isConsoleOverridden = true;\n};\n\n/**\n * 오버라이드했던 `console` 메서드를 원래대로 복원합니다.\n * `DebugTool` 컴포넌트가 언마운트될 때 호출됩니다.\n */\nexport const restoreConsoleLog = () => {\n if (!isClient() || !isConsoleOverridden) {\n return;\n }\n\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n logTypes.forEach((type) => {\n if (originalConsoleMethods[type]) {\n console[type] = originalConsoleMethods[type];\n }\n });\n isConsoleOverridden = false;\n};\n\n/**\n * 컴포넌트에서 콘솔 로그 데이터를 사용하기 위한 훅입니다.\n * @returns { logs, clearLogs }\n */\nexport const useConsoleLog = () => {\n const [logs, setLogs] = useState<LogEntry[]>(globalLogs);\n\n useEffect(() => {\n // 컴포넌트가 마운트될 때, 자신의 setState 함수를 listener로 등록합니다.\n listeners.push(setLogs);\n\n // 컴포넌트가 언마운트될 때, listener에서 제거하여 메모리 누수를 방지합니다.\n return () => {\n listeners = listeners.filter((l) => l !== setLogs);\n };\n }, []);\n\n // 모든 로그를 지우는 함수입니다.\n const clearLogs = useCallback(() => {\n globalLogs = [];\n listeners.forEach((listener) => listener([]));\n }, []);\n\n return { logs, clearLogs };\n};\n","import React, { useState, useRef, useMemo, useEffect } from 'react';\n\nimport {\n clearButtonStyle,\n debugFeaturePanelStyle,\n h2Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n logTypeStyles,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LogType, LogEntry } from '../../types';\n\nimport { useConsoleLog } from './use-console-log';\n\nconst safeStringify = (obj: any): string => {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst LogMessage: React.FC<{ entry: LogEntry }> = ({ entry }: { entry: LogEntry }) => {\n const messageParts = entry.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const style = { ...logMessageStyle, ...logTypeStyles[entry.type] };\n\n return <pre style={style}>{messageParts.join(' ')}</pre>;\n};\n\nconst ConsoleLogPanel: React.FC<FeaturePanelProps> = ({ onClose }: { onClose: () => void }) => {\n const { logs, clearLogs } = useConsoleLog();\n const [filter, setFilter] = useState<LogType | 'all'>('all');\n const logContainerRef = useRef<HTMLDivElement>(null);\n\n const filteredLogs = useMemo(() => {\n if (filter === 'all') {\n return logs;\n }\n\n return logs.filter((log) => log.type === filter);\n }, [logs, filter]);\n\n useEffect(() => {\n if (logContainerRef.current) {\n logContainerRef.current.scrollTop = logContainerRef.current.scrollHeight;\n }\n }, [filteredLogs]);\n\n const segmentOptions: (LogType | 'all')[] = ['all', 'log', 'warn', 'error'];\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Console Logs</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <div>\n {segmentOptions.map((option) => (\n <button key={option} onClick={() => setFilter(option)} disabled={filter === option}>\n {option.charAt(0).toUpperCase() + option.slice(1)}\n </button>\n ))}\n </div>\n <button onClick={clearLogs} style={clearButtonStyle}>\n Clear\n </button>\n </div>\n <div style={logListContainerStyle} ref={logContainerRef}>\n {filteredLogs.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <LogMessage entry={log} />\n </div>\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default ConsoleLogPanel;\n","import React, { useState, useMemo, useEffect } from 'react';\n\nimport { loginTypes } from '../../config';\nimport {\n debugFeaturePanelStyle,\n formActionsStyle,\n h2Style,\n loginFormContainerStyle,\n modalOverlayStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LoginTypeConfig } from '../../types';\nimport { cookieClient } from '../storage/use-storage';\n\n/**\n * @file '간편 로그인' 기능의 UI를 담당하는 패널 컴포넌트입니다.\n * @description\n * - `config.ts`의 `loginTypes` 설정을 기반으로 동적인 로그인 폼을 생성합니다.\n * - 실제 로그인 로직은 `onLogin` prop으로 외부에서 주입받아 처리합니다.\n * 이 컴포넌트는 UI와 데이터 수집의 역할만 수행하여 재사용성을 높입니다.\n */\n\ninterface LoginPanelProps extends FeaturePanelProps {\n onLogin: (loginType: LoginTypeConfig['id'], data: Record<string, string>) => void;\n}\n\nconst LoginPanel: React.FC<LoginPanelProps> = ({ onClose, onLogin }) => {\n const [selectedTypeId, setSelectedTypeId] = useState<string>(loginTypes[0]?.id || '');\n const [formData, setFormData] = useState<Record<string, string>>({});\n const [mode, setMode] = useState<boolean>(cookieClient.getCookie('dsp-debug-mode') === 'on');\n const [stepValidationOff, SetStepValidationOff] = useState<boolean>(\n cookieClient.getCookie('Debug-Step-Validation-Off') === 'true'\n );\n const selectedType = useMemo(() => loginTypes.find((t) => t.id === selectedTypeId), [selectedTypeId]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (selectedType) {\n onLogin(selectedType.id, formData);\n onClose();\n }\n };\n\n /**\n * @description\n * 체크박스가 체크되면,\n * 쿠키에 'dsp-debug-mode' 값을 'on' 으로 추가\n *\n * 체크가 해제되면\n * 'dsp-debug-mode' 값을 'off' 로 변경\n */\n const handleDebugOn = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkbox = e.target as HTMLInputElement;\n if (checkbox.checked) {\n cookieClient.setCookie('dsp-debug-mode', 'on', { path: '/' });\n setMode(true);\n } else {\n cookieClient.setCookie('dsp-debug-mode', 'off', { path: '/' });\n setMode(false);\n }\n };\n\n /**\n * @description\n * 체크박스가 체크되면, 서식의 step validation을 끄는 쿠키를 추가\n * 쿠키에 'Debug-Step-Validation-Off' 값을 'true' 로 추가\n *\n * 체크가 해제되면\n * 'Debug-Step-Validation-Off' 값을 'false' 로 변경\n */\n const handleStepValidationOff = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkbox = e.target as HTMLInputElement;\n if (checkbox.checked) {\n cookieClient.setCookie('Debug-Step-Validation-Off', 'true', { path: '/' });\n SetStepValidationOff(true);\n } else {\n cookieClient.setCookie('Debug-Step-Validation-Off', 'false', { path: '/' });\n SetStepValidationOff(false);\n }\n };\n\n\n\n\n /**\n * @description \n * dea쪽 , hooks/use-terms-download.tsx 에서 사용하는 값.\n * QA서버에서 정상확인이 불가능하여, 운영서버쪽 데이터로 다운로드 연동하여 확인하는 목적.\n * 사용후 해당쿠키 반드시삭제\n */\n const handleTermsPathPolyNo = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value.trim();\n if (!val) {\n cookieClient.deleteCookie('Debug-Terms-PolyNo');\n } else {\n cookieClient.setCookie('Debug-Terms-PolyNo', val, { path: '/' });\n }\n };\n\n const handleTermsPathSaleDate = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value.trim();\n if (!val) {\n cookieClient.deleteCookie('Debug-Terms-SaleDate');\n } else {\n cookieClient.setCookie('Debug-Terms-SaleDate', val, { path: '/' });\n }\n };\n\n useEffect(() => {\n setFormData({});\n }, [selectedType]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>간편 로그인</h2>\n <button onClick={onClose}>X</button>\n </div>\n\n <form style={loginFormContainerStyle} onSubmit={handleSubmit}>\n <div>\n <ul style={{ listStyleType: 'circle' }}>\n <li>\n <label htmlFor=\"debug-on\">Debug On</label>\n <input type=\"checkbox\" id=\"debug-on\" onChange={handleDebugOn} checked={mode} />\n <ul style={{ listStyleType: 'square', paddingLeft: '20px' }}>\n <li>(쿠키에 셋팅된 토큰값으로 헤더를 생성합니다. 간편로그인 사용시 필수체크)</li>\n </ul>\n </li>\n <li>\n <label htmlFor=\"step-validation-off\">서식 Validation Off</label>\n <input\n type=\"checkbox\"\n id=\"step-validation-off\"\n onChange={handleStepValidationOff}\n checked={stepValidationOff}\n />\n <ul style={{ listStyleType: 'square', paddingLeft: '20px' }}>\n <li>(서식 단계 이동시, validation을 끄고 미작성 단계도 이동가능하도록 합니다.)</li>\n </ul>\n </li>\n <li>\n <label htmlFor=\"terms-path-poly-no\">약관 polyNo</label>\n <input\n type=\"text\"\n id=\"terms-path-poly-no\"\n onChange={handleTermsPathPolyNo}\n placeholder='polyNo,saleDate둘다입력'\n />\n </li>\n <li>\n <label htmlFor=\"terms-path-sale-date\">약관 saleDate</label>\n <input\n type=\"text\"\n id=\"terms-path-sale-date\"\n onChange={handleTermsPathSaleDate}\n placeholder='polyNo,saleDate둘다입력'\n />\n <br /><strong>약관확인후 해당쿠키 반드시 삭제</strong>\n </li>\n </ul>\n <br /> <br />\n <label htmlFor=\"login-type-select\">로그인 유형</label>\n <select id=\"login-type-select\" value={selectedTypeId} onChange={(e) => setSelectedTypeId(e.target.value)}>\n {loginTypes.map((type) => (\n <option key={type.id} value={type.id}>\n {type.label}\n </option>\n ))}\n </select>\n </div>\n\n {selectedType?.fields.map((field) => (\n <div key={field.name}>\n <label htmlFor={field.name}>{field.label}</label>\n <input\n type={field.type}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder}\n value={formData[field.name] || ''}\n onChange={handleInputChange}\n required\n />\n </div>\n ))}\n\n <div style={formActionsStyle}>\n <button type=\"submit\">로그인</button>\n </div>\n </form>\n </div>\n </>\n );\n};\n\nexport default LoginPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n type RequestInfo,\n type ResponseInfo,\n type ErrorInfo,\n type HeldRequest,\n type HeldResponse,\n type HeldError,\n useDebugStore\n} from 'sales-frontend-stores';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n holdButtonsContainerStyle,\n logContentStyle,\n logListStyle,\n logSummaryStyle,\n modalOverlayStyle,\n networkLogContainerStyle,\n panelHeaderStyle,\n searchContainerStyle\n} from '../../styles/styles';\n\ninterface NetworkLogProps {\n onClose: () => void;\n}\n\nconst SEARCH_SECTIONS = [\n { value: 'all', label: '전체' },\n { value: 'url', label: '주소' },\n { value: 'headers', label: '헤더' },\n { value: 'params', label: '파라미터' },\n { value: 'data', label: '요청' },\n { value: 'response', label: '응답' },\n { value: 'error', label: '에러' }\n];\n\ntype Log = (RequestInfo | ResponseInfo | ErrorInfo | HeldRequest | HeldResponse | HeldError) & {\n type: string;\n holdStatus?: 'held' | 'playing';\n};\n\nconst getLogInfo = (log: Log): RequestInfo | ResponseInfo | ErrorInfo => {\n if (log.holdStatus === 'held') {\n if ('request' in log) {\n return (log as HeldRequest).request;\n }\n if ('response' in log) {\n return (log as HeldResponse).response;\n }\n if ('error' in log) {\n return (log as HeldError).error;\n }\n }\n\n return log as RequestInfo | ResponseInfo | ErrorInfo;\n};\n\nconst NetworkLog: React.FC<NetworkLogProps> = ({ onClose }) => {\n const {\n requests,\n responses,\n errors,\n clear,\n isHold,\n toggleHold,\n heldRequests,\n heldResponses,\n heldErrors,\n playAllRequests,\n playAllResponses\n } = useDebugStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [searchSection, setSearchSection] = useState(SEARCH_SECTIONS[0]?.value);\n\n const allLogs = useMemo(() => {\n const logs: Log[] = [];\n requests.forEach((req: RequestInfo) => logs.push({ ...req, type: 'request' }));\n responses.forEach((res: ResponseInfo) => logs.push({ ...res, type: 'response' }));\n errors.forEach((err: ErrorInfo) => logs.push({ ...err, type: 'error' }));\n heldRequests.forEach((req: HeldRequest) => logs.push({ ...req, type: 'request', holdStatus: 'held' }));\n heldResponses.forEach((res: HeldResponse) => logs.push({ ...res, type: 'response', holdStatus: 'held' }));\n heldErrors.forEach((err: HeldError) => logs.push({ ...err, type: 'error', holdStatus: 'held' }));\n\n logs.sort((a, b) => {\n const aInfo = getLogInfo(a);\n const bInfo = getLogInfo(b);\n const aTime = 'startTime' in aInfo ? aInfo.startTime : 0;\n const bTime = 'startTime' in bInfo ? bInfo.startTime : 0;\n\n return bTime - aTime;\n });\n\n return logs;\n }, [requests, responses, errors, heldRequests, heldResponses, heldErrors]);\n\n const filteredLogs = useMemo(() => {\n if (!searchTerm) {\n return allLogs;\n }\n const lowercasedTerm = searchTerm.toLowerCase();\n\n return allLogs.filter((log: Log) => {\n const logInfo = getLogInfo(log);\n switch (searchSection) {\n case 'url':\n return logInfo.url?.toLowerCase().includes(lowercasedTerm);\n case 'headers':\n return (\n 'headers' in logInfo &&\n logInfo.headers &&\n JSON.stringify(logInfo.headers)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'params':\n return (\n 'params' in logInfo &&\n logInfo.params &&\n JSON.stringify(logInfo.params)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'data':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'request' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'response':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'response' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'error':\n return log.type === 'error' && JSON.stringify(logInfo)?.toLowerCase().includes(lowercasedTerm);\n case 'all':\n default:\n return JSON.stringify(logInfo).toLowerCase().includes(lowercasedTerm);\n }\n });\n }, [allLogs, searchTerm, searchSection]);\n\n const renderLogSummary = (log: Log) => {\n const logInfo = getLogInfo(log);\n const prefix = log.holdStatus === 'held' ? '[HELD] ' : '';\n if (log.type === 'request') {\n return `${prefix}[REQ] ${logInfo.method.toUpperCase()} ${logInfo.url}`;\n }\n if (log.type === 'response' && 'status' in logInfo) {\n return `${prefix}[RES] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.status}`;\n }\n if (log.type === 'error' && 'message' in logInfo) {\n return `${prefix}[ERR] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.message}`;\n }\n\n return 'Unknown Log';\n };\n\n const renderLogContent = (log: Log) => {\n const logInfo = getLogInfo(log);\n\n return <pre>{JSON.stringify(logInfo, null, 2)}</pre>;\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>네트워크 로그</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={networkLogContainerStyle}>\n <div style={searchContainerStyle}>\n <select value={searchSection} onChange={(e) => setSearchSection(e.target.value)}>\n {SEARCH_SECTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <input\n type=\"text\"\n placeholder=\"검색...\"\n value={searchTerm}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n style={flex1Style}\n />\n <label>\n <input type=\"checkbox\" id=\"hold-checkbox\" checked={isHold} onChange={toggleHold} />\n Hold\n </label>\n <button onClick={clear}>clear</button>\n </div>\n {isHold && (\n <div style={holdButtonsContainerStyle}>\n <button onClick={() => playAllRequests()}>REQ Resolve</button>\n <button onClick={() => playAllResponses()}>RES Resolve</button>\n </div>\n )}\n <div style={logListStyle}>\n {filteredLogs.length === 0 ? (\n <p>표시할 로그가 없습니다.</p>\n ) : (\n <div>\n {filteredLogs.map((log, index) => (\n <details key={index}>\n <summary style={logSummaryStyle}>{renderLogSummary(log)}</summary>\n <div style={logContentStyle}>{renderLogContent(log)}</div>\n </details>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default NetworkLog;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n modalOverlayStyle,\n pageNavigationContentStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps } from '../../types';\n\n\n/**\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 React, { useState, useMemo } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n h2Style,\n logContentStyle,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle,\n storageSearchInputStyle,\n storageTableContainerStyle,\n textareaStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, StorageType, StorageItem } from '../../types';\n\nimport { useStorage } from './use-storage';\n\n/**\n * @file '스토리지 관리' 기능의 UI를 담당하는 패널 컴포넌트입니다.\n */\n\ninterface StoragePanelProps extends FeaturePanelProps {\n storageType: StorageType;\n}\n\nconst ValueDisplay: React.FC<{ value: string }> = ({ value }) => {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === 'object' && parsed !== null) {\n return <pre style={logContentStyle}>{JSON.stringify(parsed, null, 2)}</pre>;\n }\n } catch (e) {\n //\n }\n\n return <div style={logContentStyle}>{value}</div>;\n};\n\nconst EditableRow: React.FC<{\n item: StorageItem;\n onSave: (key: string, value: string) => void;\n onRemove: (key: string) => void;\n}> = ({ item, onSave, onRemove }) => {\n const [isEditing, setIsEditing] = useState(false);\n const [value, setValue] = useState(item.value);\n\n const handleSave = () => {\n onSave(item.key, value);\n setIsEditing(false);\n };\n\n const handleEdit = () => {\n setValue(item.value);\n setIsEditing(true);\n };\n\n return (\n <details>\n <summary>{item.key}</summary>\n <div>\n {isEditing ? <button onClick={handleSave}>Save</button> : <button onClick={handleEdit}>Edit</button>}\n <button onClick={() => onRemove(item.key)}>Remove</button>\n {isEditing ? (\n <textarea value={value} onChange={(e) => setValue(e.target.value)} style={textareaStyle} />\n ) : (\n <ValueDisplay value={item.value} />\n )}\n </div>\n </details>\n );\n};\n\nconst StoragePanel: React.FC<StoragePanelProps> = ({ onClose, storageType }) => {\n const { items, setItem, removeItem } = useStorage(storageType);\n const [filter, setFilter] = useState('');\n\n const filteredItems = useMemo(() => {\n if (!filter) {\n return items;\n }\n\n return items.filter(\n (item) =>\n item.key.toLowerCase().includes(filter.toLowerCase()) || item.value.toLowerCase().includes(filter.toLowerCase())\n );\n }, [items, filter]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>{storageType === 'localStorage' ? 'Local Storage' : 'Cookies'}</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <input\n type=\"text\"\n placeholder=\"Search key or value...\"\n value={filter}\n onChange={(e) => setFilter(e.target.value)}\n style={storageSearchInputStyle}\n />\n </div>\n <div style={storageTableContainerStyle}>\n {filteredItems.map((item) => (\n <EditableRow key={item.key} item={item} onSave={setItem} onRemove={removeItem} />\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default StoragePanel;\n","import React from 'react';\n\nimport ConsoleLogPanel from './features/console-log/console-log-panel';\nimport LoginPanel from './features/login-dsp/login-panel';\nimport NetworkLog from './features/network-log';\nimport PageNavigationPanel from './features/page-navigation/page-navigation-panel';\nimport ScriptExecutorPanel from './features/script-executor/script-executor-panel';\nimport StoragePanel from './features/storage/storage-panel';\nimport { MenuItem, LoginTypeConfig } from './types';\n\n/**\n * @file 디버그 툴의 모든 설정을 관리하는 중앙 설정 파일입니다.\n * @description\n * - 새로운 기능을 추가하거나 기존 기능을 수정/제거할 때 이 파일을 수정합니다.\n * - `menuItems`: 디버그 툴에 표시될 메뉴 목록을 정의합니다.\n * - `loginTypes`: '간편 로그인' 기능에서 사용할 로그인 유형과 필드를 정의합니다.\n */\n\n// '간편 로그인' 기능에서 사용할 로그인 유형 목록입니다.\n// 새로운 로그인 유형을 추가하려면 이 배열에 객체를 추가하면 됩니다.\nexport const loginTypes: LoginTypeConfig[] = [\n {\n id: 'fp',\n label: 'FP 로그인',\n fields: [{ name: 'employeeId', label: '사번', type: 'text', placeholder: '사번을 입력하세요' }]\n },\n {\n id: 'customer',\n label: '고객 로그인',\n fields: [\n { name: 'name', label: '이름', type: 'text', placeholder: '이름' },\n { name: 'phone', label: '전화번호', type: 'tel', placeholder: '전화번호' },\n { name: 'residentNumber', label: '주민번호', type: 'text', placeholder: '주민번호 앞 7자리' },\n { name: 'userId', label: '아이디', type: 'text', placeholder: '아이디' },\n { name: 'password', label: '비밀번호', type: 'password', placeholder: '비밀번호' }\n ]\n }\n];\n\n/**\n * 디버그 툴에 표시될 메뉴 아이템 목록입니다.\n * 새로운 기능을 개발하고 여기에 추가하여 메뉴에 노출시킬 수 있습니다.\n *\n * @property {string} id - 메뉴의 고유 식별자입니다.\n * @property {string} label - 메뉴에 표시될 텍스트입니다.\n * @property {React.ComponentType} component - 메뉴 클릭 시 렌더링될 리액트 컴포넌트입니다.\n * @property {boolean} display - `true`일 경우 메뉴에 표시되고, `false`일 경우 숨겨집니다. 개발 중인 기능을 숨길 때 유용합니다.\n */\nexport const menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[] = [\n {\n id: 'network-log',\n label: '네트워크 로그',\n component: NetworkLog,\n display: true\n },\n {\n id: 'console-log',\n label: '콘솔 로그 확인',\n component: ConsoleLogPanel,\n display: true\n },\n {\n id: 'local-storage',\n label: '로컬 스토리지 관리',\n // StoragePanel은 재사용 가능한 컴포넌트이므로, props를 통해 어떤 스토리지를 다룰지 지정합니다.\n component: (props) => <StoragePanel {...props} storageType=\"localStorage\" />,\n display: true\n },\n {\n id: 'cookie-management',\n label: '쿠키 관리',\n component: (props) => <StoragePanel {...props} storageType=\"cookie\" />,\n display: true\n },\n {\n id: 'quick-login',\n label: '간편 로그인',\n component: LoginPanel,\n display: true // 실제 표시는 DebugTool.tsx에서 onLogin prop 존재 여부에 따라 결정됩니다.\n },\n {\n id: 'script-executor',\n label: '스크립트 실행',\n component: ScriptExecutorPanel,\n display: true\n },\n {\n id: 'page-navigation',\n label: '페이지 정보',\n component: PageNavigationPanel,\n display: true\n }\n];\n","import { useState, useEffect } from 'react';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { EnvironmentInfo } from '../types';\n\n/**\n * 현재 애플리케이션의 실행 환경(호스트 기준)을 감지하는 훅입니다.\n * @returns {EnvironmentInfo} 환경 정보 객체 (e.g., { env: 'local' })\n */\nexport const useEnvironment = (): EnvironmentInfo => {\n const [envInfo, setEnvInfo] = useState<EnvironmentInfo>({\n env: 'prd'\n });\n\n useEffect(() => {\n const { hostname } = window.location;\n setEnvInfo({ env: getEnvironmentFromHostname(hostname) });\n }, []);\n\n return envInfo;\n};\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\nimport FloatingButton from './components/floating-button';\nimport MenuPanel from './components/menu-panel';\nimport { menuItems as defaultMenuItems } from './config';\nimport { initializeConsoleLogOverride, restoreConsoleLog } from './features/console-log/use-console-log';\nimport { useEnvironment } from './hooks/use-environment';\nimport { DebugToolServiceCode, Environment, MenuItem } from './types';\n\n/**\n * @file DebugTool의 메인 컴포넌트 파일입니다.\n * @description\n * - 환경에 따라 디버그 툴의 노출 여부를 결정합니다.\n * - 플로팅 버튼과 메뉴 패널의 상태를 관리합니다.\n * - 선택된 기능(Feature) 컴포넌트를 렌더링합니다.\n * - `onLogin`, `envOverride`, `menuItemsOverride` 등의 props를 통해 외부에서 동작을 제어할 수 있습니다.\n */\n\n// onLogin 콜백을 optional prop으로 받습니다.\ninterface DebugToolProps {\n /** 간편 로그인 기능을 위한 콜백 함수. 이 함수가 제공되어야 '간편 로그인' 메뉴가 활성화됩니다. */\n onLogin?: (loginType: string, data: Record<string, string>) => void;\n /** 현재 환경을 강제로 재정의합니다. 'prod' 환경에서도 디버그 툴을 테스트할 때 유용합니다. */\n envOverride?: Environment;\n /** 기본 메뉴 설정을 재정의합니다. 동적으로 메뉴를 추가하거나 변경할 때 사용합니다. */\n menuItemsOverride?: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n serviceCode?: DebugToolServiceCode;\n}\n\nexport const DebugTool: React.FC<DebugToolProps> = ({\n onLogin,\n envOverride,\n menuItemsOverride,\n serviceCode = 'etc'\n}) => {\n // 마운트 시 콘솔 오버라이드를 초기화하고 언마운트 시 복원합니다.\n // 이를 통해 '콘솔 로그' 기능이 페이지의 모든 로그를 수집할 수 있습니다.\n useEffect(() => {\n initializeConsoleLogOverride();\n\n return () => {\n restoreConsoleLog();\n };\n }, []); // 빈 의존성 배열은 마운트와 언마운트 시 한 번만 실행되도록 보장합니다.\n\n const environment = useEnvironment();\n // envOverride prop이 있으면 환경을 강제로 설정하고, 없으면 감지된 환경을 사용합니다.\n const env = envOverride || environment.env;\n\n // menuItemsOverride prop이 있으면 메뉴를 강제로 설정하고, 없으면 config 파일의 기본 메뉴를 사용합니다.\n const menuItems = menuItemsOverride || defaultMenuItems;\n const [isMenuOpen, setMenuOpen] = useState(false);\n // 현재 활성화된 기능 컴포넌트를 상태로 관리합니다. null이면 메뉴가 보입니다.\n const [activeFeature, setActiveFeature] = useState<React.ComponentType<any> | null>(null);\n\n // 'local', 'dev', 'stg' 환경에서만 툴을 보여줍니다.\n const isVisible = ['local', 'dev', 'stg'].includes(env);\n\n // 메뉴 아이템을 클릭했을 때 호출되는 핸들러입니다.\n const handleMenuClick = (itemComponent: React.ComponentType<any>) => {\n setActiveFeature(() => itemComponent); // 클릭된 기능의 컴포넌트를 활성화합니다.\n setMenuOpen(false); // 메뉴 패널을 닫습니다.\n };\n\n // 기능 패널의 닫기 버튼을 눌렀을 때 호출되는 핸들러입니다.\n const handleCloseFeature = () => {\n setActiveFeature(null); // 활성화된 기능 컴포넌트를 null로 만들어 메뉴로 돌아갑니다.\n };\n\n // 허용된 환경이 아니면 아무것도 렌더링하지 않습니다.\n if (!isVisible) {\n return null;\n }\n\n // 플로팅 버튼 클릭 시 메뉴 패널의 열림/닫힘 상태를 토글합니다.\n const toggleMenu = () => {\n setMenuOpen((prev) => !prev);\n // 메뉴가 열릴 때, 이전에 활성화된 기능이 있었다면 초기화합니다.\n if (!isMenuOpen) {\n setActiveFeature(null);\n }\n };\n\n // 실제 화면에 보여줄 메뉴 아이템 목록을 필터링합니다.\n const availableMenuItems = menuItems.filter(\n (item) =>\n item.display && // config에서 display가 true인 항목만 필터링합니다.\n // 'quick-login' 기능은 onLogin prop이 제공된 경우에만 활성화합니다.\n (item.id !== 'quick-login' || (item.id === 'quick-login' && onLogin))\n );\n\n // 활성화된 기능 컴포넌트가 있으면 해당 컴포넌트를 렌더링합니다.\n if (activeFeature) {\n const FeatureComponent = activeFeature;\n\n // 모든 기능 컴포넌트에 공통적으로 onClose 핸들러와 onLogin 콜백을 전달합니다.\n return <FeatureComponent onClose={handleCloseFeature} onLogin={onLogin} />;\n }\n\n // 활성화된 기능이 없으면 플로팅 버튼과 메뉴 패널(isMenuOpen이 true일 경우)을 렌더링합니다.\n return (\n <div\n style={{\n position: 'fixed',\n right: '20px',\n bottom: '20px',\n zIndex: 9999\n }}\n >\n <FloatingButton onClick={toggleMenu} />\n {isMenuOpen && (\n <MenuPanel\n menuItems={availableMenuItems}\n onMenuItemClick={handleMenuClick}\n onClose={() => setMenuOpen(false)}\n serviceCode={serviceCode}\n />\n )}\n </div>\n );\n};\n","import { useDebugStore } from 'sales-frontend-stores';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n\n/** debug-tool 에서 사용될 로그 저장 */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest } = useDebugStore.getState();\n const startTime = Date.now();\n const requestInfo = {\n url: config.url || '',\n method: config.method || '',\n headers: config.headers,\n params: config.params,\n data: config.data,\n startTime\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdRequest({ request: requestInfo, resolver });\n });\n } else {\n addRequest(requestInfo);\n }\n }\n}\n\n/** debug-tool 에서 사용될 로그 저장 */\nexport function addResponseLog(response: AxiosResponse) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse } = useDebugStore.getState();\n const { config } = response;\n const responseInfo = {\n url: config.url || '',\n method: config.method || '',\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdResponse({ response: responseInfo, resolver });\n });\n } else {\n addResponse(responseInfo);\n }\n }\n}\n\nexport function addErrorLog(error: AxiosError) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError } = useDebugStore.getState();\n const { config } = error;\n const errorInfo = {\n url: config?.url || '',\n method: config?.method || '',\n message: error.message,\n config: error.config,\n response: error.response\n ? {\n url: error.response.config?.url || '',\n method: error.response.config?.method || '',\n status: error.response.status,\n statusText: error.response.statusText,\n headers: error.response.headers,\n data: error.response.data\n }\n : undefined\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdError({ error: errorInfo, resolver });\n });\n } else {\n addError(errorInfo);\n }\n }\n}\n","import { cookieClient } from './features/storage/use-storage';\n\nexport function isDebugStepValidationOff(): boolean {\n const debugStepValidationOff = cookieClient.getCookie('Debug-Step-Validation-Off') === 'true';\n\n return debugStepValidationOff;\n}\n\nexport function isDebugMode(): boolean {\n const debugMode = cookieClient.getCookie('dsp-debug-mode') === 'on';\n\n return debugMode;\n}\n"]}
1
+ {"version":3,"sources":["../src/styles/styles.ts","../src/components/floating-button.tsx","../src/features/change-host/index.tsx","../src/features/file-convert/index.tsx","../src/features/form-factor/index.tsx","../src/features/init-refresh/index.tsx","../src/components/menu-panel.tsx","../src/features/console-log/use-console-log.ts","../src/features/console-log/console-log-panel.tsx","../src/features/login-dsp/login-panel.tsx","../src/features/network-log/index.tsx","../src/features/page-navigation/page-navigation-panel.tsx","../src/features/script-executor/script-executor-panel.tsx","../src/features/storage/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","../src/debug-utils.ts"],"names":["React","setCookie","getCookie","menuItems","useState","useEffect","useRef","useMemo","deleteCookie","logTypeStyles","safeStringify","useCallback","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 from 'react';\n\nimport { getCookie, setCookie } from 'sales-frontend-utils/cookie';\n\nimport { panelHeaderStyle, h2Style, menuItemStyle } from '../../styles/styles';\n\nexport const fileConvertTypeCookieKey = 'dsp-debug-mode-file-convert-type';\nexport function FileConvert() {\n const handleFileConvertType = (host: 'fetch' | 'canvas' | 'xhr') => {\n setCookie(fileConvertTypeCookieKey, host);\n alert(`file convert type 변경되었습니다.` + `:${host}`);\n console.log('file convert type 변경되었습니다.', {\n [fileConvertTypeCookieKey]: getCookie(fileConvertTypeCookieKey)\n });\n };\n\n return (\n <>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>File Convert Type</h2>\n </div>\n <ul>\n <li style={menuItemStyle} onClick={() => handleFileConvertType('fetch')}>\n fetch\n </li>\n <li style={menuItemStyle} onClick={() => handleFileConvertType('canvas')}>\n canvas\n </li>\n <li style={menuItemStyle} onClick={() => handleFileConvertType('xhr')}>\n xhr\n </li>\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 { FileConvert } from '../features/file-convert';\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 <FormFactor />\n <ChangeHost />\n <InitRefresh />\n <FileConvert />\n </>\n )}\n </div>\n </>\n );\n};\n\nexport default MenuPanel;\n","import { useState, useEffect, useCallback } from 'react';\n\nimport { isClient } from 'sales-frontend-utils';\n\nimport { LogEntry, LogType } from '../../types';\n\n/**\n * @file '콘솔 로그 확인' 기능의 핵심 로직을 담당하는 훅입니다.\n * @description\n * - 전역(모듈 스코프) 상태로 로그를 관리하여, 컴포넌트의 생명주기와 관계없이 로그를 수집합니다.\n * - `console` 객체의 메서드를 오버라이드하여 로그를 가로챕니다.\n * - 옵저버 패턴(listeners)을 사용해 여러 컴포넌트에서 로그 상태를 구독하고 업데이트를 받을 수 있도록 합니다.\n */\n\n// 전역으로 관리되는 로그 배열. 앱 전체의 로그가 여기에 쌓입니다.\nlet globalLogs: LogEntry[] = [];\n// 로그 상태의 변경을 구독하는 컴포넌트(의 setState 함수) 목록입니다.\nlet listeners: React.Dispatch<React.SetStateAction<LogEntry[]>>[] = [];\n\n// 기존 console 메서드를 백업하기 위한 객체입니다.\nconst originalConsoleMethods: { [key in LogType]?: (...args: any[]) => void } = {};\n// 콘솔이 이미 오버라이드되었는지 확인하는 플래그입니다.\nlet isConsoleOverridden = false;\n\n// 새로운 로그를 전역 로그 배열에 추가하고, 모든 구독자에게 알립니다.\nconst addLog = (type: LogType, ...args: any[]) => {\n const newLog: LogEntry = {\n id: Date.now() + Math.random(),\n type,\n timestamp: new Date().toLocaleTimeString(),\n message: args\n };\n globalLogs = [...globalLogs, newLog];\n listeners.forEach((listener) => listener([...globalLogs]));\n};\n\n/**\n * `console` 객체의 메서드를 오버라이드하여 로그 수집을 시작합니다.\n * 중복 실행을 방지하기 위해 `isConsoleOverridden` 플래그를 사용합니다.\n */\nexport const initializeConsoleLogOverride = () => {\n if (!isClient() || isConsoleOverridden) {\n return;\n }\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n\n logTypes.forEach((type) => {\n // 기존 메서드 저장\n originalConsoleMethods[type] = console[type];\n\n // 메서드 오버라이드\n console[type] = (...args: any[]) => {\n // 기존 메서드를 먼저 호출하여 브라우저 콘솔에는 정상적으로 로그가 표시되도록 합니다.\n if (originalConsoleMethods[type]) {\n originalConsoleMethods[type]?.apply(console, args);\n }\n // 그 다음, 디버그 툴의 로그 상태에 추가합니다.\n addLog(type, ...args);\n };\n });\n\n isConsoleOverridden = true;\n};\n\n/**\n * 오버라이드했던 `console` 메서드를 원래대로 복원합니다.\n * `DebugTool` 컴포넌트가 언마운트될 때 호출됩니다.\n */\nexport const restoreConsoleLog = () => {\n if (!isClient() || !isConsoleOverridden) {\n return;\n }\n\n const logTypes: LogType[] = ['log', 'info', 'warn', 'error', 'debug'];\n logTypes.forEach((type) => {\n if (originalConsoleMethods[type]) {\n console[type] = originalConsoleMethods[type];\n }\n });\n isConsoleOverridden = false;\n};\n\n/**\n * 컴포넌트에서 콘솔 로그 데이터를 사용하기 위한 훅입니다.\n * @returns { logs, clearLogs }\n */\nexport const useConsoleLog = () => {\n const [logs, setLogs] = useState<LogEntry[]>(globalLogs);\n\n useEffect(() => {\n // 컴포넌트가 마운트될 때, 자신의 setState 함수를 listener로 등록합니다.\n listeners.push(setLogs);\n\n // 컴포넌트가 언마운트될 때, listener에서 제거하여 메모리 누수를 방지합니다.\n return () => {\n listeners = listeners.filter((l) => l !== setLogs);\n };\n }, []);\n\n // 모든 로그를 지우는 함수입니다.\n const clearLogs = useCallback(() => {\n globalLogs = [];\n listeners.forEach((listener) => listener([]));\n }, []);\n\n return { logs, clearLogs };\n};\n","import React, { useState, useRef, useMemo, useEffect } from 'react';\n\nimport {\n clearButtonStyle,\n debugFeaturePanelStyle,\n h2Style,\n logItemStyle,\n logListContainerStyle,\n logMessageStyle,\n logTimestampStyle,\n logTypeStyles,\n modalOverlayStyle,\n panelHeaderStyle,\n panelToolbarStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps, LogType, LogEntry } from '../../types';\n\nimport { useConsoleLog } from './use-console-log';\n\nconst safeStringify = (obj: any): string => {\n try {\n return JSON.stringify(obj, null, 2);\n } catch (e) {\n return '[Unserializable Object]';\n }\n};\n\nconst LogMessage: React.FC<{ entry: LogEntry }> = ({ entry }: { entry: LogEntry }) => {\n const messageParts = entry.message.map((part) => {\n if (typeof part === 'object' && part !== null) {\n return safeStringify(part);\n }\n\n return String(part);\n });\n\n const style = { ...logMessageStyle, ...logTypeStyles[entry.type] };\n\n return <pre style={style}>{messageParts.join(' ')}</pre>;\n};\n\nconst ConsoleLogPanel: React.FC<FeaturePanelProps> = ({ onClose }: { onClose: () => void }) => {\n const { logs, clearLogs } = useConsoleLog();\n const [filter, setFilter] = useState<LogType | 'all'>('all');\n const logContainerRef = useRef<HTMLDivElement>(null);\n\n const filteredLogs = useMemo(() => {\n if (filter === 'all') {\n return logs;\n }\n\n return logs.filter((log) => log.type === filter);\n }, [logs, filter]);\n\n useEffect(() => {\n if (logContainerRef.current) {\n logContainerRef.current.scrollTop = logContainerRef.current.scrollHeight;\n }\n }, [filteredLogs]);\n\n const segmentOptions: (LogType | 'all')[] = ['all', 'log', 'warn', 'error'];\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>Console Logs</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={panelToolbarStyle}>\n <div>\n {segmentOptions.map((option) => (\n <button key={option} onClick={() => setFilter(option)} disabled={filter === option}>\n {option.charAt(0).toUpperCase() + option.slice(1)}\n </button>\n ))}\n </div>\n <button onClick={clearLogs} style={clearButtonStyle}>\n Clear\n </button>\n </div>\n <div style={logListContainerStyle} ref={logContainerRef}>\n {filteredLogs.map((log) => (\n <div key={log.id} style={logItemStyle}>\n <span style={logTimestampStyle}>{log.timestamp}</span>\n <LogMessage entry={log} />\n </div>\n ))}\n </div>\n </div>\n </>\n );\n};\n\nexport default ConsoleLogPanel;\n","import React, { useState, useMemo, useEffect } from 'react';\n\nimport { deleteCookie, getCookie, setCookie } from 'sales-frontend-utils/cookie';\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 [mode, setMode] = useState<boolean>(getCookie('dsp-debug-mode') === 'on');\n const [stepValidationOff, SetStepValidationOff] = useState<boolean>(\n getCookie('Debug-Step-Validation-Off') === 'true'\n );\n const selectedType = useMemo(() => loginTypes.find((t) => t.id === selectedTypeId), [selectedTypeId]);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (selectedType) {\n onLogin(selectedType.id, formData);\n onClose();\n }\n };\n\n /**\n * @description\n * 체크박스가 체크되면,\n * 쿠키에 'dsp-debug-mode' 값을 'on' 으로 추가\n *\n * 체크가 해제되면\n * 'dsp-debug-mode' 값을 'off' 로 변경\n */\n const handleDebugOn = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkbox = e.target as HTMLInputElement;\n if (checkbox.checked) {\n setCookie('dsp-debug-mode', 'on', { path: '/' });\n setMode(true);\n } else {\n setCookie('dsp-debug-mode', 'off', { path: '/' });\n setMode(false);\n }\n };\n\n /**\n * @description\n * 체크박스가 체크되면, 서식의 step validation을 끄는 쿠키를 추가\n * 쿠키에 'Debug-Step-Validation-Off' 값을 'true' 로 추가\n *\n * 체크가 해제되면\n * 'Debug-Step-Validation-Off' 값을 'false' 로 변경\n */\n const handleStepValidationOff = (e: React.ChangeEvent<HTMLInputElement>) => {\n const checkbox = e.target as HTMLInputElement;\n if (checkbox.checked) {\n setCookie('Debug-Step-Validation-Off', 'true', { path: '/' });\n SetStepValidationOff(true);\n } else {\n setCookie('Debug-Step-Validation-Off', 'false', { path: '/' });\n SetStepValidationOff(false);\n }\n };\n\n /**\n * @description\n * dea쪽 , hooks/use-terms-download.tsx 에서 사용하는 값.\n * QA서버에서 정상확인이 불가능하여, 운영서버쪽 데이터로 다운로드 연동하여 확인하는 목적.\n * 사용후 해당쿠키 반드시삭제\n */\n const handleTermsPathPolyNo = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value.trim();\n if (!val) {\n deleteCookie('Debug-Terms-PolyNo');\n } else {\n setCookie('Debug-Terms-PolyNo', val, { path: '/' });\n }\n };\n\n const handleTermsPathSaleDate = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value.trim();\n if (!val) {\n deleteCookie('Debug-Terms-SaleDate');\n } else {\n setCookie('Debug-Terms-SaleDate', val, { path: '/' });\n }\n };\n\n useEffect(() => {\n setFormData({});\n }, [selectedType]);\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>간편 로그인</h2>\n <button onClick={onClose}>X</button>\n </div>\n\n <form style={loginFormContainerStyle} onSubmit={handleSubmit}>\n <div>\n <ul style={{ listStyleType: 'circle' }}>\n <li>\n <label htmlFor=\"debug-on\">Debug On</label>\n <input type=\"checkbox\" id=\"debug-on\" onChange={handleDebugOn} checked={mode} />\n <ul style={{ listStyleType: 'square', paddingLeft: '20px' }}>\n <li>(쿠키에 셋팅된 토큰값으로 헤더를 생성합니다. 간편로그인 사용시 필수체크)</li>\n </ul>\n </li>\n <li>\n <label htmlFor=\"step-validation-off\">서식 Validation Off</label>\n <input\n type=\"checkbox\"\n id=\"step-validation-off\"\n onChange={handleStepValidationOff}\n checked={stepValidationOff}\n />\n <ul style={{ listStyleType: 'square', paddingLeft: '20px' }}>\n <li>(서식 단계 이동시, validation을 끄고 미작성 단계도 이동가능하도록 합니다.)</li>\n </ul>\n </li>\n <li>\n <label htmlFor=\"terms-path-poly-no\">약관 polyNo</label>\n <input\n type=\"text\"\n id=\"terms-path-poly-no\"\n onChange={handleTermsPathPolyNo}\n placeholder=\"polyNo,saleDate둘다입력\"\n />\n </li>\n <li>\n <label htmlFor=\"terms-path-sale-date\">약관 saleDate</label>\n <input\n type=\"text\"\n id=\"terms-path-sale-date\"\n onChange={handleTermsPathSaleDate}\n placeholder=\"polyNo,saleDate둘다입력\"\n />\n <br />\n <strong>약관확인후 해당쿠키 반드시 삭제</strong>\n </li>\n </ul>\n <br /> <br />\n <label htmlFor=\"login-type-select\">로그인 유형</label>\n <select id=\"login-type-select\" value={selectedTypeId} onChange={(e) => setSelectedTypeId(e.target.value)}>\n {loginTypes.map((type) => (\n <option key={type.id} value={type.id}>\n {type.label}\n </option>\n ))}\n </select>\n </div>\n\n {selectedType?.fields.map((field) => (\n <div key={field.name}>\n <label htmlFor={field.name}>{field.label}</label>\n <input\n type={field.type}\n id={field.name}\n name={field.name}\n placeholder={field.placeholder}\n value={formData[field.name] || ''}\n onChange={handleInputChange}\n required\n />\n </div>\n ))}\n\n <div style={formActionsStyle}>\n <button type=\"submit\">로그인</button>\n </div>\n </form>\n </div>\n </>\n );\n};\n\nexport default LoginPanel;\n","import React, { useState, useMemo } from 'react';\n\nimport {\n type RequestInfo,\n type ResponseInfo,\n type ErrorInfo,\n type HeldRequest,\n type HeldResponse,\n type HeldError,\n useDebugStore\n} from 'sales-frontend-stores';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n holdButtonsContainerStyle,\n logContentStyle,\n logListStyle,\n logSummaryStyle,\n modalOverlayStyle,\n networkLogContainerStyle,\n panelHeaderStyle,\n searchContainerStyle\n} from '../../styles/styles';\n\ninterface NetworkLogProps {\n onClose: () => void;\n}\n\nconst SEARCH_SECTIONS = [\n { value: 'all', label: '전체' },\n { value: 'url', label: '주소' },\n { value: 'headers', label: '헤더' },\n { value: 'params', label: '파라미터' },\n { value: 'data', label: '요청' },\n { value: 'response', label: '응답' },\n { value: 'error', label: '에러' }\n];\n\ntype Log = (RequestInfo | ResponseInfo | ErrorInfo | HeldRequest | HeldResponse | HeldError) & {\n type: string;\n holdStatus?: 'held' | 'playing';\n};\n\nconst getLogInfo = (log: Log): RequestInfo | ResponseInfo | ErrorInfo => {\n if (log.holdStatus === 'held') {\n if ('request' in log) {\n return (log as HeldRequest).request;\n }\n if ('response' in log) {\n return (log as HeldResponse).response;\n }\n if ('error' in log) {\n return (log as HeldError).error;\n }\n }\n\n return log as RequestInfo | ResponseInfo | ErrorInfo;\n};\n\nconst NetworkLog: React.FC<NetworkLogProps> = ({ onClose }) => {\n const {\n requests,\n responses,\n errors,\n clear,\n isHold,\n toggleHold,\n heldRequests,\n heldResponses,\n heldErrors,\n playAllRequests,\n playAllResponses\n } = useDebugStore();\n const [searchTerm, setSearchTerm] = useState('');\n const [searchSection, setSearchSection] = useState(SEARCH_SECTIONS[0]?.value);\n\n const allLogs = useMemo(() => {\n const logs: Log[] = [];\n requests.forEach((req: RequestInfo) => logs.push({ ...req, type: 'request' }));\n responses.forEach((res: ResponseInfo) => logs.push({ ...res, type: 'response' }));\n errors.forEach((err: ErrorInfo) => logs.push({ ...err, type: 'error' }));\n heldRequests.forEach((req: HeldRequest) => logs.push({ ...req, type: 'request', holdStatus: 'held' }));\n heldResponses.forEach((res: HeldResponse) => logs.push({ ...res, type: 'response', holdStatus: 'held' }));\n heldErrors.forEach((err: HeldError) => logs.push({ ...err, type: 'error', holdStatus: 'held' }));\n\n logs.sort((a, b) => {\n const aInfo = getLogInfo(a);\n const bInfo = getLogInfo(b);\n const aTime = 'startTime' in aInfo ? aInfo.startTime : 0;\n const bTime = 'startTime' in bInfo ? bInfo.startTime : 0;\n\n return bTime - aTime;\n });\n\n return logs;\n }, [requests, responses, errors, heldRequests, heldResponses, heldErrors]);\n\n const filteredLogs = useMemo(() => {\n if (!searchTerm) {\n return allLogs;\n }\n const lowercasedTerm = searchTerm.toLowerCase();\n\n return allLogs.filter((log: Log) => {\n const logInfo = getLogInfo(log);\n switch (searchSection) {\n case 'url':\n return logInfo.url?.toLowerCase().includes(lowercasedTerm);\n case 'headers':\n return (\n 'headers' in logInfo &&\n logInfo.headers &&\n JSON.stringify(logInfo.headers)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'params':\n return (\n 'params' in logInfo &&\n logInfo.params &&\n JSON.stringify(logInfo.params)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'data':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'request' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'response':\n return (\n 'data' in logInfo &&\n logInfo.data &&\n log.type === 'response' &&\n JSON.stringify(logInfo.data)?.toLowerCase().includes(lowercasedTerm)\n );\n case 'error':\n return log.type === 'error' && JSON.stringify(logInfo)?.toLowerCase().includes(lowercasedTerm);\n case 'all':\n default:\n return JSON.stringify(logInfo).toLowerCase().includes(lowercasedTerm);\n }\n });\n }, [allLogs, searchTerm, searchSection]);\n\n const renderLogSummary = (log: Log) => {\n const logInfo = getLogInfo(log);\n const prefix = log.holdStatus === 'held' ? '[HELD] ' : '';\n if (log.type === 'request') {\n return `${prefix}[REQ] ${logInfo.method.toUpperCase()} ${logInfo.url}`;\n }\n if (log.type === 'response' && 'status' in logInfo) {\n return `${prefix}[RES] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.status}`;\n }\n if (log.type === 'error' && 'message' in logInfo) {\n return `${prefix}[ERR] ${logInfo.method.toUpperCase()} ${logInfo.url} - ${logInfo.message}`;\n }\n\n return 'Unknown Log';\n };\n\n const renderLogContent = (log: Log) => {\n const logInfo = getLogInfo(log);\n\n return <pre>{JSON.stringify(logInfo, null, 2)}</pre>;\n };\n\n return (\n <>\n <div style={modalOverlayStyle} onClick={onClose} />\n <div style={debugFeaturePanelStyle}>\n <div style={panelHeaderStyle}>\n <h2 style={h2Style}>네트워크 로그</h2>\n <button onClick={onClose}>X</button>\n </div>\n <div style={networkLogContainerStyle}>\n <div style={searchContainerStyle}>\n <select value={searchSection} onChange={(e) => setSearchSection(e.target.value)}>\n {SEARCH_SECTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <input\n type=\"text\"\n placeholder=\"검색...\"\n value={searchTerm}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}\n style={flex1Style}\n />\n <label>\n <input type=\"checkbox\" id=\"hold-checkbox\" checked={isHold} onChange={toggleHold} />\n Hold\n </label>\n <button onClick={clear}>clear</button>\n </div>\n {isHold && (\n <div style={holdButtonsContainerStyle}>\n <button onClick={() => playAllRequests()}>REQ Resolve</button>\n <button onClick={() => playAllResponses()}>RES Resolve</button>\n </div>\n )}\n <div style={logListStyle}>\n {filteredLogs.length === 0 ? (\n <p>표시할 로그가 없습니다.</p>\n ) : (\n <div>\n {filteredLogs.map((log, index) => (\n <details key={index}>\n <summary style={logSummaryStyle}>{renderLogSummary(log)}</summary>\n <div style={logContentStyle}>{renderLogContent(log)}</div>\n </details>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default NetworkLog;\n","import React, { useState } from 'react';\n\nimport {\n debugFeaturePanelStyle,\n flex1Style,\n h2Style,\n modalOverlayStyle,\n pageNavigationContentStyle,\n panelHeaderStyle\n} from '../../styles/styles';\nimport { FeaturePanelProps } from '../../types';\n\n\n/**\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 id: 'customer',\n label: '고객 로그인',\n fields: [\n { name: 'name', label: '이름', type: 'text', placeholder: '이름' },\n { name: 'phone', label: '전화번호', type: 'tel', placeholder: '전화번호' },\n { name: 'residentNumber', label: '주민번호', type: 'text', placeholder: '주민번호 앞 7자리' },\n { name: 'userId', label: '아이디', type: 'text', placeholder: '아이디' },\n { name: 'password', label: '비밀번호', type: 'password', placeholder: '비밀번호' }\n ]\n }\n];\n\n/**\n * 디버그 툴에 표시될 메뉴 아이템 목록입니다.\n * 새로운 기능을 개발하고 여기에 추가하여 메뉴에 노출시킬 수 있습니다.\n *\n * @property {string} id - 메뉴의 고유 식별자입니다.\n * @property {string} label - 메뉴에 표시될 텍스트입니다.\n * @property {React.ComponentType} component - 메뉴 클릭 시 렌더링될 리액트 컴포넌트입니다.\n * @property {boolean} display - `true`일 경우 메뉴에 표시되고, `false`일 경우 숨겨집니다. 개발 중인 기능을 숨길 때 유용합니다.\n */\nexport const menuItems: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[] = [\n {\n id: 'network-log',\n label: '네트워크 로그',\n component: NetworkLog,\n display: true\n },\n {\n id: 'console-log',\n label: '콘솔 로그 확인',\n component: ConsoleLogPanel,\n display: true\n },\n {\n id: 'local-storage',\n label: '로컬 스토리지 관리',\n // StoragePanel은 재사용 가능한 컴포넌트이므로, props를 통해 어떤 스토리지를 다룰지 지정합니다.\n component: (props) => <StoragePanel {...props} storageType=\"localStorage\" />,\n display: true\n },\n {\n id: 'cookie-management',\n label: '쿠키 관리',\n component: (props) => <StoragePanel {...props} storageType=\"cookie\" />,\n display: true\n },\n {\n id: 'quick-login',\n label: '간편 로그인',\n component: LoginPanel,\n display: true // 실제 표시는 DebugTool.tsx에서 onLogin prop 존재 여부에 따라 결정됩니다.\n },\n {\n id: 'script-executor',\n label: '스크립트 실행',\n component: ScriptExecutorPanel,\n display: true\n },\n {\n id: 'page-navigation',\n label: '페이지 정보',\n component: PageNavigationPanel,\n display: true\n }\n];\n","import { useState, useEffect } from 'react';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { EnvironmentInfo } from '../types';\n\n/**\n * 현재 애플리케이션의 실행 환경(호스트 기준)을 감지하는 훅입니다.\n * @returns {EnvironmentInfo} 환경 정보 객체 (e.g., { env: 'local' })\n */\nexport const useEnvironment = (): EnvironmentInfo => {\n const [envInfo, setEnvInfo] = useState<EnvironmentInfo>({\n env: 'prd'\n });\n\n useEffect(() => {\n const { hostname } = window.location;\n setEnvInfo({ env: getEnvironmentFromHostname(hostname) });\n }, []);\n\n return envInfo;\n};\n","'use client';\nimport React, { useState, useEffect } from 'react';\n\nimport FloatingButton from './components/floating-button';\nimport MenuPanel from './components/menu-panel';\nimport { menuItems as defaultMenuItems } from './config';\nimport { initializeConsoleLogOverride, restoreConsoleLog } from './features/console-log/use-console-log';\nimport { useEnvironment } from './hooks/use-environment';\nimport { DebugToolServiceCode, Environment, MenuItem } from './types';\n\n/**\n * @file DebugTool의 메인 컴포넌트 파일입니다.\n * @description\n * - 환경에 따라 디버그 툴의 노출 여부를 결정합니다.\n * - 플로팅 버튼과 메뉴 패널의 상태를 관리합니다.\n * - 선택된 기능(Feature) 컴포넌트를 렌더링합니다.\n * - `onLogin`, `envOverride`, `menuItemsOverride` 등의 props를 통해 외부에서 동작을 제어할 수 있습니다.\n */\n\n// onLogin 콜백을 optional prop으로 받습니다.\ninterface DebugToolProps {\n /** 간편 로그인 기능을 위한 콜백 함수. 이 함수가 제공되어야 '간편 로그인' 메뉴가 활성화됩니다. */\n onLogin?: (loginType: string, data: Record<string, string>) => void;\n /** 현재 환경을 강제로 재정의합니다. 'prod' 환경에서도 디버그 툴을 테스트할 때 유용합니다. */\n envOverride?: Environment;\n /** 기본 메뉴 설정을 재정의합니다. 동적으로 메뉴를 추가하거나 변경할 때 사용합니다. */\n menuItemsOverride?: (Omit<MenuItem, 'component'> & { component: React.ComponentType<any> })[];\n serviceCode?: DebugToolServiceCode;\n}\n\nexport const DebugTool: React.FC<DebugToolProps> = ({\n onLogin,\n envOverride,\n menuItemsOverride,\n serviceCode = 'etc'\n}) => {\n // 마운트 시 콘솔 오버라이드를 초기화하고 언마운트 시 복원합니다.\n // 이를 통해 '콘솔 로그' 기능이 페이지의 모든 로그를 수집할 수 있습니다.\n useEffect(() => {\n initializeConsoleLogOverride();\n\n return () => {\n restoreConsoleLog();\n };\n }, []); // 빈 의존성 배열은 마운트와 언마운트 시 한 번만 실행되도록 보장합니다.\n\n const environment = useEnvironment();\n // envOverride prop이 있으면 환경을 강제로 설정하고, 없으면 감지된 환경을 사용합니다.\n const env = envOverride || environment.env;\n\n // menuItemsOverride prop이 있으면 메뉴를 강제로 설정하고, 없으면 config 파일의 기본 메뉴를 사용합니다.\n const menuItems = menuItemsOverride || defaultMenuItems;\n const [isMenuOpen, setMenuOpen] = useState(false);\n // 현재 활성화된 기능 컴포넌트를 상태로 관리합니다. null이면 메뉴가 보입니다.\n const [activeFeature, setActiveFeature] = useState<React.ComponentType<any> | null>(null);\n\n // 'local', 'dev', 'stg' 환경에서만 툴을 보여줍니다.\n const isVisible = ['local', 'dev', 'stg'].includes(env);\n\n // 메뉴 아이템을 클릭했을 때 호출되는 핸들러입니다.\n const handleMenuClick = (itemComponent: React.ComponentType<any>) => {\n setActiveFeature(() => itemComponent); // 클릭된 기능의 컴포넌트를 활성화합니다.\n setMenuOpen(false); // 메뉴 패널을 닫습니다.\n };\n\n // 기능 패널의 닫기 버튼을 눌렀을 때 호출되는 핸들러입니다.\n const handleCloseFeature = () => {\n setActiveFeature(null); // 활성화된 기능 컴포넌트를 null로 만들어 메뉴로 돌아갑니다.\n };\n\n // 허용된 환경이 아니면 아무것도 렌더링하지 않습니다.\n if (!isVisible) {\n return null;\n }\n\n // 플로팅 버튼 클릭 시 메뉴 패널의 열림/닫힘 상태를 토글합니다.\n const toggleMenu = () => {\n setMenuOpen((prev) => !prev);\n // 메뉴가 열릴 때, 이전에 활성화된 기능이 있었다면 초기화합니다.\n if (!isMenuOpen) {\n setActiveFeature(null);\n }\n };\n\n // 실제 화면에 보여줄 메뉴 아이템 목록을 필터링합니다.\n const availableMenuItems = menuItems.filter(\n (item) =>\n item.display && // config에서 display가 true인 항목만 필터링합니다.\n // 'quick-login' 기능은 onLogin prop이 제공된 경우에만 활성화합니다.\n (item.id !== 'quick-login' || (item.id === 'quick-login' && onLogin))\n );\n\n // 활성화된 기능 컴포넌트가 있으면 해당 컴포넌트를 렌더링합니다.\n if (activeFeature) {\n const FeatureComponent = activeFeature;\n\n // 모든 기능 컴포넌트에 공통적으로 onClose 핸들러와 onLogin 콜백을 전달합니다.\n return <FeatureComponent onClose={handleCloseFeature} onLogin={onLogin} />;\n }\n\n // 활성화된 기능이 없으면 플로팅 버튼과 메뉴 패널(isMenuOpen이 true일 경우)을 렌더링합니다.\n return (\n <div\n style={{\n position: 'fixed',\n right: '20px',\n bottom: '20px',\n zIndex: 9999\n }}\n >\n <FloatingButton onClick={toggleMenu} />\n {isMenuOpen && (\n <MenuPanel\n menuItems={availableMenuItems}\n onMenuItemClick={handleMenuClick}\n onClose={() => setMenuOpen(false)}\n serviceCode={serviceCode}\n />\n )}\n </div>\n );\n};\n","import { useDebugStore } from 'sales-frontend-stores';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport type { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n\n/** debug-tool 에서 사용될 로그 저장 */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest } = useDebugStore.getState();\n const startTime = Date.now();\n const requestInfo = {\n url: config.url || '',\n method: config.method || '',\n headers: config.headers,\n params: config.params,\n data: config.data,\n startTime\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdRequest({ request: requestInfo, resolver });\n });\n } else {\n addRequest(requestInfo);\n }\n }\n}\n\n/** debug-tool 에서 사용될 로그 저장 */\nexport function addResponseLog(response: AxiosResponse) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse } = useDebugStore.getState();\n const { config } = response;\n const responseInfo = {\n url: config.url || '',\n method: config.method || '',\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdResponse({ response: responseInfo, resolver });\n });\n } else {\n addResponse(responseInfo);\n }\n }\n}\n\nexport function addErrorLog(error: AxiosError) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError } = useDebugStore.getState();\n const { config } = error;\n const errorInfo = {\n url: config?.url || '',\n method: config?.method || '',\n message: error.message,\n config: error.config,\n response: error.response\n ? {\n url: error.response.config?.url || '',\n method: error.response.config?.method || '',\n status: error.response.status,\n statusText: error.response.statusText,\n headers: error.response.headers,\n data: error.response.data\n }\n : undefined\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdError({ error: errorInfo, resolver });\n });\n } else {\n addError(errorInfo);\n }\n }\n}\n","import { getCookie } from 'sales-frontend-utils/cookie';\n\nimport { fileConvertTypeCookieKey } from './features/file-convert';\n\nexport function isDebugStepValidationOff(): boolean {\n const debugStepValidationOff = getCookie('Debug-Step-Validation-Off') === 'true';\n\n return debugStepValidationOff;\n}\n\nexport function isDebugMode(): boolean {\n const debugMode = getCookie('dsp-debug-mode') === 'on';\n\n return debugMode;\n}\n\n\nexport function getDebugFileConvertType(): string {\n const fileConvertType = getCookie(fileConvertTypeCookieKey);\n\n return fileConvertType;\n}\n"]}