sales-frontend-api 0.0.11 → 0.0.13

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/server.cjs CHANGED
@@ -501,8 +501,9 @@ var SsrHttpClientAxios = class extends HttpClientAxios {
501
501
  * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)
502
502
  * @param handler ssrErrorHandler
503
503
  */
504
- setLocalErrorHandler(handler) {
504
+ setLocalErrorHandler(handler, global = false) {
505
505
  this.ssrErrorHandler?.setLocalHandler(handler);
506
+ this.ssrErrorHandler?.setGlobalCheck(global);
506
507
  }
507
508
  };
508
509
  __publicField(SsrHttpClientAxios, "query");
@@ -1 +1 @@
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-http-client-fetch.ts","../src/http-client/auth/auth-server.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/axios/ssr-http-client-axios.ts","../src/http-client/fetch/error-handler-fetch.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","/**\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 { HttpClientFetch } from './http-client-fetch';\n\nimport type { ErrorHandlerFetch, errorHandlerFethType } from './error-handler-fetch';\nimport type { customConfigFetch } from './types';\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 private ssrErrorHandlerFetch: ErrorHandlerFetch | null = null;\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.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 this.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 this.ssrErrorHandlerFetch?.do(e, this.config);\n }\n }\n }\n );\n }\n\n setSsrErrorFetchHandler(ssrErrorHandlerFetch: ErrorHandlerFetch) {\n this.ssrErrorHandlerFetch = ssrErrorHandlerFetch;\n /**\n * csr global errorhandler 주입\n */\n this.errorHandler = ssrErrorHandlerFetch.errorHandler;\n }\n\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandlerFethType) {\n this.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 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, errorHandler } from './error-handler';\nimport { HttpClientAxios } from './http-client-axios';\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 private ssrErrorHandler: ErrorHandler | null = null;\n constructor(config?: customConfig) {\n super({\n ...initConfig,\n ...config\n });\n\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 this.ssrErrorHandler?.do(error, this.config);\n }\n );\n }\n\n setSsrErrorHandler(ssrErrorHandler: ErrorHandler) {\n this.ssrErrorHandler = ssrErrorHandler;\n /**\n * ssr global errorhandler 주입\n */\n this.errorHandler = ssrErrorHandler.errorHandler;\n }\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandler) {\n this.ssrErrorHandler?.setLocalHandler(handler);\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 errorHandlerFethType = (response: CustomError, config: customConfigFetch) => void;\nexport abstract class ErrorHandlerFetch {\n protected localThrow?: errorHandlerFethType;\n\n /** 개별처리 + 글로벌처리 모두 사용할경우 : true , 개별처리만 사용할 경우 : false */\n protected globalCheck: boolean;\n\n constructor() {\n /**\n * 에러핸들링 개별처리 + 글로벌처리 모두 사용으로 기본셋팅\n */\n this.globalCheck = true;\n }\n setGlobalCheck(global: boolean) {\n this.globalCheck = !!global;\n }\n /**\n * 에러코드에 맞는 Error에러 객체를 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 public setLocalHandler(func: errorHandlerFethType) {\n this.localThrow = func;\n }\n\n public do(error: CustomError, config: customConfigFetch) {\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 this.localThrow && this.localThrow(error, config);\n\n /**\n * globalCheck가 true이면 개별에러처리 검증후 이상 없을경우 global 처리로직 이어서 수행\n */\n if (this.globalCheck) {\n throw this.globalThrow(error, config);\n }\n\n /**\n * 기본에러값 throw\n */\n throw defaultError;\n }\n\n /**\n * 발생한 CustomError 설정값에 따른 에러 처리 추가영역\n * 상속한 server/client 에서 에러 핸들링\n */\n public abstract errorHandler(e: CustomError): void;\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-http-client-fetch.ts","../src/http-client/auth/auth-server.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/axios/ssr-http-client-axios.ts","../src/http-client/fetch/error-handler-fetch.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","/**\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 { HttpClientFetch } from './http-client-fetch';\n\nimport type { ErrorHandlerFetch, errorHandlerFethType } from './error-handler-fetch';\nimport type { customConfigFetch } from './types';\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 private ssrErrorHandlerFetch: ErrorHandlerFetch | null = null;\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.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 this.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 this.ssrErrorHandlerFetch?.do(e, this.config);\n }\n }\n }\n );\n }\n\n setSsrErrorFetchHandler(ssrErrorHandlerFetch: ErrorHandlerFetch) {\n this.ssrErrorHandlerFetch = ssrErrorHandlerFetch;\n /**\n * csr global errorhandler 주입\n */\n this.errorHandler = ssrErrorHandlerFetch.errorHandler;\n }\n\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandlerFethType) {\n this.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 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, errorHandler } from './error-handler';\nimport { HttpClientAxios } from './http-client-axios';\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 private ssrErrorHandler: ErrorHandler | null = null;\n constructor(config?: customConfig) {\n super({\n ...initConfig,\n ...config\n });\n\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 this.ssrErrorHandler?.do(error, this.config);\n }\n );\n }\n\n setSsrErrorHandler(ssrErrorHandler: ErrorHandler) {\n this.ssrErrorHandler = ssrErrorHandler;\n /**\n * ssr global errorhandler 주입\n */\n this.errorHandler = ssrErrorHandler.errorHandler;\n }\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandler, global = false) {\n this.ssrErrorHandler?.setLocalHandler(handler);\n this.ssrErrorHandler?.setGlobalCheck(global);\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 errorHandlerFethType = (response: CustomError, config: customConfigFetch) => void;\nexport abstract class ErrorHandlerFetch {\n protected localThrow?: errorHandlerFethType;\n\n /** 개별처리 + 글로벌처리 모두 사용할경우 : true , 개별처리만 사용할 경우 : false */\n protected globalCheck: boolean;\n\n constructor() {\n /**\n * 에러핸들링 개별처리 + 글로벌처리 모두 사용으로 기본셋팅\n */\n this.globalCheck = true;\n }\n setGlobalCheck(global: boolean) {\n this.globalCheck = !!global;\n }\n /**\n * 에러코드에 맞는 Error에러 객체를 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 public setLocalHandler(func: errorHandlerFethType) {\n this.localThrow = func;\n }\n\n public do(error: CustomError, config: customConfigFetch) {\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 this.localThrow && this.localThrow(error, config);\n\n /**\n * globalCheck가 true이면 개별에러처리 검증후 이상 없을경우 global 처리로직 이어서 수행\n */\n if (this.globalCheck) {\n throw this.globalThrow(error, config);\n }\n\n /**\n * 기본에러값 throw\n */\n throw defaultError;\n }\n\n /**\n * 발생한 CustomError 설정값에 따른 에러 처리 추가영역\n * 상속한 server/client 에서 에러 핸들링\n */\n public abstract errorHandler(e: CustomError): void;\n}\n"]}
package/dist/server.d.cts CHANGED
@@ -27,7 +27,7 @@ declare class SsrHttpClientAxios extends HttpClientAxios<CustomError> {
27
27
  * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)
28
28
  * @param handler ssrErrorHandler
29
29
  */
30
- setLocalErrorHandler(handler: errorHandler): void;
30
+ setLocalErrorHandler(handler: errorHandler, global?: boolean): void;
31
31
  }
32
32
 
33
33
  declare class FetchInstance {
package/dist/server.d.ts CHANGED
@@ -27,7 +27,7 @@ declare class SsrHttpClientAxios extends HttpClientAxios<CustomError> {
27
27
  * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)
28
28
  * @param handler ssrErrorHandler
29
29
  */
30
- setLocalErrorHandler(handler: errorHandler): void;
30
+ setLocalErrorHandler(handler: errorHandler, global?: boolean): void;
31
31
  }
32
32
 
33
33
  declare class FetchInstance {
package/dist/server.js CHANGED
@@ -495,8 +495,9 @@ var SsrHttpClientAxios = class extends HttpClientAxios {
495
495
  * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)
496
496
  * @param handler ssrErrorHandler
497
497
  */
498
- setLocalErrorHandler(handler) {
498
+ setLocalErrorHandler(handler, global = false) {
499
499
  this.ssrErrorHandler?.setLocalHandler(handler);
500
+ this.ssrErrorHandler?.setGlobalCheck(global);
500
501
  }
501
502
  };
502
503
  __publicField(SsrHttpClientAxios, "query");
@@ -1 +1 @@
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-http-client-fetch.ts","../src/http-client/auth/auth-server.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/axios/ssr-http-client-axios.ts","../src/http-client/fetch/error-handler-fetch.ts"],"names":["config","initConfig"],"mappings":"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","file":"server.js","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 { HttpClientFetch } from './http-client-fetch';\n\nimport type { ErrorHandlerFetch, errorHandlerFethType } from './error-handler-fetch';\nimport type { customConfigFetch } from './types';\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 private ssrErrorHandlerFetch: ErrorHandlerFetch | null = null;\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.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 this.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 this.ssrErrorHandlerFetch?.do(e, this.config);\n }\n }\n }\n );\n }\n\n setSsrErrorFetchHandler(ssrErrorHandlerFetch: ErrorHandlerFetch) {\n this.ssrErrorHandlerFetch = ssrErrorHandlerFetch;\n /**\n * csr global errorhandler 주입\n */\n this.errorHandler = ssrErrorHandlerFetch.errorHandler;\n }\n\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandlerFethType) {\n this.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 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, errorHandler } from './error-handler';\nimport { HttpClientAxios } from './http-client-axios';\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 private ssrErrorHandler: ErrorHandler | null = null;\n constructor(config?: customConfig) {\n super({\n ...initConfig,\n ...config\n });\n\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 this.ssrErrorHandler?.do(error, this.config);\n }\n );\n }\n\n setSsrErrorHandler(ssrErrorHandler: ErrorHandler) {\n this.ssrErrorHandler = ssrErrorHandler;\n /**\n * ssr global errorhandler 주입\n */\n this.errorHandler = ssrErrorHandler.errorHandler;\n }\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandler) {\n this.ssrErrorHandler?.setLocalHandler(handler);\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 errorHandlerFethType = (response: CustomError, config: customConfigFetch) => void;\nexport abstract class ErrorHandlerFetch {\n protected localThrow?: errorHandlerFethType;\n\n /** 개별처리 + 글로벌처리 모두 사용할경우 : true , 개별처리만 사용할 경우 : false */\n protected globalCheck: boolean;\n\n constructor() {\n /**\n * 에러핸들링 개별처리 + 글로벌처리 모두 사용으로 기본셋팅\n */\n this.globalCheck = true;\n }\n setGlobalCheck(global: boolean) {\n this.globalCheck = !!global;\n }\n /**\n * 에러코드에 맞는 Error에러 객체를 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 public setLocalHandler(func: errorHandlerFethType) {\n this.localThrow = func;\n }\n\n public do(error: CustomError, config: customConfigFetch) {\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 this.localThrow && this.localThrow(error, config);\n\n /**\n * globalCheck가 true이면 개별에러처리 검증후 이상 없을경우 global 처리로직 이어서 수행\n */\n if (this.globalCheck) {\n throw this.globalThrow(error, config);\n }\n\n /**\n * 기본에러값 throw\n */\n throw defaultError;\n }\n\n /**\n * 발생한 CustomError 설정값에 따른 에러 처리 추가영역\n * 상속한 server/client 에서 에러 핸들링\n */\n public abstract errorHandler(e: CustomError): void;\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-http-client-fetch.ts","../src/http-client/auth/auth-server.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/axios/ssr-http-client-axios.ts","../src/http-client/fetch/error-handler-fetch.ts"],"names":["config","initConfig"],"mappings":"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","file":"server.js","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 { HttpClientFetch } from './http-client-fetch';\n\nimport type { ErrorHandlerFetch, errorHandlerFethType } from './error-handler-fetch';\nimport type { customConfigFetch } from './types';\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 private ssrErrorHandlerFetch: ErrorHandlerFetch | null = null;\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.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 this.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 this.ssrErrorHandlerFetch?.do(e, this.config);\n }\n }\n }\n );\n }\n\n setSsrErrorFetchHandler(ssrErrorHandlerFetch: ErrorHandlerFetch) {\n this.ssrErrorHandlerFetch = ssrErrorHandlerFetch;\n /**\n * csr global errorhandler 주입\n */\n this.errorHandler = ssrErrorHandlerFetch.errorHandler;\n }\n\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandlerFethType) {\n this.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 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, errorHandler } from './error-handler';\nimport { HttpClientAxios } from './http-client-axios';\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 private ssrErrorHandler: ErrorHandler | null = null;\n constructor(config?: customConfig) {\n super({\n ...initConfig,\n ...config\n });\n\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 this.ssrErrorHandler?.do(error, this.config);\n }\n );\n }\n\n setSsrErrorHandler(ssrErrorHandler: ErrorHandler) {\n this.ssrErrorHandler = ssrErrorHandler;\n /**\n * ssr global errorhandler 주입\n */\n this.errorHandler = ssrErrorHandler.errorHandler;\n }\n /**\n * API 연동 실패시, 에러핸들러 셋팅 (특정페이지에서만 동작하는 개별 핸들러)\n * @param handler ssrErrorHandler\n */\n setLocalErrorHandler(handler: errorHandler, global = false) {\n this.ssrErrorHandler?.setLocalHandler(handler);\n this.ssrErrorHandler?.setGlobalCheck(global);\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 errorHandlerFethType = (response: CustomError, config: customConfigFetch) => void;\nexport abstract class ErrorHandlerFetch {\n protected localThrow?: errorHandlerFethType;\n\n /** 개별처리 + 글로벌처리 모두 사용할경우 : true , 개별처리만 사용할 경우 : false */\n protected globalCheck: boolean;\n\n constructor() {\n /**\n * 에러핸들링 개별처리 + 글로벌처리 모두 사용으로 기본셋팅\n */\n this.globalCheck = true;\n }\n setGlobalCheck(global: boolean) {\n this.globalCheck = !!global;\n }\n /**\n * 에러코드에 맞는 Error에러 객체를 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 public setLocalHandler(func: errorHandlerFethType) {\n this.localThrow = func;\n }\n\n public do(error: CustomError, config: customConfigFetch) {\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 this.localThrow && this.localThrow(error, config);\n\n /**\n * globalCheck가 true이면 개별에러처리 검증후 이상 없을경우 global 처리로직 이어서 수행\n */\n if (this.globalCheck) {\n throw this.globalThrow(error, config);\n }\n\n /**\n * 기본에러값 throw\n */\n throw defaultError;\n }\n\n /**\n * 발생한 CustomError 설정값에 따른 에러 처리 추가영역\n * 상속한 server/client 에서 에러 핸들링\n */\n public abstract errorHandler(e: CustomError): void;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sales-frontend-api",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/common.js",
@@ -66,16 +66,16 @@
66
66
  "typescript": "5.8.2",
67
67
  "next": "15.3.4",
68
68
  "sales-frontend-typescript-config": "0.0.2",
69
- "eslint-config-sales-frontend-eslint-config-v8": "^0.0.6",
70
- "sales-frontend-design-system": "0.0.37",
69
+ "sales-frontend-stores": "0.0.1",
71
70
  "sales-frontend-bridge": "0.0.11",
72
- "sales-frontend-stores": "0.0.1"
71
+ "eslint-config-sales-frontend-eslint-config-v8": "^0.0.6",
72
+ "sales-frontend-design-system": "0.0.39"
73
73
  },
74
74
  "dependencies": {
75
75
  "axios": "^1.10.0"
76
76
  },
77
77
  "peerDependencies": {
78
- "sales-frontend-design-system": "0.0.37",
78
+ "sales-frontend-design-system": "0.0.39",
79
79
  "sales-frontend-bridge": "0.0.11",
80
80
  "sales-frontend-stores": "0.0.1"
81
81
  },