sales-frontend-api 0.0.106 → 0.0.108
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/client.cjs +1 -1
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +2 -2
- package/dist/client.js.map +1 -1
- package/dist/method.cjs +21 -21
- package/dist/method.cjs.map +1 -1
- package/dist/method.js +22 -22
- package/dist/method.js.map +1 -1
- package/package.json +9 -9
package/dist/client.cjs
CHANGED
|
@@ -296,7 +296,7 @@ var AuthClient = class {
|
|
|
296
296
|
async refreshToken() {
|
|
297
297
|
if (!this.isApp()) {
|
|
298
298
|
const httpClient = new HttpClientAxios({});
|
|
299
|
-
await httpClient.api.post(`${salesFrontendUtils.
|
|
299
|
+
await httpClient.api.post(`${salesFrontendUtils.getServicePath()}/internal/api/auth/refresh`);
|
|
300
300
|
if (salesFrontendUtils.getDspExecutionEnvironment() === "iframe") {
|
|
301
301
|
salesFrontendBridge.Bridge.iframe.dspKeepCallerSession();
|
|
302
302
|
}
|
package/dist/client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http-client/cookie/cookie-client.ts","../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":["axios","config","addRequestLog","useClientSessionStore","addResponseLog","AxiosError","addErrorLog","error","isDspApp","Bridge","getServiceCode","getDspExecutionEnvironment"],"mappings":"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","file":"client.cjs","sourcesContent":["/**\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 * @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 { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { useClientSessionStore } from 'sales-frontend-stores';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { cookieClient } from '../cookie/cookie-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType } from './types';\n\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 = cookieClient.getCookie(key);\n if (!value) {\n value = defaultValue;\n cookieClient.setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\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 constructor(config: AxiosRequestConfig = {}) {\n this.config = config;\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return cookieClient.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: true,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n const debugMode = cookieClient.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 console.log('authorization', authorization);\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) {\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n return config;\n },\n (error) => {\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\n return Promise.reject(axiosError);\n\n }\n\n return response;\n },\n async (error: AxiosError) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n /**\n * 401에러 Queue처리\n */\n if (error.response?.status === 401 && !debugRefreshQueueOff) {\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 axios(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * @todo 로그인페이지 이동(?)\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 return Promise.reject(error);\n }\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 { getServiceCode, isDspApp } from 'sales-frontend-utils';\nimport { getDspExecutionEnvironment } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\nimport { cookieClient } from '../cookie/cookie-client';\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 = cookieClient.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 debugMode = cookieClient.getCookie('dsp-debug-mode') === 'on';\n\n /**\n * debugMode 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (debugMode) {\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 // 신규 앱 외에는 내부 api 호출로 토큰 갱신\n const httpClient = new HttpClientAxios({});\n\n await httpClient.api.post(`${getServiceCode()}/internal/api/auth/refresh`);\n\n // 영업 포털 환경일 경우 세션연장 이벤트 발생(to 부모)\n if (getDspExecutionEnvironment() === 'iframe') {\n Bridge.iframe.dspKeepCallerSession();\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/http-client/cookie/cookie-client.ts","../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":["axios","config","addRequestLog","useClientSessionStore","addResponseLog","AxiosError","addErrorLog","error","isDspApp","Bridge","getServicePath","getDspExecutionEnvironment"],"mappings":"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","file":"client.cjs","sourcesContent":["/**\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 * @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 { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { useClientSessionStore } from 'sales-frontend-stores';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { cookieClient } from '../cookie/cookie-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType } from './types';\n\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 = cookieClient.getCookie(key);\n if (!value) {\n value = defaultValue;\n cookieClient.setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\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 constructor(config: AxiosRequestConfig = {}) {\n this.config = config;\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return cookieClient.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: true,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n const debugMode = cookieClient.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 console.log('authorization', authorization);\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) {\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n return config;\n },\n (error) => {\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\n return Promise.reject(axiosError);\n\n }\n\n return response;\n },\n async (error: AxiosError) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n /**\n * 401에러 Queue처리\n */\n if (error.response?.status === 401 && !debugRefreshQueueOff) {\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 axios(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * @todo 로그인페이지 이동(?)\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 return Promise.reject(error);\n }\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 { getServicePath, isDspApp } from 'sales-frontend-utils';\nimport { getDspExecutionEnvironment } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\nimport { cookieClient } from '../cookie/cookie-client';\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 = cookieClient.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 debugMode = cookieClient.getCookie('dsp-debug-mode') === 'on';\n\n /**\n * debugMode 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (debugMode) {\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 // 신규 앱 외에는 내부 api 호출로 토큰 갱신\n const httpClient = new HttpClientAxios({});\n\n await httpClient.api.post(`${getServicePath()}/internal/api/auth/refresh`);\n\n // 영업 포털 환경일 경우 세션연장 이벤트 발생(to 부모)\n if (getDspExecutionEnvironment() === 'iframe') {\n Bridge.iframe.dspKeepCallerSession();\n }\n }\n }\n}\n"]}
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Bridge } from 'sales-frontend-bridge';
|
|
2
|
-
import { isDspApp,
|
|
2
|
+
import { isDspApp, getServicePath, getDspExecutionEnvironment } from 'sales-frontend-utils';
|
|
3
3
|
import axios, { AxiosError } from 'axios';
|
|
4
4
|
import { addRequestLog, addResponseLog, addErrorLog } from 'sales-frontend-debug';
|
|
5
5
|
import { useClientSessionStore } from 'sales-frontend-stores';
|
|
@@ -290,7 +290,7 @@ var AuthClient = class {
|
|
|
290
290
|
async refreshToken() {
|
|
291
291
|
if (!this.isApp()) {
|
|
292
292
|
const httpClient = new HttpClientAxios({});
|
|
293
|
-
await httpClient.api.post(`${
|
|
293
|
+
await httpClient.api.post(`${getServicePath()}/internal/api/auth/refresh`);
|
|
294
294
|
if (getDspExecutionEnvironment() === "iframe") {
|
|
295
295
|
Bridge.iframe.dspKeepCallerSession();
|
|
296
296
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http-client/cookie/cookie-client.ts","../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"],"mappings":"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","file":"client.js","sourcesContent":["/**\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 * @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 { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { useClientSessionStore } from 'sales-frontend-stores';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { cookieClient } from '../cookie/cookie-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType } from './types';\n\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 = cookieClient.getCookie(key);\n if (!value) {\n value = defaultValue;\n cookieClient.setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\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 constructor(config: AxiosRequestConfig = {}) {\n this.config = config;\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return cookieClient.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: true,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n const debugMode = cookieClient.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 console.log('authorization', authorization);\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) {\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n return config;\n },\n (error) => {\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\n return Promise.reject(axiosError);\n\n }\n\n return response;\n },\n async (error: AxiosError) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n /**\n * 401에러 Queue처리\n */\n if (error.response?.status === 401 && !debugRefreshQueueOff) {\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 axios(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * @todo 로그인페이지 이동(?)\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 return Promise.reject(error);\n }\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 { getServiceCode, isDspApp } from 'sales-frontend-utils';\nimport { getDspExecutionEnvironment } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\nimport { cookieClient } from '../cookie/cookie-client';\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 = cookieClient.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 debugMode = cookieClient.getCookie('dsp-debug-mode') === 'on';\n\n /**\n * debugMode 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (debugMode) {\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 // 신규 앱 외에는 내부 api 호출로 토큰 갱신\n const httpClient = new HttpClientAxios({});\n\n await httpClient.api.post(`${getServiceCode()}/internal/api/auth/refresh`);\n\n // 영업 포털 환경일 경우 세션연장 이벤트 발생(to 부모)\n if (getDspExecutionEnvironment() === 'iframe') {\n Bridge.iframe.dspKeepCallerSession();\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/http-client/cookie/cookie-client.ts","../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"],"mappings":"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","file":"client.js","sourcesContent":["/**\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 * @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 { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { useClientSessionStore } from 'sales-frontend-stores';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { cookieClient } from '../cookie/cookie-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType } from './types';\n\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 = cookieClient.getCookie(key);\n if (!value) {\n value = defaultValue;\n cookieClient.setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\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 constructor(config: AxiosRequestConfig = {}) {\n this.config = config;\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return cookieClient.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: true,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n const debugMode = cookieClient.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 console.log('authorization', authorization);\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) {\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n return config;\n },\n (error) => {\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\n return Promise.reject(axiosError);\n\n }\n\n return response;\n },\n async (error: AxiosError) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n /**\n * 401에러 Queue처리\n */\n if (error.response?.status === 401 && !debugRefreshQueueOff) {\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 axios(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * @todo 로그인페이지 이동(?)\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 return Promise.reject(error);\n }\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 { getServicePath, isDspApp } from 'sales-frontend-utils';\nimport { getDspExecutionEnvironment } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\nimport { cookieClient } from '../cookie/cookie-client';\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 = cookieClient.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 debugMode = cookieClient.getCookie('dsp-debug-mode') === 'on';\n\n /**\n * debugMode 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (debugMode) {\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 // 신규 앱 외에는 내부 api 호출로 토큰 갱신\n const httpClient = new HttpClientAxios({});\n\n await httpClient.api.post(`${getServicePath()}/internal/api/auth/refresh`);\n\n // 영업 포털 환경일 경우 세션연장 이벤트 발생(to 부모)\n if (getDspExecutionEnvironment() === 'iframe') {\n Bridge.iframe.dspKeepCallerSession();\n }\n }\n }\n}\n"]}
|
package/dist/method.cjs
CHANGED
|
@@ -297,7 +297,7 @@ var AuthClient = class {
|
|
|
297
297
|
async refreshToken() {
|
|
298
298
|
if (!this.isApp()) {
|
|
299
299
|
const httpClient = new HttpClientAxios({});
|
|
300
|
-
await httpClient.api.post(`${salesFrontendUtils.
|
|
300
|
+
await httpClient.api.post(`${salesFrontendUtils.getServicePath()}/internal/api/auth/refresh`);
|
|
301
301
|
if (salesFrontendUtils.getDspExecutionEnvironment() === "iframe") {
|
|
302
302
|
salesFrontendBridge.Bridge.iframe.dspKeepCallerSession();
|
|
303
303
|
}
|
|
@@ -313,7 +313,7 @@ var getTestMethod = async ({ id, config, setupFn }) => {
|
|
|
313
313
|
return res.data;
|
|
314
314
|
};
|
|
315
315
|
var getAddressListMethod = async (params, config) => {
|
|
316
|
-
const apiUrl = `${salesFrontendUtils.
|
|
316
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/address-list`;
|
|
317
317
|
const httpClient = new HttpClientAxios(config);
|
|
318
318
|
const res = await httpClient.api.post(apiUrl, params);
|
|
319
319
|
return res.data;
|
|
@@ -330,7 +330,7 @@ var useSearchAddressQuery = (params, options, config) => {
|
|
|
330
330
|
});
|
|
331
331
|
};
|
|
332
332
|
var getAddressPostalCodeMethod = async (params, config) => {
|
|
333
|
-
const apiUrl = `${salesFrontendUtils.
|
|
333
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/address/postal-code`;
|
|
334
334
|
const httpClient = new HttpClientAxios(config);
|
|
335
335
|
const res = await httpClient.api.post(apiUrl, params);
|
|
336
336
|
return res.data;
|
|
@@ -347,7 +347,7 @@ var useSearchPostalCodeQuery = (params, options, config) => {
|
|
|
347
347
|
});
|
|
348
348
|
};
|
|
349
349
|
var getAddressStandardizationListMethod = async (params, config) => {
|
|
350
|
-
const apiUrl = `${salesFrontendUtils.
|
|
350
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/address-standardization-list`;
|
|
351
351
|
const httpClient = new HttpClientAxios(config);
|
|
352
352
|
const res = await httpClient.api.post(apiUrl, params);
|
|
353
353
|
return res.data;
|
|
@@ -364,13 +364,13 @@ var useSearchAddressStandardizationQuery = (params, options, config) => {
|
|
|
364
364
|
});
|
|
365
365
|
};
|
|
366
366
|
var getOccupationListMethod = async (params, config) => {
|
|
367
|
-
const apiUrl = `${salesFrontendUtils.
|
|
367
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/occupation-list`;
|
|
368
368
|
const httpClient = new HttpClientAxios(config);
|
|
369
369
|
const res = await httpClient.api.post(apiUrl, params);
|
|
370
370
|
return res.data;
|
|
371
371
|
};
|
|
372
372
|
var getOccupationDetailMethod = async (params, config) => {
|
|
373
|
-
const apiUrl = `${salesFrontendUtils.
|
|
373
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/occupation/detail`;
|
|
374
374
|
const httpClient = new HttpClientAxios(config);
|
|
375
375
|
const res = await httpClient.api.post(apiUrl, params);
|
|
376
376
|
return res.data;
|
|
@@ -398,7 +398,7 @@ var useSearchOccupationDetailQuery = (params, options, config) => {
|
|
|
398
398
|
});
|
|
399
399
|
};
|
|
400
400
|
var getVehicleListMethod = async (config) => {
|
|
401
|
-
const apiUrl = `${salesFrontendUtils.
|
|
401
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/vehicle-type-list`;
|
|
402
402
|
const httpClient = new HttpClientAxios(config);
|
|
403
403
|
const res = await httpClient.api.post(apiUrl);
|
|
404
404
|
return res.data;
|
|
@@ -415,7 +415,7 @@ var useSearchVehicleQuery = (options, config) => {
|
|
|
415
415
|
});
|
|
416
416
|
};
|
|
417
417
|
var getEmployeeProfileListMethod = async (params, config) => {
|
|
418
|
-
const apiUrl = `${salesFrontendUtils.
|
|
418
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dea")}/v1/get/participant/profile/employee`;
|
|
419
419
|
const httpClient = new HttpClientAxios(config);
|
|
420
420
|
const res = await httpClient.api.post(apiUrl, params);
|
|
421
421
|
return res.data;
|
|
@@ -432,7 +432,7 @@ var useSearchEmployeeProfileQuery = (params, options, config) => {
|
|
|
432
432
|
});
|
|
433
433
|
};
|
|
434
434
|
var getOrganizationProfileListMethod = async (params, config) => {
|
|
435
|
-
const apiUrl = `${salesFrontendUtils.
|
|
435
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dea")}/v1/get/participant/profile/organization`;
|
|
436
436
|
const httpClient = new HttpClientAxios(config);
|
|
437
437
|
const res = await httpClient.api.post(apiUrl, params);
|
|
438
438
|
return res.data;
|
|
@@ -449,7 +449,7 @@ var useSearchOrganizationQuery = (params, options, config) => {
|
|
|
449
449
|
});
|
|
450
450
|
};
|
|
451
451
|
var getNationalityListMethod = async (params, config) => {
|
|
452
|
-
const apiUrl = `${salesFrontendUtils.
|
|
452
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/nationality-list`;
|
|
453
453
|
const httpClient = new HttpClientAxios(config);
|
|
454
454
|
const res = await httpClient.api.post(apiUrl, params);
|
|
455
455
|
return res.data;
|
|
@@ -467,7 +467,7 @@ var useSearchNationalityQuery = (params, options, config) => {
|
|
|
467
467
|
});
|
|
468
468
|
};
|
|
469
469
|
var getCustomerListMethod = async (params, config) => {
|
|
470
|
-
const apiUrl = `${salesFrontendUtils.
|
|
470
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/customer-list`;
|
|
471
471
|
const httpClient = new HttpClientAxios(config);
|
|
472
472
|
const res = await httpClient.api.post(apiUrl, params);
|
|
473
473
|
return res.data;
|
|
@@ -484,7 +484,7 @@ var useSearchCustomerListQuery = (params, options, config) => {
|
|
|
484
484
|
});
|
|
485
485
|
};
|
|
486
486
|
var getRiskGradeMethod = async (params, config) => {
|
|
487
|
-
const apiUrl = `${salesFrontendUtils.
|
|
487
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/risk-grade`;
|
|
488
488
|
const httpClient = new HttpClientAxios(config);
|
|
489
489
|
const res = await httpClient.api.post(apiUrl, params);
|
|
490
490
|
return res.data;
|
|
@@ -501,7 +501,7 @@ var useSearchRiskGradeQuery = (params, options, config) => {
|
|
|
501
501
|
});
|
|
502
502
|
};
|
|
503
503
|
var getDspCustomerListMethod = async (params, config) => {
|
|
504
|
-
const apiUrl = `${salesFrontendUtils.
|
|
504
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dea")}/v1/get/participant/profile/customer/personal`;
|
|
505
505
|
const httpClient = new HttpClientAxios(config);
|
|
506
506
|
const res = await httpClient.api.post(apiUrl, params);
|
|
507
507
|
return res.data;
|
|
@@ -518,7 +518,7 @@ var useSearchDspCustomerListQuery = (params, options, config) => {
|
|
|
518
518
|
});
|
|
519
519
|
};
|
|
520
520
|
var getVisaListMethod = async (config) => {
|
|
521
|
-
const apiUrl = `${salesFrontendUtils.
|
|
521
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dis")}/v1/get/codes/visa-status-list`;
|
|
522
522
|
const httpClient = new HttpClientAxios(config);
|
|
523
523
|
const res = await httpClient.api.post(apiUrl);
|
|
524
524
|
return res.data;
|
|
@@ -536,7 +536,7 @@ var useSearchVisaQuery = (options, config) => {
|
|
|
536
536
|
};
|
|
537
537
|
var postLoginMethod = async (userId) => {
|
|
538
538
|
console.log("userId", userId);
|
|
539
|
-
const apiUrl = `${salesFrontendUtils.
|
|
539
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dat")}/v1/post/login`;
|
|
540
540
|
const httpClient = new HttpClientAxios({
|
|
541
541
|
headers: {
|
|
542
542
|
"Debug-Refresh-Queue-Off": "true"
|
|
@@ -549,14 +549,14 @@ var postLoginMethod = async (userId) => {
|
|
|
549
549
|
return res.data;
|
|
550
550
|
};
|
|
551
551
|
var getRemoteIdentityVerificationSystemToken = async (params, axiosConfig) => {
|
|
552
|
-
const apiUrl = `${salesFrontendUtils.
|
|
552
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dea")}/v1/post/participant/remote-identity-verification-system/token`;
|
|
553
553
|
const response = await new HttpClientAxios({
|
|
554
554
|
...axiosConfig
|
|
555
555
|
}).api.post(apiUrl, params);
|
|
556
556
|
return response.data;
|
|
557
557
|
};
|
|
558
558
|
var confirmRemoteIdentityVerificationSystemIdentificationCard = async (params, axiosConfig) => {
|
|
559
|
-
const apiUrl = `${salesFrontendUtils.
|
|
559
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dea")}/v1/post/participant/remote-identity-verification-system/identification-card/confirm`;
|
|
560
560
|
const response = await new HttpClientAxios({
|
|
561
561
|
...axiosConfig
|
|
562
562
|
}).api.post(apiUrl, params);
|
|
@@ -576,7 +576,7 @@ var useConfirmRemoteIdentityVerificationSystemIdentificationCardMutation = (opti
|
|
|
576
576
|
});
|
|
577
577
|
};
|
|
578
578
|
var getCommonCodeListMethod = async (param, config) => {
|
|
579
|
-
const apiUrl = `${salesFrontendUtils.
|
|
579
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dea")}/v1/get/common-code/list`;
|
|
580
580
|
const httpClient = new HttpClientAxios(config);
|
|
581
581
|
const res = await httpClient.api.post(apiUrl, param);
|
|
582
582
|
return res.data;
|
|
@@ -593,7 +593,7 @@ var useSearchCommonCodeQuery = (param, options, config) => {
|
|
|
593
593
|
});
|
|
594
594
|
};
|
|
595
595
|
var getUserProfile = async (axiosConfig) => {
|
|
596
|
-
const apiUrl = `${salesFrontendUtils.
|
|
596
|
+
const apiUrl = `${salesFrontendUtils.getDspApiBasePathFromEnvironment("dat")}/v1/get/user/profile`;
|
|
597
597
|
const response = await new HttpClientAxios({
|
|
598
598
|
...axiosConfig
|
|
599
599
|
}).api.post(apiUrl);
|
|
@@ -604,7 +604,7 @@ var getDayDiffFromToday = (date) => {
|
|
|
604
604
|
return Math.floor(diff / (1e3 * 60 * 60 * 24));
|
|
605
605
|
};
|
|
606
606
|
var postFileUploadMethod = async (params, config) => {
|
|
607
|
-
const apiUrl = `${salesFrontendUtils.
|
|
607
|
+
const apiUrl = `${salesFrontendUtils.getDudApiBasePathFromEnvironment()}/v1/post/file`;
|
|
608
608
|
const formData = new FormData();
|
|
609
609
|
if (params.data instanceof File) {
|
|
610
610
|
formData.append("data", params.data, params.name || params.data.name);
|
|
@@ -629,7 +629,7 @@ var postFileUploadMethod = async (params, config) => {
|
|
|
629
629
|
return res.data;
|
|
630
630
|
};
|
|
631
631
|
async function postFileDownloadMethod(params, config) {
|
|
632
|
-
const apiUrl = `${salesFrontendUtils.
|
|
632
|
+
const apiUrl = `${salesFrontendUtils.getDudApiBasePathFromEnvironment()}/v1/get/file`;
|
|
633
633
|
const httpClient = new HttpClientAxios({
|
|
634
634
|
...config,
|
|
635
635
|
...params.outputType === "BINARY" && { responseType: "blob" }
|