sales-frontend-api 0.0.7 → 0.0.8
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 +38 -36
- package/dist/client.cjs.map +1 -1
- package/dist/client.js +38 -36
- package/dist/client.js.map +1 -1
- package/dist/common.cjs +1 -1
- package/dist/common.cjs.map +1 -1
- package/dist/common.d.cts +1 -1
- package/dist/common.d.ts +1 -1
- package/dist/common.js +1 -1
- package/dist/common.js.map +1 -1
- package/dist/method.cjs +38 -36
- package/dist/method.cjs.map +1 -1
- package/dist/method.js +38 -36
- package/dist/method.js.map +1 -1
- package/dist/server.cjs +138 -138
- package/dist/server.cjs.map +1 -1
- package/dist/server.js +138 -138
- package/dist/server.js.map +1 -1
- package/package.json +7 -7
package/dist/server.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http-client/custom-error.ts","../src/http-client/fetch/ssr-error-handler-fetch.ts","../src/http-client/abstract-http-client.ts","../src/http-client/fetch/fetch-instance.ts","../src/http-client/fetch/http-client-fetch.ts","../src/http-client/fetch/ssr-http-client-fetch.ts","../src/http-client/auth/auth-server.ts","../src/http-client/axios/error-handler.ts","../src/http-client/helper.ts","../src/http-client/axios/ssr-error-handler.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/axios/ssr-http-client-axios.ts"],"names":["config","axios","initConfig"],"mappings":"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","file":"server.cjs","sourcesContent":["/**\n * 디버깅시 필요한 정보들을 에러객체에 저장\n * @todo sentry로 전달할 에러내용들\n */\nexport interface errorParams {\n elapsedTime: string;\n errorCode: string;\n errorMsg: string;\n returnCode: number;\n returnData: unknown;\n returnMsg: string;\n error: unknown;\n config: unknown;\n requestData: unknown;\n}\nexport class CustomError extends Error {\n elapsedTime: string;\n errorCode: string;\n errorMsg: string;\n returnCode: number;\n returnData: unknown;\n returnMsg: string;\n error: unknown;\n config: unknown;\n requestData: unknown;\n constructor({\n elapsedTime,\n errorCode,\n errorMsg,\n returnCode,\n returnData,\n returnMsg,\n error,\n config,\n requestData\n }: errorParams) {\n super();\n this.elapsedTime = elapsedTime;\n this.errorCode = errorCode;\n this.errorMsg = errorMsg;\n this.returnCode = returnCode;\n this.returnData = returnData;\n this.returnMsg = returnMsg;\n this.error = error;\n this.config = config;\n this.requestData = requestData;\n }\n}\n","import { CustomError } from '../custom-error';\nimport type { customConfigFetch } from './types';\n// import * as Sentry from '@hanwhalife/shared-libs/sentry';\n\nexport type ssrErrorHandlerFetchType = (error: CustomError, config: customConfigFetch) => void;\nclass SsrErrorHandlerFetch {\n private localThrow?: ssrErrorHandlerFetchType;\n globalCheck: boolean;\n constructor() {\n this.globalCheck = false;\n }\n\n setGlobalCheck(global: boolean) {\n this.globalCheck = !!global;\n }\n /**\n * ssr용 에러 throw\n * 에러코드에 맞는 ServerError에러 객체를 throw 및 Sentry 리포팅 영역\n */\n private globalThrow(error: CustomError, config: customConfigFetch) {\n const { returnCode, requestData, returnData } = error;\n /**\n * 응답이 있는 경우\n */\n if (returnData) {\n /**\n * 클라이언트 오류\n */\n if (!!returnCode && returnCode >= 400 && returnCode < 500) {\n /**\n * 401(Unauthorized)\n *\n */\n if (returnCode === 401) {\n error.errorMsg = '인증 실패';\n\n return error;\n }\n\n /**\n * 403(Forbidden)에 대한 추가 처리\n */\n if (returnCode === 403) {\n error.errorMsg = '권한 없음: 접근 거부';\n return error;\n }\n }\n\n /**\n * 5xx서버 오류\n */\n if (!!returnCode && returnCode >= 500 && returnCode < 600) {\n error.errorMsg = `서버 오류 발생: ${returnCode}`;\n return error;\n }\n\n // 그 외 상태 코드\n error.errorMsg = `알 수 없는 오류 코드: ${returnCode}`;\n return error;\n } else if (requestData) {\n /**\n * 요청은 있고, 응답이 없는 경우\n */\n error.errorMsg = '요청이 이루어 졌으나 응답을 받지 못했습니다.';\n return error;\n }\n }\n setLocalHandler(func: ssrErrorHandlerFetchType) {\n this.localThrow = func;\n }\n do(error: CustomError, config: customConfigFetch): void {\n const defaultError = new CustomError({\n elapsedTime: '',\n errorCode: '',\n errorMsg: 'default Error',\n requestData: '',\n returnData: '',\n returnCode: 0,\n returnMsg: '',\n error,\n config\n });\n\n /**\n * 개별에러처리가 정의된 경우 실행\n */\n const result = this.localThrow && this.localThrow(error, config);\n\n /**\n * globalCheck가 true이면 개별에러처리 검증후 이상 없을경우 global 처리로직 이어서 수행\n */\n if (this.globalCheck) {\n throw result || this.globalThrow(error, config) || defaultError;\n }\n\n /**\n * 기본에러값 throw\n */\n throw defaultError;\n }\n\n /**\n * serverError 설정값에 따른 에러 처리 추가영역\n */\n errorHandler(e: CustomError) {\n if (e instanceof CustomError) {\n const { returnData, requestData, message, returnCode } = e;\n if (returnData) {\n console.error('요청이 이루어졌으며 서버가 2xx의 범위를 벗어나는 상태 코드로 응답했습니다.');\n console.error('HTTP data, status, headers:::', returnData, returnCode);\n // logApiErrorToSentry(returnData);\n } else if (requestData) {\n /**\n * 요청은 있고, 응답이 없는 경우\n */\n console.error('요청이 이루어졌으나 응답을 받지 못했습니다.');\n console.error(requestData);\n\n /**\n * @todo 센트리 모듈추가필요\n */\n // Sentry.captureException(request);\n } else {\n console.error('오류를 발생시킨 요청을 설정하는 중에 문제가 발생했습니다.');\n console.error('Error', message);\n /**\n * @todo 센트리 모듈추가필요\n */\n // Sentry.captureException(e.error);\n }\n\n /**\n * 에러코드에 맞는 분기처리\n */\n switch (e.returnCode) {\n case 401:\n // 로그인페이지로 이동시킨다.\n // redirect(`/login?${SsrHttpClient.query}`);\n case 403:\n // 잘못된접근 안내페이지로 이동시킨다.\n // redirect(`/forbidden?${SsrHttpClient.query}`);\n case 500:\n // 서버오류시..\n // redirect(`/500?${SsrHttpClient.query}`);\n default: //to-do unknown error\n }\n }\n }\n}\n\nexport const ssrErrorHandlerFetch = new SsrErrorHandlerFetch();\n","/**\n * HttpClientFetch, HttpClientAxios 에서 공통\n */\nexport abstract class AbstractHttpClient<configType, InstanceType, errorType> {\n protected abstract config: configType;\n protected abstract headers: Record<string, string>;\n protected abstract api: InstanceType;\n protected abstract errorHandler: null | ((e: errorType) => void);\n\n abstract put<dataType>(url: string, data?: any, config?: configType): Promise<dataType | undefined>;\n abstract get<dataType>(url: string, config?: configType): Promise<dataType | undefined>;\n abstract post<dataType>(url: string, data?: any, config?: configType): Promise<dataType | undefined>;\n abstract delete<dataType>(url: string, config?: configType): Promise<dataType | undefined>;\n abstract setHeader(key: string, value: string): void;\n}\n","import { CustomError } from '../custom-error';\nimport { customConfigFetch, customResponse, fulfilled, interceptors, rejected } from './types';\n\nexport class FetchInstance {\n /**\n * fetch 인스턴스 생성시 기본설정값 및 기타 필요한 정보들을 추가 가능\n */\n protected config: customConfigFetch;\n protected interceptors: interceptors<customConfigFetch, customResponse> = {\n request: [],\n response: []\n };\n\n constructor(config: customConfigFetch) {\n this.config = config;\n }\n\n public async doFetch<dataType>(config: customConfigFetch): Promise<dataType> {\n /**\n * 인터셉터 처리된 최종 요청값\n */\n const finalConfig = await this.handleRequest(config);\n const { headers, method, fetchOptions, body } = finalConfig;\n\n const url = config.baseURL + this.getUrlWithParams(finalConfig);\n const finalHeaders = new Headers(headers);\n\n /**\n * fetch options 기본값 설정\n */\n const options: RequestInit = {\n method,\n mode: 'same-origin', //동일사이트만 허용\n cache: 'no-store', //민감정보를 다룰경우: 캐시에 데이터저장없이, 항상 최신 데이터유지\n credentials: 'same-origin',\n referrerPolicy: 'same-origin',\n ...fetchOptions,\n headers: finalHeaders\n };\n\n /**\n * body 데이터타입에 따라 Content-Type 셋팅\n */\n if (!!body) {\n /**\n * 폼데이터, 파일업로드, urlSearchParam 타입이 아닌 경우 application/json으로 설정\n */\n if (\n typeof body === 'object' &&\n body !== null &&\n !(body instanceof FormData) &&\n !(body instanceof Blob) &&\n !(body instanceof URLSearchParams)\n ) {\n finalHeaders.set('Content-Type', 'application/json');\n options.body = JSON.stringify(body);\n } else {\n /**\n * application/json 외의 경우(FormData, Blob, string 등), body 데이터 타입에 따라\n * Content-Type이 자동으로 추론되도록 body를 그대로 할당합니다.\n */\n options.body = body;\n }\n }\n const result = new Promise<dataType>((resolve, reject) => {\n fetch(url, options)\n .then(async (response) => {\n const customResponse: customResponse<dataType> = {\n response,\n config: finalConfig,\n data: await response.json()\n };\n return this.handleResponse(customResponse);\n })\n .then((interceptedCustomResponse: customResponse<dataType>) => {\n /**\n * 인터셉터 처리된 최종 응답\n */\n resolve(interceptedCustomResponse.data);\n })\n .catch((e: Error) => {\n if (e instanceof Error) {\n reject(\n this.handleResponseError(\n new CustomError({\n elapsedTime: '',\n errorCode: '',\n errorMsg: e.message,\n returnCode: 0,\n returnData: '',\n returnMsg: '',\n error: e,\n config: finalConfig,\n requestData: finalConfig.body\n })\n )\n );\n }\n });\n });\n return result;\n }\n\n private getUrlWithParams(config?: customConfigFetch) {\n const { params } = config || {};\n const url = config?.url || '';\n\n if (!params) {\n return url;\n }\n\n /**\n * undefined 또는 null 값을 제거한 새 객체 생성\n */\n const sanitizedParams: Record<string, string> = {};\n for (const [key, value] of Object.entries(params)) {\n if (typeof value !== 'undefined' && value !== null) {\n sanitizedParams[key] = String(value);\n }\n }\n\n const queryString = new URLSearchParams(sanitizedParams).toString();\n const delimiter = url.indexOf('?') === -1 ? '?' : '&';\n\n return queryString ? `${url}${delimiter}${queryString}` : url;\n }\n\n public async get<dataType = any>(url: string, config?: customConfigFetch): Promise<dataType> {\n const finalConfig: customConfigFetch = {\n ...this.config,\n ...config,\n url,\n method: 'GET'\n };\n return this.doFetch<dataType>(finalConfig);\n }\n\n public async post<dataType = any>(url: string, data?: any, config?: customConfigFetch): Promise<dataType> {\n const finalConfig: customConfigFetch = {\n ...this.config,\n ...config,\n url,\n method: 'POST',\n body: data\n };\n return this.doFetch<dataType>(finalConfig);\n }\n\n public async put<dataType = any>(url: string, data?: any, config?: customConfigFetch): Promise<dataType> {\n const finalConfig: customConfigFetch = {\n ...this.config,\n ...config,\n url,\n method: 'PUT',\n body: data\n };\n return this.doFetch<dataType>(finalConfig);\n }\n\n public async delete<dataType = any>(url: string, data?: any, config?: customConfigFetch): Promise<dataType> {\n const finalConfig: customConfigFetch = {\n ...this.config,\n ...config,\n url,\n method: 'DELETE',\n body: data\n };\n return this.doFetch<dataType>(finalConfig);\n }\n\n public addRequestInterceptor(onFulfilled: fulfilled<customConfigFetch>, onRejected: rejected = (e) => e) {\n this.interceptors.request.push({\n onFulfilled,\n onRejected\n });\n }\n\n public addResponseInterceptor(onFulfilled: fulfilled<customResponse>, onRejected: rejected = (e) => e) {\n this.interceptors.response.push({\n onFulfilled,\n onRejected\n });\n }\n\n private async getValue(val: Promise<any> | any) {\n if (typeof val.then === 'function') {\n return await val;\n } else {\n return val;\n }\n }\n\n public async handleRequest(config: customConfigFetch): Promise<customConfigFetch> {\n let _config = config;\n let count = 0;\n for (const interceptor of this.interceptors.request) {\n const { onFulfilled, onRejected } = interceptor;\n try {\n _config = {\n ...this.config,\n ..._config,\n ...(await this.getValue(onFulfilled(_config)))\n };\n } catch (e) {\n if (e instanceof Error) {\n await onRejected(\n new CustomError({\n elapsedTime: '',\n errorCode: '',\n errorMsg: e.message,\n returnCode: 0,\n returnData: '',\n returnMsg: '',\n error: e,\n config: _config,\n requestData: _config.body\n })\n );\n }\n }\n count++;\n }\n return _config;\n }\n public async handleResponse(customResponse: customResponse): Promise<customResponse> {\n let _customResponse = customResponse;\n let count = 0;\n for (const interceptor of this.interceptors.response) {\n const { onFulfilled } = interceptor;\n _customResponse = {\n ..._customResponse,\n ...(await this.getValue(onFulfilled(_customResponse)))\n };\n }\n return _customResponse;\n }\n public async handleResponseError(e: CustomError) {\n for (const interceptor of this.interceptors.response) {\n const { onRejected } = interceptor;\n await onRejected(e);\n }\n }\n}\n","import { AbstractHttpClient } from '../abstract-http-client';\nimport { CustomError } from '../custom-error';\nimport { FetchInstance } from './fetch-instance';\nimport { customConfigFetch } from './types';\n\nconst defaultConfig: customConfigFetch = {\n method: 'GET'\n};\nexport class HttpClientFetch extends AbstractHttpClient<customConfigFetch, FetchInstance, CustomError> {\n protected errorHandler: null | ((e: CustomError) => void);\n\n /**\n * HttpClientFetch request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n protected headers!: Record<string, string>;\n\n /**\n * fetch 인스턴스 생성시 기본설정값 및 기타 필요한 정보들을 추가 가능\n */\n protected config: customConfigFetch;\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n public api: FetchInstance;\n\n constructor(config?: customConfigFetch) {\n super();\n if (!this.headers) {\n this.headers = {};\n }\n this.config = config || defaultConfig;\n this.errorHandler = null;\n\n this.api = new FetchInstance(this.config);\n\n /**\n * @todo 이 부분도 추후 api스펙에따라 부분 셋팅필요.\n */\n this.api.addRequestInterceptor((config: customConfigFetch) => {\n /**\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n const headers = new Headers();\n headerEntries.forEach(([key, value]) => {\n headers.set(key, value);\n });\n config.headers = headers;\n\n return config;\n });\n\n this.api.addResponseInterceptor((res) => {\n return res;\n });\n }\n\n async put<dataType = any>(url: string, data?: any, config?: customConfigFetch) {\n try {\n const res = await this.api.put<dataType>(url, data, config);\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async get<dataType = any>(url: string, config?: customConfigFetch) {\n try {\n const res = await this.api.get<dataType>(url, config);\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async delete<dataType = any>(url: string, config?: customConfigFetch) {\n try {\n const res = await this.api.delete<dataType>(url, config);\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async post<dataType = any>(url: string, data?: any, config?: customConfigFetch) {\n try {\n const res = await this.api.post<dataType>(url, data, config);\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n setHeader(key: string, value: string) {\n this.headers[key] = value;\n }\n}\n","import { ssrErrorHandlerFetchType, ssrErrorHandlerFetch } from './ssr-error-handler-fetch';\nimport { HttpClientFetch } from './http-client-fetch';\nimport type { customConfigFetch } from './types';\nimport { CustomError } from '../custom-error';\n\n/**\n * @todo 추후 env. baseUrl 또는 getBaseUrl() 등으로 치환\n */\nconst initConfig: customConfigFetch = {\n baseURL: ''\n};\n\nexport class SsrHttpClientFetch extends HttpClientFetch {\n public static query: string;\n constructor(config?: customConfigFetch) {\n super({\n ...initConfig,\n ...config\n });\n\n /**\n * @todo\n * x-channel-[] 공통헤더 추가\n */\n // this.setHeader('x-....', 'test1');\n // this.setHeader('x-....', 'test2');\n // this.setHeader('x-....', 'test3');\n // this.setHeader('x-....', 'test4');\n this.errorHandler = ssrErrorHandlerFetch.errorHandler;\n this.api.addRequestInterceptor(\n (config) => {\n /**\n * AT토큰 주입 지점 필요시 사용\n * @NOTE\n * IS_APP - 웹뷰는 서버사이드렌더링 고려하지 않음. 토큰주입 생략\n * IS_PC - middleware.ts에서 쿠키에 저장된 토큰을 헤더에 자동주입\n */\n\n return config;\n },\n (e) => {\n if (e instanceof CustomError) {\n if (e) {\n throw ssrErrorHandlerFetch.do(e, this.config);\n }\n }\n }\n );\n\n this.api.addResponseInterceptor(\n (res) => {\n return res;\n },\n (e) => {\n if (e instanceof CustomError) {\n if (e) {\n throw ssrErrorHandlerFetch.do(e, this.config);\n }\n }\n }\n );\n }\n\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: ssrErrorHandlerFetchType) {\n ssrErrorHandlerFetch.setLocalHandler(handler);\n }\n}\n","import { SsrHttpClientFetch } from '../fetch/ssr-http-client-fetch';\n\nexport class AuthServer {\n /**\n * App인지 확인\n * @returns boolean\n * @todo 보완필요\n */\n isApp(userAgent: string) {\n return /mobile|iphone|android/i.test(userAgent);\n }\n\n /**\n * RT를 이용하여 신규 AT/RT발행\n * 기존토큰은 무효화처리\n * 쿠키에 저장.\n * @returns Promise<string> 액세스토큰\n */\n async refreshToken(): Promise<string> {\n /**\n * @todo : 내부api호출\n */\n const ssrHttpClient = new SsrHttpClientFetch({\n baseURL: ''\n });\n const res = await ssrHttpClient.get('/internal/api/auth/refresh');\n return res?.data.accessToken;\n }\n}\n","import type { AxiosError } from 'axios';\nimport type { customConfig } from './types';\nimport { CustomError } from '../custom-error';\n// import * as Sentry from '@hanwhalife/shared-libs/sentry';\n\nexport type errorHandler = (response: AxiosError, config: customConfig) => void;\nexport abstract class ErrorHandler {\n protected localThrow?: errorHandler;\n\n /** 개별처리 + 글로벌처리 모두 사용할경우 : true , 개별처리만 사용할 경우 : false */\n protected globalCheck: boolean;\n\n constructor() {\n /**\n * 에러핸들링 개별처리 + 글로벌처리 모두 사용으로 기본셋팅\n */\n this.globalCheck = true;\n }\n\n /**\n * csr용 에러 throw\n * 에러코드에 맞는 ClientError에러 객체를 throw 및 Sentry 리포팅 영역\n * @todo 에러 응답에 data가 없다면 , config.data(=payload) 를 에러로그로 넣는건 어떨까요?\n */\n private globalThrow(error: AxiosError, config: customConfig) {\n const { response, request, code } = error;\n\n /**\n * 응답이 있는 경우\n */\n if (response) {\n const { data, status, statusText } = response;\n\n const err = new CustomError({\n elapsedTime: '',\n errorCode: code || '',\n errorMsg: '',\n requestData: config.data,\n returnData: data,\n returnCode: status,\n returnMsg: statusText,\n error,\n config\n });\n\n /**\n * 클라이언트 오류\n */\n if (status >= 400 && status < 500) {\n /**\n * 401(Unauthorized)\n */\n if (status === 401) {\n err.errorMsg = '인증 실패';\n /**\n * 재발급요청...\n *\n */\n return err;\n }\n\n /**\n * 403(Forbidden)에 대한 추가 처리\n */\n if (status === 403) {\n err.errorMsg = '권한 없음: 접근 거부';\n return err;\n }\n }\n\n /**\n * 5xx서버 오류\n */\n if (status >= 500 && status < 600) {\n err.errorMsg = `서버 오류 발생: ${status}`;\n return err;\n }\n\n // 그 외 상태 코드\n err.errorMsg = `알 수 없는 오류 코드: ${status}`;\n return err;\n } else if (request) {\n /**\n * 요청은 있고, 응답이 없는 경우\n */\n return new CustomError({\n elapsedTime: '',\n errorCode: code || '',\n errorMsg: '요청이 이루어 졌으나 응답을 받지 못했습니다.',\n requestData: config.data,\n returnData: '',\n returnCode: 0,\n returnMsg: '',\n error,\n config\n });\n }\n }\n public setLocalHandler(func: errorHandler) {\n this.localThrow = func;\n }\n\n public do(error: AxiosError, config: customConfig) {\n const dialog = config.dialog;\n //dialog가 false이면 에러핸들없음.\n if (!dialog) {\n return;\n }\n\n /**\n * 개별에러처리가 정의된 경우 실행\n */\n const res = this.localThrow && this.localThrow(error, config);\n\n /**\n * globalCheck가 true이면 개별에러처리 검증후 이상 없을경우 global 처리로직 이어서 수행\n */\n if (this.globalCheck) {\n return res || this.globalThrow(error, config);\n }\n\n /**\n * global 처리는 수행하지 않고, 설정한 개별에러처리만 실행\n */\n return res;\n }\n\n /**\n * 발생한 CustomError 설정값에 따른 에러 처리 추가영역\n * 상속한 server/client 에서 에러 핸들링\n */\n public abstract errorHandler(e: CustomError): void;\n}\n","// import { BASE_PATH } from '@/constants/path';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n// import * as Sentry from '@hanwhalife/shared-libs/sentry';\n\n/**\n * 커스텀헤더키 모음\n * 예시> 쿠키변수명 : '헤더변수명'\n * @todo 스펙에 맞게 수정필요\n */\nexport const HEADER_KEYS = {\n /**\n * 액세스 토큰\n */\n AT: 'Authorization',\n\n /**\n * 디바이스유형(예: phone or tablet)\n */\n DEVICE_TYPE: 'X-Channel-DeviceType',\n\n /**\n * Lang Code\n */\n LANG: 'Accept-Language',\n\n /**\n * 디바이스 식별번호(웹: 브라우저 식별자)\n */\n DEVICE_ID: 'X-Channel-DeviceId',\n\n /**\n * 로그인 구분\n */\n LOGIN_TYPE: 'X-Channel-LoginType',\n\n /**\n * 스마트폰OS(웹:OS)\n */\n PLATFORM_NAME: 'X-Channel-PlatformName',\n\n /**\n * 스마트폰OS버전(웹:OS버전)\n */\n PLATFORM_VERSION: 'X-Channel-PlatformVersion',\n\n /**\n * 앱버전(웹:브라우저정보)\n */\n APP_VERSION: 'X-Channel-AppVersion',\n\n /**\n * 통신사\n */\n CARRIER_NAME: 'X-Channel-CarrierName',\n\n /**\n * 네트워크 접속 타입\n */\n NETWORK_TYPE: 'X-Channel-NetworkType',\n\n /**\n * 디바이스 모델\n */\n DEVICE_MODEL: 'X-Channel-DeviceModel',\n\n /**\n * 로그인 채널\n */\n LOGIN_CHANNEL: 'X-Channel-LoginChannel'\n};\n\n/**\n * 기존코드\n */\nconst HTTP_STATUS = {\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n INTERNAL_SERVER_ERROR: 500\n};\n\n/**\n * 기존코드\n */\nexport class ApiError<T = unknown> extends Error implements AxiosError<T> {\n config: InternalAxiosRequestConfig;\n code?: string;\n request?: any;\n response?: AxiosResponse<T>;\n isAxiosError: boolean;\n toJSON: () => any;\n cause?: Error;\n\n constructor(error: AxiosError<T>, message?: string) {\n super(message ?? error.message);\n\n const errorStatus = error.response?.status || 0;\n let name = 'apiError';\n\n switch (errorStatus) {\n case HTTP_STATUS.BAD_REQUEST: // 400\n name = 'apiBadRequestError';\n break;\n case HTTP_STATUS.UNAUTHORIZED: // 401\n name = 'apiUnauthorizedError';\n break;\n case HTTP_STATUS.FORBIDDEN: // 403\n name = 'apiForbiddenError';\n break;\n case HTTP_STATUS.NOT_FOUND: // 404\n name = 'apiNotFoundError';\n break;\n case HTTP_STATUS.INTERNAL_SERVER_ERROR: // 500\n name = 'apiInternalServerError';\n break;\n }\n\n this.name = name;\n this.stack = error.stack;\n\n this.config = error.config!;\n this.code = error.code;\n this.request = error.request;\n this.response = error.response;\n this.isAxiosError = error.isAxiosError;\n this.toJSON = error.toJSON;\n }\n}\n\n/**\n *\n * @param response\n * 기존코드\n */\nexport function logApiErrorToSentry(response: AxiosResponse) {\n const apiErrorInstance = new ApiError(\n response as unknown as AxiosError,\n `Request failed:: [${response.config.method?.toUpperCase()}] url: ${response.config.url} ${\n response.data?.errorCode && `| errorCode: ${response.data?.errorCode} | errorMsg: ${response.data?.errorMsg}`\n }`\n );\n\n /**\n * @todo 센트리 모듈 추가필요\n * 기존코드\n */\n // Sentry.setContext('API Response Detail', {\n // config: {\n // baseURL: response.config.baseURL,\n // data: response.config.data,\n // headers: response.config.headers,\n // method: response.config.method,\n // url: response.config.url\n // },\n // data: response.data\n // });\n\n /**\n * @todo base_path constants 추가 필요\n */\n // const apiServerName = BASE_PATH;\n\n /**\n * @todo 센트리모듈 추가필요\n * 기존코드\n */\n // Sentry.withScope((scope) => {\n // scope.setTags({\n // type: 'api',\n // channel: apiServerName === 'unknown' ? 'unknown' : apiServerName.serverName\n // });\n // scope.setFingerprint([\n // response.config.method!,\n // String(response.status),\n // response.config.url!,\n // response.data.errorCode ?? ''\n // ]);\n\n // Sentry.captureException(apiErrorInstance);\n // });\n}\n","import { CustomError } from '../custom-error';\nimport { ErrorHandler } from './error-handler';\nimport { logApiErrorToSentry } from '../helper';\nimport type { AxiosError } from 'axios';\n// import * as Sentry from '@hanwhalife/shared-libs/sentry';\n\nclass SsrErrorHandler extends ErrorHandler {\n constructor() {\n super();\n }\n\n setGlobalCheck(global: boolean) {\n this.globalCheck = !!global;\n }\n /**\n * throw된 serverError 설정값에 따른 에러 처리 추가영역\n * 별도의 처리가 없다면 작성할 필요없음.\n */\n errorHandler(e: CustomError) {\n if (e instanceof CustomError) {\n const { response, request, message } = e.error as AxiosError;\n if (response) {\n const { data, status, headers } = response;\n console.error('요청이 이루어졌으며 서버가 2xx의 범위를 벗어나는 상태 코드로 응답했습니다.');\n console.error('HTTP data, status, headers:::', data, status, headers);\n logApiErrorToSentry(response);\n } else if (request) {\n /**\n * 요청은 있고, 응답이 없는 경우\n */\n console.error('요청이 이루어졌으나 응답을 받지 못했습니다.');\n console.error(request);\n\n /**\n * @todo 센트리 모듈추가필요\n */\n // Sentry.captureException(request);\n } else {\n console.error('오류를 발생시킨 요청을 설정하는 중에 문제가 발생했습니다.');\n console.error('Error', message);\n /**\n * @todo 센트리 모듈추가필요\n */\n // Sentry.captureException(e.error);\n }\n\n /**\n * 에러코드에 맞는 분기처리\n */\n switch (e.returnCode) {\n case 401:\n // 로그인페이지로 이동시킨다.\n // redirect(`/login?${SsrHttpClient.query}`);\n case 403:\n // 잘못된접근 안내페이지로 이동시킨다.\n // redirect(`/forbidden?${SsrHttpClient.query}`);\n case 500:\n // 서버오류시..\n // redirect(`/500?${SsrHttpClient.query}`);\n default: //to-do unknown error\n }\n }\n }\n}\n\nexport const ssrErrorHandler = new SsrErrorHandler();\n","import axios, { AxiosRequestConfig, AxiosResponse, type AxiosInstance } from 'axios';\nimport type { customConfig } from './types';\nimport { AbstractHttpClient } from '../abstract-http-client';\n\nexport class HttpClientAxios<errorType extends Error> extends AbstractHttpClient<\n customConfig,\n AxiosInstance,\n errorType\n> {\n /**\n * API연동 실패시, 공통 에러 핸들러\n * extends된 런타임 동작환경에 맞는 SSR,CSR 방식으로 에러핸들링처리\n */\n protected errorHandler: null | ((e: errorType) => void);\n\n /**\n * AxiosRequestConfig 를 확장한 interface\n * axios create시 기본설정값 및 기타 필요한 정보들을 추가 가능\n */\n protected config: customConfig;\n\n /**\n * axios의 request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n protected headers!: Record<string, string>;\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n protected api: AxiosInstance;\n constructor(config: customConfig) {\n super();\n if (!this.headers) {\n this.headers = {};\n }\n\n this.config = config;\n this.errorHandler = null;\n\n /**\n * api수행객체 최초 생성,\n * 공통으로 적용할 설정값이 있는경우 셋팅\n * @todo baseURL process.env.BaseURL ?\n */\n this.api = axios.create({\n baseURL: '전체공통URL이 있으면 셋팅',\n withCredentials: true,\n ...config\n });\n\n /**\n * @todo 이 부분도 추후 api스펙에따라 부분 셋팅필요.\n * request 헤더,token처리 interceptor 등록\n */\n this.api.interceptors.request.use(async (config) => {\n /**\n * @todo\n * x-channel-[] 공통헤더 추가\n */\n // this.setHeader('x-channel-adfaf', '');\n // this.setHeader('x-channel-adfaf', '');\n // this.setHeader('x-channel-adfaf', '');\n\n /**\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n headerEntries.forEach(([key, value]) => {\n config.headers.set(key, value);\n });\n\n return config;\n });\n }\n\n async put<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>) {\n try {\n const res = await this.api.put<T, R, D>(url, data, config);\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>) {\n try {\n const res = await this.api.get<T, R, D>(url, config);\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>) {\n try {\n const res = await this.api.delete<T, R, D>(url, config);\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>) {\n try {\n const res = await this.api.post<T, R, D>(url, data, config);\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n setHeader(key: string, value: string) {\n this.headers[key] = value;\n }\n}\n","import type { AxiosError } from 'axios';\nimport type { customConfig } from './types';\nimport { HttpClientAxios } from './http-client-axios';\nimport { CustomError } from '../custom-error';\nimport { errorHandler } from './error-handler';\nimport { ssrErrorHandler } from './ssr-error-handler';\n\n/**\n * @todo 추후 env. baseUrl 또는 getBaseUrl() 등으로 치환\n */\nconst initConfig: customConfig = {\n baseURL: '',\n dialog: true\n};\n\nexport class SsrHttpClientAxios extends HttpClientAxios<CustomError> {\n public static query: string;\n constructor(config?: customConfig) {\n super({\n ...initConfig,\n ...config\n });\n this.errorHandler = ssrErrorHandler.errorHandler;\n this.api.interceptors.request.use((config) => {\n /**\n * AT토큰 주입 지점 필요시 사용\n * @NOTE\n * IS_APP - 웹뷰는 서버사이드렌더링 고려하지 않음. 토큰주입 생략\n * IS_PC - middleware.ts에서 쿠키에 저장된 토큰을 헤더에 자동주입\n */\n\n return config;\n });\n\n this.api.interceptors.response.use(\n (response) => {\n return response;\n },\n (error: AxiosError) => {\n throw ssrErrorHandler.do(error, this.config);\n }\n );\n }\n\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandler) {\n ssrErrorHandler.setLocalHandler(handler);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/http-client/custom-error.ts","../src/http-client/abstract-http-client.ts","../src/http-client/fetch/fetch-instance.ts","../src/http-client/fetch/http-client-fetch.ts","../src/http-client/fetch/ssr-error-handler-fetch.ts","../src/http-client/fetch/ssr-http-client-fetch.ts","../src/http-client/auth/auth-server.ts","../src/http-client/helper.ts","../src/http-client/axios/error-handler.ts","../src/http-client/axios/ssr-error-handler.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/axios/ssr-http-client-axios.ts"],"names":["config","axios","initConfig"],"mappings":";;;;;;;;;;;;;AAeO,IAAM,WAAA,GAAN,cAA0B,KAAM,CAAA;AAAA,EAUrC,WAAY,CAAA;AAAA,IACV,WAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACc,EAAA;AACd,IAAM,KAAA,EAAA;AApBR,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA;AAaE,IAAA,IAAA,CAAK,WAAc,GAAA,WAAA;AACnB,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAChB,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,WAAc,GAAA,WAAA;AAAA;AAEvB,CAAA;;;AC5CO,IAAe,qBAAf,MAAuE;AAW9E,CAAA;;;ACVO,IAAM,gBAAN,MAAoB;AAAA,EAUzB,YAAY,MAA2B,EAAA;AANvC;AAAA;AAAA;AAAA,IAAU,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACV,IAAA,aAAA,CAAA,IAAA,EAAU,cAAgE,EAAA;AAAA,MACxE,SAAS,EAAC;AAAA,MACV,UAAU;AAAC,KACb,CAAA;AAGE,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AAAA;AAChB,EAEA,MAAa,QAAkB,MAA8C,EAAA;AAI3E,IAAA,MAAM,WAAc,GAAA,MAAM,IAAK,CAAA,aAAA,CAAc,MAAM,CAAA;AACnD,IAAA,MAAM,EAAE,OAAA,EAAS,MAAQ,EAAA,YAAA,EAAc,MAAS,GAAA,WAAA;AAEhD,IAAA,MAAM,GAAM,GAAA,MAAA,CAAO,OAAU,GAAA,IAAA,CAAK,iBAAiB,WAAW,CAAA;AAC9D,IAAM,MAAA,YAAA,GAAe,IAAI,OAAA,CAAQ,OAAO,CAAA;AAKxC,IAAA,MAAM,OAAuB,GAAA;AAAA,MAC3B,MAAA;AAAA,MACA,IAAM,EAAA,aAAA;AAAA;AAAA,MACN,KAAO,EAAA,UAAA;AAAA;AAAA,MACP,WAAa,EAAA,aAAA;AAAA,MACb,cAAgB,EAAA,aAAA;AAAA,MAChB,GAAG,YAAA;AAAA,MACH,OAAS,EAAA;AAAA,KACX;AAKA,IAAA,IAAI,IAAM,EAAA;AAIR,MAAA,IACE,OAAO,IAAA,KAAS,QAChB,IAAA,IAAA,KAAS,IACT,IAAA,EAAE,IAAgB,YAAA,QAAA,CAAA,IAClB,EAAE,IAAA,YAAgB,IAClB,CAAA,IAAA,EAAE,gBAAgB,eAClB,CAAA,EAAA;AACA,QAAa,YAAA,CAAA,GAAA,CAAI,gBAAgB,kBAAkB,CAAA;AACnD,QAAQ,OAAA,CAAA,IAAA,GAAO,IAAK,CAAA,SAAA,CAAU,IAAI,CAAA;AAAA,OAC7B,MAAA;AAKL,QAAA,OAAA,CAAQ,IAAO,GAAA,IAAA;AAAA;AACjB;AAEF,IAAA,MAAM,MAAS,GAAA,IAAI,OAAkB,CAAA,CAAC,SAAS,MAAW,KAAA;AACxD,MAAA,KAAA,CAAM,GAAK,EAAA,OAAO,CACf,CAAA,IAAA,CAAK,OAAO,QAAa,KAAA;AACxB,QAAA,MAAM,cAA2C,GAAA;AAAA,UAC/C,QAAA;AAAA,UACA,MAAQ,EAAA,WAAA;AAAA,UACR,IAAA,EAAM,MAAM,QAAA,CAAS,IAAK;AAAA,SAC5B;AAEA,QAAO,OAAA,IAAA,CAAK,eAAe,cAAc,CAAA;AAAA,OAC1C,CAAA,CACA,IAAK,CAAA,CAAC,yBAAwD,KAAA;AAI7D,QAAA,OAAA,CAAQ,0BAA0B,IAAI,CAAA;AAAA,OACvC,CAAA,CACA,KAAM,CAAA,CAAC,CAAa,KAAA;AACnB,QAAA,IAAI,aAAa,KAAO,EAAA;AACtB,UAAA,MAAA;AAAA,YACE,IAAK,CAAA,mBAAA;AAAA,cACH,IAAI,WAAY,CAAA;AAAA,gBACd,WAAa,EAAA,EAAA;AAAA,gBACb,SAAW,EAAA,EAAA;AAAA,gBACX,UAAU,CAAE,CAAA,OAAA;AAAA,gBACZ,UAAY,EAAA,CAAA;AAAA,gBACZ,UAAY,EAAA,EAAA;AAAA,gBACZ,SAAW,EAAA,EAAA;AAAA,gBACX,KAAO,EAAA,CAAA;AAAA,gBACP,MAAQ,EAAA,WAAA;AAAA,gBACR,aAAa,WAAY,CAAA;AAAA,eAC1B;AAAA;AACH,WACF;AAAA;AACF,OACD,CAAA;AAAA,KACJ,CAAA;AAED,IAAO,OAAA,MAAA;AAAA;AACT,EAEQ,iBAAiB,MAA4B,EAAA;AACnD,IAAA,MAAM,EAAE,MAAA,EAAW,GAAA,MAAA,IAAU,EAAC;AAC9B,IAAM,MAAA,GAAA,GAAM,QAAQ,GAAO,IAAA,EAAA;AAE3B,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAO,OAAA,GAAA;AAAA;AAMT,IAAA,MAAM,kBAA0C,EAAC;AACjD,IAAA,KAAA,MAAW,CAAC,GAAK,EAAA,KAAK,KAAK,MAAO,CAAA,OAAA,CAAQ,MAAM,CAAG,EAAA;AACjD,MAAA,IAAI,OAAO,KAAA,KAAU,WAAe,IAAA,KAAA,KAAU,IAAM,EAAA;AAClD,QAAgB,eAAA,CAAA,GAAG,CAAI,GAAA,MAAA,CAAO,KAAK,CAAA;AAAA;AACrC;AAGF,IAAA,MAAM,WAAc,GAAA,IAAI,eAAgB,CAAA,eAAe,EAAE,QAAS,EAAA;AAClE,IAAA,MAAM,YAAY,GAAI,CAAA,OAAA,CAAQ,GAAG,CAAA,KAAM,KAAK,GAAM,GAAA,GAAA;AAElD,IAAA,OAAO,cAAc,CAAG,EAAA,GAAG,GAAG,SAAS,CAAA,EAAG,WAAW,CAAK,CAAA,GAAA,GAAA;AAAA;AAC5D,EAEA,MAAa,GAAoB,CAAA,GAAA,EAAa,MAA+C,EAAA;AAC3F,IAAA,MAAM,WAAiC,GAAA;AAAA,MACrC,GAAG,IAAK,CAAA,MAAA;AAAA,MACR,GAAG,MAAA;AAAA,MACH,GAAA;AAAA,MACA,MAAQ,EAAA;AAAA,KACV;AAEA,IAAO,OAAA,IAAA,CAAK,QAAkB,WAAW,CAAA;AAAA;AAC3C,EAEA,MAAa,IAAA,CAAqB,GAAa,EAAA,IAAA,EAAY,MAA+C,EAAA;AACxG,IAAA,MAAM,WAAiC,GAAA;AAAA,MACrC,GAAG,IAAK,CAAA,MAAA;AAAA,MACR,GAAG,MAAA;AAAA,MACH,GAAA;AAAA,MACA,MAAQ,EAAA,MAAA;AAAA,MACR,IAAM,EAAA;AAAA,KACR;AAEA,IAAO,OAAA,IAAA,CAAK,QAAkB,WAAW,CAAA;AAAA;AAC3C,EAEA,MAAa,GAAA,CAAoB,GAAa,EAAA,IAAA,EAAY,MAA+C,EAAA;AACvG,IAAA,MAAM,WAAiC,GAAA;AAAA,MACrC,GAAG,IAAK,CAAA,MAAA;AAAA,MACR,GAAG,MAAA;AAAA,MACH,GAAA;AAAA,MACA,MAAQ,EAAA,KAAA;AAAA,MACR,IAAM,EAAA;AAAA,KACR;AAEA,IAAO,OAAA,IAAA,CAAK,QAAkB,WAAW,CAAA;AAAA;AAC3C,EAEA,MAAa,MAAA,CAAuB,GAAa,EAAA,IAAA,EAAY,MAA+C,EAAA;AAC1G,IAAA,MAAM,WAAiC,GAAA;AAAA,MACrC,GAAG,IAAK,CAAA,MAAA;AAAA,MACR,GAAG,MAAA;AAAA,MACH,GAAA;AAAA,MACA,MAAQ,EAAA,QAAA;AAAA,MACR,IAAM,EAAA;AAAA,KACR;AAEA,IAAO,OAAA,IAAA,CAAK,QAAkB,WAAW,CAAA;AAAA;AAC3C,EAEO,qBAAsB,CAAA,WAAA,EAA2C,UAAuB,GAAA,CAAC,MAAM,CAAG,EAAA;AACvG,IAAK,IAAA,CAAA,YAAA,CAAa,QAAQ,IAAK,CAAA;AAAA,MAC7B,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AACH,EAEO,sBAAuB,CAAA,WAAA,EAAwC,UAAuB,GAAA,CAAC,MAAM,CAAG,EAAA;AACrG,IAAK,IAAA,CAAA,YAAA,CAAa,SAAS,IAAK,CAAA;AAAA,MAC9B,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AACH,EAEA,MAAc,SAAS,GAAyB,EAAA;AAC9C,IAAI,IAAA,OAAO,GAAI,CAAA,IAAA,KAAS,UAAY,EAAA;AAClC,MAAA,OAAO,MAAM,GAAA;AAAA,KACR,MAAA;AACL,MAAO,OAAA,GAAA;AAAA;AACT;AACF,EAEA,MAAa,cAAc,MAAuD,EAAA;AAChF,IAAA,IAAI,OAAU,GAAA,MAAA;AAEd,IAAW,KAAA,MAAA,WAAA,IAAe,IAAK,CAAA,YAAA,CAAa,OAAS,EAAA;AACnD,MAAM,MAAA,EAAE,WAAa,EAAA,UAAA,EAAe,GAAA,WAAA;AACpC,MAAI,IAAA;AACF,QAAU,OAAA,GAAA;AAAA,UACR,GAAG,IAAK,CAAA,MAAA;AAAA,UACR,GAAG,OAAA;AAAA,UACH,GAAI,MAAM,IAAA,CAAK,QAAS,CAAA,WAAA,CAAY,OAAO,CAAC;AAAA,SAC9C;AAAA,eACO,CAAG,EAAA;AACV,QAAA,IAAI,aAAa,KAAO,EAAA;AACtB,UAAM,MAAA,UAAA;AAAA,YACJ,IAAI,WAAY,CAAA;AAAA,cACd,WAAa,EAAA,EAAA;AAAA,cACb,SAAW,EAAA,EAAA;AAAA,cACX,UAAU,CAAE,CAAA,OAAA;AAAA,cACZ,UAAY,EAAA,CAAA;AAAA,cACZ,UAAY,EAAA,EAAA;AAAA,cACZ,SAAW,EAAA,EAAA;AAAA,cACX,KAAO,EAAA,CAAA;AAAA,cACP,MAAQ,EAAA,OAAA;AAAA,cACR,aAAa,OAAQ,CAAA;AAAA,aACtB;AAAA,WACH;AAAA;AACF;AAEF;AAGF,IAAO,OAAA,OAAA;AAAA;AACT,EACA,MAAa,eAAe,cAAyD,EAAA;AACnF,IAAA,IAAI,eAAkB,GAAA,cAAA;AAEtB,IAAW,KAAA,MAAA,WAAA,IAAe,IAAK,CAAA,YAAA,CAAa,QAAU,EAAA;AACpD,MAAM,MAAA,EAAE,aAAgB,GAAA,WAAA;AACxB,MAAkB,eAAA,GAAA;AAAA,QAChB,GAAG,eAAA;AAAA,QACH,GAAI,MAAM,IAAA,CAAK,QAAS,CAAA,WAAA,CAAY,eAAe,CAAC;AAAA,OACtD;AAAA;AAGF,IAAO,OAAA,eAAA;AAAA;AACT,EACA,MAAa,oBAAoB,CAAgB,EAAA;AAC/C,IAAW,KAAA,MAAA,WAAA,IAAe,IAAK,CAAA,YAAA,CAAa,QAAU,EAAA;AACpD,MAAM,MAAA,EAAE,YAAe,GAAA,WAAA;AACvB,MAAA,MAAM,WAAW,CAAC,CAAA;AAAA;AACpB;AAEJ,CAAA;;;ACrPA,IAAM,aAAmC,GAAA;AAAA,EACvC,MAAQ,EAAA;AACV,CAAA;AACO,IAAM,eAAA,GAAN,cAA8B,kBAAkE,CAAA;AAAA,EAmBrG,YAAY,MAA4B,EAAA;AACtC,IAAM,KAAA,EAAA;AAnBR,IAAU,aAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAKV;AAAA;AAAA;AAAA,IAAU,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AAKV;AAAA;AAAA;AAAA,IAAU,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAMV;AAAA;AAAA;AAAA;AAAA,IAAO,aAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AAIL,IAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,MAAA,IAAA,CAAK,UAAU,EAAC;AAAA;AAElB,IAAA,IAAA,CAAK,SAAS,MAAU,IAAA,aAAA;AACxB,IAAA,IAAA,CAAK,YAAe,GAAA,IAAA;AAEpB,IAAA,IAAA,CAAK,GAAM,GAAA,IAAI,aAAc,CAAA,IAAA,CAAK,MAAM,CAAA;AAKxC,IAAK,IAAA,CAAA,GAAA,CAAI,qBAAsB,CAAA,CAACA,OAA8B,KAAA;AAI5D,MAAA,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,IAAA,CAAK,OAAO,CAAA;AACjD,MAAM,MAAA,OAAA,GAAU,IAAI,OAAQ,EAAA;AAC5B,MAAA,aAAA,CAAc,OAAQ,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAM,KAAA;AACtC,QAAQ,OAAA,CAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,OACvB,CAAA;AACD,MAAAA,QAAO,OAAU,GAAA,OAAA;AAEjB,MAAOA,OAAAA,OAAAA;AAAA,KACR,CAAA;AAED,IAAK,IAAA,CAAA,GAAA,CAAI,sBAAuB,CAAA,CAAC,GAAQ,KAAA;AACvC,MAAO,OAAA,GAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEA,MAAM,GAAA,CAAoB,GAAa,EAAA,IAAA,EAAY,MAA4B,EAAA;AAC7E,IAAI,IAAA;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,IAAI,GAAc,CAAA,GAAA,EAAK,MAAM,MAAM,CAAA;AAE1D,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,MAAM,IAAK,CAAA,YAAA,IAAgB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChD;AACF,EAEA,MAAM,GAAoB,CAAA,GAAA,EAAa,MAA4B,EAAA;AACjE,IAAI,IAAA;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,GAAI,CAAA,GAAA,CAAc,KAAK,MAAM,CAAA;AAEpD,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,MAAM,IAAK,CAAA,YAAA,IAAgB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChD;AACF,EAEA,MAAM,MAAuB,CAAA,GAAA,EAAa,MAA4B,EAAA;AACpE,IAAI,IAAA;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,GAAI,CAAA,MAAA,CAAiB,KAAK,MAAM,CAAA;AAEvD,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,MAAM,IAAK,CAAA,YAAA,IAAgB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChD;AACF,EAEA,MAAM,IAAA,CAAqB,GAAa,EAAA,IAAA,EAAY,MAA4B,EAAA;AAC9E,IAAI,IAAA;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,IAAI,IAAe,CAAA,GAAA,EAAK,MAAM,MAAM,CAAA;AAE3D,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,MAAM,IAAK,CAAA,YAAA,IAAgB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChD;AACF,EAEA,SAAA,CAAU,KAAa,KAAe,EAAA;AACpC,IAAK,IAAA,CAAA,OAAA,CAAQ,GAAG,CAAI,GAAA,KAAA;AAAA;AAExB,CAAA;;;ACjGA,IAAM,uBAAN,MAA2B;AAAA,EAGzB,WAAc,GAAA;AAFd,IAAQ,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACR,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA;AAEE,IAAA,IAAA,CAAK,WAAc,GAAA,KAAA;AAAA;AACrB,EAEA,eAAe,MAAiB,EAAA;AAC9B,IAAK,IAAA,CAAA,WAAA,GAAc,CAAC,CAAC,MAAA;AAAA;AACvB;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,CAAY,OAAoB,MAA2B,EAAA;AACjE,IAAA,MAAM,EAAE,UAAA,EAAY,WAAa,EAAA,UAAA,EAAe,GAAA,KAAA;AAIhD,IAAA,IAAI,UAAY,EAAA;AAId,MAAA,IAAI,CAAC,CAAC,UAAA,IAAc,UAAc,IAAA,GAAA,IAAO,aAAa,GAAK,EAAA;AAKzD,QAAA,IAAI,eAAe,GAAK,EAAA;AACtB,UAAA,KAAA,CAAM,QAAW,GAAA,2BAAA;AAEjB,UAAO,OAAA,KAAA;AAAA;AAMT,QAAA,IAAI,eAAe,GAAK,EAAA;AACtB,UAAA,KAAA,CAAM,QAAW,GAAA,sDAAA;AAEjB,UAAO,OAAA,KAAA;AAAA;AACT;AAMF,MAAA,IAAI,CAAC,CAAC,UAAA,IAAc,UAAc,IAAA,GAAA,IAAO,aAAa,GAAK,EAAA;AACzD,QAAM,KAAA,CAAA,QAAA,GAAW,2CAAa,UAAU,CAAA,CAAA;AAExC,QAAO,OAAA,KAAA;AAAA;AAIT,MAAM,KAAA,CAAA,QAAA,GAAW,yDAAiB,UAAU,CAAA,CAAA;AAE5C,MAAO,OAAA,KAAA;AAAA,eACE,WAAa,EAAA;AAItB,MAAA,KAAA,CAAM,QAAW,GAAA,0HAAA;AAEjB,MAAO,OAAA,KAAA;AAAA;AACT;AACF,EACA,gBAAgB,IAAgC,EAAA;AAC9C,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA;AAAA;AACpB,EACA,EAAA,CAAG,OAAoB,MAAiC,EAAA;AACtD,IAAM,MAAA,YAAA,GAAe,IAAI,WAAY,CAAA;AAAA,MACnC,WAAa,EAAA,EAAA;AAAA,MACb,SAAW,EAAA,EAAA;AAAA,MACX,QAAU,EAAA,eAAA;AAAA,MACV,WAAa,EAAA,EAAA;AAAA,MACb,UAAY,EAAA,EAAA;AAAA,MACZ,UAAY,EAAA,CAAA;AAAA,MACZ,SAAW,EAAA,EAAA;AAAA,MACX,KAAA;AAAA,MACA;AAAA,KACD,CAAA;AAKD,IAAA,MAAM,SAAS,IAAK,CAAA,UAAA,IAAc,IAAK,CAAA,UAAA,CAAW,OAAO,MAAM,CAAA;AAK/D,IAAA,IAAI,KAAK,WAAa,EAAA;AACpB,MAAA,MAAM,MAAU,IAAA,IAAA,CAAK,WAAY,CAAA,KAAA,EAAO,MAAM,CAAK,IAAA,YAAA;AAAA;AAMrD,IAAM,MAAA,YAAA;AAAA;AACR;AAAA;AAAA;AAAA,EAKA,aAAa,CAAgB,EAAA;AAC3B,IAAA,IAAI,aAAa,WAAa,EAAA;AAC5B,MAAA,MAAM,EAAE,UAAA,EAAY,WAAa,EAAA,OAAA,EAAS,YAAe,GAAA,CAAA;AACzD,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,OAAA,CAAQ,MAAM,wMAA6C,CAAA;AAC3D,QAAQ,OAAA,CAAA,KAAA,CAAM,+BAAiC,EAAA,UAAA,EAAY,UAAU,CAAA;AAAA,iBAE5D,WAAa,EAAA;AAItB,QAAA,OAAA,CAAQ,MAAM,yHAA0B,CAAA;AACxC,QAAA,OAAA,CAAQ,MAAM,WAAW,CAAA;AAAA,OAMpB,MAAA;AACL,QAAA,OAAA,CAAQ,MAAM,+JAAkC,CAAA;AAChD,QAAQ,OAAA,CAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AAAA;AAUhC,MAAA,QAAQ,EAAE,UAAY;AAAA,QAUpB;AACF;AACF;AAEJ,CAAA;AAEa,IAAA,oBAAA,GAAuB,IAAI,oBAAqB;;;AChJ7D,IAAM,UAAgC,GAAA;AAAA,EACpC,OAAS,EAAA;AACX,CAAA;AAEa,IAAA,kBAAA,GAAN,cAAiC,eAAgB,CAAA;AAAA,EAEtD,YAAY,MAA4B,EAAA;AACtC,IAAM,KAAA,CAAA;AAAA,MACJ,GAAG,UAAA;AAAA,MACH,GAAG;AAAA,KACJ,CAAA;AAUD,IAAA,IAAA,CAAK,eAAe,oBAAqB,CAAA,YAAA;AACzC,IAAA,IAAA,CAAK,GAAI,CAAA,qBAAA;AAAA,MACP,CAACA,OAAW,KAAA;AAQV,QAAOA,OAAAA,OAAAA;AAAA,OACT;AAAA,MACA,CAAC,CAAM,KAAA;AACL,QAAA,IAAI,aAAa,WAAa,EAAA;AAC5B,UAAA,IAAI,CAAG,EAAA;AACL,YAAA,MAAM,oBAAqB,CAAA,EAAA,CAAG,CAAG,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAC9C;AACF;AACF,KACF;AAEA,IAAA,IAAA,CAAK,GAAI,CAAA,sBAAA;AAAA,MACP,CAAC,GAAQ,KAAA;AACP,QAAO,OAAA,GAAA;AAAA,OACT;AAAA,MACA,CAAC,CAAM,KAAA;AACL,QAAA,IAAI,aAAa,WAAa,EAAA;AAC5B,UAAA,IAAI,CAAG,EAAA;AACL,YAAA,MAAM,oBAAqB,CAAA,EAAA,CAAG,CAAG,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAC9C;AACF;AACF,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqB,OAAmC,EAAA;AACtD,IAAA,oBAAA,CAAqB,gBAAgB,OAAO,CAAA;AAAA;AAEhD;AAzDE,aAAA,CADW,kBACG,EAAA,OAAA,CAAA;;;ACdT,IAAM,aAAN,MAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtB,MAAM,SAAmB,EAAA;AACvB,IAAO,OAAA,wBAAA,CAAyB,KAAK,SAAS,CAAA;AAAA;AAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAgC,GAAA;AAIpC,IAAM,MAAA,aAAA,GAAgB,IAAI,kBAAmB,CAAA;AAAA,MAC3C,OAAS,EAAA;AAAA,KACV,CAAA;AACD,IAAA,MAAM,GAAM,GAAA,MAAM,aAAc,CAAA,GAAA,CAAI,4BAA4B,CAAA;AAEhE,IAAA,OAAO,KAAK,IAAK,CAAA,WAAA;AAAA;AAErB;;;AC6CA,IAAM,WAAc,GAAA;AAAA,EAClB,WAAa,EAAA,GAAA;AAAA,EACb,YAAc,EAAA,GAAA;AAAA,EACd,SAAW,EAAA,GAAA;AAAA,EACX,SAAW,EAAA,GAAA;AAAA,EACX,qBAAuB,EAAA;AACzB,CAAA;AAKO,IAAM,QAAA,GAAN,cAAoC,KAA+B,CAAA;AAAA,EASxE,WAAA,CAAY,OAAsB,OAAkB,EAAA;AAClD,IAAM,KAAA,CAAA,OAAA,IAAW,MAAM,OAAO,CAAA;AAThC,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAKE,IAAM,MAAA,WAAA,GAAc,KAAM,CAAA,QAAA,EAAU,MAAU,IAAA,CAAA;AAC9C,IAAA,IAAI,IAAO,GAAA,UAAA;AAEX,IAAA,QAAQ,WAAa;AAAA,MACnB,KAAK,WAAY,CAAA,WAAA;AACf,QAAO,IAAA,GAAA,oBAAA;AACP,QAAA;AAAA,MACF,KAAK,WAAY,CAAA,YAAA;AACf,QAAO,IAAA,GAAA,sBAAA;AACP,QAAA;AAAA,MACF,KAAK,WAAY,CAAA,SAAA;AACf,QAAO,IAAA,GAAA,mBAAA;AACP,QAAA;AAAA,MACF,KAAK,WAAY,CAAA,SAAA;AACf,QAAO,IAAA,GAAA,kBAAA;AACP,QAAA;AAAA,MACF,KAAK,WAAY,CAAA,qBAAA;AACf,QAAO,IAAA,GAAA,wBAAA;AACP,QAAA;AAAA;AAGJ,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA;AACZ,IAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,KAAA;AAEnB,IAAA,IAAA,CAAK,SAAS,KAAM,CAAA,MAAA;AACpB,IAAA,IAAA,CAAK,OAAO,KAAM,CAAA,IAAA;AAClB,IAAA,IAAA,CAAK,UAAU,KAAM,CAAA,OAAA;AACrB,IAAA,IAAA,CAAK,WAAW,KAAM,CAAA,QAAA;AACtB,IAAA,IAAA,CAAK,eAAe,KAAM,CAAA,YAAA;AAC1B,IAAA,IAAA,CAAK,SAAS,KAAM,CAAA,MAAA;AAAA;AAExB,CAAA;AAOO,SAAS,oBAAoB,QAAyB,EAAA;AAC3D,EAAyB,IAAI,QAAA;AAAA,IAC3B,QAAA;AAAA,IACA,CAAA,kBAAA,EAAqB,SAAS,MAAO,CAAA,MAAA,EAAQ,aAAa,CAAA,OAAA,EAAU,QAAS,CAAA,MAAA,CAAO,GAAG,CAAA,CAAA,EACrF,SAAS,IAAM,EAAA,SAAA,IAAa,gBAAgB,QAAS,CAAA,IAAA,EAAM,SAAS,CAAgB,aAAA,EAAA,QAAA,CAAS,IAAM,EAAA,QAAQ,CAC7G,CAAA,CAAA;AAAA;AAyCJ;;;AC9KO,IAAe,eAAf,MAA4B;AAAA,EAMjC,WAAc,GAAA;AALd,IAAU,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAGV;AAAA,IAAU,aAAA,CAAA,IAAA,EAAA,aAAA,CAAA;AAMR,IAAA,IAAA,CAAK,WAAc,GAAA,IAAA;AAAA;AACrB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,WAAA,CAAY,OAAmB,MAAsB,EAAA;AAC3D,IAAA,MAAM,EAAE,QAAA,EAAU,OAAS,EAAA,IAAA,EAAS,GAAA,KAAA;AAKpC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,MAAM,EAAE,IAAA,EAAM,MAAQ,EAAA,UAAA,EAAe,GAAA,QAAA;AAErC,MAAM,MAAA,GAAA,GAAM,IAAI,WAAY,CAAA;AAAA,QAC1B,WAAa,EAAA,EAAA;AAAA,QACb,WAAW,IAAQ,IAAA,EAAA;AAAA,QACnB,QAAU,EAAA,EAAA;AAAA,QACV,aAAa,MAAO,CAAA,IAAA;AAAA,QACpB,UAAY,EAAA,IAAA;AAAA,QACZ,UAAY,EAAA,MAAA;AAAA,QACZ,SAAW,EAAA,UAAA;AAAA,QACX,KAAA;AAAA,QACA;AAAA,OACD,CAAA;AAKD,MAAI,IAAA,MAAA,IAAU,GAAO,IAAA,MAAA,GAAS,GAAK,EAAA;AAIjC,QAAA,IAAI,WAAW,GAAK,EAAA;AAClB,UAAA,GAAA,CAAI,QAAW,GAAA,2BAAA;AAMf,UAAO,OAAA,GAAA;AAAA;AAMT,QAAA,IAAI,WAAW,GAAK,EAAA;AAClB,UAAA,GAAA,CAAI,QAAW,GAAA,sDAAA;AAEf,UAAO,OAAA,GAAA;AAAA;AACT;AAMF,MAAI,IAAA,MAAA,IAAU,GAAO,IAAA,MAAA,GAAS,GAAK,EAAA;AACjC,QAAI,GAAA,CAAA,QAAA,GAAW,2CAAa,MAAM,CAAA,CAAA;AAElC,QAAO,OAAA,GAAA;AAAA;AAIT,MAAI,GAAA,CAAA,QAAA,GAAW,yDAAiB,MAAM,CAAA,CAAA;AAEtC,MAAO,OAAA,GAAA;AAAA,eACE,OAAS,EAAA;AAIlB,MAAA,OAAO,IAAI,WAAY,CAAA;AAAA,QACrB,WAAa,EAAA,EAAA;AAAA,QACb,WAAW,IAAQ,IAAA,EAAA;AAAA,QACnB,QAAU,EAAA,0HAAA;AAAA,QACV,aAAa,MAAO,CAAA,IAAA;AAAA,QACpB,UAAY,EAAA,EAAA;AAAA,QACZ,UAAY,EAAA,CAAA;AAAA,QACZ,SAAW,EAAA,EAAA;AAAA,QACX,KAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA;AACH;AACF,EACO,gBAAgB,IAAoB,EAAA;AACzC,IAAA,IAAA,CAAK,UAAa,GAAA,IAAA;AAAA;AACpB,EAEO,EAAA,CAAG,OAAmB,MAAsB,EAAA;AACjD,IAAM,MAAA,EAAC,QAAU,GAAA,MAAA;AAEjB,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA;AAAA;AAMF,IAAA,MAAM,MAAM,IAAK,CAAA,UAAA,IAAc,IAAK,CAAA,UAAA,CAAW,OAAO,MAAM,CAAA;AAK5D,IAAA,IAAI,KAAK,WAAa,EAAA;AACpB,MAAA,OAAO,GAAO,IAAA,IAAA,CAAK,WAAY,CAAA,KAAA,EAAO,MAAM,CAAA;AAAA;AAM9C,IAAO,OAAA,GAAA;AAAA;AAQX,CAAA;;;ACjIA,IAAM,eAAA,GAAN,cAA8B,YAAa,CAAA;AAAA,EACzC,WAAc,GAAA;AACZ,IAAM,KAAA,EAAA;AAAA;AACR,EAEA,eAAe,MAAiB,EAAA;AAC9B,IAAK,IAAA,CAAA,WAAA,GAAc,CAAC,CAAC,MAAA;AAAA;AACvB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,CAAgB,EAAA;AAC3B,IAAA,IAAI,aAAa,WAAa,EAAA;AAC5B,MAAA,MAAM,EAAE,QAAA,EAAU,OAAS,EAAA,OAAA,KAAY,CAAE,CAAA,KAAA;AACzC,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,MAAM,EAAE,IAAA,EAAM,MAAQ,EAAA,OAAA,EAAY,GAAA,QAAA;AAClC,QAAA,OAAA,CAAQ,MAAM,wMAA6C,CAAA;AAC3D,QAAA,OAAA,CAAQ,KAAM,CAAA,+BAAA,EAAiC,IAAM,EAAA,MAAA,EAAQ,OAAO,CAAA;AACpE,QAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA,iBACnB,OAAS,EAAA;AAIlB,QAAA,OAAA,CAAQ,MAAM,yHAA0B,CAAA;AACxC,QAAA,OAAA,CAAQ,MAAM,OAAO,CAAA;AAAA,OAMhB,MAAA;AACL,QAAA,OAAA,CAAQ,MAAM,+JAAkC,CAAA;AAChD,QAAQ,OAAA,CAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AAAA;AAUhC,MAAA,QAAQ,EAAE,UAAY;AAAA,QAUpB;AACF;AACF;AAEJ,CAAA;AAEa,IAAA,eAAA,GAAkB,IAAI,eAAgB;AC7D5C,IAAM,eAAA,GAAN,cAAuD,kBAI5D,CAAA;AAAA,EAuBA,YAAY,MAAsB,EAAA;AAChC,IAAM,KAAA,EAAA;AAnBR;AAAA;AAAA;AAAA;AAAA,IAAU,aAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AAMV;AAAA;AAAA;AAAA;AAAA,IAAU,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AAKV;AAAA;AAAA;AAAA,IAAU,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AAMV;AAAA;AAAA;AAAA;AAAA,IAAU,aAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AAGR,IAAI,IAAA,CAAC,KAAK,OAAS,EAAA;AACjB,MAAA,IAAA,CAAK,UAAU,EAAC;AAAA;AAGlB,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,YAAe,GAAA,IAAA;AAOpB,IAAK,IAAA,CAAA,GAAA,GAAMC,uBAAM,MAAO,CAAA;AAAA,MACtB,OAAS,EAAA,mEAAA;AAAA,MACT,eAAiB,EAAA,IAAA;AAAA,MACjB,GAAG;AAAA,KACJ,CAAA;AAMD,IAAA,IAAA,CAAK,GAAI,CAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,CAAI,OAAOD,OAAW,KAAA;AAYlD,MAAA,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,IAAA,CAAK,OAAO,CAAA;AACjD,MAAA,aAAA,CAAc,OAAQ,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAM,KAAA;AACtC,QAAAA,OAAO,CAAA,OAAA,CAAQ,GAAI,CAAA,GAAA,EAAK,KAAK,CAAA;AAAA,OAC9B,CAAA;AAED,MAAOA,OAAAA,OAAAA;AAAA,KACR,CAAA;AAAA;AACH,EAEA,MAAM,GAAA,CAA4C,GAAa,EAAA,IAAA,EAAU,MAAgC,EAAA;AACvG,IAAI,IAAA;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,IAAI,GAAa,CAAA,GAAA,EAAK,MAAM,MAAM,CAAA;AAEzD,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,MAAM,IAAK,CAAA,YAAA,IAAgB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChD;AACF,EAEA,MAAM,GAA4C,CAAA,GAAA,EAAa,MAAgC,EAAA;AAC7F,IAAI,IAAA;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,GAAI,CAAA,GAAA,CAAa,KAAK,MAAM,CAAA;AAEnD,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,MAAM,IAAK,CAAA,YAAA,IAAgB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChD;AACF,EAEA,MAAM,MAA+C,CAAA,GAAA,EAAa,MAAgC,EAAA;AAChG,IAAI,IAAA;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,GAAI,CAAA,MAAA,CAAgB,KAAK,MAAM,CAAA;AAEtD,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,MAAM,IAAK,CAAA,YAAA,IAAgB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChD;AACF,EAEA,MAAM,IAAA,CAA6C,GAAa,EAAA,IAAA,EAAU,MAAgC,EAAA;AACxG,IAAI,IAAA;AACF,MAAA,MAAM,MAAM,MAAM,IAAA,CAAK,IAAI,IAAc,CAAA,GAAA,EAAK,MAAM,MAAM,CAAA;AAE1D,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,MAAM,IAAK,CAAA,YAAA,IAAgB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA;AAChD;AACF,EAEA,SAAA,CAAU,KAAa,KAAe,EAAA;AACpC,IAAK,IAAA,CAAA,OAAA,CAAQ,GAAG,CAAI,GAAA,KAAA;AAAA;AAExB,CAAA;;;AC7GA,IAAME,WAA2B,GAAA;AAAA,EAC/B,OAAS,EAAA,EAAA;AAAA,EACT,MAAQ,EAAA;AACV,CAAA;AAEa,IAAA,kBAAA,GAAN,cAAiC,eAA6B,CAAA;AAAA,EAEnE,YAAY,MAAuB,EAAA;AACjC,IAAM,KAAA,CAAA;AAAA,MACJ,GAAGA,WAAAA;AAAA,MACH,GAAG;AAAA,KACJ,CAAA;AACD,IAAA,IAAA,CAAK,eAAe,eAAgB,CAAA,YAAA;AACpC,IAAA,IAAA,CAAK,GAAI,CAAA,YAAA,CAAa,OAAQ,CAAA,GAAA,CAAI,CAACF,OAAW,KAAA;AAQ5C,MAAOA,OAAAA,OAAAA;AAAA,KACR,CAAA;AAED,IAAK,IAAA,CAAA,GAAA,CAAI,aAAa,QAAS,CAAA,GAAA;AAAA,MAC7B,CAAC,QAAa,KAAA;AACZ,QAAO,OAAA,QAAA;AAAA,OACT;AAAA,MACA,CAAC,KAAsB,KAAA;AACrB,QAAA,MAAM,eAAgB,CAAA,EAAA,CAAG,KAAO,EAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAC7C,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqB,OAAuB,EAAA;AAC1C,IAAA,eAAA,CAAgB,gBAAgB,OAAO,CAAA;AAAA;AAE3C;AAnCE,aAAA,CADW,kBACG,EAAA,OAAA,CAAA","file":"server.cjs","sourcesContent":["/**\n * 디버깅시 필요한 정보들을 에러객체에 저장\n * @todo sentry로 전달할 에러내용들\n */\nexport interface errorParams {\n elapsedTime: string;\n errorCode: string;\n errorMsg: string;\n returnCode: number;\n returnData: unknown;\n returnMsg: string;\n error: unknown;\n config: unknown;\n requestData: unknown;\n}\nexport class CustomError extends Error {\n elapsedTime: string;\n errorCode: string;\n errorMsg: string;\n returnCode: number;\n returnData: unknown;\n returnMsg: string;\n error: unknown;\n config: unknown;\n requestData: unknown;\n constructor({\n elapsedTime,\n errorCode,\n errorMsg,\n returnCode,\n returnData,\n returnMsg,\n error,\n config,\n requestData\n }: errorParams) {\n super();\n this.elapsedTime = elapsedTime;\n this.errorCode = errorCode;\n this.errorMsg = errorMsg;\n this.returnCode = returnCode;\n this.returnData = returnData;\n this.returnMsg = returnMsg;\n this.error = error;\n this.config = config;\n this.requestData = requestData;\n }\n}\n","/**\n * HttpClientFetch, HttpClientAxios 에서 공통\n */\nexport abstract class AbstractHttpClient<configType, InstanceType, errorType> {\n protected abstract config: configType;\n protected abstract headers: Record<string, string>;\n protected abstract api: InstanceType;\n protected abstract errorHandler: null | ((e: errorType) => void);\n\n abstract put<dataType>(url: string, data?: any, config?: configType): Promise<dataType | undefined>;\n abstract get<dataType>(url: string, config?: configType): Promise<dataType | undefined>;\n abstract post<dataType>(url: string, data?: any, config?: configType): Promise<dataType | undefined>;\n abstract delete<dataType>(url: string, config?: configType): Promise<dataType | undefined>;\n abstract setHeader(key: string, value: string): void;\n}\n","import { CustomError } from '../custom-error';\n\nimport { customConfigFetch, customResponse, fulfilled, interceptors, rejected } from './types';\n\nexport class FetchInstance {\n /**\n * fetch 인스턴스 생성시 기본설정값 및 기타 필요한 정보들을 추가 가능\n */\n protected config: customConfigFetch;\n protected interceptors: interceptors<customConfigFetch, customResponse> = {\n request: [],\n response: []\n };\n\n constructor(config: customConfigFetch) {\n this.config = config;\n }\n\n public async doFetch<dataType>(config: customConfigFetch): Promise<dataType> {\n /**\n * 인터셉터 처리된 최종 요청값\n */\n const finalConfig = await this.handleRequest(config);\n const { headers, method, fetchOptions, body } = finalConfig;\n\n const url = config.baseURL + this.getUrlWithParams(finalConfig);\n const finalHeaders = new Headers(headers);\n\n /**\n * fetch options 기본값 설정\n */\n const options: RequestInit = {\n method,\n mode: 'same-origin', //동일사이트만 허용\n cache: 'no-store', //민감정보를 다룰경우: 캐시에 데이터저장없이, 항상 최신 데이터유지\n credentials: 'same-origin',\n referrerPolicy: 'same-origin',\n ...fetchOptions,\n headers: finalHeaders\n };\n\n /**\n * body 데이터타입에 따라 Content-Type 셋팅\n */\n if (body) {\n /**\n * 폼데이터, 파일업로드, urlSearchParam 타입이 아닌 경우 application/json으로 설정\n */\n if (\n typeof body === 'object' &&\n body !== null &&\n !(body instanceof FormData) &&\n !(body instanceof Blob) &&\n !(body instanceof URLSearchParams)\n ) {\n finalHeaders.set('Content-Type', 'application/json');\n options.body = JSON.stringify(body);\n } else {\n /**\n * application/json 외의 경우(FormData, Blob, string 등), body 데이터 타입에 따라\n * Content-Type이 자동으로 추론되도록 body를 그대로 할당합니다.\n */\n options.body = body;\n }\n }\n const result = new Promise<dataType>((resolve, reject) => {\n fetch(url, options)\n .then(async (response) => {\n const customResponse: customResponse<dataType> = {\n response,\n config: finalConfig,\n data: await response.json()\n };\n\n return this.handleResponse(customResponse);\n })\n .then((interceptedCustomResponse: customResponse<dataType>) => {\n /**\n * 인터셉터 처리된 최종 응답\n */\n resolve(interceptedCustomResponse.data);\n })\n .catch((e: Error) => {\n if (e instanceof Error) {\n reject(\n this.handleResponseError(\n new CustomError({\n elapsedTime: '',\n errorCode: '',\n errorMsg: e.message,\n returnCode: 0,\n returnData: '',\n returnMsg: '',\n error: e,\n config: finalConfig,\n requestData: finalConfig.body\n })\n )\n );\n }\n });\n });\n\n return result;\n }\n\n private getUrlWithParams(config?: customConfigFetch) {\n const { params } = config || {};\n const url = config?.url || '';\n\n if (!params) {\n return url;\n }\n\n /**\n * undefined 또는 null 값을 제거한 새 객체 생성\n */\n const sanitizedParams: Record<string, string> = {};\n for (const [key, value] of Object.entries(params)) {\n if (typeof value !== 'undefined' && value !== null) {\n sanitizedParams[key] = String(value);\n }\n }\n\n const queryString = new URLSearchParams(sanitizedParams).toString();\n const delimiter = url.indexOf('?') === -1 ? '?' : '&';\n\n return queryString ? `${url}${delimiter}${queryString}` : url;\n }\n\n public async get<dataType = any>(url: string, config?: customConfigFetch): Promise<dataType> {\n const finalConfig: customConfigFetch = {\n ...this.config,\n ...config,\n url,\n method: 'GET'\n };\n\n return this.doFetch<dataType>(finalConfig);\n }\n\n public async post<dataType = any>(url: string, data?: any, config?: customConfigFetch): Promise<dataType> {\n const finalConfig: customConfigFetch = {\n ...this.config,\n ...config,\n url,\n method: 'POST',\n body: data\n };\n\n return this.doFetch<dataType>(finalConfig);\n }\n\n public async put<dataType = any>(url: string, data?: any, config?: customConfigFetch): Promise<dataType> {\n const finalConfig: customConfigFetch = {\n ...this.config,\n ...config,\n url,\n method: 'PUT',\n body: data\n };\n\n return this.doFetch<dataType>(finalConfig);\n }\n\n public async delete<dataType = any>(url: string, data?: any, config?: customConfigFetch): Promise<dataType> {\n const finalConfig: customConfigFetch = {\n ...this.config,\n ...config,\n url,\n method: 'DELETE',\n body: data\n };\n\n return this.doFetch<dataType>(finalConfig);\n }\n\n public addRequestInterceptor(onFulfilled: fulfilled<customConfigFetch>, onRejected: rejected = (e) => e) {\n this.interceptors.request.push({\n onFulfilled,\n onRejected\n });\n }\n\n public addResponseInterceptor(onFulfilled: fulfilled<customResponse>, onRejected: rejected = (e) => e) {\n this.interceptors.response.push({\n onFulfilled,\n onRejected\n });\n }\n\n private async getValue(val: Promise<any> | any) {\n if (typeof val.then === 'function') {\n return await val;\n } else {\n return val;\n }\n }\n\n public async handleRequest(config: customConfigFetch): Promise<customConfigFetch> {\n let _config = config;\n let count = 0;\n for (const interceptor of this.interceptors.request) {\n const { onFulfilled, onRejected } = interceptor;\n try {\n _config = {\n ...this.config,\n ..._config,\n ...(await this.getValue(onFulfilled(_config)))\n };\n } catch (e) {\n if (e instanceof Error) {\n await onRejected(\n new CustomError({\n elapsedTime: '',\n errorCode: '',\n errorMsg: e.message,\n returnCode: 0,\n returnData: '',\n returnMsg: '',\n error: e,\n config: _config,\n requestData: _config.body\n })\n );\n }\n }\n count++;\n }\n\n return _config;\n }\n public async handleResponse(customResponse: customResponse): Promise<customResponse> {\n let _customResponse = customResponse;\n const count = 0;\n for (const interceptor of this.interceptors.response) {\n const { onFulfilled } = interceptor;\n _customResponse = {\n ..._customResponse,\n ...(await this.getValue(onFulfilled(_customResponse)))\n };\n }\n\n return _customResponse;\n }\n public async handleResponseError(e: CustomError) {\n for (const interceptor of this.interceptors.response) {\n const { onRejected } = interceptor;\n await onRejected(e);\n }\n }\n}\n","import { AbstractHttpClient } from '../abstract-http-client';\nimport { CustomError } from '../custom-error';\n\nimport { FetchInstance } from './fetch-instance';\nimport { customConfigFetch } from './types';\n\nconst defaultConfig: customConfigFetch = {\n method: 'GET'\n};\nexport class HttpClientFetch extends AbstractHttpClient<customConfigFetch, FetchInstance, CustomError> {\n protected errorHandler: null | ((e: CustomError) => void);\n\n /**\n * HttpClientFetch request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n protected headers!: Record<string, string>;\n\n /**\n * fetch 인스턴스 생성시 기본설정값 및 기타 필요한 정보들을 추가 가능\n */\n protected config: customConfigFetch;\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n public api: FetchInstance;\n\n constructor(config?: customConfigFetch) {\n super();\n if (!this.headers) {\n this.headers = {};\n }\n this.config = config || defaultConfig;\n this.errorHandler = null;\n\n this.api = new FetchInstance(this.config);\n\n /**\n * @todo 이 부분도 추후 api스펙에따라 부분 셋팅필요.\n */\n this.api.addRequestInterceptor((config: customConfigFetch) => {\n /**\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n const headers = new Headers();\n headerEntries.forEach(([key, value]) => {\n headers.set(key, value);\n });\n config.headers = headers;\n\n return config;\n });\n\n this.api.addResponseInterceptor((res) => {\n return res;\n });\n }\n\n async put<dataType = any>(url: string, data?: any, config?: customConfigFetch) {\n try {\n const res = await this.api.put<dataType>(url, data, config);\n\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async get<dataType = any>(url: string, config?: customConfigFetch) {\n try {\n const res = await this.api.get<dataType>(url, config);\n\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async delete<dataType = any>(url: string, config?: customConfigFetch) {\n try {\n const res = await this.api.delete<dataType>(url, config);\n\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async post<dataType = any>(url: string, data?: any, config?: customConfigFetch) {\n try {\n const res = await this.api.post<dataType>(url, data, config);\n\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n setHeader(key: string, value: string) {\n this.headers[key] = value;\n }\n}\n","import { CustomError } from '../custom-error';\n\nimport type { customConfigFetch } from './types';\n// import * as Sentry from '@hanwhalife/shared-libs/sentry';\n\nexport type ssrErrorHandlerFetchType = (error: CustomError, config: customConfigFetch) => void;\nclass SsrErrorHandlerFetch {\n private localThrow?: ssrErrorHandlerFetchType;\n globalCheck: boolean;\n constructor() {\n this.globalCheck = false;\n }\n\n setGlobalCheck(global: boolean) {\n this.globalCheck = !!global;\n }\n /**\n * ssr용 에러 throw\n * 에러코드에 맞는 ServerError에러 객체를 throw 및 Sentry 리포팅 영역\n */\n private globalThrow(error: CustomError, config: customConfigFetch) {\n const { returnCode, requestData, returnData } = error;\n /**\n * 응답이 있는 경우\n */\n if (returnData) {\n /**\n * 클라이언트 오류\n */\n if (!!returnCode && returnCode >= 400 && returnCode < 500) {\n /**\n * 401(Unauthorized)\n *\n */\n if (returnCode === 401) {\n error.errorMsg = '인증 실패';\n\n return error;\n }\n\n /**\n * 403(Forbidden)에 대한 추가 처리\n */\n if (returnCode === 403) {\n error.errorMsg = '권한 없음: 접근 거부';\n\n return error;\n }\n }\n\n /**\n * 5xx서버 오류\n */\n if (!!returnCode && returnCode >= 500 && returnCode < 600) {\n error.errorMsg = `서버 오류 발생: ${returnCode}`;\n\n return error;\n }\n\n // 그 외 상태 코드\n error.errorMsg = `알 수 없는 오류 코드: ${returnCode}`;\n\n return error;\n } else if (requestData) {\n /**\n * 요청은 있고, 응답이 없는 경우\n */\n error.errorMsg = '요청이 이루어 졌으나 응답을 받지 못했습니다.';\n\n return error;\n }\n }\n setLocalHandler(func: ssrErrorHandlerFetchType) {\n this.localThrow = func;\n }\n do(error: CustomError, config: customConfigFetch): void {\n const defaultError = new CustomError({\n elapsedTime: '',\n errorCode: '',\n errorMsg: 'default Error',\n requestData: '',\n returnData: '',\n returnCode: 0,\n returnMsg: '',\n error,\n config\n });\n\n /**\n * 개별에러처리가 정의된 경우 실행\n */\n const result = this.localThrow && this.localThrow(error, config);\n\n /**\n * globalCheck가 true이면 개별에러처리 검증후 이상 없을경우 global 처리로직 이어서 수행\n */\n if (this.globalCheck) {\n throw result || this.globalThrow(error, config) || defaultError;\n }\n\n /**\n * 기본에러값 throw\n */\n throw defaultError;\n }\n\n /**\n * serverError 설정값에 따른 에러 처리 추가영역\n */\n errorHandler(e: CustomError) {\n if (e instanceof CustomError) {\n const { returnData, requestData, message, returnCode } = e;\n if (returnData) {\n console.error('요청이 이루어졌으며 서버가 2xx의 범위를 벗어나는 상태 코드로 응답했습니다.');\n console.error('HTTP data, status, headers:::', returnData, returnCode);\n // logApiErrorToSentry(returnData);\n } else if (requestData) {\n /**\n * 요청은 있고, 응답이 없는 경우\n */\n console.error('요청이 이루어졌으나 응답을 받지 못했습니다.');\n console.error(requestData);\n\n /**\n * @todo 센트리 모듈추가필요\n */\n // Sentry.captureException(request);\n } else {\n console.error('오류를 발생시킨 요청을 설정하는 중에 문제가 발생했습니다.');\n console.error('Error', message);\n /**\n * @todo 센트리 모듈추가필요\n */\n // Sentry.captureException(e.error);\n }\n\n /**\n * 에러코드에 맞는 분기처리\n */\n switch (e.returnCode) {\n case 401:\n // 로그인페이지로 이동시킨다.\n // redirect(`/login?${SsrHttpClient.query}`);\n case 403:\n // 잘못된접근 안내페이지로 이동시킨다.\n // redirect(`/forbidden?${SsrHttpClient.query}`);\n case 500:\n // 서버오류시..\n // redirect(`/500?${SsrHttpClient.query}`);\n default: //to-do unknown error\n }\n }\n }\n}\n\nexport const ssrErrorHandlerFetch = new SsrErrorHandlerFetch();\n","import { CustomError } from '../custom-error';\n\nimport { HttpClientFetch } from './http-client-fetch';\nimport { ssrErrorHandlerFetchType, ssrErrorHandlerFetch } from './ssr-error-handler-fetch';\n\nimport type { customConfigFetch } from './types';\n\n\n/**\n * @todo 추후 env. baseUrl 또는 getBaseUrl() 등으로 치환\n */\nconst initConfig: customConfigFetch = {\n baseURL: ''\n};\n\nexport class SsrHttpClientFetch extends HttpClientFetch {\n public static query: string;\n constructor(config?: customConfigFetch) {\n super({\n ...initConfig,\n ...config\n });\n\n /**\n * @todo\n * x-channel-[] 공통헤더 추가\n */\n // this.setHeader('x-....', 'test1');\n // this.setHeader('x-....', 'test2');\n // this.setHeader('x-....', 'test3');\n // this.setHeader('x-....', 'test4');\n this.errorHandler = ssrErrorHandlerFetch.errorHandler;\n this.api.addRequestInterceptor(\n (config) => {\n /**\n * AT토큰 주입 지점 필요시 사용\n * @NOTE\n * IS_APP - 웹뷰는 서버사이드렌더링 고려하지 않음. 토큰주입 생략\n * IS_PC - middleware.ts에서 쿠키에 저장된 토큰을 헤더에 자동주입\n */\n\n return config;\n },\n (e) => {\n if (e instanceof CustomError) {\n if (e) {\n throw ssrErrorHandlerFetch.do(e, this.config);\n }\n }\n }\n );\n\n this.api.addResponseInterceptor(\n (res) => {\n return res;\n },\n (e) => {\n if (e instanceof CustomError) {\n if (e) {\n throw ssrErrorHandlerFetch.do(e, this.config);\n }\n }\n }\n );\n }\n\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: ssrErrorHandlerFetchType) {\n ssrErrorHandlerFetch.setLocalHandler(handler);\n }\n}\n","import { SsrHttpClientFetch } from '../fetch/ssr-http-client-fetch';\n\nexport class AuthServer {\n /**\n * App인지 확인\n * @returns boolean\n * @todo 보완필요\n */\n isApp(userAgent: string) {\n return /mobile|iphone|android/i.test(userAgent);\n }\n\n /**\n * RT를 이용하여 신규 AT/RT발행\n * 기존토큰은 무효화처리\n * 쿠키에 저장.\n * @returns Promise<string> 액세스토큰\n */\n async refreshToken(): Promise<string> {\n /**\n * @todo : 내부api호출\n */\n const ssrHttpClient = new SsrHttpClientFetch({\n baseURL: ''\n });\n const res = await ssrHttpClient.get('/internal/api/auth/refresh');\n\n return res?.data.accessToken;\n }\n}\n","// import { BASE_PATH } from '@/constants/path';\nimport { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\n// import * as Sentry from '@hanwhalife/shared-libs/sentry';\n\n/**\n * 커스텀헤더키 모음\n * 예시> 쿠키변수명 : '헤더변수명'\n * @todo 스펙에 맞게 수정필요\n */\nexport const HEADER_KEYS = {\n /**\n * 액세스 토큰\n */\n AT: 'Authorization',\n\n /**\n * 디바이스유형(예: phone or tablet)\n */\n DEVICE_TYPE: 'X-Channel-DeviceType',\n\n /**\n * Lang Code\n */\n LANG: 'Accept-Language',\n\n /**\n * 디바이스 식별번호(웹: 브라우저 식별자)\n */\n DEVICE_ID: 'X-Channel-DeviceId',\n\n /**\n * 로그인 구분\n */\n LOGIN_TYPE: 'X-Channel-LoginType',\n\n /**\n * 스마트폰OS(웹:OS)\n */\n PLATFORM_NAME: 'X-Channel-PlatformName',\n\n /**\n * 스마트폰OS버전(웹:OS버전)\n */\n PLATFORM_VERSION: 'X-Channel-PlatformVersion',\n\n /**\n * 앱버전(웹:브라우저정보)\n */\n APP_VERSION: 'X-Channel-AppVersion',\n\n /**\n * 통신사\n */\n CARRIER_NAME: 'X-Channel-CarrierName',\n\n /**\n * 네트워크 접속 타입\n */\n NETWORK_TYPE: 'X-Channel-NetworkType',\n\n /**\n * 디바이스 모델\n */\n DEVICE_MODEL: 'X-Channel-DeviceModel',\n\n /**\n * 로그인 채널\n */\n LOGIN_CHANNEL: 'X-Channel-LoginChannel'\n};\n\n/**\n * 기존코드\n */\nconst HTTP_STATUS = {\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\n INTERNAL_SERVER_ERROR: 500\n};\n\n/**\n * 기존코드\n */\nexport class ApiError<T = unknown> extends Error implements AxiosError<T> {\n config: InternalAxiosRequestConfig;\n code?: string;\n request?: any;\n response?: AxiosResponse<T>;\n isAxiosError: boolean;\n toJSON: () => any;\n cause?: Error;\n\n constructor(error: AxiosError<T>, message?: string) {\n super(message ?? error.message);\n\n const errorStatus = error.response?.status || 0;\n let name = 'apiError';\n\n switch (errorStatus) {\n case HTTP_STATUS.BAD_REQUEST: // 400\n name = 'apiBadRequestError';\n break;\n case HTTP_STATUS.UNAUTHORIZED: // 401\n name = 'apiUnauthorizedError';\n break;\n case HTTP_STATUS.FORBIDDEN: // 403\n name = 'apiForbiddenError';\n break;\n case HTTP_STATUS.NOT_FOUND: // 404\n name = 'apiNotFoundError';\n break;\n case HTTP_STATUS.INTERNAL_SERVER_ERROR: // 500\n name = 'apiInternalServerError';\n break;\n }\n\n this.name = name;\n this.stack = error.stack;\n\n this.config = error.config!;\n this.code = error.code;\n this.request = error.request;\n this.response = error.response;\n this.isAxiosError = error.isAxiosError;\n this.toJSON = error.toJSON;\n }\n}\n\n/**\n *\n * @param response\n * 기존코드\n */\nexport function logApiErrorToSentry(response: AxiosResponse) {\n const apiErrorInstance = new ApiError(\n response as unknown as AxiosError,\n `Request failed:: [${response.config.method?.toUpperCase()}] url: ${response.config.url} ${\n response.data?.errorCode && `| errorCode: ${response.data?.errorCode} | errorMsg: ${response.data?.errorMsg}`\n }`\n );\n\n /**\n * @todo 센트리 모듈 추가필요\n * 기존코드\n */\n // Sentry.setContext('API Response Detail', {\n // config: {\n // baseURL: response.config.baseURL,\n // data: response.config.data,\n // headers: response.config.headers,\n // method: response.config.method,\n // url: response.config.url\n // },\n // data: response.data\n // });\n\n /**\n * @todo base_path constants 추가 필요\n */\n // const apiServerName = BASE_PATH;\n\n /**\n * @todo 센트리모듈 추가필요\n * 기존코드\n */\n // Sentry.withScope((scope) => {\n // scope.setTags({\n // type: 'api',\n // channel: apiServerName === 'unknown' ? 'unknown' : apiServerName.serverName\n // });\n // scope.setFingerprint([\n // response.config.method!,\n // String(response.status),\n // response.config.url!,\n // response.data.errorCode ?? ''\n // ]);\n\n // Sentry.captureException(apiErrorInstance);\n // });\n}\n","import { CustomError } from '../custom-error';\n\nimport type { customConfig } from './types';\nimport type { AxiosError } from 'axios';\n// import * as Sentry from '@hanwhalife/shared-libs/sentry';\n\nexport type errorHandler = (response: AxiosError, config: customConfig) => void;\nexport abstract class ErrorHandler {\n protected localThrow?: errorHandler;\n\n /** 개별처리 + 글로벌처리 모두 사용할경우 : true , 개별처리만 사용할 경우 : false */\n protected globalCheck: boolean;\n\n constructor() {\n /**\n * 에러핸들링 개별처리 + 글로벌처리 모두 사용으로 기본셋팅\n */\n this.globalCheck = true;\n }\n\n /**\n * csr용 에러 throw\n * 에러코드에 맞는 ClientError에러 객체를 throw 및 Sentry 리포팅 영역\n * @todo 에러 응답에 data가 없다면 , config.data(=payload) 를 에러로그로 넣는건 어떨까요?\n */\n private globalThrow(error: AxiosError, config: customConfig) {\n const { response, request, code } = error;\n\n /**\n * 응답이 있는 경우\n */\n if (response) {\n const { data, status, statusText } = response;\n\n const err = new CustomError({\n elapsedTime: '',\n errorCode: code || '',\n errorMsg: '',\n requestData: config.data,\n returnData: data,\n returnCode: status,\n returnMsg: statusText,\n error,\n config\n });\n\n /**\n * 클라이언트 오류\n */\n if (status >= 400 && status < 500) {\n /**\n * 401(Unauthorized)\n */\n if (status === 401) {\n err.errorMsg = '인증 실패';\n\n /**\n * 재발급요청...\n *\n */\n return err;\n }\n\n /**\n * 403(Forbidden)에 대한 추가 처리\n */\n if (status === 403) {\n err.errorMsg = '권한 없음: 접근 거부';\n\n return err;\n }\n }\n\n /**\n * 5xx서버 오류\n */\n if (status >= 500 && status < 600) {\n err.errorMsg = `서버 오류 발생: ${status}`;\n\n return err;\n }\n\n // 그 외 상태 코드\n err.errorMsg = `알 수 없는 오류 코드: ${status}`;\n\n return err;\n } else if (request) {\n /**\n * 요청은 있고, 응답이 없는 경우\n */\n return new CustomError({\n elapsedTime: '',\n errorCode: code || '',\n errorMsg: '요청이 이루어 졌으나 응답을 받지 못했습니다.',\n requestData: config.data,\n returnData: '',\n returnCode: 0,\n returnMsg: '',\n error,\n config\n });\n }\n }\n public setLocalHandler(func: errorHandler) {\n this.localThrow = func;\n }\n\n public do(error: AxiosError, config: customConfig) {\n const {dialog} = config;\n //dialog가 false이면 에러핸들없음.\n if (!dialog) {\n return;\n }\n\n /**\n * 개별에러처리가 정의된 경우 실행\n */\n const res = this.localThrow && this.localThrow(error, config);\n\n /**\n * globalCheck가 true이면 개별에러처리 검증후 이상 없을경우 global 처리로직 이어서 수행\n */\n if (this.globalCheck) {\n return res || this.globalThrow(error, config);\n }\n\n /**\n * global 처리는 수행하지 않고, 설정한 개별에러처리만 실행\n */\n return res;\n }\n\n /**\n * 발생한 CustomError 설정값에 따른 에러 처리 추가영역\n * 상속한 server/client 에서 에러 핸들링\n */\n public abstract errorHandler(e: CustomError): void;\n}\n","import { CustomError } from '../custom-error';\nimport { logApiErrorToSentry } from '../helper';\n\nimport { ErrorHandler } from './error-handler';\n\nimport type { AxiosError } from 'axios';\n// import * as Sentry from '@hanwhalife/shared-libs/sentry';\n\nclass SsrErrorHandler extends ErrorHandler {\n constructor() {\n super();\n }\n\n setGlobalCheck(global: boolean) {\n this.globalCheck = !!global;\n }\n /**\n * throw된 serverError 설정값에 따른 에러 처리 추가영역\n * 별도의 처리가 없다면 작성할 필요없음.\n */\n errorHandler(e: CustomError) {\n if (e instanceof CustomError) {\n const { response, request, message } = e.error as AxiosError;\n if (response) {\n const { data, status, headers } = response;\n console.error('요청이 이루어졌으며 서버가 2xx의 범위를 벗어나는 상태 코드로 응답했습니다.');\n console.error('HTTP data, status, headers:::', data, status, headers);\n logApiErrorToSentry(response);\n } else if (request) {\n /**\n * 요청은 있고, 응답이 없는 경우\n */\n console.error('요청이 이루어졌으나 응답을 받지 못했습니다.');\n console.error(request);\n\n /**\n * @todo 센트리 모듈추가필요\n */\n // Sentry.captureException(request);\n } else {\n console.error('오류를 발생시킨 요청을 설정하는 중에 문제가 발생했습니다.');\n console.error('Error', message);\n /**\n * @todo 센트리 모듈추가필요\n */\n // Sentry.captureException(e.error);\n }\n\n /**\n * 에러코드에 맞는 분기처리\n */\n switch (e.returnCode) {\n case 401:\n // 로그인페이지로 이동시킨다.\n // redirect(`/login?${SsrHttpClient.query}`);\n case 403:\n // 잘못된접근 안내페이지로 이동시킨다.\n // redirect(`/forbidden?${SsrHttpClient.query}`);\n case 500:\n // 서버오류시..\n // redirect(`/500?${SsrHttpClient.query}`);\n default: //to-do unknown error\n }\n }\n }\n}\n\nexport const ssrErrorHandler = new SsrErrorHandler();\n","import axios, { AxiosRequestConfig, AxiosResponse, type AxiosInstance } from 'axios';\n\nimport { AbstractHttpClient } from '../abstract-http-client';\n\nimport type { customConfig } from './types';\n\nexport class HttpClientAxios<errorType extends Error> extends AbstractHttpClient<\n customConfig,\n AxiosInstance,\n errorType\n> {\n /**\n * API연동 실패시, 공통 에러 핸들러\n * extends된 런타임 동작환경에 맞는 SSR,CSR 방식으로 에러핸들링처리\n */\n protected errorHandler: null | ((e: errorType) => void);\n\n /**\n * AxiosRequestConfig 를 확장한 interface\n * axios create시 기본설정값 및 기타 필요한 정보들을 추가 가능\n */\n protected config: customConfig;\n\n /**\n * axios의 request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n protected headers!: Record<string, string>;\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n protected api: AxiosInstance;\n constructor(config: customConfig) {\n super();\n if (!this.headers) {\n this.headers = {};\n }\n\n this.config = config;\n this.errorHandler = null;\n\n /**\n * api수행객체 최초 생성,\n * 공통으로 적용할 설정값이 있는경우 셋팅\n * @todo baseURL process.env.BaseURL ?\n */\n this.api = axios.create({\n baseURL: '전체공통URL이 있으면 셋팅',\n withCredentials: true,\n ...config\n });\n\n /**\n * @todo 이 부분도 추후 api스펙에따라 부분 셋팅필요.\n * request 헤더,token처리 interceptor 등록\n */\n this.api.interceptors.request.use(async (config) => {\n /**\n * @todo\n * x-channel-[] 공통헤더 추가\n */\n // this.setHeader('x-channel-adfaf', '');\n // this.setHeader('x-channel-adfaf', '');\n // this.setHeader('x-channel-adfaf', '');\n\n /**\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n headerEntries.forEach(([key, value]) => {\n config.headers.set(key, value);\n });\n\n return config;\n });\n }\n\n async put<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>) {\n try {\n const res = await this.api.put<T, R, D>(url, data, config);\n\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>) {\n try {\n const res = await this.api.get<T, R, D>(url, config);\n\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>) {\n try {\n const res = await this.api.delete<T, R, D>(url, config);\n\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n async post<T = any, R = AxiosResponse<T>, D = any>(url: string, data?: D, config?: AxiosRequestConfig<D>) {\n try {\n const res = await this.api.post<T, R, D>(url, data, config);\n\n return res;\n } catch (e: any) {\n throw this.errorHandler && this.errorHandler(e);\n }\n }\n\n setHeader(key: string, value: string) {\n this.headers[key] = value;\n }\n}\n","import { CustomError } from '../custom-error';\n\nimport { errorHandler } from './error-handler';\nimport { HttpClientAxios } from './http-client-axios';\nimport { ssrErrorHandler } from './ssr-error-handler';\n\nimport type { customConfig } from './types';\nimport type { AxiosError } from 'axios';\n\n/**\n * @todo 추후 env. baseUrl 또는 getBaseUrl() 등으로 치환\n */\nconst initConfig: customConfig = {\n baseURL: '',\n dialog: true\n};\n\nexport class SsrHttpClientAxios extends HttpClientAxios<CustomError> {\n public static query: string;\n constructor(config?: customConfig) {\n super({\n ...initConfig,\n ...config\n });\n this.errorHandler = ssrErrorHandler.errorHandler;\n this.api.interceptors.request.use((config) => {\n /**\n * AT토큰 주입 지점 필요시 사용\n * @NOTE\n * IS_APP - 웹뷰는 서버사이드렌더링 고려하지 않음. 토큰주입 생략\n * IS_PC - middleware.ts에서 쿠키에 저장된 토큰을 헤더에 자동주입\n */\n\n return config;\n });\n\n this.api.interceptors.response.use(\n (response) => {\n return response;\n },\n (error: AxiosError) => {\n throw ssrErrorHandler.do(error, this.config);\n }\n );\n }\n\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandler) {\n ssrErrorHandler.setLocalHandler(handler);\n }\n}\n"]}
|
package/dist/server.js
CHANGED
|
@@ -39,88 +39,6 @@ var CustomError = class extends Error {
|
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
-
// src/http-client/fetch/ssr-error-handler-fetch.ts
|
|
43
|
-
var SsrErrorHandlerFetch = class {
|
|
44
|
-
constructor() {
|
|
45
|
-
__publicField(this, "localThrow");
|
|
46
|
-
__publicField(this, "globalCheck");
|
|
47
|
-
this.globalCheck = false;
|
|
48
|
-
}
|
|
49
|
-
setGlobalCheck(global) {
|
|
50
|
-
this.globalCheck = !!global;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* ssr용 에러 throw
|
|
54
|
-
* 에러코드에 맞는 ServerError에러 객체를 throw 및 Sentry 리포팅 영역
|
|
55
|
-
*/
|
|
56
|
-
globalThrow(error, config) {
|
|
57
|
-
const { returnCode, requestData, returnData } = error;
|
|
58
|
-
if (returnData) {
|
|
59
|
-
if (!!returnCode && returnCode >= 400 && returnCode < 500) {
|
|
60
|
-
if (returnCode === 401) {
|
|
61
|
-
error.errorMsg = "\uC778\uC99D \uC2E4\uD328";
|
|
62
|
-
return error;
|
|
63
|
-
}
|
|
64
|
-
if (returnCode === 403) {
|
|
65
|
-
error.errorMsg = "\uAD8C\uD55C \uC5C6\uC74C: \uC811\uADFC \uAC70\uBD80";
|
|
66
|
-
return error;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (!!returnCode && returnCode >= 500 && returnCode < 600) {
|
|
70
|
-
error.errorMsg = `\uC11C\uBC84 \uC624\uB958 \uBC1C\uC0DD: ${returnCode}`;
|
|
71
|
-
return error;
|
|
72
|
-
}
|
|
73
|
-
error.errorMsg = `\uC54C \uC218 \uC5C6\uB294 \uC624\uB958 \uCF54\uB4DC: ${returnCode}`;
|
|
74
|
-
return error;
|
|
75
|
-
} else if (requestData) {
|
|
76
|
-
error.errorMsg = "\uC694\uCCAD\uC774 \uC774\uB8E8\uC5B4 \uC84C\uC73C\uB098 \uC751\uB2F5\uC744 \uBC1B\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.";
|
|
77
|
-
return error;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
setLocalHandler(func) {
|
|
81
|
-
this.localThrow = func;
|
|
82
|
-
}
|
|
83
|
-
do(error, config) {
|
|
84
|
-
const defaultError = new CustomError({
|
|
85
|
-
elapsedTime: "",
|
|
86
|
-
errorCode: "",
|
|
87
|
-
errorMsg: "default Error",
|
|
88
|
-
requestData: "",
|
|
89
|
-
returnData: "",
|
|
90
|
-
returnCode: 0,
|
|
91
|
-
returnMsg: "",
|
|
92
|
-
error,
|
|
93
|
-
config
|
|
94
|
-
});
|
|
95
|
-
const result = this.localThrow && this.localThrow(error, config);
|
|
96
|
-
if (this.globalCheck) {
|
|
97
|
-
throw result || this.globalThrow(error, config) || defaultError;
|
|
98
|
-
}
|
|
99
|
-
throw defaultError;
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* serverError 설정값에 따른 에러 처리 추가영역
|
|
103
|
-
*/
|
|
104
|
-
errorHandler(e) {
|
|
105
|
-
if (e instanceof CustomError) {
|
|
106
|
-
const { returnData, requestData, message, returnCode } = e;
|
|
107
|
-
if (returnData) {
|
|
108
|
-
console.error("\uC694\uCCAD\uC774 \uC774\uB8E8\uC5B4\uC84C\uC73C\uBA70 \uC11C\uBC84\uAC00 2xx\uC758 \uBC94\uC704\uB97C \uBC97\uC5B4\uB098\uB294 \uC0C1\uD0DC \uCF54\uB4DC\uB85C \uC751\uB2F5\uD588\uC2B5\uB2C8\uB2E4.");
|
|
109
|
-
console.error("HTTP data, status, headers:::", returnData, returnCode);
|
|
110
|
-
} else if (requestData) {
|
|
111
|
-
console.error("\uC694\uCCAD\uC774 \uC774\uB8E8\uC5B4\uC84C\uC73C\uB098 \uC751\uB2F5\uC744 \uBC1B\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.");
|
|
112
|
-
console.error(requestData);
|
|
113
|
-
} else {
|
|
114
|
-
console.error("\uC624\uB958\uB97C \uBC1C\uC0DD\uC2DC\uD0A8 \uC694\uCCAD\uC744 \uC124\uC815\uD558\uB294 \uC911\uC5D0 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.");
|
|
115
|
-
console.error("Error", message);
|
|
116
|
-
}
|
|
117
|
-
switch (e.returnCode) {
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
var ssrErrorHandlerFetch = new SsrErrorHandlerFetch();
|
|
123
|
-
|
|
124
42
|
// src/http-client/abstract-http-client.ts
|
|
125
43
|
var AbstractHttpClient = class {
|
|
126
44
|
};
|
|
@@ -154,7 +72,7 @@ var FetchInstance = class {
|
|
|
154
72
|
...fetchOptions,
|
|
155
73
|
headers: finalHeaders
|
|
156
74
|
};
|
|
157
|
-
if (
|
|
75
|
+
if (body) {
|
|
158
76
|
if (typeof body === "object" && body !== null && !(body instanceof FormData) && !(body instanceof Blob) && !(body instanceof URLSearchParams)) {
|
|
159
77
|
finalHeaders.set("Content-Type", "application/json");
|
|
160
78
|
options.body = JSON.stringify(body);
|
|
@@ -394,6 +312,88 @@ var HttpClientFetch = class extends AbstractHttpClient {
|
|
|
394
312
|
}
|
|
395
313
|
};
|
|
396
314
|
|
|
315
|
+
// src/http-client/fetch/ssr-error-handler-fetch.ts
|
|
316
|
+
var SsrErrorHandlerFetch = class {
|
|
317
|
+
constructor() {
|
|
318
|
+
__publicField(this, "localThrow");
|
|
319
|
+
__publicField(this, "globalCheck");
|
|
320
|
+
this.globalCheck = false;
|
|
321
|
+
}
|
|
322
|
+
setGlobalCheck(global) {
|
|
323
|
+
this.globalCheck = !!global;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* ssr용 에러 throw
|
|
327
|
+
* 에러코드에 맞는 ServerError에러 객체를 throw 및 Sentry 리포팅 영역
|
|
328
|
+
*/
|
|
329
|
+
globalThrow(error, config) {
|
|
330
|
+
const { returnCode, requestData, returnData } = error;
|
|
331
|
+
if (returnData) {
|
|
332
|
+
if (!!returnCode && returnCode >= 400 && returnCode < 500) {
|
|
333
|
+
if (returnCode === 401) {
|
|
334
|
+
error.errorMsg = "\uC778\uC99D \uC2E4\uD328";
|
|
335
|
+
return error;
|
|
336
|
+
}
|
|
337
|
+
if (returnCode === 403) {
|
|
338
|
+
error.errorMsg = "\uAD8C\uD55C \uC5C6\uC74C: \uC811\uADFC \uAC70\uBD80";
|
|
339
|
+
return error;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (!!returnCode && returnCode >= 500 && returnCode < 600) {
|
|
343
|
+
error.errorMsg = `\uC11C\uBC84 \uC624\uB958 \uBC1C\uC0DD: ${returnCode}`;
|
|
344
|
+
return error;
|
|
345
|
+
}
|
|
346
|
+
error.errorMsg = `\uC54C \uC218 \uC5C6\uB294 \uC624\uB958 \uCF54\uB4DC: ${returnCode}`;
|
|
347
|
+
return error;
|
|
348
|
+
} else if (requestData) {
|
|
349
|
+
error.errorMsg = "\uC694\uCCAD\uC774 \uC774\uB8E8\uC5B4 \uC84C\uC73C\uB098 \uC751\uB2F5\uC744 \uBC1B\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.";
|
|
350
|
+
return error;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
setLocalHandler(func) {
|
|
354
|
+
this.localThrow = func;
|
|
355
|
+
}
|
|
356
|
+
do(error, config) {
|
|
357
|
+
const defaultError = new CustomError({
|
|
358
|
+
elapsedTime: "",
|
|
359
|
+
errorCode: "",
|
|
360
|
+
errorMsg: "default Error",
|
|
361
|
+
requestData: "",
|
|
362
|
+
returnData: "",
|
|
363
|
+
returnCode: 0,
|
|
364
|
+
returnMsg: "",
|
|
365
|
+
error,
|
|
366
|
+
config
|
|
367
|
+
});
|
|
368
|
+
const result = this.localThrow && this.localThrow(error, config);
|
|
369
|
+
if (this.globalCheck) {
|
|
370
|
+
throw result || this.globalThrow(error, config) || defaultError;
|
|
371
|
+
}
|
|
372
|
+
throw defaultError;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* serverError 설정값에 따른 에러 처리 추가영역
|
|
376
|
+
*/
|
|
377
|
+
errorHandler(e) {
|
|
378
|
+
if (e instanceof CustomError) {
|
|
379
|
+
const { returnData, requestData, message, returnCode } = e;
|
|
380
|
+
if (returnData) {
|
|
381
|
+
console.error("\uC694\uCCAD\uC774 \uC774\uB8E8\uC5B4\uC84C\uC73C\uBA70 \uC11C\uBC84\uAC00 2xx\uC758 \uBC94\uC704\uB97C \uBC97\uC5B4\uB098\uB294 \uC0C1\uD0DC \uCF54\uB4DC\uB85C \uC751\uB2F5\uD588\uC2B5\uB2C8\uB2E4.");
|
|
382
|
+
console.error("HTTP data, status, headers:::", returnData, returnCode);
|
|
383
|
+
} else if (requestData) {
|
|
384
|
+
console.error("\uC694\uCCAD\uC774 \uC774\uB8E8\uC5B4\uC84C\uC73C\uB098 \uC751\uB2F5\uC744 \uBC1B\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.");
|
|
385
|
+
console.error(requestData);
|
|
386
|
+
} else {
|
|
387
|
+
console.error("\uC624\uB958\uB97C \uBC1C\uC0DD\uC2DC\uD0A8 \uC694\uCCAD\uC744 \uC124\uC815\uD558\uB294 \uC911\uC5D0 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.");
|
|
388
|
+
console.error("Error", message);
|
|
389
|
+
}
|
|
390
|
+
switch (e.returnCode) {
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
var ssrErrorHandlerFetch = new SsrErrorHandlerFetch();
|
|
396
|
+
|
|
397
397
|
// src/http-client/fetch/ssr-http-client-fetch.ts
|
|
398
398
|
var initConfig = {
|
|
399
399
|
baseURL: ""
|
|
@@ -465,6 +465,60 @@ var AuthServer = class {
|
|
|
465
465
|
}
|
|
466
466
|
};
|
|
467
467
|
|
|
468
|
+
// src/http-client/helper.ts
|
|
469
|
+
var HTTP_STATUS = {
|
|
470
|
+
BAD_REQUEST: 400,
|
|
471
|
+
UNAUTHORIZED: 401,
|
|
472
|
+
FORBIDDEN: 403,
|
|
473
|
+
NOT_FOUND: 404,
|
|
474
|
+
INTERNAL_SERVER_ERROR: 500
|
|
475
|
+
};
|
|
476
|
+
var ApiError = class extends Error {
|
|
477
|
+
constructor(error, message) {
|
|
478
|
+
super(message ?? error.message);
|
|
479
|
+
__publicField(this, "config");
|
|
480
|
+
__publicField(this, "code");
|
|
481
|
+
__publicField(this, "request");
|
|
482
|
+
__publicField(this, "response");
|
|
483
|
+
__publicField(this, "isAxiosError");
|
|
484
|
+
__publicField(this, "toJSON");
|
|
485
|
+
__publicField(this, "cause");
|
|
486
|
+
const errorStatus = error.response?.status || 0;
|
|
487
|
+
let name = "apiError";
|
|
488
|
+
switch (errorStatus) {
|
|
489
|
+
case HTTP_STATUS.BAD_REQUEST:
|
|
490
|
+
name = "apiBadRequestError";
|
|
491
|
+
break;
|
|
492
|
+
case HTTP_STATUS.UNAUTHORIZED:
|
|
493
|
+
name = "apiUnauthorizedError";
|
|
494
|
+
break;
|
|
495
|
+
case HTTP_STATUS.FORBIDDEN:
|
|
496
|
+
name = "apiForbiddenError";
|
|
497
|
+
break;
|
|
498
|
+
case HTTP_STATUS.NOT_FOUND:
|
|
499
|
+
name = "apiNotFoundError";
|
|
500
|
+
break;
|
|
501
|
+
case HTTP_STATUS.INTERNAL_SERVER_ERROR:
|
|
502
|
+
name = "apiInternalServerError";
|
|
503
|
+
break;
|
|
504
|
+
}
|
|
505
|
+
this.name = name;
|
|
506
|
+
this.stack = error.stack;
|
|
507
|
+
this.config = error.config;
|
|
508
|
+
this.code = error.code;
|
|
509
|
+
this.request = error.request;
|
|
510
|
+
this.response = error.response;
|
|
511
|
+
this.isAxiosError = error.isAxiosError;
|
|
512
|
+
this.toJSON = error.toJSON;
|
|
513
|
+
}
|
|
514
|
+
};
|
|
515
|
+
function logApiErrorToSentry(response) {
|
|
516
|
+
new ApiError(
|
|
517
|
+
response,
|
|
518
|
+
`Request failed:: [${response.config.method?.toUpperCase()}] url: ${response.config.url} ${response.data?.errorCode && `| errorCode: ${response.data?.errorCode} | errorMsg: ${response.data?.errorMsg}`}`
|
|
519
|
+
);
|
|
520
|
+
}
|
|
521
|
+
|
|
468
522
|
// src/http-client/axios/error-handler.ts
|
|
469
523
|
var ErrorHandler = class {
|
|
470
524
|
constructor() {
|
|
@@ -527,7 +581,7 @@ var ErrorHandler = class {
|
|
|
527
581
|
this.localThrow = func;
|
|
528
582
|
}
|
|
529
583
|
do(error, config) {
|
|
530
|
-
const dialog = config
|
|
584
|
+
const { dialog } = config;
|
|
531
585
|
if (!dialog) {
|
|
532
586
|
return;
|
|
533
587
|
}
|
|
@@ -539,60 +593,6 @@ var ErrorHandler = class {
|
|
|
539
593
|
}
|
|
540
594
|
};
|
|
541
595
|
|
|
542
|
-
// src/http-client/helper.ts
|
|
543
|
-
var HTTP_STATUS = {
|
|
544
|
-
BAD_REQUEST: 400,
|
|
545
|
-
UNAUTHORIZED: 401,
|
|
546
|
-
FORBIDDEN: 403,
|
|
547
|
-
NOT_FOUND: 404,
|
|
548
|
-
INTERNAL_SERVER_ERROR: 500
|
|
549
|
-
};
|
|
550
|
-
var ApiError = class extends Error {
|
|
551
|
-
constructor(error, message) {
|
|
552
|
-
super(message ?? error.message);
|
|
553
|
-
__publicField(this, "config");
|
|
554
|
-
__publicField(this, "code");
|
|
555
|
-
__publicField(this, "request");
|
|
556
|
-
__publicField(this, "response");
|
|
557
|
-
__publicField(this, "isAxiosError");
|
|
558
|
-
__publicField(this, "toJSON");
|
|
559
|
-
__publicField(this, "cause");
|
|
560
|
-
const errorStatus = error.response?.status || 0;
|
|
561
|
-
let name = "apiError";
|
|
562
|
-
switch (errorStatus) {
|
|
563
|
-
case HTTP_STATUS.BAD_REQUEST:
|
|
564
|
-
name = "apiBadRequestError";
|
|
565
|
-
break;
|
|
566
|
-
case HTTP_STATUS.UNAUTHORIZED:
|
|
567
|
-
name = "apiUnauthorizedError";
|
|
568
|
-
break;
|
|
569
|
-
case HTTP_STATUS.FORBIDDEN:
|
|
570
|
-
name = "apiForbiddenError";
|
|
571
|
-
break;
|
|
572
|
-
case HTTP_STATUS.NOT_FOUND:
|
|
573
|
-
name = "apiNotFoundError";
|
|
574
|
-
break;
|
|
575
|
-
case HTTP_STATUS.INTERNAL_SERVER_ERROR:
|
|
576
|
-
name = "apiInternalServerError";
|
|
577
|
-
break;
|
|
578
|
-
}
|
|
579
|
-
this.name = name;
|
|
580
|
-
this.stack = error.stack;
|
|
581
|
-
this.config = error.config;
|
|
582
|
-
this.code = error.code;
|
|
583
|
-
this.request = error.request;
|
|
584
|
-
this.response = error.response;
|
|
585
|
-
this.isAxiosError = error.isAxiosError;
|
|
586
|
-
this.toJSON = error.toJSON;
|
|
587
|
-
}
|
|
588
|
-
};
|
|
589
|
-
function logApiErrorToSentry(response) {
|
|
590
|
-
new ApiError(
|
|
591
|
-
response,
|
|
592
|
-
`Request failed:: [${response.config.method?.toUpperCase()}] url: ${response.config.url} ${response.data?.errorCode && `| errorCode: ${response.data?.errorCode} | errorMsg: ${response.data?.errorMsg}`}`
|
|
593
|
-
);
|
|
594
|
-
}
|
|
595
|
-
|
|
596
596
|
// src/http-client/axios/ssr-error-handler.ts
|
|
597
597
|
var SsrErrorHandler = class extends ErrorHandler {
|
|
598
598
|
constructor() {
|