(() => { const { EventManager, pageHelper, utils: { handleFocusEvent, setLocalStorage, getLocalStorage, removeLocalStorage }, } = ShopbySkin; const signInHelper = pageHelper.signInHelper(); signInHelper.initialize({ helperKey: 'sign-in-form', }); const containerEl = document.querySelector('sign-in-form'); const getFromUrl = () => { const searchParams = new URLSearchParams(location.search); const from = searchParams.get('from'); const mainUrl = '/'; return decodeURIComponent(from || mainUrl); }; if (getLocalStorage('OPEN_ID_DORMANT_CALLBACK')) { const openIdDormantInformation = JSON.parse(getLocalStorage('OPEN_ID_DORMANT_CALLBACK') ?? '{}'); EventManager.fire('OPEN_LAYER_MODAL', { name: 'dormant-sign-in', modalAddClass: 'dormant-sign-in-modal', isFull: false, data: { ...openIdDormantInformation?.dormantMemberResponse, accessToken: openIdDormantInformation?.accessToken, expireIn: openIdDormantInformation?.expireIn, }, onClose: ({ reason }) => { removeLocalStorage('OPEN_ID_DORMANT_CALLBACK'); if (reason === 'DID_SUBMIT') { location.replace(getFromUrl()); return; } signInHelper.signOut(); }, }); } // const checkSignInValid = (params) => { // if (!params || !params.memberId) { // return { // field: 'memberId', // message: '아이디를 입력하세요.', // }; // } // if (!params.password) { // return { // field: 'password', // message: '비밀번호를 입력하세요.', // }; // } // return { // field: '', // message: '', // }; // }; const showInvalidModal = (validResult) => { if (validResult.message) { EventManager.fire('MODAL_ALERT_OPEN', { noticeType: 'CAUTION', message: validResult.message, onClose: () => { handleFocusEvent({ containerEl, fields: validResult.field }); }, }); return false; } return true; }; // eslint-disable-next-line complexity const handleSignInSubmit = async (params) => { const memberIdEl = containerEl?.querySelector('input[slot="memberId"]'); const passwordEl = containerEl?.querySelector('input[slot="password"]'); const memberId = params?.memberId ?? memberIdEl.value.trim(); const password = params?.password ?? passwordEl.value.trim(); //수원삼성 연동 로직 start const getOriginalData = async (userId, userPw) => { try { const response = await fetch('https://store-api.bluewings.kr/shopby/sign_in', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: userId, password: userPw }), }); const result = await response.json(); const displayMessage = result?.data?.notice ?? result?.message ?? '로그인에 실패했습니다.'; if (result?.data?.locked) { showInvalidModal({ field: '', message: displayMessage }); return null; } if (!response.ok || !result?.data?.accessToken) { showInvalidModal({ field: '', message: displayMessage }); return null; } return result; } catch (error) { showInvalidModal({ field: '', message: error?.message ?? '로그인에 실패했습니다.' }); return null; } }; const connectShopby = async (openAccessToken) => { try { const response = await fetch('https://shop-api.shopby.co.kr/oauth2/openid', { method: 'POST', headers: { 'Content-Type': 'application/json', Version: '1.0', platform: 'PC', clientId: 'csG2RJQcc5VZ+OjSZWG1og==', }, body: JSON.stringify({ provider: 'ncpstore', openAccessToken: openAccessToken, keepLogin: true, state: Math.random().toString(36).substring(2), }), }); const data = await response.json(); if (response.ok) { window.ShopbySkin.utils.memberAuth.set({ value: data.accessToken }); return data?.message; } showInvalidModal({ field: '', message: data?.message || '연동에 실패했습니다.', }); return null; } catch (error) { showInvalidModal({ field: '', message: error.message || '연동에 실패했습니다.', }); return null; } }; const handleLoginFlow = async (memberId, password) => { try { const originalData = await getOriginalData(memberId, password); if (!originalData?.data?.accessToken) { return; } const shopbyMessage = await connectShopby(originalData.data.accessToken); if (shopbyMessage === null) { return; } location.replace(getFromUrl()); } catch (error) { showInvalidModal({ field: '', message: error.message || '로그인에 실패했습니다.' }); } }; handleLoginFlow(memberId, password); //수원삼성 연동 로직 end const saveIdCheckedEl = containerEl.querySelector('input[slot="saveIdChecked"]'); const saveIdChecked = params?.saveIdChecked ?? saveIdCheckedEl.checked; if (saveIdChecked) { setLocalStorage('SAVE_MEMBER_ID', memberId); } }; const clickEventListener = ({ target }) => { const action = target.getAttribute('shopby-action'); if (action === 'SIGN_IN') { const { signInForm } = signInHelper.getState(); handleSignInSubmit(signInForm); } }; const keypressEventListener = ({ target, key }) => { const action = target.getAttribute('shopby-action'); if (key === 'Enter' && action === 'PASSWORD_KEYPRESS') { const { signInForm } = signInHelper.getState(); handleSignInSubmit({ ...signInForm, password: target.value.trim() }); } }; containerEl.addEventListener('click', clickEventListener); containerEl.addEventListener('keypress', keypressEventListener); })();