sales-frontend-api 0.0.168 → 0.0.170
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/README.md +1 -3
- package/dist/client.cjs +9 -1
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +9 -1
- package/dist/client.js.map +1 -1
- package/dist/{http-client-axios-CyzrvIED.d.cts → http-client-axios-C7C8Puos.d.cts} +5 -2
- package/dist/{http-client-axios-CsGe23I5.d.ts → http-client-axios-DHnzwaPY.d.ts} +5 -2
- package/dist/method.cjs +16 -1
- package/dist/method.cjs.map +1 -1
- package/dist/method.d.cts +1 -1
- package/dist/method.d.ts +1 -1
- package/dist/method.js +16 -1
- package/dist/method.js.map +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
package/dist/client.cjs
CHANGED
|
@@ -98,7 +98,11 @@ var HttpClientAxios = class {
|
|
|
98
98
|
__publicField(this, "sentryLogger");
|
|
99
99
|
this.config = config;
|
|
100
100
|
this.options = options;
|
|
101
|
-
|
|
101
|
+
if (options?.useSentry && options?.sentryConfig) {
|
|
102
|
+
this.sentryLogger = new salesFrontendSentry.SentryLogController(options.sentryConfig);
|
|
103
|
+
} else if (options?.useSentry && !options?.sentryConfig) {
|
|
104
|
+
console.warn("[HttpClientAxios] sentryConfig is required when useSentry is true");
|
|
105
|
+
}
|
|
102
106
|
const getter = (key) => {
|
|
103
107
|
return salesFrontendUtils.getCookie(key);
|
|
104
108
|
};
|
|
@@ -269,6 +273,10 @@ var HttpClientAxios = class {
|
|
|
269
273
|
if (this.options?.useSentry === false) {
|
|
270
274
|
return;
|
|
271
275
|
}
|
|
276
|
+
if (!this.sentryLogger) {
|
|
277
|
+
console.warn("[HttpClientAxios] sentryLogger is not initialized");
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
272
280
|
if (typeof this.options?.handler !== "function") {
|
|
273
281
|
return this.sentryLogger.postSentry(params);
|
|
274
282
|
}
|
package/dist/client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http-client/header/header.types.ts","../src/http-client/header/header-manager.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/auth/auth-client.ts"],"names":["getCookie","setCookie","SentryLogController","axios","config","addRequestLog","useClientSessionStore","getDspExecutionEnvironment","Bridge","addErrorLog","addResponseLog","AxiosError","error","isDspApp","isDebugByFilterName","getServicePath"],"mappings":"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","file":"client.cjs","sourcesContent":["/**\n * @see https://loop.cloud.microsoft/p/eyJ3Ijp7InUiOiJodHRwczovL2hhbndoYWxpZmVtMzY1LnNoYXJlcG9pbnQuY29tLz9uYXY9Y3owbE1rWW1aRDFpSVVVd1FXdDJSbGhSV0VWUE1tUkNYMWhUZW5KWVVFdFBSVXByYWs1b1NrSlBjRk4wYm5wNmNsWmpMVUZ5YjI1UlJWOVdSREpUV25aeWVUUTJTV2swUlZrbVpqMHdNVk5OVGtkR1JsTkJXVE0xVVZaQ1ZrRkVRa1ZaVEVoRVNUSTBXRXhVVlZoV0ptTTlKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwicCI6eyJ1IjoiaHR0cHM6Ly9oYW53aGFsaWZlbTM2NS5zaGFyZXBvaW50LmNvbS9jb250ZW50c3RvcmFnZS9DU1BfYmMyNDQwMTMtZDA1NS00MzVjLWI2NzQtMWZkNzRiM2FkNzNjLyVFQiVBQyVCOCVFQyU4NCU5QyUyMCVFQiU5RCVCQyVFQyU5RCVCNCVFQiVCOCU4QyVFQiU5RiVBQyVFQiVBNiVBQy9Mb29wQXBwRGF0YS8wOS0yLiUyMEJyaWRnZSUyMFNwZWMlMjAxLmxvb3A%2FbmF2PWN6MGxNa1pqYjI1MFpXNTBjM1J2Y21GblpTVXlSa05UVUY5aVl6STBOREF4TXkxa01EVTFMVFF6TldNdFlqWTNOQzB4Wm1RM05HSXpZV1EzTTJNbVpEMWlJVVV3UVd0MlJsaFJXRVZQTW1SQ1gxaFRlbkpZVUV0UFJVcHJhazVvU2tKUGNGTjBibnA2Y2xaakxVRnliMjVSUlY5V1JESlRXblp5ZVRRMlNXazBSVmttWmowd01WTk5Ua2RHUmxGRlYxTlFOelpMUWtsTFdrWkpXVUUzU1ZkWldGTklWa0ZUSm1NOUpUSkdKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwiaSI6eyJpIjoiNTdkZmVhM2QtZDA2Yi00YWRlLWIxZjEtYjE4NDA4MmNlN2VjIn19\n */\nexport const customHeaderNames = [\n 'Accept-Language',\n 'DeviceId',\n 'LoginType',\n 'PlatformName',\n 'PlatformVersion',\n 'AppVersion',\n 'DeviceModel',\n 'FormFactor',\n 'LoginChannel'\n];\n\nexport const AT = 'AT';\nexport type GetterSync = (keyName: string) => string;\nexport type SetterSync = (keyName: string, value: string) => void;\n\nexport type GetterAsync = (keyName: string) => Promise<string> | string;\nexport type SetterAsync = (keyName: string, value: string) => Promise<void> | void;\n","import { AT, customHeaderNames, GetterSync, SetterSync } from './header.types';\n\nexport class HeaderManager {\n private getter: GetterSync;\n private setter: SetterSync;\n\n constructor(getter: GetterSync, setter: SetterSync) {\n this.getter = getter;\n this.setter = setter;\n }\n\n /**\n * 커스텀 헤더를 동기적으로 설정합니다.\n */\n setCustomHeaders(): void {\n customHeaderNames.forEach((headerName) => {\n const customHeaderKey = `X-Channel-${headerName}`;\n const headerValue = this.getter(customHeaderKey);\n if (headerValue) {\n this.setter(customHeaderKey, headerValue);\n }\n });\n }\n\n /**\n * 인증 토큰을 동기적으로 설정합니다.\n */\n setAuthToken(): void {\n const token = this.getter(AT);\n if (token) {\n this.setter('Authorization', `Bearer ${token}`);\n }\n }\n\n /**\n * 모든 헤더를 동기적으로 설정합니다.\n */\n setAllHeaders(): void {\n this.setCustomHeaders();\n this.setAuthToken();\n }\n}\n","import axios from 'axios';\nimport { AxiosError, AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Bridge } from 'sales-frontend-bridge';\nimport { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { PostSentryParams, SentryLogController } from 'sales-frontend-sentry';\nimport { useClientSessionStore } from 'sales-frontend-stores';\nimport { getCookie, getDspExecutionEnvironment, isDspApp, setCookie } from 'sales-frontend-utils';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType, HttpClientHandlerParams, HttpClientOptions } from './types';\n\nlet isRefreshed = true;\nconst axiosQueue: AxiosQueueType[] = [];\n\n/**\n * 쿠키에서 값을 가져오고, 없으면 기본값을 쿠키에 설정 후 반환하는 헬퍼 함수\n * @param key 쿠키 키\n * @param defaultValue 쿠키 값이 없을 때 사용할 기본값\n * @returns 쿠키 값 또는 기본값\n */\nconst getOrSetCookie = (key: string, defaultValue: string): string => {\n let value = getCookie(key);\n if (!value) {\n value = defaultValue;\n setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\nconst authErrorHandler = () => {\n console.error('Authentication error occurred.');\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\n options?: HttpClientOptions;\n\n\n /**\n * axios의 request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n headers: Record<string, string> = {};\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n api: AxiosInstance;\n sentryLogger: SentryLogController;\n\n constructor(config: AxiosRequestConfig = {}, options?: HttpClientOptions) {\n this.config = config;\n this.options = options;\n this.sentryLogger = new SentryLogController(options?.sentryConfig);\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return getCookie(key);\n };\n const setter: HeaderManager['setter'] = (key, value) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n };\n this.headerManager = new HeaderManager(getter, setter);\n\n /**\n * api수행객체 최초 생성,\n * 공통으로 적용할 설정값이 있는경우 셋팅\n */\n this.api = axios.create({\n withCredentials: false,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n console.log('config url', config.url);\n const debugMode = getCookie('dsp-debug-mode') === 'on';\n\n /** 디버깅용 로그 */\n await addRequestLog(config);\n\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n if (debugRefreshQueueOff) {\n isRefreshed = true;\n }\n\n /**\n * AT토큰 주입\n */\n const authClient = new AuthClient();\n const authorization = await authClient.getAT();\n if (authorization) {\n config.headers['Authorization'] = authorization;\n }\n\n if (debugMode) {\n console.log('debugMode header setting!');\n /**\n * 주소가 debugMode 경우 테스트용 헤더 삽입\n */\n config.headers['x-channel-appversion'] = getOrSetCookie('x-channel-appversion', '3.1');\n config.headers['x-channel-deviceid'] = getOrSetCookie('x-channel-deviceid', 'deviceid');\n config.headers['x-channel-devicemodel'] = getOrSetCookie('x-channel-devicemodel', 'iPHONE13');\n config.headers['x-channel-formfactor'] = getOrSetCookie('x-channel-formfactor', 'Phone');\n config.headers['x-channel-loginchannel'] = getOrSetCookie('x-channel-loginchannel', 'DSP');\n config.headers['x-channel-logintype'] = getOrSetCookie('x-channel-logintype', 'ONPA_PIN');\n config.headers['x-channel-platformname'] = getOrSetCookie('x-channel-platformname', 'IOS');\n config.headers['x-channel-platformversion'] = getOrSetCookie('x-channel-platformversion', '15.4.1');\n config.headers['x-channel-screenid'] = getOrSetCookie('x-channel-screenid', location.pathname);\n config.headers['x-channel-business-work-division-code'] = getOrSetCookie(\n 'x-channel-business-work-division-code',\n 'DEA'\n );\n } else {\n const session = useClientSessionStore.getState().clientSession;\n\n config.headers['x-channel-appversion'] = session.appVersion;\n config.headers['x-channel-deviceid'] = session.deviceId;\n config.headers['x-channel-devicemodel'] = session.deviceModel;\n config.headers['x-channel-formfactor'] = session.formFactor;\n config.headers['x-channel-loginchannel'] = session.loginChannel;\n config.headers['x-channel-logintype'] = session.loginType;\n config.headers['x-channel-platformname'] = session.platformName;\n config.headers['x-channel-platformversion'] = session.platformVersion;\n config.headers['x-channel-screenid'] = location.pathname;\n config.headers['x-channel-business-work-division-code'] = session.businessWorkDivisionCode;\n }\n\n /**\n * 커스텀헤더 주입\n */\n // this.headerManager.setCustomHeaders();\n /**\n *\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n headerEntries.forEach(([key, value]) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n });\n\n /**\n * isRefreshed가 false이면(= 에러발생하여 token재발행중을 의미)\n * 새로운 요청들을 처리하지 않고,큐에 저장\n * 401에러 Queue처리 Request interceptor 등록\n */\n if (!isRefreshed && !config.url?.includes('internal/api/auth/refresh')) {\n console.log('request 401 큐처리');\n\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n // 세션 연장(for 영업포털 세션)\n if (getDspExecutionEnvironment() === 'iframe') {\n Bridge.iframe.dspKeepCallerSession();\n }\n\n return config;\n },\n async (error) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n console.log('request error');\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n return Promise.reject(error);\n }\n );\n\n /**\n * 인터셉터 응답 처리\n */\n this.api.interceptors.response.use(\n async (response: AxiosResponse) => {\n /** 디버깅용 로그 */\n await addResponseLog(response);\n if (response.data.isSuccess === false) {\n /**\n * 200 응답이라도 , isSuccess === false인 경우 에러로 reject\n */\n const axiosError = new AxiosError();\n axiosError.response = response;\n axiosError.config = response.config;\n axiosError.message = response.data.message;\n axiosError.code = response.status.toString();\n axiosError.request = response.request;\n this.sentryLogging({\n logType: 'error',\n error: axiosError,\n extraData: {\n axiosResponse: response\n }\n }, {\n response,\n });\n\n return Promise.reject(axiosError);\n }\n\n return response;\n },\n async (error: AxiosError) => {\n console.log('error');\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n const retry_request = originalRequest?.params?.retry_request === 'true';\n console.log('retry_request', retry_request);\n /**\n * 401에러 Queue처리\n */\n if (\n error.response?.status === 401 &&\n !debugRefreshQueueOff &&\n !retry_request &&\n !originalRequest?.url?.includes('internal/api/auth/refresh')\n ) {\n console.log('error 401 큐처리');\n isRefreshed = false;\n const client = new AuthClient();\n client\n .refreshToken()\n .then(() => {\n /**\n * 토큰 갱신 성공, 플래그를 true로 설정\n */\n isRefreshed = true;\n\n /**\n * 큐에 쌓여있던 모든 요청 재시도\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n /**\n * api 인스턴스를 통해 요청을 재시도합니다. 따라서 재요청들은 다시 인터셉터를 타게 됩니다.\n * 신규토큰을 주입받고 정상처리\n * @todo 재시도후 reject시에는 로그인페이지로 보내는 브릿지 함수를 호출하도록 처리가 필요해보임.\n *\n * @note 11/07 : 무한루프이슈 해결을 위해 , 새로운 인스턴스를 사용하도록 수정\n */\n // add param 'retry_request' to prevent infinite loop\n p.config.params = {\n ...p.config.params,\n retry_request: 'true'\n };\n\n this.api\n .request(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * 큐에 쌓여있던 모든 요청 reject처리\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n p.reject(error);\n }\n }\n\n if (isDspApp()) {\n //native 브릿지함수 호출\n // * 별도의 함수 호출 없이 앱에서 처리\n } else {\n //각 도메인 환경에 맞는 핸들러 주입필요\n authErrorHandler();\n }\n\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n return Promise.reject(error);\n });\n\n return new Promise((resolve, reject) => {\n if (originalRequest) {\n axiosQueue.push({ resolve, reject, config: originalRequest });\n }\n });\n } else {\n console.log('error 401 큐처리 없음');\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n\n return Promise.reject(error);\n }\n }\n );\n }\n\n sentryLogging(params: PostSentryParams, handlerParams?: HttpClientHandlerParams) {\n /**\n * @description 센트리 사용여부\n */\n if (this.options?.useSentry === false) {\n return;\n }\n\n /**\n * @description 핸들러가 없으면 센트리로 로그 바로전송\n */\n if (typeof this.options?.handler !== 'function') {\n return this.sentryLogger.postSentry(params);\n }\n\n\n\n /**\n * 핸들러는 있는데, handlerParams가 없는 경우, 콘솔 경고\n */\n if (typeof this.options?.handler === 'function' && !handlerParams) {\n console.warn('[HttpClientAxios] handlerParams is required when handler is provided');\n\n return;\n }\n\n /**\n * 핸들러가 있고, handlerParams가 있는 경우, 핸들러 실행결과에 따라 센트리전송\n */\n if (typeof this.options?.handler === 'function' && handlerParams) {\n const isSendSentry = this.options?.handler(handlerParams);\n\n /**\n * @description 핸들러가 true를 반환하면 센트리로 로그 전송\n */\n if (isSendSentry) {\n return this.sentryLogger.postSentry(params);\n }\n }\n }\n\n setHeaders(headers: Record<string, string>) {\n this.headers = {\n ...this.headers,\n ...headers\n };\n }\n}\n","import { Bridge } from 'sales-frontend-bridge';\nimport { isDebugByFilterName } from 'sales-frontend-debug';\nimport { getCookie, getServicePath, isDspApp } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\n\nexport class AuthClient {\n defaultTokenType = 'Bearer';\n /**\n * App인지 확인\n * @returns boolean\n */\n isApp() {\n return isDspApp();\n }\n\n getAuthorizationFromCookie() {\n const accessToken = getCookie('accessToken');\n\n return accessToken ? `${this.defaultTokenType} ${accessToken}` : undefined;\n }\n\n async getAuthorizationFromBridge() {\n const { tokenType, accessToken } = await Bridge.native.getAccessToken();\n\n return accessToken ? `${tokenType || this.defaultTokenType} ${accessToken}` : undefined;\n }\n\n /**\n *\n * @returns Promise<string | undefined>\n */\n async getAT(): Promise<string | undefined> {\n const debugModeAuthTokenFromCookie = isDebugByFilterName('auth-token');\n\n /**\n * debugMode 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (debugModeAuthTokenFromCookie) {\n console.log('debugMode token setting!');\n\n return this.getAuthorizationFromCookie();\n }\n\n if (this.isApp()) {\n return await this.getAuthorizationFromBridge();\n } else {\n /**\n * DSP 앱 외에는 쿠키 참조\n */\n return this.getAuthorizationFromCookie();\n }\n }\n\n /**\n * RT를 이용하여 신규 AT/RT발행\n * 기존토큰은 무효화처리\n * 쿠키에 저장.\n */\n async refreshToken(): Promise<void> {\n if (this.isApp()) {\n // 영업지원 앱인 경우 브릿지를 통해 토큰 갱신\n await Bridge.native.refreshAccessToken();\n } else {\n // 신규 앱(FP플래너, 영업포털, 순수 웹) 외에는 내부 api 호출로 토큰 갱신\n const httpClient = new HttpClientAxios();\n\n await httpClient.api.post(`${getServicePath()}/internal/api/auth/refresh`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/http-client/header/header.types.ts","../src/http-client/header/header-manager.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/auth/auth-client.ts"],"names":["getCookie","setCookie","SentryLogController","axios","config","addRequestLog","useClientSessionStore","getDspExecutionEnvironment","Bridge","addErrorLog","addResponseLog","AxiosError","error","isDspApp","isDebugByFilterName","getServicePath"],"mappings":";;;;;;;;;;;;;;;;;;AAGO,IAAM,iBAAoB,GAAA;AAAA,EAC/B,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,EAAK,GAAA,IAAA;;;ACbX,IAAM,gBAAN,MAAoB;AAAA,EAIzB,WAAA,CAAY,QAAoB,MAAoB,EAAA;AAHpD,IAAQ,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACR,IAAQ,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAGN,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AAAA;AAChB;AAAA;AAAA;AAAA,EAKA,gBAAyB,GAAA;AACvB,IAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,UAAe,KAAA;AACxC,MAAM,MAAA,eAAA,GAAkB,aAAa,UAAU,CAAA,CAAA;AAC/C,MAAM,MAAA,WAAA,GAAc,IAAK,CAAA,MAAA,CAAO,eAAe,CAAA;AAC/C,MAAA,IAAI,WAAa,EAAA;AACf,QAAK,IAAA,CAAA,MAAA,CAAO,iBAAiB,WAAW,CAAA;AAAA;AAC1C,KACD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKA,YAAqB,GAAA;AACnB,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,EAAE,CAAA;AAC5B,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,IAAA,CAAK,MAAO,CAAA,eAAA,EAAiB,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA,CAAA;AAAA;AAChD;AACF;AAAA;AAAA;AAAA,EAKA,aAAsB,GAAA;AACpB,IAAA,IAAA,CAAK,gBAAiB,EAAA;AACtB,IAAA,IAAA,CAAK,YAAa,EAAA;AAAA;AAEtB,CAAA;;;AC5BA,IAAI,WAAc,GAAA,IAAA;AAClB,IAAM,aAA+B,EAAC;AAQtC,IAAM,cAAA,GAAiB,CAAC,GAAA,EAAa,YAAiC,KAAA;AACpE,EAAI,IAAA,KAAA,GAAQA,6BAAU,GAAG,CAAA;AACzB,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAQ,KAAA,GAAA,YAAA;AACR,IAAAC,4BAAA,CAAU,GAAK,EAAA,KAAA,EAAO,EAAE,IAAA,EAAM,KAAK,CAAA;AAAA;AAGrC,EAAO,OAAA,KAAA;AACT,CAAA;AAEA,IAAM,mBAAmB,MAAM;AAC7B,EAAA,OAAA,CAAQ,MAAM,gCAAgC,CAAA;AAChD,CAAA;AAOO,IAAM,kBAAN,MAAsB;AAAA,EAkB3B,WAAY,CAAA,MAAA,GAA6B,EAAC,EAAG,OAA6B,EAAA;AAjB1E,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AAMA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,EAAkC,EAAC,CAAA;AAMnC;AAAA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAGE,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA;AACf,IAAI,IAAA,OAAA,EAAS,SAAa,IAAA,OAAA,EAAS,YAAc,EAAA;AAC/C,MAAA,IAAA,CAAK,YAAe,GAAA,IAAIC,uCAAoB,CAAA,OAAA,CAAQ,YAAY,CAAA;AAAA,KACvD,MAAA,IAAA,OAAA,EAAS,SAAa,IAAA,CAAC,SAAS,YAAc,EAAA;AACvD,MAAA,OAAA,CAAQ,KAAK,mEAAmE,CAAA;AAAA;AAOlF,IAAM,MAAA,MAAA,GAAkC,CAAC,GAAQ,KAAA;AAC/C,MAAA,OAAOF,6BAAU,GAAG,CAAA;AAAA,KACtB;AACA,IAAM,MAAA,MAAA,GAAkC,CAAC,GAAA,EAAK,KAAU,KAAA;AACtD,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAO,MAAA,CAAA,OAAA,CAAQ,GAAG,CAAI,GAAA,KAAA;AAAA;AACxB,KACF;AACA,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAI,aAAc,CAAA,MAAA,EAAQ,MAAM,CAAA;AAMrD,IAAK,IAAA,CAAA,GAAA,GAAMG,uBAAM,MAAO,CAAA;AAAA,MACtB,eAAiB,EAAA,KAAA;AAAA,MACjB,GAAG;AAAA,KACJ,CAAA;AAKD,IAAK,IAAA,CAAA,GAAA,CAAI,aAAa,OAAQ,CAAA,GAAA;AAAA,MAC5B,OAAOC,OAAW,KAAA;AAChB,QAAQ,OAAA,CAAA,GAAA,CAAI,YAAcA,EAAAA,OAAAA,CAAO,GAAG,CAAA;AACpC,QAAM,MAAA,SAAA,GAAYJ,4BAAU,CAAA,gBAAgB,CAAM,KAAA,IAAA;AAGlD,QAAA,MAAMK,iCAAcD,OAAM,CAAA;AAE1B,QAAA,MAAM,oBAAuBA,GAAAA,OAAAA,CAAO,OAAU,GAAA,yBAAyB,CAAM,KAAA,MAAA;AAC7E,QAAA,IAAI,oBAAsB,EAAA;AACxB,UAAc,WAAA,GAAA,IAAA;AAAA;AAMhB,QAAM,MAAA,UAAA,GAAa,IAAI,UAAW,EAAA;AAClC,QAAM,MAAA,aAAA,GAAgB,MAAM,UAAA,CAAW,KAAM,EAAA;AAC7C,QAAA,IAAI,aAAe,EAAA;AACjB,UAAAA,OAAAA,CAAO,OAAQ,CAAA,eAAe,CAAI,GAAA,aAAA;AAAA;AAGpC,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,OAAA,CAAQ,IAAI,2BAA2B,CAAA;AAIvC,UAAAA,QAAO,OAAQ,CAAA,sBAAsB,CAAI,GAAA,cAAA,CAAe,wBAAwB,KAAK,CAAA;AACrF,UAAAA,QAAO,OAAQ,CAAA,oBAAoB,CAAI,GAAA,cAAA,CAAe,sBAAsB,UAAU,CAAA;AACtF,UAAAA,QAAO,OAAQ,CAAA,uBAAuB,CAAI,GAAA,cAAA,CAAe,yBAAyB,UAAU,CAAA;AAC5F,UAAAA,QAAO,OAAQ,CAAA,sBAAsB,CAAI,GAAA,cAAA,CAAe,wBAAwB,OAAO,CAAA;AACvF,UAAAA,QAAO,OAAQ,CAAA,wBAAwB,CAAI,GAAA,cAAA,CAAe,0BAA0B,KAAK,CAAA;AACzF,UAAAA,QAAO,OAAQ,CAAA,qBAAqB,CAAI,GAAA,cAAA,CAAe,uBAAuB,UAAU,CAAA;AACxF,UAAAA,QAAO,OAAQ,CAAA,wBAAwB,CAAI,GAAA,cAAA,CAAe,0BAA0B,KAAK,CAAA;AACzF,UAAAA,QAAO,OAAQ,CAAA,2BAA2B,CAAI,GAAA,cAAA,CAAe,6BAA6B,QAAQ,CAAA;AAClG,UAAAA,QAAO,OAAQ,CAAA,oBAAoB,IAAI,cAAe,CAAA,oBAAA,EAAsB,SAAS,QAAQ,CAAA;AAC7F,UAAAA,OAAAA,CAAO,OAAQ,CAAA,uCAAuC,CAAI,GAAA,cAAA;AAAA,YACxD,uCAAA;AAAA,YACA;AAAA,WACF;AAAA,SACK,MAAA;AACL,UAAM,MAAA,OAAA,GAAUE,yCAAsB,CAAA,QAAA,EAAW,CAAA,aAAA;AAEjD,UAAAF,OAAO,CAAA,OAAA,CAAQ,sBAAsB,CAAA,GAAI,OAAQ,CAAA,UAAA;AACjD,UAAAA,OAAO,CAAA,OAAA,CAAQ,oBAAoB,CAAA,GAAI,OAAQ,CAAA,QAAA;AAC/C,UAAAA,OAAO,CAAA,OAAA,CAAQ,uBAAuB,CAAA,GAAI,OAAQ,CAAA,WAAA;AAClD,UAAAA,OAAO,CAAA,OAAA,CAAQ,sBAAsB,CAAA,GAAI,OAAQ,CAAA,UAAA;AACjD,UAAAA,OAAO,CAAA,OAAA,CAAQ,wBAAwB,CAAA,GAAI,OAAQ,CAAA,YAAA;AACnD,UAAAA,OAAO,CAAA,OAAA,CAAQ,qBAAqB,CAAA,GAAI,OAAQ,CAAA,SAAA;AAChD,UAAAA,OAAO,CAAA,OAAA,CAAQ,wBAAwB,CAAA,GAAI,OAAQ,CAAA,YAAA;AACnD,UAAAA,OAAO,CAAA,OAAA,CAAQ,2BAA2B,CAAA,GAAI,OAAQ,CAAA,eAAA;AACtD,UAAAA,OAAO,CAAA,OAAA,CAAQ,oBAAoB,CAAA,GAAI,QAAS,CAAA,QAAA;AAChD,UAAAA,OAAO,CAAA,OAAA,CAAQ,uCAAuC,CAAA,GAAI,OAAQ,CAAA,wBAAA;AAAA;AAWpE,QAAA,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,IAAA,CAAK,OAAO,CAAA;AACjD,QAAA,aAAA,CAAc,OAAQ,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAM,KAAA;AACtC,UAAA,IAAIA,SAAQ,OAAS,EAAA;AACnB,YAAAA,OAAAA,CAAO,OAAQ,CAAA,GAAG,CAAI,GAAA,KAAA;AAAA;AACxB,SACD,CAAA;AAOD,QAAA,IAAI,CAAC,WAAe,IAAA,CAACA,QAAO,GAAK,EAAA,QAAA,CAAS,2BAA2B,CAAG,EAAA;AACtE,UAAA,OAAA,CAAQ,IAAI,gCAAiB,CAAA;AAE7B,UAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,YAAA,UAAA,CAAW,KAAK,EAAE,OAAA,EAAS,MAAQ,EAAA,MAAA,EAAAA,SAAQ,CAAA;AAAA,WAC5C,CAAA,CAAE,IAAK,CAAA,MAAMA,OAAM,CAAA;AAAA;AAItB,QAAI,IAAAG,6CAAA,OAAiC,QAAU,EAAA;AAC7C,UAAAC,0BAAA,CAAO,OAAO,oBAAqB,EAAA;AAAA;AAGrC,QAAOJ,OAAAA,OAAAA;AAAA,OACT;AAAA,MACA,OAAO,KAAU,KAAA;AAEf,QAAA,MAAMK,+BAAY,KAAK,CAAA;AACvB,QAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAC3B,QAAA,IAAA,CAAK,aAAc,CAAA;AAAA,UACjB,OAAS,EAAA,OAAA;AAAA,UACT;AAAA,SACC,EAAA;AAAA,UACD;AAAA,SACD,CAAA;AAED,QAAO,OAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA;AAC7B,KACF;AAKA,IAAK,IAAA,CAAA,GAAA,CAAI,aAAa,QAAS,CAAA,GAAA;AAAA,MAC7B,OAAO,QAA4B,KAAA;AAEjC,QAAA,MAAMC,kCAAe,QAAQ,CAAA;AAC7B,QAAI,IAAA,QAAA,CAAS,IAAK,CAAA,SAAA,KAAc,KAAO,EAAA;AAIrC,UAAM,MAAA,UAAA,GAAa,IAAIC,gBAAW,EAAA;AAClC,UAAA,UAAA,CAAW,QAAW,GAAA,QAAA;AACtB,UAAA,UAAA,CAAW,SAAS,QAAS,CAAA,MAAA;AAC7B,UAAW,UAAA,CAAA,OAAA,GAAU,SAAS,IAAK,CAAA,OAAA;AACnC,UAAW,UAAA,CAAA,IAAA,GAAO,QAAS,CAAA,MAAA,CAAO,QAAS,EAAA;AAC3C,UAAA,UAAA,CAAW,UAAU,QAAS,CAAA,OAAA;AAC9B,UAAA,IAAA,CAAK,aAAc,CAAA;AAAA,YACjB,OAAS,EAAA,OAAA;AAAA,YACT,KAAO,EAAA,UAAA;AAAA,YACP,SAAW,EAAA;AAAA,cACT,aAAe,EAAA;AAAA;AACjB,WACC,EAAA;AAAA,YACD;AAAA,WACD,CAAA;AAED,UAAO,OAAA,OAAA,CAAQ,OAAO,UAAU,CAAA;AAAA;AAGlC,QAAO,OAAA,QAAA;AAAA,OACT;AAAA,MACA,OAAO,KAAsB,KAAA;AAC3B,QAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAEnB,QAAA,MAAMF,+BAAY,KAAK,CAAA;AAEvB,QAAA,MAAM,kBAAkB,KAAM,CAAA,MAAA;AAC9B,QAAA,MAAM,oBAAuB,GAAA,MAAA,CAAO,OAAU,GAAA,yBAAyB,CAAM,KAAA,MAAA;AAC7E,QAAM,MAAA,aAAA,GAAgB,eAAiB,EAAA,MAAA,EAAQ,aAAkB,KAAA,MAAA;AACjE,QAAQ,OAAA,CAAA,GAAA,CAAI,iBAAiB,aAAa,CAAA;AAI1C,QAAA,IACE,KAAM,CAAA,QAAA,EAAU,MAAW,KAAA,GAAA,IAC3B,CAAC,oBAAA,IACD,CAAC,aAAA,IACD,CAAC,eAAA,EAAiB,GAAK,EAAA,QAAA,CAAS,2BAA2B,CAC3D,EAAA;AACA,UAAA,OAAA,CAAQ,IAAI,8BAAe,CAAA;AAC3B,UAAc,WAAA,GAAA,KAAA;AACd,UAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA;AAC9B,UACG,MAAA,CAAA,YAAA,EACA,CAAA,IAAA,CAAK,MAAM;AAIV,YAAc,WAAA,GAAA,IAAA;AAKd,YAAO,OAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AAC5B,cAAM,MAAA,CAAA,GAAI,WAAW,KAAM,EAAA;AAC3B,cAAA,IAAI,CAAG,EAAA;AASL,gBAAA,CAAA,CAAE,OAAO,MAAS,GAAA;AAAA,kBAChB,GAAG,EAAE,MAAO,CAAA,MAAA;AAAA,kBACZ,aAAe,EAAA;AAAA,iBACjB;AAEA,gBAAA,IAAA,CAAK,IACF,OAAQ,CAAA,CAAA,CAAE,MAAM,CAChB,CAAA,IAAA,CAAK,CAAC,QAAa,KAAA,CAAA,CAAE,QAAQ,QAAQ,CAAC,EACtC,KAAM,CAAA,CAAC,QAAQ,CAAE,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA;AACjC;AACF,WACD,CAAA,CACA,KAAM,CAAA,CAACG,MAAU,KAAA;AAKhB,YAAO,OAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AAC5B,cAAM,MAAA,CAAA,GAAI,WAAW,KAAM,EAAA;AAC3B,cAAA,IAAI,CAAG,EAAA;AACL,gBAAA,CAAA,CAAE,OAAOA,MAAK,CAAA;AAAA;AAChB;AAGF,YAAA,IAAIC,6BAAY,EAAA,CAGT,MAAA;AAEL,cAAiB,gBAAA,EAAA;AAAA;AAGnB,YAAA,IAAA,CAAK,aAAc,CAAA;AAAA,cACjB,OAAS,EAAA,OAAA;AAAA,cACT,KAAAD,EAAAA;AAAA,aACC,EAAA;AAAA,cACD,KAAAA,EAAAA;AAAA,aACD,CAAA;AAED,YAAO,OAAA,OAAA,CAAQ,OAAOA,MAAK,CAAA;AAAA,WAC5B,CAAA;AAEH,UAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,YAAA,IAAI,eAAiB,EAAA;AACnB,cAAA,UAAA,CAAW,KAAK,EAAE,OAAA,EAAS,MAAQ,EAAA,MAAA,EAAQ,iBAAiB,CAAA;AAAA;AAC9D,WACD,CAAA;AAAA,SACI,MAAA;AACL,UAAA,OAAA,CAAQ,IAAI,2CAAkB,CAAA;AAC9B,UAAA,IAAA,CAAK,aAAc,CAAA;AAAA,YACjB,OAAS,EAAA,OAAA;AAAA,YACT;AAAA,WACC,EAAA;AAAA,YACD;AAAA,WACD,CAAA;AAGD,UAAO,OAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA;AAC7B;AACF,KACF;AAAA;AACF,EAEA,aAAA,CAAc,QAA0B,aAAyC,EAAA;AAI/E,IAAI,IAAA,IAAA,CAAK,OAAS,EAAA,SAAA,KAAc,KAAO,EAAA;AACrC,MAAA;AAAA;AAGF,IAAI,IAAA,CAAC,KAAK,YAAc,EAAA;AACtB,MAAA,OAAA,CAAQ,KAAK,mDAAmD,CAAA;AAEhE,MAAA;AAAA;AAMF,IAAA,IAAI,OAAO,IAAA,CAAK,OAAS,EAAA,OAAA,KAAY,UAAY,EAAA;AAC/C,MAAO,OAAA,IAAA,CAAK,YAAa,CAAA,UAAA,CAAW,MAAM,CAAA;AAAA;AAM5C,IAAA,IAAI,OAAO,IAAK,CAAA,OAAA,EAAS,OAAY,KAAA,UAAA,IAAc,CAAC,aAAe,EAAA;AACjE,MAAA,OAAA,CAAQ,KAAK,sEAAsE,CAAA;AAEnF,MAAA;AAAA;AAMF,IAAA,IAAI,OAAO,IAAA,CAAK,OAAS,EAAA,OAAA,KAAY,cAAc,aAAe,EAAA;AAChE,MAAA,MAAM,YAAe,GAAA,IAAA,CAAK,OAAS,EAAA,OAAA,CAAQ,aAAa,CAAA;AAKxD,MAAA,IAAI,YAAc,EAAA;AAChB,QAAO,OAAA,IAAA,CAAK,YAAa,CAAA,UAAA,CAAW,MAAM,CAAA;AAAA;AAC5C;AACF;AACF,EAEA,WAAW,OAAiC,EAAA;AAC1C,IAAA,IAAA,CAAK,OAAU,GAAA;AAAA,MACb,GAAG,IAAK,CAAA,OAAA;AAAA,MACR,GAAG;AAAA,KACL;AAAA;AAEJ;;;AC9XO,IAAM,aAAN,MAAiB;AAAA,EAAjB,WAAA,GAAA;AACL,IAAmB,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnB,KAAQ,GAAA;AACN,IAAA,OAAOC,2BAAS,EAAA;AAAA;AAClB,EAEA,0BAA6B,GAAA;AAC3B,IAAM,MAAA,WAAA,GAAcb,6BAAU,aAAa,CAAA;AAE3C,IAAA,OAAO,cAAc,CAAG,EAAA,IAAA,CAAK,gBAAgB,CAAA,CAAA,EAAI,WAAW,CAAK,CAAA,GAAA,MAAA;AAAA;AACnE,EAEA,MAAM,0BAA6B,GAAA;AACjC,IAAA,MAAM,EAAE,SAAW,EAAA,WAAA,KAAgB,MAAMQ,0BAAAA,CAAO,OAAO,cAAe,EAAA;AAEtE,IAAA,OAAO,cAAc,CAAG,EAAA,SAAA,IAAa,KAAK,gBAAgB,CAAA,CAAA,EAAI,WAAW,CAAK,CAAA,GAAA,MAAA;AAAA;AAChF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAqC,GAAA;AACzC,IAAM,MAAA,4BAAA,GAA+BM,uCAAoB,YAAY,CAAA;AAKrE,IAAA,IAAI,4BAA8B,EAAA;AAChC,MAAA,OAAA,CAAQ,IAAI,0BAA0B,CAAA;AAEtC,MAAA,OAAO,KAAK,0BAA2B,EAAA;AAAA;AAGzC,IAAI,IAAA,IAAA,CAAK,OAAS,EAAA;AAChB,MAAO,OAAA,MAAM,KAAK,0BAA2B,EAAA;AAAA,KACxC,MAAA;AAIL,MAAA,OAAO,KAAK,0BAA2B,EAAA;AAAA;AACzC;AACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAA8B,GAAA;AAClC,IAAI,IAAA,IAAA,CAAK,OAAS,EAAA;AAEhB,MAAMN,MAAAA,0BAAAA,CAAO,OAAO,kBAAmB,EAAA;AAAA,KAClC,MAAA;AAEL,MAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AAEvC,MAAA,MAAM,WAAW,GAAI,CAAA,IAAA,CAAK,CAAG,EAAAO,iCAAA,EAAgB,CAA4B,0BAAA,CAAA,CAAA;AAAA;AAC3E;AAEJ","file":"client.cjs","sourcesContent":["/**\n * @see https://loop.cloud.microsoft/p/eyJ3Ijp7InUiOiJodHRwczovL2hhbndoYWxpZmVtMzY1LnNoYXJlcG9pbnQuY29tLz9uYXY9Y3owbE1rWW1aRDFpSVVVd1FXdDJSbGhSV0VWUE1tUkNYMWhUZW5KWVVFdFBSVXByYWs1b1NrSlBjRk4wYm5wNmNsWmpMVUZ5YjI1UlJWOVdSREpUV25aeWVUUTJTV2swUlZrbVpqMHdNVk5OVGtkR1JsTkJXVE0xVVZaQ1ZrRkVRa1ZaVEVoRVNUSTBXRXhVVlZoV0ptTTlKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwicCI6eyJ1IjoiaHR0cHM6Ly9oYW53aGFsaWZlbTM2NS5zaGFyZXBvaW50LmNvbS9jb250ZW50c3RvcmFnZS9DU1BfYmMyNDQwMTMtZDA1NS00MzVjLWI2NzQtMWZkNzRiM2FkNzNjLyVFQiVBQyVCOCVFQyU4NCU5QyUyMCVFQiU5RCVCQyVFQyU5RCVCNCVFQiVCOCU4QyVFQiU5RiVBQyVFQiVBNiVBQy9Mb29wQXBwRGF0YS8wOS0yLiUyMEJyaWRnZSUyMFNwZWMlMjAxLmxvb3A%2FbmF2PWN6MGxNa1pqYjI1MFpXNTBjM1J2Y21GblpTVXlSa05UVUY5aVl6STBOREF4TXkxa01EVTFMVFF6TldNdFlqWTNOQzB4Wm1RM05HSXpZV1EzTTJNbVpEMWlJVVV3UVd0MlJsaFJXRVZQTW1SQ1gxaFRlbkpZVUV0UFJVcHJhazVvU2tKUGNGTjBibnA2Y2xaakxVRnliMjVSUlY5V1JESlRXblp5ZVRRMlNXazBSVmttWmowd01WTk5Ua2RHUmxGRlYxTlFOelpMUWtsTFdrWkpXVUUzU1ZkWldGTklWa0ZUSm1NOUpUSkdKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwiaSI6eyJpIjoiNTdkZmVhM2QtZDA2Yi00YWRlLWIxZjEtYjE4NDA4MmNlN2VjIn19\n */\nexport const customHeaderNames = [\n 'Accept-Language',\n 'DeviceId',\n 'LoginType',\n 'PlatformName',\n 'PlatformVersion',\n 'AppVersion',\n 'DeviceModel',\n 'FormFactor',\n 'LoginChannel'\n];\n\nexport const AT = 'AT';\nexport type GetterSync = (keyName: string) => string;\nexport type SetterSync = (keyName: string, value: string) => void;\n\nexport type GetterAsync = (keyName: string) => Promise<string> | string;\nexport type SetterAsync = (keyName: string, value: string) => Promise<void> | void;\n","import { AT, customHeaderNames, GetterSync, SetterSync } from './header.types';\n\nexport class HeaderManager {\n private getter: GetterSync;\n private setter: SetterSync;\n\n constructor(getter: GetterSync, setter: SetterSync) {\n this.getter = getter;\n this.setter = setter;\n }\n\n /**\n * 커스텀 헤더를 동기적으로 설정합니다.\n */\n setCustomHeaders(): void {\n customHeaderNames.forEach((headerName) => {\n const customHeaderKey = `X-Channel-${headerName}`;\n const headerValue = this.getter(customHeaderKey);\n if (headerValue) {\n this.setter(customHeaderKey, headerValue);\n }\n });\n }\n\n /**\n * 인증 토큰을 동기적으로 설정합니다.\n */\n setAuthToken(): void {\n const token = this.getter(AT);\n if (token) {\n this.setter('Authorization', `Bearer ${token}`);\n }\n }\n\n /**\n * 모든 헤더를 동기적으로 설정합니다.\n */\n setAllHeaders(): void {\n this.setCustomHeaders();\n this.setAuthToken();\n }\n}\n","import axios from 'axios';\nimport { AxiosError, AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Bridge } from 'sales-frontend-bridge';\nimport { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { PostSentryParams, SentryLogController } from 'sales-frontend-sentry';\nimport { useClientSessionStore } from 'sales-frontend-stores';\nimport { getCookie, getDspExecutionEnvironment, isDspApp, setCookie } from 'sales-frontend-utils';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType, HttpClientHandlerParams, HttpClientOptions } from './types';\n\nlet isRefreshed = true;\nconst axiosQueue: AxiosQueueType[] = [];\n\n/**\n * 쿠키에서 값을 가져오고, 없으면 기본값을 쿠키에 설정 후 반환하는 헬퍼 함수\n * @param key 쿠키 키\n * @param defaultValue 쿠키 값이 없을 때 사용할 기본값\n * @returns 쿠키 값 또는 기본값\n */\nconst getOrSetCookie = (key: string, defaultValue: string): string => {\n let value = getCookie(key);\n if (!value) {\n value = defaultValue;\n setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\nconst authErrorHandler = () => {\n console.error('Authentication error occurred.');\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\n options?: HttpClientOptions;\n\n\n /**\n * axios의 request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n headers: Record<string, string> = {};\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n api: AxiosInstance;\n sentryLogger?: SentryLogController;\n\n constructor(config: AxiosRequestConfig = {}, options?: HttpClientOptions) {\n this.config = config;\n this.options = options;\n if (options?.useSentry && options?.sentryConfig) {\n this.sentryLogger = new SentryLogController(options.sentryConfig);\n } else if (options?.useSentry && !options?.sentryConfig) {\n console.warn('[HttpClientAxios] sentryConfig is required when useSentry is true')\n }\n\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return getCookie(key);\n };\n const setter: HeaderManager['setter'] = (key, value) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n };\n this.headerManager = new HeaderManager(getter, setter);\n\n /**\n * api수행객체 최초 생성,\n * 공통으로 적용할 설정값이 있는경우 셋팅\n */\n this.api = axios.create({\n withCredentials: false,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n console.log('config url', config.url);\n const debugMode = getCookie('dsp-debug-mode') === 'on';\n\n /** 디버깅용 로그 */\n await addRequestLog(config);\n\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n if (debugRefreshQueueOff) {\n isRefreshed = true;\n }\n\n /**\n * AT토큰 주입\n */\n const authClient = new AuthClient();\n const authorization = await authClient.getAT();\n if (authorization) {\n config.headers['Authorization'] = authorization;\n }\n\n if (debugMode) {\n console.log('debugMode header setting!');\n /**\n * 주소가 debugMode 경우 테스트용 헤더 삽입\n */\n config.headers['x-channel-appversion'] = getOrSetCookie('x-channel-appversion', '3.1');\n config.headers['x-channel-deviceid'] = getOrSetCookie('x-channel-deviceid', 'deviceid');\n config.headers['x-channel-devicemodel'] = getOrSetCookie('x-channel-devicemodel', 'iPHONE13');\n config.headers['x-channel-formfactor'] = getOrSetCookie('x-channel-formfactor', 'Phone');\n config.headers['x-channel-loginchannel'] = getOrSetCookie('x-channel-loginchannel', 'DSP');\n config.headers['x-channel-logintype'] = getOrSetCookie('x-channel-logintype', 'ONPA_PIN');\n config.headers['x-channel-platformname'] = getOrSetCookie('x-channel-platformname', 'IOS');\n config.headers['x-channel-platformversion'] = getOrSetCookie('x-channel-platformversion', '15.4.1');\n config.headers['x-channel-screenid'] = getOrSetCookie('x-channel-screenid', location.pathname);\n config.headers['x-channel-business-work-division-code'] = getOrSetCookie(\n 'x-channel-business-work-division-code',\n 'DEA'\n );\n } else {\n const session = useClientSessionStore.getState().clientSession;\n\n config.headers['x-channel-appversion'] = session.appVersion;\n config.headers['x-channel-deviceid'] = session.deviceId;\n config.headers['x-channel-devicemodel'] = session.deviceModel;\n config.headers['x-channel-formfactor'] = session.formFactor;\n config.headers['x-channel-loginchannel'] = session.loginChannel;\n config.headers['x-channel-logintype'] = session.loginType;\n config.headers['x-channel-platformname'] = session.platformName;\n config.headers['x-channel-platformversion'] = session.platformVersion;\n config.headers['x-channel-screenid'] = location.pathname;\n config.headers['x-channel-business-work-division-code'] = session.businessWorkDivisionCode;\n }\n\n /**\n * 커스텀헤더 주입\n */\n // this.headerManager.setCustomHeaders();\n /**\n *\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n headerEntries.forEach(([key, value]) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n });\n\n /**\n * isRefreshed가 false이면(= 에러발생하여 token재발행중을 의미)\n * 새로운 요청들을 처리하지 않고,큐에 저장\n * 401에러 Queue처리 Request interceptor 등록\n */\n if (!isRefreshed && !config.url?.includes('internal/api/auth/refresh')) {\n console.log('request 401 큐처리');\n\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n // 세션 연장(for 영업포털 세션)\n if (getDspExecutionEnvironment() === 'iframe') {\n Bridge.iframe.dspKeepCallerSession();\n }\n\n return config;\n },\n async (error) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n console.log('request error');\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n return Promise.reject(error);\n }\n );\n\n /**\n * 인터셉터 응답 처리\n */\n this.api.interceptors.response.use(\n async (response: AxiosResponse) => {\n /** 디버깅용 로그 */\n await addResponseLog(response);\n if (response.data.isSuccess === false) {\n /**\n * 200 응답이라도 , isSuccess === false인 경우 에러로 reject\n */\n const axiosError = new AxiosError();\n axiosError.response = response;\n axiosError.config = response.config;\n axiosError.message = response.data.message;\n axiosError.code = response.status.toString();\n axiosError.request = response.request;\n this.sentryLogging({\n logType: 'error',\n error: axiosError,\n extraData: {\n axiosResponse: response\n }\n }, {\n response,\n });\n\n return Promise.reject(axiosError);\n }\n\n return response;\n },\n async (error: AxiosError) => {\n console.log('error');\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n const retry_request = originalRequest?.params?.retry_request === 'true';\n console.log('retry_request', retry_request);\n /**\n * 401에러 Queue처리\n */\n if (\n error.response?.status === 401 &&\n !debugRefreshQueueOff &&\n !retry_request &&\n !originalRequest?.url?.includes('internal/api/auth/refresh')\n ) {\n console.log('error 401 큐처리');\n isRefreshed = false;\n const client = new AuthClient();\n client\n .refreshToken()\n .then(() => {\n /**\n * 토큰 갱신 성공, 플래그를 true로 설정\n */\n isRefreshed = true;\n\n /**\n * 큐에 쌓여있던 모든 요청 재시도\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n /**\n * api 인스턴스를 통해 요청을 재시도합니다. 따라서 재요청들은 다시 인터셉터를 타게 됩니다.\n * 신규토큰을 주입받고 정상처리\n * @todo 재시도후 reject시에는 로그인페이지로 보내는 브릿지 함수를 호출하도록 처리가 필요해보임.\n *\n * @note 11/07 : 무한루프이슈 해결을 위해 , 새로운 인스턴스를 사용하도록 수정\n */\n // add param 'retry_request' to prevent infinite loop\n p.config.params = {\n ...p.config.params,\n retry_request: 'true'\n };\n\n this.api\n .request(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * 큐에 쌓여있던 모든 요청 reject처리\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n p.reject(error);\n }\n }\n\n if (isDspApp()) {\n //native 브릿지함수 호출\n // * 별도의 함수 호출 없이 앱에서 처리\n } else {\n //각 도메인 환경에 맞는 핸들러 주입필요\n authErrorHandler();\n }\n\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n return Promise.reject(error);\n });\n\n return new Promise((resolve, reject) => {\n if (originalRequest) {\n axiosQueue.push({ resolve, reject, config: originalRequest });\n }\n });\n } else {\n console.log('error 401 큐처리 없음');\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n\n return Promise.reject(error);\n }\n }\n );\n }\n\n sentryLogging(params: PostSentryParams, handlerParams?: HttpClientHandlerParams) {\n /**\n * @description 센트리 사용여부\n */\n if (this.options?.useSentry === false) {\n return;\n }\n\n if (!this.sentryLogger) {\n console.warn('[HttpClientAxios] sentryLogger is not initialized');\n\n return;\n }\n\n /**\n * @description 핸들러가 없으면 센트리로 로그 바로전송\n */\n if (typeof this.options?.handler !== 'function') {\n return this.sentryLogger.postSentry(params);\n }\n\n /**\n * 핸들러는 있는데, handlerParams가 없는 경우, 콘솔 경고\n */\n if (typeof this.options?.handler === 'function' && !handlerParams) {\n console.warn('[HttpClientAxios] handlerParams is required when handler is provided');\n\n return;\n }\n\n /**\n * 핸들러가 있고, handlerParams가 있는 경우, 핸들러 실행결과에 따라 센트리전송\n */\n if (typeof this.options?.handler === 'function' && handlerParams) {\n const isSendSentry = this.options?.handler(handlerParams);\n\n /**\n * @description 핸들러가 true를 반환하면 센트리로 로그 전송\n */\n if (isSendSentry) {\n return this.sentryLogger.postSentry(params);\n }\n }\n }\n\n setHeaders(headers: Record<string, string>) {\n this.headers = {\n ...this.headers,\n ...headers\n };\n }\n}\n","import { Bridge } from 'sales-frontend-bridge';\nimport { isDebugByFilterName } from 'sales-frontend-debug';\nimport { getCookie, getServicePath, isDspApp } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\n\nexport class AuthClient {\n defaultTokenType = 'Bearer';\n /**\n * App인지 확인\n * @returns boolean\n */\n isApp() {\n return isDspApp();\n }\n\n getAuthorizationFromCookie() {\n const accessToken = getCookie('accessToken');\n\n return accessToken ? `${this.defaultTokenType} ${accessToken}` : undefined;\n }\n\n async getAuthorizationFromBridge() {\n const { tokenType, accessToken } = await Bridge.native.getAccessToken();\n\n return accessToken ? `${tokenType || this.defaultTokenType} ${accessToken}` : undefined;\n }\n\n /**\n *\n * @returns Promise<string | undefined>\n */\n async getAT(): Promise<string | undefined> {\n const debugModeAuthTokenFromCookie = isDebugByFilterName('auth-token');\n\n /**\n * debugMode 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (debugModeAuthTokenFromCookie) {\n console.log('debugMode token setting!');\n\n return this.getAuthorizationFromCookie();\n }\n\n if (this.isApp()) {\n return await this.getAuthorizationFromBridge();\n } else {\n /**\n * DSP 앱 외에는 쿠키 참조\n */\n return this.getAuthorizationFromCookie();\n }\n }\n\n /**\n * RT를 이용하여 신규 AT/RT발행\n * 기존토큰은 무효화처리\n * 쿠키에 저장.\n */\n async refreshToken(): Promise<void> {\n if (this.isApp()) {\n // 영업지원 앱인 경우 브릿지를 통해 토큰 갱신\n await Bridge.native.refreshAccessToken();\n } else {\n // 신규 앱(FP플래너, 영업포털, 순수 웹) 외에는 내부 api 호출로 토큰 갱신\n const httpClient = new HttpClientAxios();\n\n await httpClient.api.post(`${getServicePath()}/internal/api/auth/refresh`);\n }\n }\n}\n"]}
|
package/dist/client.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AxiosQueueType, b as HttpClientAxios, a as HttpClientHandlerParams, H as HttpClientOptions } from './http-client-axios-
|
|
1
|
+
export { A as AxiosQueueType, b as HttpClientAxios, a as HttpClientHandlerParams, H as HttpClientOptions } from './http-client-axios-C7C8Puos.cjs';
|
|
2
2
|
import 'axios';
|
|
3
3
|
import 'sales-frontend-sentry';
|
|
4
4
|
import './header.types-duHbFvO0.cjs';
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { A as AxiosQueueType, b as HttpClientAxios, a as HttpClientHandlerParams, H as HttpClientOptions } from './http-client-axios-
|
|
1
|
+
export { A as AxiosQueueType, b as HttpClientAxios, a as HttpClientHandlerParams, H as HttpClientOptions } from './http-client-axios-DHnzwaPY.js';
|
|
2
2
|
import 'axios';
|
|
3
3
|
import 'sales-frontend-sentry';
|
|
4
4
|
import './header.types-duHbFvO0.js';
|
package/dist/client.js
CHANGED
|
@@ -92,7 +92,11 @@ var HttpClientAxios = class {
|
|
|
92
92
|
__publicField(this, "sentryLogger");
|
|
93
93
|
this.config = config;
|
|
94
94
|
this.options = options;
|
|
95
|
-
|
|
95
|
+
if (options?.useSentry && options?.sentryConfig) {
|
|
96
|
+
this.sentryLogger = new SentryLogController(options.sentryConfig);
|
|
97
|
+
} else if (options?.useSentry && !options?.sentryConfig) {
|
|
98
|
+
console.warn("[HttpClientAxios] sentryConfig is required when useSentry is true");
|
|
99
|
+
}
|
|
96
100
|
const getter = (key) => {
|
|
97
101
|
return getCookie(key);
|
|
98
102
|
};
|
|
@@ -263,6 +267,10 @@ var HttpClientAxios = class {
|
|
|
263
267
|
if (this.options?.useSentry === false) {
|
|
264
268
|
return;
|
|
265
269
|
}
|
|
270
|
+
if (!this.sentryLogger) {
|
|
271
|
+
console.warn("[HttpClientAxios] sentryLogger is not initialized");
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
266
274
|
if (typeof this.options?.handler !== "function") {
|
|
267
275
|
return this.sentryLogger.postSentry(params);
|
|
268
276
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http-client/header/header.types.ts","../src/http-client/header/header-manager.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/auth/auth-client.ts"],"names":["config","error","isDspApp","getCookie","Bridge"],"mappings":";;;;;;;;;;;;AAGO,IAAM,iBAAoB,GAAA;AAAA,EAC/B,iBAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,EAAK,GAAA,IAAA;;;ACbX,IAAM,gBAAN,MAAoB;AAAA,EAIzB,WAAA,CAAY,QAAoB,MAAoB,EAAA;AAHpD,IAAQ,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACR,IAAQ,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAGN,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AAAA;AAChB;AAAA;AAAA;AAAA,EAKA,gBAAyB,GAAA;AACvB,IAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,UAAe,KAAA;AACxC,MAAM,MAAA,eAAA,GAAkB,aAAa,UAAU,CAAA,CAAA;AAC/C,MAAM,MAAA,WAAA,GAAc,IAAK,CAAA,MAAA,CAAO,eAAe,CAAA;AAC/C,MAAA,IAAI,WAAa,EAAA;AACf,QAAK,IAAA,CAAA,MAAA,CAAO,iBAAiB,WAAW,CAAA;AAAA;AAC1C,KACD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA,EAKA,YAAqB,GAAA;AACnB,IAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,MAAA,CAAO,EAAE,CAAA;AAC5B,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,IAAA,CAAK,MAAO,CAAA,eAAA,EAAiB,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA,CAAA;AAAA;AAChD;AACF;AAAA;AAAA;AAAA,EAKA,aAAsB,GAAA;AACpB,IAAA,IAAA,CAAK,gBAAiB,EAAA;AACtB,IAAA,IAAA,CAAK,YAAa,EAAA;AAAA;AAEtB,CAAA;;;AC5BA,IAAI,WAAc,GAAA,IAAA;AAClB,IAAM,aAA+B,EAAC;AAQtC,IAAM,cAAA,GAAiB,CAAC,GAAA,EAAa,YAAiC,KAAA;AACpE,EAAI,IAAA,KAAA,GAAQ,UAAU,GAAG,CAAA;AACzB,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAQ,KAAA,GAAA,YAAA;AACR,IAAA,SAAA,CAAU,GAAK,EAAA,KAAA,EAAO,EAAE,IAAA,EAAM,KAAK,CAAA;AAAA;AAGrC,EAAO,OAAA,KAAA;AACT,CAAA;AAEA,IAAM,mBAAmB,MAAM;AAC7B,EAAA,OAAA,CAAQ,MAAM,gCAAgC,CAAA;AAChD,CAAA;AAOO,IAAM,kBAAN,MAAsB;AAAA,EAkB3B,WAAY,CAAA,MAAA,GAA6B,EAAC,EAAG,OAA6B,EAAA;AAjB1E,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AAMA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,EAAkC,EAAC,CAAA;AAMnC;AAAA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAGE,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA;AACf,IAAA,IAAA,CAAK,YAAe,GAAA,IAAI,mBAAoB,CAAA,OAAA,EAAS,YAAY,CAAA;AAKjE,IAAM,MAAA,MAAA,GAAkC,CAAC,GAAQ,KAAA;AAC/C,MAAA,OAAO,UAAU,GAAG,CAAA;AAAA,KACtB;AACA,IAAM,MAAA,MAAA,GAAkC,CAAC,GAAA,EAAK,KAAU,KAAA;AACtD,MAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,QAAO,MAAA,CAAA,OAAA,CAAQ,GAAG,CAAI,GAAA,KAAA;AAAA;AACxB,KACF;AACA,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAI,aAAc,CAAA,MAAA,EAAQ,MAAM,CAAA;AAMrD,IAAK,IAAA,CAAA,GAAA,GAAM,MAAM,MAAO,CAAA;AAAA,MACtB,eAAiB,EAAA,KAAA;AAAA,MACjB,GAAG;AAAA,KACJ,CAAA;AAKD,IAAK,IAAA,CAAA,GAAA,CAAI,aAAa,OAAQ,CAAA,GAAA;AAAA,MAC5B,OAAOA,OAAW,KAAA;AAChB,QAAQ,OAAA,CAAA,GAAA,CAAI,YAAcA,EAAAA,OAAAA,CAAO,GAAG,CAAA;AACpC,QAAM,MAAA,SAAA,GAAY,SAAU,CAAA,gBAAgB,CAAM,KAAA,IAAA;AAGlD,QAAA,MAAM,cAAcA,OAAM,CAAA;AAE1B,QAAA,MAAM,oBAAuBA,GAAAA,OAAAA,CAAO,OAAU,GAAA,yBAAyB,CAAM,KAAA,MAAA;AAC7E,QAAA,IAAI,oBAAsB,EAAA;AACxB,UAAc,WAAA,GAAA,IAAA;AAAA;AAMhB,QAAM,MAAA,UAAA,GAAa,IAAI,UAAW,EAAA;AAClC,QAAM,MAAA,aAAA,GAAgB,MAAM,UAAA,CAAW,KAAM,EAAA;AAC7C,QAAA,IAAI,aAAe,EAAA;AACjB,UAAAA,OAAAA,CAAO,OAAQ,CAAA,eAAe,CAAI,GAAA,aAAA;AAAA;AAGpC,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,OAAA,CAAQ,IAAI,2BAA2B,CAAA;AAIvC,UAAAA,QAAO,OAAQ,CAAA,sBAAsB,CAAI,GAAA,cAAA,CAAe,wBAAwB,KAAK,CAAA;AACrF,UAAAA,QAAO,OAAQ,CAAA,oBAAoB,CAAI,GAAA,cAAA,CAAe,sBAAsB,UAAU,CAAA;AACtF,UAAAA,QAAO,OAAQ,CAAA,uBAAuB,CAAI,GAAA,cAAA,CAAe,yBAAyB,UAAU,CAAA;AAC5F,UAAAA,QAAO,OAAQ,CAAA,sBAAsB,CAAI,GAAA,cAAA,CAAe,wBAAwB,OAAO,CAAA;AACvF,UAAAA,QAAO,OAAQ,CAAA,wBAAwB,CAAI,GAAA,cAAA,CAAe,0BAA0B,KAAK,CAAA;AACzF,UAAAA,QAAO,OAAQ,CAAA,qBAAqB,CAAI,GAAA,cAAA,CAAe,uBAAuB,UAAU,CAAA;AACxF,UAAAA,QAAO,OAAQ,CAAA,wBAAwB,CAAI,GAAA,cAAA,CAAe,0BAA0B,KAAK,CAAA;AACzF,UAAAA,QAAO,OAAQ,CAAA,2BAA2B,CAAI,GAAA,cAAA,CAAe,6BAA6B,QAAQ,CAAA;AAClG,UAAAA,QAAO,OAAQ,CAAA,oBAAoB,IAAI,cAAe,CAAA,oBAAA,EAAsB,SAAS,QAAQ,CAAA;AAC7F,UAAAA,OAAAA,CAAO,OAAQ,CAAA,uCAAuC,CAAI,GAAA,cAAA;AAAA,YACxD,uCAAA;AAAA,YACA;AAAA,WACF;AAAA,SACK,MAAA;AACL,UAAM,MAAA,OAAA,GAAU,qBAAsB,CAAA,QAAA,EAAW,CAAA,aAAA;AAEjD,UAAAA,OAAO,CAAA,OAAA,CAAQ,sBAAsB,CAAA,GAAI,OAAQ,CAAA,UAAA;AACjD,UAAAA,OAAO,CAAA,OAAA,CAAQ,oBAAoB,CAAA,GAAI,OAAQ,CAAA,QAAA;AAC/C,UAAAA,OAAO,CAAA,OAAA,CAAQ,uBAAuB,CAAA,GAAI,OAAQ,CAAA,WAAA;AAClD,UAAAA,OAAO,CAAA,OAAA,CAAQ,sBAAsB,CAAA,GAAI,OAAQ,CAAA,UAAA;AACjD,UAAAA,OAAO,CAAA,OAAA,CAAQ,wBAAwB,CAAA,GAAI,OAAQ,CAAA,YAAA;AACnD,UAAAA,OAAO,CAAA,OAAA,CAAQ,qBAAqB,CAAA,GAAI,OAAQ,CAAA,SAAA;AAChD,UAAAA,OAAO,CAAA,OAAA,CAAQ,wBAAwB,CAAA,GAAI,OAAQ,CAAA,YAAA;AACnD,UAAAA,OAAO,CAAA,OAAA,CAAQ,2BAA2B,CAAA,GAAI,OAAQ,CAAA,eAAA;AACtD,UAAAA,OAAO,CAAA,OAAA,CAAQ,oBAAoB,CAAA,GAAI,QAAS,CAAA,QAAA;AAChD,UAAAA,OAAO,CAAA,OAAA,CAAQ,uCAAuC,CAAA,GAAI,OAAQ,CAAA,wBAAA;AAAA;AAWpE,QAAA,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,IAAA,CAAK,OAAO,CAAA;AACjD,QAAA,aAAA,CAAc,OAAQ,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAM,KAAA;AACtC,UAAA,IAAIA,SAAQ,OAAS,EAAA;AACnB,YAAAA,OAAAA,CAAO,OAAQ,CAAA,GAAG,CAAI,GAAA,KAAA;AAAA;AACxB,SACD,CAAA;AAOD,QAAA,IAAI,CAAC,WAAe,IAAA,CAACA,QAAO,GAAK,EAAA,QAAA,CAAS,2BAA2B,CAAG,EAAA;AACtE,UAAA,OAAA,CAAQ,IAAI,gCAAiB,CAAA;AAE7B,UAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,YAAA,UAAA,CAAW,KAAK,EAAE,OAAA,EAAS,MAAQ,EAAA,MAAA,EAAAA,SAAQ,CAAA;AAAA,WAC5C,CAAA,CAAE,IAAK,CAAA,MAAMA,OAAM,CAAA;AAAA;AAItB,QAAI,IAAA,0BAAA,OAAiC,QAAU,EAAA;AAC7C,UAAA,MAAA,CAAO,OAAO,oBAAqB,EAAA;AAAA;AAGrC,QAAOA,OAAAA,OAAAA;AAAA,OACT;AAAA,MACA,OAAO,KAAU,KAAA;AAEf,QAAA,MAAM,YAAY,KAAK,CAAA;AACvB,QAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAC3B,QAAA,IAAA,CAAK,aAAc,CAAA;AAAA,UACjB,OAAS,EAAA,OAAA;AAAA,UACT;AAAA,SACC,EAAA;AAAA,UACD;AAAA,SACD,CAAA;AAED,QAAO,OAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA;AAC7B,KACF;AAKA,IAAK,IAAA,CAAA,GAAA,CAAI,aAAa,QAAS,CAAA,GAAA;AAAA,MAC7B,OAAO,QAA4B,KAAA;AAEjC,QAAA,MAAM,eAAe,QAAQ,CAAA;AAC7B,QAAI,IAAA,QAAA,CAAS,IAAK,CAAA,SAAA,KAAc,KAAO,EAAA;AAIrC,UAAM,MAAA,UAAA,GAAa,IAAI,UAAW,EAAA;AAClC,UAAA,UAAA,CAAW,QAAW,GAAA,QAAA;AACtB,UAAA,UAAA,CAAW,SAAS,QAAS,CAAA,MAAA;AAC7B,UAAW,UAAA,CAAA,OAAA,GAAU,SAAS,IAAK,CAAA,OAAA;AACnC,UAAW,UAAA,CAAA,IAAA,GAAO,QAAS,CAAA,MAAA,CAAO,QAAS,EAAA;AAC3C,UAAA,UAAA,CAAW,UAAU,QAAS,CAAA,OAAA;AAC9B,UAAA,IAAA,CAAK,aAAc,CAAA;AAAA,YACjB,OAAS,EAAA,OAAA;AAAA,YACT,KAAO,EAAA,UAAA;AAAA,YACP,SAAW,EAAA;AAAA,cACT,aAAe,EAAA;AAAA;AACjB,WACC,EAAA;AAAA,YACD;AAAA,WACD,CAAA;AAED,UAAO,OAAA,OAAA,CAAQ,OAAO,UAAU,CAAA;AAAA;AAGlC,QAAO,OAAA,QAAA;AAAA,OACT;AAAA,MACA,OAAO,KAAsB,KAAA;AAC3B,QAAA,OAAA,CAAQ,IAAI,OAAO,CAAA;AAEnB,QAAA,MAAM,YAAY,KAAK,CAAA;AAEvB,QAAA,MAAM,kBAAkB,KAAM,CAAA,MAAA;AAC9B,QAAA,MAAM,oBAAuB,GAAA,MAAA,CAAO,OAAU,GAAA,yBAAyB,CAAM,KAAA,MAAA;AAC7E,QAAM,MAAA,aAAA,GAAgB,eAAiB,EAAA,MAAA,EAAQ,aAAkB,KAAA,MAAA;AACjE,QAAQ,OAAA,CAAA,GAAA,CAAI,iBAAiB,aAAa,CAAA;AAI1C,QAAA,IACE,KAAM,CAAA,QAAA,EAAU,MAAW,KAAA,GAAA,IAC3B,CAAC,oBAAA,IACD,CAAC,aAAA,IACD,CAAC,eAAA,EAAiB,GAAK,EAAA,QAAA,CAAS,2BAA2B,CAC3D,EAAA;AACA,UAAA,OAAA,CAAQ,IAAI,8BAAe,CAAA;AAC3B,UAAc,WAAA,GAAA,KAAA;AACd,UAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA;AAC9B,UACG,MAAA,CAAA,YAAA,EACA,CAAA,IAAA,CAAK,MAAM;AAIV,YAAc,WAAA,GAAA,IAAA;AAKd,YAAO,OAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AAC5B,cAAM,MAAA,CAAA,GAAI,WAAW,KAAM,EAAA;AAC3B,cAAA,IAAI,CAAG,EAAA;AASL,gBAAA,CAAA,CAAE,OAAO,MAAS,GAAA;AAAA,kBAChB,GAAG,EAAE,MAAO,CAAA,MAAA;AAAA,kBACZ,aAAe,EAAA;AAAA,iBACjB;AAEA,gBAAA,IAAA,CAAK,IACF,OAAQ,CAAA,CAAA,CAAE,MAAM,CAChB,CAAA,IAAA,CAAK,CAAC,QAAa,KAAA,CAAA,CAAE,QAAQ,QAAQ,CAAC,EACtC,KAAM,CAAA,CAAC,QAAQ,CAAE,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA;AACjC;AACF,WACD,CAAA,CACA,KAAM,CAAA,CAACC,MAAU,KAAA;AAKhB,YAAO,OAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AAC5B,cAAM,MAAA,CAAA,GAAI,WAAW,KAAM,EAAA;AAC3B,cAAA,IAAI,CAAG,EAAA;AACL,gBAAA,CAAA,CAAE,OAAOA,MAAK,CAAA;AAAA;AAChB;AAGF,YAAA,IAAI,UAAY,EAAA,CAGT,MAAA;AAEL,cAAiB,gBAAA,EAAA;AAAA;AAGnB,YAAA,IAAA,CAAK,aAAc,CAAA;AAAA,cACjB,OAAS,EAAA,OAAA;AAAA,cACT,KAAAA,EAAAA;AAAA,aACC,EAAA;AAAA,cACD,KAAAA,EAAAA;AAAA,aACD,CAAA;AAED,YAAO,OAAA,OAAA,CAAQ,OAAOA,MAAK,CAAA;AAAA,WAC5B,CAAA;AAEH,UAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,YAAA,IAAI,eAAiB,EAAA;AACnB,cAAA,UAAA,CAAW,KAAK,EAAE,OAAA,EAAS,MAAQ,EAAA,MAAA,EAAQ,iBAAiB,CAAA;AAAA;AAC9D,WACD,CAAA;AAAA,SACI,MAAA;AACL,UAAA,OAAA,CAAQ,IAAI,2CAAkB,CAAA;AAC9B,UAAA,IAAA,CAAK,aAAc,CAAA;AAAA,YACjB,OAAS,EAAA,OAAA;AAAA,YACT;AAAA,WACC,EAAA;AAAA,YACD;AAAA,WACD,CAAA;AAGD,UAAO,OAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA;AAC7B;AACF,KACF;AAAA;AACF,EAEA,aAAA,CAAc,QAA0B,aAAyC,EAAA;AAI/E,IAAI,IAAA,IAAA,CAAK,OAAS,EAAA,SAAA,KAAc,KAAO,EAAA;AACrC,MAAA;AAAA;AAMF,IAAA,IAAI,OAAO,IAAA,CAAK,OAAS,EAAA,OAAA,KAAY,UAAY,EAAA;AAC/C,MAAO,OAAA,IAAA,CAAK,YAAa,CAAA,UAAA,CAAW,MAAM,CAAA;AAAA;AAQ5C,IAAA,IAAI,OAAO,IAAK,CAAA,OAAA,EAAS,OAAY,KAAA,UAAA,IAAc,CAAC,aAAe,EAAA;AACjE,MAAA,OAAA,CAAQ,KAAK,sEAAsE,CAAA;AAEnF,MAAA;AAAA;AAMF,IAAA,IAAI,OAAO,IAAA,CAAK,OAAS,EAAA,OAAA,KAAY,cAAc,aAAe,EAAA;AAChE,MAAA,MAAM,YAAe,GAAA,IAAA,CAAK,OAAS,EAAA,OAAA,CAAQ,aAAa,CAAA;AAKxD,MAAA,IAAI,YAAc,EAAA;AAChB,QAAO,OAAA,IAAA,CAAK,YAAa,CAAA,UAAA,CAAW,MAAM,CAAA;AAAA;AAC5C;AACF;AACF,EAEA,WAAW,OAAiC,EAAA;AAC1C,IAAA,IAAA,CAAK,OAAU,GAAA;AAAA,MACb,GAAG,IAAK,CAAA,OAAA;AAAA,MACR,GAAG;AAAA,KACL;AAAA;AAEJ;;;ACrXO,IAAM,aAAN,MAAiB;AAAA,EAAjB,WAAA,GAAA;AACL,IAAmB,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,QAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnB,KAAQ,GAAA;AACN,IAAA,OAAOC,QAAS,EAAA;AAAA;AAClB,EAEA,0BAA6B,GAAA;AAC3B,IAAM,MAAA,WAAA,GAAcC,UAAU,aAAa,CAAA;AAE3C,IAAA,OAAO,cAAc,CAAG,EAAA,IAAA,CAAK,gBAAgB,CAAA,CAAA,EAAI,WAAW,CAAK,CAAA,GAAA,MAAA;AAAA;AACnE,EAEA,MAAM,0BAA6B,GAAA;AACjC,IAAA,MAAM,EAAE,SAAW,EAAA,WAAA,KAAgB,MAAMC,MAAAA,CAAO,OAAO,cAAe,EAAA;AAEtE,IAAA,OAAO,cAAc,CAAG,EAAA,SAAA,IAAa,KAAK,gBAAgB,CAAA,CAAA,EAAI,WAAW,CAAK,CAAA,GAAA,MAAA;AAAA;AAChF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAqC,GAAA;AACzC,IAAM,MAAA,4BAAA,GAA+B,oBAAoB,YAAY,CAAA;AAKrE,IAAA,IAAI,4BAA8B,EAAA;AAChC,MAAA,OAAA,CAAQ,IAAI,0BAA0B,CAAA;AAEtC,MAAA,OAAO,KAAK,0BAA2B,EAAA;AAAA;AAGzC,IAAI,IAAA,IAAA,CAAK,OAAS,EAAA;AAChB,MAAO,OAAA,MAAM,KAAK,0BAA2B,EAAA;AAAA,KACxC,MAAA;AAIL,MAAA,OAAO,KAAK,0BAA2B,EAAA;AAAA;AACzC;AACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAA8B,GAAA;AAClC,IAAI,IAAA,IAAA,CAAK,OAAS,EAAA;AAEhB,MAAMA,MAAAA,MAAAA,CAAO,OAAO,kBAAmB,EAAA;AAAA,KAClC,MAAA;AAEL,MAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AAEvC,MAAA,MAAM,WAAW,GAAI,CAAA,IAAA,CAAK,CAAG,EAAA,cAAA,EAAgB,CAA4B,0BAAA,CAAA,CAAA;AAAA;AAC3E;AAEJ","file":"client.js","sourcesContent":["/**\n * @see https://loop.cloud.microsoft/p/eyJ3Ijp7InUiOiJodHRwczovL2hhbndoYWxpZmVtMzY1LnNoYXJlcG9pbnQuY29tLz9uYXY9Y3owbE1rWW1aRDFpSVVVd1FXdDJSbGhSV0VWUE1tUkNYMWhUZW5KWVVFdFBSVXByYWs1b1NrSlBjRk4wYm5wNmNsWmpMVUZ5YjI1UlJWOVdSREpUV25aeWVUUTJTV2swUlZrbVpqMHdNVk5OVGtkR1JsTkJXVE0xVVZaQ1ZrRkVRa1ZaVEVoRVNUSTBXRXhVVlZoV0ptTTlKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwicCI6eyJ1IjoiaHR0cHM6Ly9oYW53aGFsaWZlbTM2NS5zaGFyZXBvaW50LmNvbS9jb250ZW50c3RvcmFnZS9DU1BfYmMyNDQwMTMtZDA1NS00MzVjLWI2NzQtMWZkNzRiM2FkNzNjLyVFQiVBQyVCOCVFQyU4NCU5QyUyMCVFQiU5RCVCQyVFQyU5RCVCNCVFQiVCOCU4QyVFQiU5RiVBQyVFQiVBNiVBQy9Mb29wQXBwRGF0YS8wOS0yLiUyMEJyaWRnZSUyMFNwZWMlMjAxLmxvb3A%2FbmF2PWN6MGxNa1pqYjI1MFpXNTBjM1J2Y21GblpTVXlSa05UVUY5aVl6STBOREF4TXkxa01EVTFMVFF6TldNdFlqWTNOQzB4Wm1RM05HSXpZV1EzTTJNbVpEMWlJVVV3UVd0MlJsaFJXRVZQTW1SQ1gxaFRlbkpZVUV0UFJVcHJhazVvU2tKUGNGTjBibnA2Y2xaakxVRnliMjVSUlY5V1JESlRXblp5ZVRRMlNXazBSVmttWmowd01WTk5Ua2RHUmxGRlYxTlFOelpMUWtsTFdrWkpXVUUzU1ZkWldGTklWa0ZUSm1NOUpUSkdKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwiaSI6eyJpIjoiNTdkZmVhM2QtZDA2Yi00YWRlLWIxZjEtYjE4NDA4MmNlN2VjIn19\n */\nexport const customHeaderNames = [\n 'Accept-Language',\n 'DeviceId',\n 'LoginType',\n 'PlatformName',\n 'PlatformVersion',\n 'AppVersion',\n 'DeviceModel',\n 'FormFactor',\n 'LoginChannel'\n];\n\nexport const AT = 'AT';\nexport type GetterSync = (keyName: string) => string;\nexport type SetterSync = (keyName: string, value: string) => void;\n\nexport type GetterAsync = (keyName: string) => Promise<string> | string;\nexport type SetterAsync = (keyName: string, value: string) => Promise<void> | void;\n","import { AT, customHeaderNames, GetterSync, SetterSync } from './header.types';\n\nexport class HeaderManager {\n private getter: GetterSync;\n private setter: SetterSync;\n\n constructor(getter: GetterSync, setter: SetterSync) {\n this.getter = getter;\n this.setter = setter;\n }\n\n /**\n * 커스텀 헤더를 동기적으로 설정합니다.\n */\n setCustomHeaders(): void {\n customHeaderNames.forEach((headerName) => {\n const customHeaderKey = `X-Channel-${headerName}`;\n const headerValue = this.getter(customHeaderKey);\n if (headerValue) {\n this.setter(customHeaderKey, headerValue);\n }\n });\n }\n\n /**\n * 인증 토큰을 동기적으로 설정합니다.\n */\n setAuthToken(): void {\n const token = this.getter(AT);\n if (token) {\n this.setter('Authorization', `Bearer ${token}`);\n }\n }\n\n /**\n * 모든 헤더를 동기적으로 설정합니다.\n */\n setAllHeaders(): void {\n this.setCustomHeaders();\n this.setAuthToken();\n }\n}\n","import axios from 'axios';\nimport { AxiosError, AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Bridge } from 'sales-frontend-bridge';\nimport { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { PostSentryParams, SentryLogController } from 'sales-frontend-sentry';\nimport { useClientSessionStore } from 'sales-frontend-stores';\nimport { getCookie, getDspExecutionEnvironment, isDspApp, setCookie } from 'sales-frontend-utils';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType, HttpClientHandlerParams, HttpClientOptions } from './types';\n\nlet isRefreshed = true;\nconst axiosQueue: AxiosQueueType[] = [];\n\n/**\n * 쿠키에서 값을 가져오고, 없으면 기본값을 쿠키에 설정 후 반환하는 헬퍼 함수\n * @param key 쿠키 키\n * @param defaultValue 쿠키 값이 없을 때 사용할 기본값\n * @returns 쿠키 값 또는 기본값\n */\nconst getOrSetCookie = (key: string, defaultValue: string): string => {\n let value = getCookie(key);\n if (!value) {\n value = defaultValue;\n setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\nconst authErrorHandler = () => {\n console.error('Authentication error occurred.');\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\n options?: HttpClientOptions;\n\n\n /**\n * axios의 request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n headers: Record<string, string> = {};\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n api: AxiosInstance;\n sentryLogger: SentryLogController;\n\n constructor(config: AxiosRequestConfig = {}, options?: HttpClientOptions) {\n this.config = config;\n this.options = options;\n this.sentryLogger = new SentryLogController(options?.sentryConfig);\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return getCookie(key);\n };\n const setter: HeaderManager['setter'] = (key, value) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n };\n this.headerManager = new HeaderManager(getter, setter);\n\n /**\n * api수행객체 최초 생성,\n * 공통으로 적용할 설정값이 있는경우 셋팅\n */\n this.api = axios.create({\n withCredentials: false,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n console.log('config url', config.url);\n const debugMode = getCookie('dsp-debug-mode') === 'on';\n\n /** 디버깅용 로그 */\n await addRequestLog(config);\n\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n if (debugRefreshQueueOff) {\n isRefreshed = true;\n }\n\n /**\n * AT토큰 주입\n */\n const authClient = new AuthClient();\n const authorization = await authClient.getAT();\n if (authorization) {\n config.headers['Authorization'] = authorization;\n }\n\n if (debugMode) {\n console.log('debugMode header setting!');\n /**\n * 주소가 debugMode 경우 테스트용 헤더 삽입\n */\n config.headers['x-channel-appversion'] = getOrSetCookie('x-channel-appversion', '3.1');\n config.headers['x-channel-deviceid'] = getOrSetCookie('x-channel-deviceid', 'deviceid');\n config.headers['x-channel-devicemodel'] = getOrSetCookie('x-channel-devicemodel', 'iPHONE13');\n config.headers['x-channel-formfactor'] = getOrSetCookie('x-channel-formfactor', 'Phone');\n config.headers['x-channel-loginchannel'] = getOrSetCookie('x-channel-loginchannel', 'DSP');\n config.headers['x-channel-logintype'] = getOrSetCookie('x-channel-logintype', 'ONPA_PIN');\n config.headers['x-channel-platformname'] = getOrSetCookie('x-channel-platformname', 'IOS');\n config.headers['x-channel-platformversion'] = getOrSetCookie('x-channel-platformversion', '15.4.1');\n config.headers['x-channel-screenid'] = getOrSetCookie('x-channel-screenid', location.pathname);\n config.headers['x-channel-business-work-division-code'] = getOrSetCookie(\n 'x-channel-business-work-division-code',\n 'DEA'\n );\n } else {\n const session = useClientSessionStore.getState().clientSession;\n\n config.headers['x-channel-appversion'] = session.appVersion;\n config.headers['x-channel-deviceid'] = session.deviceId;\n config.headers['x-channel-devicemodel'] = session.deviceModel;\n config.headers['x-channel-formfactor'] = session.formFactor;\n config.headers['x-channel-loginchannel'] = session.loginChannel;\n config.headers['x-channel-logintype'] = session.loginType;\n config.headers['x-channel-platformname'] = session.platformName;\n config.headers['x-channel-platformversion'] = session.platformVersion;\n config.headers['x-channel-screenid'] = location.pathname;\n config.headers['x-channel-business-work-division-code'] = session.businessWorkDivisionCode;\n }\n\n /**\n * 커스텀헤더 주입\n */\n // this.headerManager.setCustomHeaders();\n /**\n *\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n headerEntries.forEach(([key, value]) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n });\n\n /**\n * isRefreshed가 false이면(= 에러발생하여 token재발행중을 의미)\n * 새로운 요청들을 처리하지 않고,큐에 저장\n * 401에러 Queue처리 Request interceptor 등록\n */\n if (!isRefreshed && !config.url?.includes('internal/api/auth/refresh')) {\n console.log('request 401 큐처리');\n\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n // 세션 연장(for 영업포털 세션)\n if (getDspExecutionEnvironment() === 'iframe') {\n Bridge.iframe.dspKeepCallerSession();\n }\n\n return config;\n },\n async (error) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n console.log('request error');\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n return Promise.reject(error);\n }\n );\n\n /**\n * 인터셉터 응답 처리\n */\n this.api.interceptors.response.use(\n async (response: AxiosResponse) => {\n /** 디버깅용 로그 */\n await addResponseLog(response);\n if (response.data.isSuccess === false) {\n /**\n * 200 응답이라도 , isSuccess === false인 경우 에러로 reject\n */\n const axiosError = new AxiosError();\n axiosError.response = response;\n axiosError.config = response.config;\n axiosError.message = response.data.message;\n axiosError.code = response.status.toString();\n axiosError.request = response.request;\n this.sentryLogging({\n logType: 'error',\n error: axiosError,\n extraData: {\n axiosResponse: response\n }\n }, {\n response,\n });\n\n return Promise.reject(axiosError);\n }\n\n return response;\n },\n async (error: AxiosError) => {\n console.log('error');\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n const retry_request = originalRequest?.params?.retry_request === 'true';\n console.log('retry_request', retry_request);\n /**\n * 401에러 Queue처리\n */\n if (\n error.response?.status === 401 &&\n !debugRefreshQueueOff &&\n !retry_request &&\n !originalRequest?.url?.includes('internal/api/auth/refresh')\n ) {\n console.log('error 401 큐처리');\n isRefreshed = false;\n const client = new AuthClient();\n client\n .refreshToken()\n .then(() => {\n /**\n * 토큰 갱신 성공, 플래그를 true로 설정\n */\n isRefreshed = true;\n\n /**\n * 큐에 쌓여있던 모든 요청 재시도\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n /**\n * api 인스턴스를 통해 요청을 재시도합니다. 따라서 재요청들은 다시 인터셉터를 타게 됩니다.\n * 신규토큰을 주입받고 정상처리\n * @todo 재시도후 reject시에는 로그인페이지로 보내는 브릿지 함수를 호출하도록 처리가 필요해보임.\n *\n * @note 11/07 : 무한루프이슈 해결을 위해 , 새로운 인스턴스를 사용하도록 수정\n */\n // add param 'retry_request' to prevent infinite loop\n p.config.params = {\n ...p.config.params,\n retry_request: 'true'\n };\n\n this.api\n .request(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * 큐에 쌓여있던 모든 요청 reject처리\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n p.reject(error);\n }\n }\n\n if (isDspApp()) {\n //native 브릿지함수 호출\n // * 별도의 함수 호출 없이 앱에서 처리\n } else {\n //각 도메인 환경에 맞는 핸들러 주입필요\n authErrorHandler();\n }\n\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n return Promise.reject(error);\n });\n\n return new Promise((resolve, reject) => {\n if (originalRequest) {\n axiosQueue.push({ resolve, reject, config: originalRequest });\n }\n });\n } else {\n console.log('error 401 큐처리 없음');\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n\n return Promise.reject(error);\n }\n }\n );\n }\n\n sentryLogging(params: PostSentryParams, handlerParams?: HttpClientHandlerParams) {\n /**\n * @description 센트리 사용여부\n */\n if (this.options?.useSentry === false) {\n return;\n }\n\n /**\n * @description 핸들러가 없으면 센트리로 로그 바로전송\n */\n if (typeof this.options?.handler !== 'function') {\n return this.sentryLogger.postSentry(params);\n }\n\n\n\n /**\n * 핸들러는 있는데, handlerParams가 없는 경우, 콘솔 경고\n */\n if (typeof this.options?.handler === 'function' && !handlerParams) {\n console.warn('[HttpClientAxios] handlerParams is required when handler is provided');\n\n return;\n }\n\n /**\n * 핸들러가 있고, handlerParams가 있는 경우, 핸들러 실행결과에 따라 센트리전송\n */\n if (typeof this.options?.handler === 'function' && handlerParams) {\n const isSendSentry = this.options?.handler(handlerParams);\n\n /**\n * @description 핸들러가 true를 반환하면 센트리로 로그 전송\n */\n if (isSendSentry) {\n return this.sentryLogger.postSentry(params);\n }\n }\n }\n\n setHeaders(headers: Record<string, string>) {\n this.headers = {\n ...this.headers,\n ...headers\n };\n }\n}\n","import { Bridge } from 'sales-frontend-bridge';\nimport { isDebugByFilterName } from 'sales-frontend-debug';\nimport { getCookie, getServicePath, isDspApp } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\n\nexport class AuthClient {\n defaultTokenType = 'Bearer';\n /**\n * App인지 확인\n * @returns boolean\n */\n isApp() {\n return isDspApp();\n }\n\n getAuthorizationFromCookie() {\n const accessToken = getCookie('accessToken');\n\n return accessToken ? `${this.defaultTokenType} ${accessToken}` : undefined;\n }\n\n async getAuthorizationFromBridge() {\n const { tokenType, accessToken } = await Bridge.native.getAccessToken();\n\n return accessToken ? `${tokenType || this.defaultTokenType} ${accessToken}` : undefined;\n }\n\n /**\n *\n * @returns Promise<string | undefined>\n */\n async getAT(): Promise<string | undefined> {\n const debugModeAuthTokenFromCookie = isDebugByFilterName('auth-token');\n\n /**\n * debugMode 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (debugModeAuthTokenFromCookie) {\n console.log('debugMode token setting!');\n\n return this.getAuthorizationFromCookie();\n }\n\n if (this.isApp()) {\n return await this.getAuthorizationFromBridge();\n } else {\n /**\n * DSP 앱 외에는 쿠키 참조\n */\n return this.getAuthorizationFromCookie();\n }\n }\n\n /**\n * RT를 이용하여 신규 AT/RT발행\n * 기존토큰은 무효화처리\n * 쿠키에 저장.\n */\n async refreshToken(): Promise<void> {\n if (this.isApp()) {\n // 영업지원 앱인 경우 브릿지를 통해 토큰 갱신\n await Bridge.native.refreshAccessToken();\n } else {\n // 신규 앱(FP플래너, 영업포털, 순수 웹) 외에는 내부 api 호출로 토큰 갱신\n const httpClient = new HttpClientAxios();\n\n await httpClient.api.post(`${getServicePath()}/internal/api/auth/refresh`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/http-client/header/header.types.ts","../src/http-client/header/header-manager.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/auth/auth-client.ts"],"names":["config","error","isDspApp","getCookie","Bridge"],"mappings":"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","file":"client.js","sourcesContent":["/**\n * @see https://loop.cloud.microsoft/p/eyJ3Ijp7InUiOiJodHRwczovL2hhbndoYWxpZmVtMzY1LnNoYXJlcG9pbnQuY29tLz9uYXY9Y3owbE1rWW1aRDFpSVVVd1FXdDJSbGhSV0VWUE1tUkNYMWhUZW5KWVVFdFBSVXByYWs1b1NrSlBjRk4wYm5wNmNsWmpMVUZ5YjI1UlJWOVdSREpUV25aeWVUUTJTV2swUlZrbVpqMHdNVk5OVGtkR1JsTkJXVE0xVVZaQ1ZrRkVRa1ZaVEVoRVNUSTBXRXhVVlZoV0ptTTlKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwicCI6eyJ1IjoiaHR0cHM6Ly9oYW53aGFsaWZlbTM2NS5zaGFyZXBvaW50LmNvbS9jb250ZW50c3RvcmFnZS9DU1BfYmMyNDQwMTMtZDA1NS00MzVjLWI2NzQtMWZkNzRiM2FkNzNjLyVFQiVBQyVCOCVFQyU4NCU5QyUyMCVFQiU5RCVCQyVFQyU5RCVCNCVFQiVCOCU4QyVFQiU5RiVBQyVFQiVBNiVBQy9Mb29wQXBwRGF0YS8wOS0yLiUyMEJyaWRnZSUyMFNwZWMlMjAxLmxvb3A%2FbmF2PWN6MGxNa1pqYjI1MFpXNTBjM1J2Y21GblpTVXlSa05UVUY5aVl6STBOREF4TXkxa01EVTFMVFF6TldNdFlqWTNOQzB4Wm1RM05HSXpZV1EzTTJNbVpEMWlJVVV3UVd0MlJsaFJXRVZQTW1SQ1gxaFRlbkpZVUV0UFJVcHJhazVvU2tKUGNGTjBibnA2Y2xaakxVRnliMjVSUlY5V1JESlRXblp5ZVRRMlNXazBSVmttWmowd01WTk5Ua2RHUmxGRlYxTlFOelpMUWtsTFdrWkpXVUUzU1ZkWldGTklWa0ZUSm1NOUpUSkdKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwiaSI6eyJpIjoiNTdkZmVhM2QtZDA2Yi00YWRlLWIxZjEtYjE4NDA4MmNlN2VjIn19\n */\nexport const customHeaderNames = [\n 'Accept-Language',\n 'DeviceId',\n 'LoginType',\n 'PlatformName',\n 'PlatformVersion',\n 'AppVersion',\n 'DeviceModel',\n 'FormFactor',\n 'LoginChannel'\n];\n\nexport const AT = 'AT';\nexport type GetterSync = (keyName: string) => string;\nexport type SetterSync = (keyName: string, value: string) => void;\n\nexport type GetterAsync = (keyName: string) => Promise<string> | string;\nexport type SetterAsync = (keyName: string, value: string) => Promise<void> | void;\n","import { AT, customHeaderNames, GetterSync, SetterSync } from './header.types';\n\nexport class HeaderManager {\n private getter: GetterSync;\n private setter: SetterSync;\n\n constructor(getter: GetterSync, setter: SetterSync) {\n this.getter = getter;\n this.setter = setter;\n }\n\n /**\n * 커스텀 헤더를 동기적으로 설정합니다.\n */\n setCustomHeaders(): void {\n customHeaderNames.forEach((headerName) => {\n const customHeaderKey = `X-Channel-${headerName}`;\n const headerValue = this.getter(customHeaderKey);\n if (headerValue) {\n this.setter(customHeaderKey, headerValue);\n }\n });\n }\n\n /**\n * 인증 토큰을 동기적으로 설정합니다.\n */\n setAuthToken(): void {\n const token = this.getter(AT);\n if (token) {\n this.setter('Authorization', `Bearer ${token}`);\n }\n }\n\n /**\n * 모든 헤더를 동기적으로 설정합니다.\n */\n setAllHeaders(): void {\n this.setCustomHeaders();\n this.setAuthToken();\n }\n}\n","import axios from 'axios';\nimport { AxiosError, AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Bridge } from 'sales-frontend-bridge';\nimport { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { PostSentryParams, SentryLogController } from 'sales-frontend-sentry';\nimport { useClientSessionStore } from 'sales-frontend-stores';\nimport { getCookie, getDspExecutionEnvironment, isDspApp, setCookie } from 'sales-frontend-utils';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType, HttpClientHandlerParams, HttpClientOptions } from './types';\n\nlet isRefreshed = true;\nconst axiosQueue: AxiosQueueType[] = [];\n\n/**\n * 쿠키에서 값을 가져오고, 없으면 기본값을 쿠키에 설정 후 반환하는 헬퍼 함수\n * @param key 쿠키 키\n * @param defaultValue 쿠키 값이 없을 때 사용할 기본값\n * @returns 쿠키 값 또는 기본값\n */\nconst getOrSetCookie = (key: string, defaultValue: string): string => {\n let value = getCookie(key);\n if (!value) {\n value = defaultValue;\n setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\nconst authErrorHandler = () => {\n console.error('Authentication error occurred.');\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\n options?: HttpClientOptions;\n\n\n /**\n * axios의 request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n headers: Record<string, string> = {};\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n api: AxiosInstance;\n sentryLogger?: SentryLogController;\n\n constructor(config: AxiosRequestConfig = {}, options?: HttpClientOptions) {\n this.config = config;\n this.options = options;\n if (options?.useSentry && options?.sentryConfig) {\n this.sentryLogger = new SentryLogController(options.sentryConfig);\n } else if (options?.useSentry && !options?.sentryConfig) {\n console.warn('[HttpClientAxios] sentryConfig is required when useSentry is true')\n }\n\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return getCookie(key);\n };\n const setter: HeaderManager['setter'] = (key, value) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n };\n this.headerManager = new HeaderManager(getter, setter);\n\n /**\n * api수행객체 최초 생성,\n * 공통으로 적용할 설정값이 있는경우 셋팅\n */\n this.api = axios.create({\n withCredentials: false,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n console.log('config url', config.url);\n const debugMode = getCookie('dsp-debug-mode') === 'on';\n\n /** 디버깅용 로그 */\n await addRequestLog(config);\n\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n if (debugRefreshQueueOff) {\n isRefreshed = true;\n }\n\n /**\n * AT토큰 주입\n */\n const authClient = new AuthClient();\n const authorization = await authClient.getAT();\n if (authorization) {\n config.headers['Authorization'] = authorization;\n }\n\n if (debugMode) {\n console.log('debugMode header setting!');\n /**\n * 주소가 debugMode 경우 테스트용 헤더 삽입\n */\n config.headers['x-channel-appversion'] = getOrSetCookie('x-channel-appversion', '3.1');\n config.headers['x-channel-deviceid'] = getOrSetCookie('x-channel-deviceid', 'deviceid');\n config.headers['x-channel-devicemodel'] = getOrSetCookie('x-channel-devicemodel', 'iPHONE13');\n config.headers['x-channel-formfactor'] = getOrSetCookie('x-channel-formfactor', 'Phone');\n config.headers['x-channel-loginchannel'] = getOrSetCookie('x-channel-loginchannel', 'DSP');\n config.headers['x-channel-logintype'] = getOrSetCookie('x-channel-logintype', 'ONPA_PIN');\n config.headers['x-channel-platformname'] = getOrSetCookie('x-channel-platformname', 'IOS');\n config.headers['x-channel-platformversion'] = getOrSetCookie('x-channel-platformversion', '15.4.1');\n config.headers['x-channel-screenid'] = getOrSetCookie('x-channel-screenid', location.pathname);\n config.headers['x-channel-business-work-division-code'] = getOrSetCookie(\n 'x-channel-business-work-division-code',\n 'DEA'\n );\n } else {\n const session = useClientSessionStore.getState().clientSession;\n\n config.headers['x-channel-appversion'] = session.appVersion;\n config.headers['x-channel-deviceid'] = session.deviceId;\n config.headers['x-channel-devicemodel'] = session.deviceModel;\n config.headers['x-channel-formfactor'] = session.formFactor;\n config.headers['x-channel-loginchannel'] = session.loginChannel;\n config.headers['x-channel-logintype'] = session.loginType;\n config.headers['x-channel-platformname'] = session.platformName;\n config.headers['x-channel-platformversion'] = session.platformVersion;\n config.headers['x-channel-screenid'] = location.pathname;\n config.headers['x-channel-business-work-division-code'] = session.businessWorkDivisionCode;\n }\n\n /**\n * 커스텀헤더 주입\n */\n // this.headerManager.setCustomHeaders();\n /**\n *\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n headerEntries.forEach(([key, value]) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n });\n\n /**\n * isRefreshed가 false이면(= 에러발생하여 token재발행중을 의미)\n * 새로운 요청들을 처리하지 않고,큐에 저장\n * 401에러 Queue처리 Request interceptor 등록\n */\n if (!isRefreshed && !config.url?.includes('internal/api/auth/refresh')) {\n console.log('request 401 큐처리');\n\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n // 세션 연장(for 영업포털 세션)\n if (getDspExecutionEnvironment() === 'iframe') {\n Bridge.iframe.dspKeepCallerSession();\n }\n\n return config;\n },\n async (error) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n console.log('request error');\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n return Promise.reject(error);\n }\n );\n\n /**\n * 인터셉터 응답 처리\n */\n this.api.interceptors.response.use(\n async (response: AxiosResponse) => {\n /** 디버깅용 로그 */\n await addResponseLog(response);\n if (response.data.isSuccess === false) {\n /**\n * 200 응답이라도 , isSuccess === false인 경우 에러로 reject\n */\n const axiosError = new AxiosError();\n axiosError.response = response;\n axiosError.config = response.config;\n axiosError.message = response.data.message;\n axiosError.code = response.status.toString();\n axiosError.request = response.request;\n this.sentryLogging({\n logType: 'error',\n error: axiosError,\n extraData: {\n axiosResponse: response\n }\n }, {\n response,\n });\n\n return Promise.reject(axiosError);\n }\n\n return response;\n },\n async (error: AxiosError) => {\n console.log('error');\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n const retry_request = originalRequest?.params?.retry_request === 'true';\n console.log('retry_request', retry_request);\n /**\n * 401에러 Queue처리\n */\n if (\n error.response?.status === 401 &&\n !debugRefreshQueueOff &&\n !retry_request &&\n !originalRequest?.url?.includes('internal/api/auth/refresh')\n ) {\n console.log('error 401 큐처리');\n isRefreshed = false;\n const client = new AuthClient();\n client\n .refreshToken()\n .then(() => {\n /**\n * 토큰 갱신 성공, 플래그를 true로 설정\n */\n isRefreshed = true;\n\n /**\n * 큐에 쌓여있던 모든 요청 재시도\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n /**\n * api 인스턴스를 통해 요청을 재시도합니다. 따라서 재요청들은 다시 인터셉터를 타게 됩니다.\n * 신규토큰을 주입받고 정상처리\n * @todo 재시도후 reject시에는 로그인페이지로 보내는 브릿지 함수를 호출하도록 처리가 필요해보임.\n *\n * @note 11/07 : 무한루프이슈 해결을 위해 , 새로운 인스턴스를 사용하도록 수정\n */\n // add param 'retry_request' to prevent infinite loop\n p.config.params = {\n ...p.config.params,\n retry_request: 'true'\n };\n\n this.api\n .request(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * 큐에 쌓여있던 모든 요청 reject처리\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n p.reject(error);\n }\n }\n\n if (isDspApp()) {\n //native 브릿지함수 호출\n // * 별도의 함수 호출 없이 앱에서 처리\n } else {\n //각 도메인 환경에 맞는 핸들러 주입필요\n authErrorHandler();\n }\n\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n return Promise.reject(error);\n });\n\n return new Promise((resolve, reject) => {\n if (originalRequest) {\n axiosQueue.push({ resolve, reject, config: originalRequest });\n }\n });\n } else {\n console.log('error 401 큐처리 없음');\n this.sentryLogging({\n logType: 'error',\n error\n }, {\n error,\n });\n\n\n return Promise.reject(error);\n }\n }\n );\n }\n\n sentryLogging(params: PostSentryParams, handlerParams?: HttpClientHandlerParams) {\n /**\n * @description 센트리 사용여부\n */\n if (this.options?.useSentry === false) {\n return;\n }\n\n if (!this.sentryLogger) {\n console.warn('[HttpClientAxios] sentryLogger is not initialized');\n\n return;\n }\n\n /**\n * @description 핸들러가 없으면 센트리로 로그 바로전송\n */\n if (typeof this.options?.handler !== 'function') {\n return this.sentryLogger.postSentry(params);\n }\n\n /**\n * 핸들러는 있는데, handlerParams가 없는 경우, 콘솔 경고\n */\n if (typeof this.options?.handler === 'function' && !handlerParams) {\n console.warn('[HttpClientAxios] handlerParams is required when handler is provided');\n\n return;\n }\n\n /**\n * 핸들러가 있고, handlerParams가 있는 경우, 핸들러 실행결과에 따라 센트리전송\n */\n if (typeof this.options?.handler === 'function' && handlerParams) {\n const isSendSentry = this.options?.handler(handlerParams);\n\n /**\n * @description 핸들러가 true를 반환하면 센트리로 로그 전송\n */\n if (isSendSentry) {\n return this.sentryLogger.postSentry(params);\n }\n }\n }\n\n setHeaders(headers: Record<string, string>) {\n this.headers = {\n ...this.headers,\n ...headers\n };\n }\n}\n","import { Bridge } from 'sales-frontend-bridge';\nimport { isDebugByFilterName } from 'sales-frontend-debug';\nimport { getCookie, getServicePath, isDspApp } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\n\nexport class AuthClient {\n defaultTokenType = 'Bearer';\n /**\n * App인지 확인\n * @returns boolean\n */\n isApp() {\n return isDspApp();\n }\n\n getAuthorizationFromCookie() {\n const accessToken = getCookie('accessToken');\n\n return accessToken ? `${this.defaultTokenType} ${accessToken}` : undefined;\n }\n\n async getAuthorizationFromBridge() {\n const { tokenType, accessToken } = await Bridge.native.getAccessToken();\n\n return accessToken ? `${tokenType || this.defaultTokenType} ${accessToken}` : undefined;\n }\n\n /**\n *\n * @returns Promise<string | undefined>\n */\n async getAT(): Promise<string | undefined> {\n const debugModeAuthTokenFromCookie = isDebugByFilterName('auth-token');\n\n /**\n * debugMode 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (debugModeAuthTokenFromCookie) {\n console.log('debugMode token setting!');\n\n return this.getAuthorizationFromCookie();\n }\n\n if (this.isApp()) {\n return await this.getAuthorizationFromBridge();\n } else {\n /**\n * DSP 앱 외에는 쿠키 참조\n */\n return this.getAuthorizationFromCookie();\n }\n }\n\n /**\n * RT를 이용하여 신규 AT/RT발행\n * 기존토큰은 무효화처리\n * 쿠키에 저장.\n */\n async refreshToken(): Promise<void> {\n if (this.isApp()) {\n // 영업지원 앱인 경우 브릿지를 통해 토큰 갱신\n await Bridge.native.refreshAccessToken();\n } else {\n // 신규 앱(FP플래너, 영업포털, 순수 웹) 외에는 내부 api 호출로 토큰 갱신\n const httpClient = new HttpClientAxios();\n\n await httpClient.api.post(`${getServicePath()}/internal/api/auth/refresh`);\n }\n }\n}\n"]}
|
|
@@ -69,9 +69,12 @@ declare class HttpClientAxios {
|
|
|
69
69
|
* 현재 버전에서는 axios를 사용하여 구현됨.
|
|
70
70
|
*/
|
|
71
71
|
api: AxiosInstance;
|
|
72
|
-
sentryLogger
|
|
72
|
+
sentryLogger?: SentryLogController;
|
|
73
73
|
constructor(config?: AxiosRequestConfig, options?: HttpClientOptions);
|
|
74
|
-
sentryLogging(params: PostSentryParams, handlerParams?: HttpClientHandlerParams):
|
|
74
|
+
sentryLogging(params: PostSentryParams, handlerParams?: HttpClientHandlerParams): {
|
|
75
|
+
eventId: string;
|
|
76
|
+
convertedEventId: string;
|
|
77
|
+
} | undefined;
|
|
75
78
|
setHeaders(headers: Record<string, string>): void;
|
|
76
79
|
}
|
|
77
80
|
|
|
@@ -69,9 +69,12 @@ declare class HttpClientAxios {
|
|
|
69
69
|
* 현재 버전에서는 axios를 사용하여 구현됨.
|
|
70
70
|
*/
|
|
71
71
|
api: AxiosInstance;
|
|
72
|
-
sentryLogger
|
|
72
|
+
sentryLogger?: SentryLogController;
|
|
73
73
|
constructor(config?: AxiosRequestConfig, options?: HttpClientOptions);
|
|
74
|
-
sentryLogging(params: PostSentryParams, handlerParams?: HttpClientHandlerParams):
|
|
74
|
+
sentryLogging(params: PostSentryParams, handlerParams?: HttpClientHandlerParams): {
|
|
75
|
+
eventId: string;
|
|
76
|
+
convertedEventId: string;
|
|
77
|
+
} | undefined;
|
|
75
78
|
setHeaders(headers: Record<string, string>): void;
|
|
76
79
|
}
|
|
77
80
|
|
package/dist/method.cjs
CHANGED
|
@@ -100,7 +100,11 @@ var HttpClientAxios = class {
|
|
|
100
100
|
__publicField(this, "sentryLogger");
|
|
101
101
|
this.config = config;
|
|
102
102
|
this.options = options;
|
|
103
|
-
|
|
103
|
+
if (options?.useSentry && options?.sentryConfig) {
|
|
104
|
+
this.sentryLogger = new salesFrontendSentry.SentryLogController(options.sentryConfig);
|
|
105
|
+
} else if (options?.useSentry && !options?.sentryConfig) {
|
|
106
|
+
console.warn("[HttpClientAxios] sentryConfig is required when useSentry is true");
|
|
107
|
+
}
|
|
104
108
|
const getter = (key) => {
|
|
105
109
|
return salesFrontendUtils.getCookie(key);
|
|
106
110
|
};
|
|
@@ -271,6 +275,10 @@ var HttpClientAxios = class {
|
|
|
271
275
|
if (this.options?.useSentry === false) {
|
|
272
276
|
return;
|
|
273
277
|
}
|
|
278
|
+
if (!this.sentryLogger) {
|
|
279
|
+
console.warn("[HttpClientAxios] sentryLogger is not initialized");
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
274
282
|
if (typeof this.options?.handler !== "function") {
|
|
275
283
|
return this.sentryLogger.postSentry(params);
|
|
276
284
|
}
|
|
@@ -627,10 +635,17 @@ var confirmRemoteIdentityVerificationSystemIdentificationCard = async (params, a
|
|
|
627
635
|
return response.data;
|
|
628
636
|
};
|
|
629
637
|
var useConfirmRemoteIdentityVerificationSystemIdentificationCardMutation = (options) => {
|
|
638
|
+
const setSentryCustInfo = salesFrontendStores.useClientSessionStore((state) => state.setSentryCustInfo);
|
|
630
639
|
return reactQuery.useMutation({
|
|
631
640
|
mutationKey: ["confirmRemoteIdentityVerificationSystemIdentificationCard"],
|
|
632
641
|
mutationFn: async (params) => {
|
|
633
642
|
const response = await confirmRemoteIdentityVerificationSystemIdentificationCard(params);
|
|
643
|
+
if (response.data.rivsCustIdnrId || response.data.customerName) {
|
|
644
|
+
setSentryCustInfo({
|
|
645
|
+
custId: response.data.rivsCustIdnrId ?? "",
|
|
646
|
+
customerName: response.data.customerName ?? ""
|
|
647
|
+
});
|
|
648
|
+
}
|
|
634
649
|
return response.data;
|
|
635
650
|
},
|
|
636
651
|
...options
|