sales-frontend-api 0.0.34 → 0.0.36
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 +15 -119
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +2 -69
- package/dist/client.d.ts +2 -69
- package/dist/client.js +13 -113
- package/dist/client.js.map +1 -1
- package/dist/method.cjs +65 -4673
- package/dist/method.cjs.map +1 -1
- package/dist/method.d.cts +142 -2
- package/dist/method.d.ts +142 -2
- package/dist/method.js +58 -4670
- package/dist/method.js.map +1 -1
- package/package.json +10 -9
package/dist/client.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var salesFrontendUtils = require('sales-frontend-utils');
|
|
4
4
|
var axios = require('axios');
|
|
5
|
-
var
|
|
5
|
+
var salesFrontendDebug = require('sales-frontend-debug');
|
|
6
6
|
|
|
7
7
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
|
|
@@ -49,114 +49,6 @@ var cookieClient = {
|
|
|
49
49
|
cookieClient.setCookie(name, "", { ...options, expires: -1 });
|
|
50
50
|
}
|
|
51
51
|
};
|
|
52
|
-
var useDebugStore = zustand.create()((set) => ({
|
|
53
|
-
requests: [],
|
|
54
|
-
responses: [],
|
|
55
|
-
errors: [],
|
|
56
|
-
isHold: false,
|
|
57
|
-
heldRequests: [],
|
|
58
|
-
heldResponses: [],
|
|
59
|
-
heldErrors: [],
|
|
60
|
-
addRequest: (request) => set((state) => ({ requests: [...state.requests, request] })),
|
|
61
|
-
addResponse: (response) => set((state) => ({ responses: [...state.responses, response] })),
|
|
62
|
-
addError: (error) => set((state) => ({ errors: [...state.errors, error] })),
|
|
63
|
-
clear: () => set({ requests: [], responses: [], errors: [], heldRequests: [], heldResponses: [], heldErrors: [] }),
|
|
64
|
-
toggleHold: () => set((state) => ({ isHold: !state.isHold })),
|
|
65
|
-
holdRequest: (request) => set((state) => ({ heldRequests: [...state.heldRequests, request] })),
|
|
66
|
-
holdResponse: (response) => set((state) => ({ heldResponses: [...state.heldResponses, response] })),
|
|
67
|
-
holdError: (error) => set((state) => ({ heldErrors: [...state.heldErrors, error] })),
|
|
68
|
-
playAllRequests: () => set((state) => {
|
|
69
|
-
state.heldRequests.forEach((r) => r.resolver(r.request));
|
|
70
|
-
return {
|
|
71
|
-
requests: [...state.requests, ...state.heldRequests.map((r) => r.request)],
|
|
72
|
-
heldRequests: []
|
|
73
|
-
};
|
|
74
|
-
}),
|
|
75
|
-
playAllResponses: () => set((state) => {
|
|
76
|
-
state.heldResponses.forEach((r) => r.resolver(r.response));
|
|
77
|
-
state.heldErrors.forEach((r) => r.resolver(r.error));
|
|
78
|
-
return {
|
|
79
|
-
responses: [...state.responses, ...state.heldResponses.map((r) => r.response)],
|
|
80
|
-
errors: [...state.errors, ...state.heldErrors.map((r) => r.error)],
|
|
81
|
-
heldResponses: [],
|
|
82
|
-
heldErrors: []
|
|
83
|
-
};
|
|
84
|
-
})
|
|
85
|
-
}));
|
|
86
|
-
|
|
87
|
-
// src/http-client/debug/interceptor-function.ts
|
|
88
|
-
function addRequestLog(config) {
|
|
89
|
-
const env = salesFrontendUtils.getEnvironmentFromHostname(location.hostname);
|
|
90
|
-
if (env !== "prd") {
|
|
91
|
-
const { addRequest, isHold, holdRequest } = useDebugStore.getState();
|
|
92
|
-
const startTime = Date.now();
|
|
93
|
-
const requestInfo = {
|
|
94
|
-
url: config.url || "",
|
|
95
|
-
method: config.method || "",
|
|
96
|
-
headers: config.headers,
|
|
97
|
-
params: config.params,
|
|
98
|
-
data: config.data,
|
|
99
|
-
startTime
|
|
100
|
-
};
|
|
101
|
-
if (isHold) {
|
|
102
|
-
return new Promise((resolver) => {
|
|
103
|
-
holdRequest({ request: requestInfo, resolver });
|
|
104
|
-
});
|
|
105
|
-
} else {
|
|
106
|
-
addRequest(requestInfo);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
function addResponseLog(response) {
|
|
111
|
-
const env = salesFrontendUtils.getEnvironmentFromHostname(location.hostname);
|
|
112
|
-
if (env !== "prd") {
|
|
113
|
-
const { addResponse, isHold, holdResponse } = useDebugStore.getState();
|
|
114
|
-
const { config } = response;
|
|
115
|
-
const responseInfo = {
|
|
116
|
-
url: config.url || "",
|
|
117
|
-
method: config.method || "",
|
|
118
|
-
status: response.status,
|
|
119
|
-
statusText: response.statusText,
|
|
120
|
-
headers: response.headers,
|
|
121
|
-
data: response.data
|
|
122
|
-
};
|
|
123
|
-
if (isHold) {
|
|
124
|
-
return new Promise((resolver) => {
|
|
125
|
-
holdResponse({ response: responseInfo, resolver });
|
|
126
|
-
});
|
|
127
|
-
} else {
|
|
128
|
-
addResponse(responseInfo);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
function addErrorLog(error) {
|
|
133
|
-
const env = salesFrontendUtils.getEnvironmentFromHostname(location.hostname);
|
|
134
|
-
if (env !== "prd") {
|
|
135
|
-
const { addError, isHold, holdError } = useDebugStore.getState();
|
|
136
|
-
const { config } = error;
|
|
137
|
-
const errorInfo = {
|
|
138
|
-
url: config?.url || "",
|
|
139
|
-
method: config?.method || "",
|
|
140
|
-
message: error.message,
|
|
141
|
-
config: error.config,
|
|
142
|
-
response: error.response ? {
|
|
143
|
-
url: error.response.config?.url || "",
|
|
144
|
-
method: error.response.config?.method || "",
|
|
145
|
-
status: error.response.status,
|
|
146
|
-
statusText: error.response.statusText,
|
|
147
|
-
headers: error.response.headers,
|
|
148
|
-
data: error.response.data
|
|
149
|
-
} : void 0
|
|
150
|
-
};
|
|
151
|
-
if (isHold) {
|
|
152
|
-
return new Promise((resolver) => {
|
|
153
|
-
holdError({ error: errorInfo, resolver });
|
|
154
|
-
});
|
|
155
|
-
} else {
|
|
156
|
-
addError(errorInfo);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
52
|
|
|
161
53
|
// src/http-client/header/header.types.ts
|
|
162
54
|
var customHeaderNames = [
|
|
@@ -250,11 +142,16 @@ var HttpClientAxios = class {
|
|
|
250
142
|
});
|
|
251
143
|
this.api.interceptors.request.use(
|
|
252
144
|
async (config2) => {
|
|
253
|
-
await addRequestLog(config2);
|
|
145
|
+
await salesFrontendDebug.addRequestLog(config2);
|
|
146
|
+
const debugRefreshQueueOff = config2.headers?.["Debug-Refresh-Queue-Off"] === "true";
|
|
147
|
+
if (debugRefreshQueueOff) {
|
|
148
|
+
isRefreshed = true;
|
|
149
|
+
}
|
|
254
150
|
const authClient = new AuthClient();
|
|
255
151
|
const accessToken = await authClient.getAT();
|
|
152
|
+
console.log("accessToken", accessToken);
|
|
256
153
|
if (accessToken) {
|
|
257
|
-
config2.headers
|
|
154
|
+
config2.headers["Authorization"] = `Bearer ${accessToken}`;
|
|
258
155
|
}
|
|
259
156
|
if (salesFrontendUtils.getEnvironmentFromHostname(location.hostname) === "local") {
|
|
260
157
|
console.log("localhost header setting!");
|
|
@@ -271,7 +168,9 @@ var HttpClientAxios = class {
|
|
|
271
168
|
this.headerManager.setCustomHeaders();
|
|
272
169
|
const headerEntries = Object.entries(this.headers);
|
|
273
170
|
headerEntries.forEach(([key, value]) => {
|
|
274
|
-
config2
|
|
171
|
+
if (config2?.headers) {
|
|
172
|
+
config2.headers[key] = value;
|
|
173
|
+
}
|
|
275
174
|
});
|
|
276
175
|
if (!isRefreshed) {
|
|
277
176
|
return new Promise((resolve, reject) => {
|
|
@@ -286,16 +185,17 @@ var HttpClientAxios = class {
|
|
|
286
185
|
);
|
|
287
186
|
this.api.interceptors.response.use(
|
|
288
187
|
async (response) => {
|
|
289
|
-
await addResponseLog(response);
|
|
188
|
+
await salesFrontendDebug.addResponseLog(response);
|
|
290
189
|
if (response.data.isSuccess === false) {
|
|
291
190
|
return Promise.reject(response);
|
|
292
191
|
}
|
|
293
192
|
return response;
|
|
294
193
|
},
|
|
295
194
|
async (error) => {
|
|
296
|
-
await addErrorLog(error);
|
|
195
|
+
await salesFrontendDebug.addErrorLog(error);
|
|
297
196
|
const originalRequest = error.config;
|
|
298
|
-
|
|
197
|
+
const debugRefreshQueueOff = config.headers?.["Debug-Refresh-Queue-Off"] === "true";
|
|
198
|
+
if (error.response?.status === 401 && !debugRefreshQueueOff) {
|
|
299
199
|
isRefreshed = false;
|
|
300
200
|
const client = new AuthClient();
|
|
301
201
|
client.refreshToken().then(() => {
|
|
@@ -370,10 +270,6 @@ var AuthClient = class {
|
|
|
370
270
|
|
|
371
271
|
exports.AuthClient = AuthClient;
|
|
372
272
|
exports.HttpClientAxios = HttpClientAxios;
|
|
373
|
-
exports.addErrorLog = addErrorLog;
|
|
374
|
-
exports.addRequestLog = addRequestLog;
|
|
375
|
-
exports.addResponseLog = addResponseLog;
|
|
376
273
|
exports.cookieClient = cookieClient;
|
|
377
|
-
exports.useDebugStore = useDebugStore;
|
|
378
274
|
//# sourceMappingURL=client.cjs.map
|
|
379
275
|
//# sourceMappingURL=client.cjs.map
|
package/dist/client.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/http-client/cookie/cookie-client.ts","../src/http-client/debug/debug-store.ts","../src/http-client/debug/interceptor-function.ts","../src/http-client/header/header.types.ts","../src/http-client/header/header-manager.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/auth/auth-client.ts"],"names":["create","getEnvironmentFromHostname","axios","config","error","isDspWebview"],"mappings":"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","file":"client.cjs","sourcesContent":["/**\n * 클라이언트용 쿠키 함수\n */\nexport const cookieClient = {\n getCookie(name: string): string {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n },\n\n setCookie(\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n ): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n },\n deleteCookie(name: string, options: { path?: string; domain?: string } = {}): void {\n cookieClient.setCookie(name, '', { ...options, expires: -1 });\n }\n};\n","import { create } from 'zustand';\n\nimport { DebugStore } from './debug.types';\n\nexport const useDebugStore = create<DebugStore>()((set) => ({\n requests: [],\n responses: [],\n errors: [],\n isHold: false,\n heldRequests: [],\n heldResponses: [],\n heldErrors: [],\n addRequest: (request) => set((state) => ({ requests: [...state.requests, request] })),\n addResponse: (response) => set((state) => ({ responses: [...state.responses, response] })),\n addError: (error) => set((state) => ({ errors: [...state.errors, error] })),\n clear: () => set({ requests: [], responses: [], errors: [], heldRequests: [], heldResponses: [], heldErrors: [] }),\n toggleHold: () => set((state) => ({ isHold: !state.isHold })),\n holdRequest: (request) => set((state) => ({ heldRequests: [...state.heldRequests, request] })),\n holdResponse: (response) => set((state) => ({ heldResponses: [...state.heldResponses, response] })),\n holdError: (error) => set((state) => ({ heldErrors: [...state.heldErrors, error] })),\n playAllRequests: () =>\n set((state) => {\n state.heldRequests.forEach((r) => r.resolver(r.request));\n\n return {\n requests: [...state.requests, ...state.heldRequests.map((r) => r.request)],\n heldRequests: []\n };\n }),\n playAllResponses: () =>\n set((state) => {\n state.heldResponses.forEach((r) => r.resolver(r.response));\n state.heldErrors.forEach((r) => r.resolver(r.error));\n\n return {\n responses: [...state.responses, ...state.heldResponses.map((r) => r.response)],\n errors: [...state.errors, ...state.heldErrors.map((r) => r.error)],\n heldResponses: [],\n heldErrors: []\n };\n })\n}));\n","import { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { useDebugStore } from '.';\n\n/** debug-tool 에서 사용될 로그 저장 */\nexport function addRequestLog(config: InternalAxiosRequestConfig) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addRequest, isHold, holdRequest } = useDebugStore.getState();\n const startTime = Date.now();\n const requestInfo = {\n url: config.url || '',\n method: config.method || '',\n headers: config.headers,\n params: config.params,\n data: config.data,\n startTime\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdRequest({ request: requestInfo, resolver });\n });\n } else {\n addRequest(requestInfo);\n }\n }\n}\n\n/** debug-tool 에서 사용될 로그 저장 */\nexport function addResponseLog(response: AxiosResponse) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addResponse, isHold, holdResponse } = useDebugStore.getState();\n const { config } = response;\n const responseInfo = {\n url: config.url || '',\n method: config.method || '',\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n data: response.data\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdResponse({ response: responseInfo, resolver });\n });\n } else {\n addResponse(responseInfo);\n }\n }\n}\n\nexport function addErrorLog(error: AxiosError) {\n const env = getEnvironmentFromHostname(location.hostname);\n\n /**\n * 운영환경이 아닐때만 저장\n */\n if (env !== 'prd') {\n const { addError, isHold, holdError } = useDebugStore.getState();\n const { config } = error;\n const errorInfo = {\n url: config?.url || '',\n method: config?.method || '',\n message: error.message,\n config: error.config,\n response: error.response\n ? {\n url: error.response.config?.url || '',\n method: error.response.config?.method || '',\n status: error.response.status,\n statusText: error.response.statusText,\n headers: error.response.headers,\n data: error.response.data\n }\n : undefined\n };\n\n if (isHold) {\n return new Promise((resolver) => {\n holdError({ error: errorInfo, resolver });\n });\n } else {\n addError(errorInfo);\n }\n }\n}\n","/**\n * @see https://loop.cloud.microsoft/p/eyJ3Ijp7InUiOiJodHRwczovL2hhbndoYWxpZmVtMzY1LnNoYXJlcG9pbnQuY29tLz9uYXY9Y3owbE1rWW1aRDFpSVVVd1FXdDJSbGhSV0VWUE1tUkNYMWhUZW5KWVVFdFBSVXByYWs1b1NrSlBjRk4wYm5wNmNsWmpMVUZ5YjI1UlJWOVdSREpUV25aeWVUUTJTV2swUlZrbVpqMHdNVk5OVGtkR1JsTkJXVE0xVVZaQ1ZrRkVRa1ZaVEVoRVNUSTBXRXhVVlZoV0ptTTlKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwicCI6eyJ1IjoiaHR0cHM6Ly9oYW53aGFsaWZlbTM2NS5zaGFyZXBvaW50LmNvbS9jb250ZW50c3RvcmFnZS9DU1BfYmMyNDQwMTMtZDA1NS00MzVjLWI2NzQtMWZkNzRiM2FkNzNjLyVFQiVBQyVCOCVFQyU4NCU5QyUyMCVFQiU5RCVCQyVFQyU5RCVCNCVFQiVCOCU4QyVFQiU5RiVBQyVFQiVBNiVBQy9Mb29wQXBwRGF0YS8wOS0yLiUyMEJyaWRnZSUyMFNwZWMlMjAxLmxvb3A%2FbmF2PWN6MGxNa1pqYjI1MFpXNTBjM1J2Y21GblpTVXlSa05UVUY5aVl6STBOREF4TXkxa01EVTFMVFF6TldNdFlqWTNOQzB4Wm1RM05HSXpZV1EzTTJNbVpEMWlJVVV3UVd0MlJsaFJXRVZQTW1SQ1gxaFRlbkpZVUV0UFJVcHJhazVvU2tKUGNGTjBibnA2Y2xaakxVRnliMjVSUlY5V1JESlRXblp5ZVRRMlNXazBSVmttWmowd01WTk5Ua2RHUmxGRlYxTlFOelpMUWtsTFdrWkpXVUUzU1ZkWldGTklWa0ZUSm1NOUpUSkdKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwiaSI6eyJpIjoiNTdkZmVhM2QtZDA2Yi00YWRlLWIxZjEtYjE4NDA4MmNlN2VjIn19\n */\nexport const customHeaderNames = [\n 'Accept-Language',\n 'DeviceId',\n 'LoginType',\n 'PlatformName',\n 'PlatformVersion',\n 'AppVersion',\n 'DeviceModel',\n 'FormFactor',\n 'LoginChannel'\n];\n\nexport const AT = 'AT';\nexport type GetterSync = (keyName: string) => string;\nexport type SetterSync = (keyName: string, value: string) => void;\n\nexport type GetterAsync = (keyName: string) => Promise<string> | string;\nexport type SetterAsync = (keyName: string, value: string) => Promise<void> | void;\n","import { AT, customHeaderNames, GetterSync, SetterSync } from './header.types';\n\nexport class HeaderManager {\n private getter: GetterSync;\n private setter: SetterSync;\n\n constructor(getter: GetterSync, setter: SetterSync) {\n this.getter = getter;\n this.setter = setter;\n }\n\n /**\n * 커스텀 헤더를 동기적으로 설정합니다.\n */\n setCustomHeaders(): void {\n customHeaderNames.forEach((headerName) => {\n const customHeaderKey = `X-Channel-${headerName}`;\n const headerValue = this.getter(customHeaderKey);\n if (headerValue) {\n this.setter(customHeaderKey, headerValue);\n }\n });\n }\n\n /**\n * 인증 토큰을 동기적으로 설정합니다.\n */\n setAuthToken(): void {\n const token = this.getter(AT);\n if (token) {\n this.setter('Authorization', `Bearer ${token}`);\n }\n }\n\n /**\n * 모든 헤더를 동기적으로 설정합니다.\n */\n setAllHeaders(): void {\n this.setCustomHeaders();\n this.setAuthToken();\n }\n}\n","import axios from 'axios';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { cookieClient } from '../cookie/cookie-client';\nimport { addErrorLog, addRequestLog, addResponseLog } from '../debug/interceptor-function';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType } from './types';\nimport type { AxiosError, AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nlet isRefreshed = true;\nconst axiosQueue: AxiosQueueType[] = [];\n\n/**\n * 쿠키에서 값을 가져오고, 없으면 기본값을 쿠키에 설정 후 반환하는 헬퍼 함수\n * @param key 쿠키 키\n * @param defaultValue 쿠키 값이 없을 때 사용할 기본값\n * @returns 쿠키 값 또는 기본값\n */\nconst getOrSetCookie = (key: string, defaultValue: string): string => {\n let value = cookieClient.getCookie(key);\n if (!value) {\n value = defaultValue;\n cookieClient.setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\n\n /**\n * axios의 request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n headers: Record<string, string> = {};\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n api: AxiosInstance;\n constructor(config: AxiosRequestConfig = {}) {\n this.config = config;\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return cookieClient.getCookie(key);\n };\n const setter: HeaderManager['setter'] = (key, value) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n };\n this.headerManager = new HeaderManager(getter, setter);\n\n /**\n * api수행객체 최초 생성,\n * 공통으로 적용할 설정값이 있는경우 셋팅\n */\n this.api = axios.create({\n withCredentials: true,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n /** 디버깅용 로그 */\n await addRequestLog(config);\n\n /**\n * AT토큰 주입\n */\n const authClient = new AuthClient();\n const accessToken = await authClient.getAT();\n if (accessToken) {\n config.headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (getEnvironmentFromHostname(location.hostname) === 'local') {\n console.log('localhost header setting!');\n /**\n * 주소가 localhost인 경우 테스트용 헤더 삽입\n */\n config.headers['x-channel-appversion'] = getOrSetCookie('x-channel-appversion', '3.1');\n config.headers['x-channel-deviceid'] = getOrSetCookie('x-channel-deviceid', 'deviceid');\n config.headers['x-channel-devicemodel'] = getOrSetCookie('x-channel-devicemodel', 'iPHONE13');\n config.headers['x-channel-formfactor'] = getOrSetCookie('x-channel-formfactor', 'Phone');\n config.headers['x-channel-loginchannel'] = getOrSetCookie('x-channel-loginchannel', 'DSP');\n config.headers['x-channel-logintype'] = getOrSetCookie('x-channel-logintype', 'ONPA_PIN');\n config.headers['x-channel-platformname'] = getOrSetCookie('x-channel-platformname', 'IOS');\n config.headers['x-channel-platformversion'] = getOrSetCookie('x-channel-platformversion', '15.4.1');\n config.headers['x-channel-screenid'] = getOrSetCookie('x-channel-screenid', 'ScreenId');\n }\n\n /**\n * 커스텀헤더 주입\n */\n this.headerManager.setCustomHeaders();\n /**\n *\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n headerEntries.forEach(([key, value]) => {\n config.headers.set(key, value);\n });\n\n /**\n * isRefreshed가 false이면(= 에러발생하여 token재발행중을 의미)\n * 새로운 요청들을 처리하지 않고,큐에 저장\n * 401에러 Queue처리 Request interceptor 등록\n */\n if (!isRefreshed) {\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n\n /**\n * 인터셉터 응답 처리\n */\n this.api.interceptors.response.use(\n async (response: AxiosResponse) => {\n /** 디버깅용 로그 */\n await addResponseLog(response);\n\n if (response.data.isSuccess === false) {\n /**\n * 200 응답이라도 , isSuccess === false인 경우 에러로 reject\n */\n return Promise.reject(response);\n }\n\n return response;\n },\n async (error: AxiosError) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n\n /**\n * 401에러 Queue처리\n */\n if (error.response?.status === 401) {\n isRefreshed = false;\n const client = new AuthClient();\n client\n .refreshToken()\n .then(() => {\n /**\n * 토큰 갱신 성공, 플래그를 true로 설정\n */\n isRefreshed = true;\n\n /**\n * 큐에 쌓여있던 모든 요청 재시도\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n /**\n * api 인스턴스를 통해 요청을 재시도합니다. 따라서 재요청들은 다시 인터셉터를 타게 됩니다.\n * 신규토큰을 주입받고 정상처리\n * @todo 재시도후 reject시에는 로그인페이지로 보내는 브릿지 함수를 호출하도록 처리가 필요해보임.\n */\n this.api(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * @todo 로그인페이지 이동(?)\n */\n return Promise.reject(error);\n });\n\n return new Promise((resolve, reject) => {\n if (originalRequest) {\n axiosQueue.push({ resolve, reject, config: originalRequest });\n }\n });\n } else {\n return Promise.reject(error);\n }\n }\n );\n }\n\n setHeaders(headers: Record<string, string>) {\n this.headers = {\n ...this.headers,\n ...headers\n };\n }\n}","// import { bridge } from '@/app/responsive/bridge/tmp-bridge';\n// import { CsrHttpClientAxios } from '../axios/csr-http-client-axios';\n\nimport { getEnvironmentFromHostname, isDspWebview } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\nimport { cookieClient } from '../cookie/cookie-client';\n\nexport class AuthClient {\n /**\n * App인지 확인\n * @returns boolean\n */\n isApp() {\n return isDspWebview();\n }\n\n /**\n *\n * @returns Promise<string | undefined>\n * 주소가 localhost인 경우 cookie에서 'AT' 를 읽어온다.\n */\n async getAT(): Promise<string | undefined> {\n /**\n * 주소가 localhost인 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (getEnvironmentFromHostname(location.hostname) === 'local') {\n console.log('localhost token setting!');\n\n return cookieClient.getCookie('accessToken');\n }\n\n if (this.isApp()) {\n /**\n * @todo : 브릿지 함수 호출 스펙에 맞게 수정필요\n */\n // return await bridge.callToNative('', '', 'getAT', {});\n return '';\n } else {\n /**\n * pc인 경우는, middleware.ts 에서 요청헤더에 주입\n */\n }\n }\n\n /**\n * RT를 이용하여 신규 AT/RT발행\n * 기존토큰은 무효화처리\n * 쿠키에 저장.\n * @returns Promise<string> 액세스토큰\n */\n async refreshToken(): Promise<string> {\n if (this.isApp()) {\n /**\n * @todo : 브릿지 함수 호출 스펙에 맞게 수정필요\n */\n // @ts-ignore\n return await bridge.callToNative('', '', 'refreshToken', {});\n } else {\n /**\n * @todo : 내부api호출\n */\n const httpclient = new HttpClientAxios({});\n const res = await httpclient.api.get('/internal/api/auth/refresh');\n\n return res?.data.accessToken;\n }\n }\n}\n//\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/http-client/cookie/cookie-client.ts","../src/http-client/header/header.types.ts","../src/http-client/header/header-manager.ts","../src/http-client/axios/http-client-axios.ts","../src/http-client/auth/auth-client.ts"],"names":["axios","config","addRequestLog","getEnvironmentFromHostname","addResponseLog","addErrorLog","error","isDspWebview"],"mappings":"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","file":"client.cjs","sourcesContent":["/**\n * 클라이언트용 쿠키 함수\n */\nexport const cookieClient = {\n getCookie(name: string): string {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n },\n\n setCookie(\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n ): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n },\n deleteCookie(name: string, options: { path?: string; domain?: string } = {}): void {\n cookieClient.setCookie(name, '', { ...options, expires: -1 });\n }\n};\n","/**\n * @see https://loop.cloud.microsoft/p/eyJ3Ijp7InUiOiJodHRwczovL2hhbndoYWxpZmVtMzY1LnNoYXJlcG9pbnQuY29tLz9uYXY9Y3owbE1rWW1aRDFpSVVVd1FXdDJSbGhSV0VWUE1tUkNYMWhUZW5KWVVFdFBSVXByYWs1b1NrSlBjRk4wYm5wNmNsWmpMVUZ5YjI1UlJWOVdSREpUV25aeWVUUTJTV2swUlZrbVpqMHdNVk5OVGtkR1JsTkJXVE0xVVZaQ1ZrRkVRa1ZaVEVoRVNUSTBXRXhVVlZoV0ptTTlKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwicCI6eyJ1IjoiaHR0cHM6Ly9oYW53aGFsaWZlbTM2NS5zaGFyZXBvaW50LmNvbS9jb250ZW50c3RvcmFnZS9DU1BfYmMyNDQwMTMtZDA1NS00MzVjLWI2NzQtMWZkNzRiM2FkNzNjLyVFQiVBQyVCOCVFQyU4NCU5QyUyMCVFQiU5RCVCQyVFQyU5RCVCNCVFQiVCOCU4QyVFQiU5RiVBQyVFQiVBNiVBQy9Mb29wQXBwRGF0YS8wOS0yLiUyMEJyaWRnZSUyMFNwZWMlMjAxLmxvb3A%2FbmF2PWN6MGxNa1pqYjI1MFpXNTBjM1J2Y21GblpTVXlSa05UVUY5aVl6STBOREF4TXkxa01EVTFMVFF6TldNdFlqWTNOQzB4Wm1RM05HSXpZV1EzTTJNbVpEMWlJVVV3UVd0MlJsaFJXRVZQTW1SQ1gxaFRlbkpZVUV0UFJVcHJhazVvU2tKUGNGTjBibnA2Y2xaakxVRnliMjVSUlY5V1JESlRXblp5ZVRRMlNXazBSVmttWmowd01WTk5Ua2RHUmxGRlYxTlFOelpMUWtsTFdrWkpXVUUzU1ZkWldGTklWa0ZUSm1NOUpUSkdKbVpzZFdsa1BURSUzRCIsInIiOmZhbHNlfSwiaSI6eyJpIjoiNTdkZmVhM2QtZDA2Yi00YWRlLWIxZjEtYjE4NDA4MmNlN2VjIn19\n */\nexport const customHeaderNames = [\n 'Accept-Language',\n 'DeviceId',\n 'LoginType',\n 'PlatformName',\n 'PlatformVersion',\n 'AppVersion',\n 'DeviceModel',\n 'FormFactor',\n 'LoginChannel'\n];\n\nexport const AT = 'AT';\nexport type GetterSync = (keyName: string) => string;\nexport type SetterSync = (keyName: string, value: string) => void;\n\nexport type GetterAsync = (keyName: string) => Promise<string> | string;\nexport type SetterAsync = (keyName: string, value: string) => Promise<void> | void;\n","import { AT, customHeaderNames, GetterSync, SetterSync } from './header.types';\n\nexport class HeaderManager {\n private getter: GetterSync;\n private setter: SetterSync;\n\n constructor(getter: GetterSync, setter: SetterSync) {\n this.getter = getter;\n this.setter = setter;\n }\n\n /**\n * 커스텀 헤더를 동기적으로 설정합니다.\n */\n setCustomHeaders(): void {\n customHeaderNames.forEach((headerName) => {\n const customHeaderKey = `X-Channel-${headerName}`;\n const headerValue = this.getter(customHeaderKey);\n if (headerValue) {\n this.setter(customHeaderKey, headerValue);\n }\n });\n }\n\n /**\n * 인증 토큰을 동기적으로 설정합니다.\n */\n setAuthToken(): void {\n const token = this.getter(AT);\n if (token) {\n this.setter('Authorization', `Bearer ${token}`);\n }\n }\n\n /**\n * 모든 헤더를 동기적으로 설정합니다.\n */\n setAllHeaders(): void {\n this.setCustomHeaders();\n this.setAuthToken();\n }\n}\n","import axios from 'axios';\nimport { addErrorLog, addRequestLog, addResponseLog } from 'sales-frontend-debug';\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { AuthClient } from '../auth/auth-client';\nimport { cookieClient } from '../cookie/cookie-client';\nimport { HeaderManager } from '../header/header-manager';\n\nimport type { AxiosQueueType } from './types';\nimport type { AxiosError, AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nlet isRefreshed = true;\nconst axiosQueue: AxiosQueueType[] = [];\n\n/**\n * 쿠키에서 값을 가져오고, 없으면 기본값을 쿠키에 설정 후 반환하는 헬퍼 함수\n * @param key 쿠키 키\n * @param defaultValue 쿠키 값이 없을 때 사용할 기본값\n * @returns 쿠키 값 또는 기본값\n */\nconst getOrSetCookie = (key: string, defaultValue: string): string => {\n let value = cookieClient.getCookie(key);\n if (!value) {\n value = defaultValue;\n cookieClient.setCookie(key, value, { path: '/' });\n }\n\n return value;\n};\n\n/**\n * 전자청약\n * CSR용 http-client 입니다.\n * cookie , redirect , tokem 처리 방식은 CSR 환경에 맞게 구현됩니다.\n */\nexport class HttpClientAxios {\n config: AxiosRequestConfig;\n headerManager: HeaderManager;\n\n /**\n * axios의 request interceptor 동작시, 헤더에 주입될 헤더의 key,value\n */\n headers: Record<string, string> = {};\n\n /**\n * api연동을 수행할 실제 객체(axios, fetch 등의 다른 라이브러리로 교체가능한 영역)\n * 현재 버전에서는 axios를 사용하여 구현됨.\n */\n api: AxiosInstance;\n constructor(config: AxiosRequestConfig = {}) {\n this.config = config;\n\n /**\n * 헤더매니저 셋팅\n */\n const getter: HeaderManager['getter'] = (key) => {\n return cookieClient.getCookie(key);\n };\n const setter: HeaderManager['setter'] = (key, value) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n };\n this.headerManager = new HeaderManager(getter, setter);\n\n /**\n * api수행객체 최초 생성,\n * 공통으로 적용할 설정값이 있는경우 셋팅\n */\n this.api = axios.create({\n withCredentials: true,\n ...config\n });\n\n /**\n * 인터셉터 요청 처리\n */\n this.api.interceptors.request.use(\n async (config) => {\n /** 디버깅용 로그 */\n await addRequestLog(config);\n\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n if (debugRefreshQueueOff) {\n isRefreshed = true;\n }\n\n /**\n * AT토큰 주입\n */\n const authClient = new AuthClient();\n const accessToken = await authClient.getAT();\n console.log('accessToken', accessToken);\n if (accessToken) {\n config.headers['Authorization'] = `Bearer ${accessToken}`;\n }\n\n if (getEnvironmentFromHostname(location.hostname) === 'local') {\n console.log('localhost header setting!');\n /**\n * 주소가 localhost인 경우 테스트용 헤더 삽입\n */\n config.headers['x-channel-appversion'] = getOrSetCookie('x-channel-appversion', '3.1');\n config.headers['x-channel-deviceid'] = getOrSetCookie('x-channel-deviceid', 'deviceid');\n config.headers['x-channel-devicemodel'] = getOrSetCookie('x-channel-devicemodel', 'iPHONE13');\n config.headers['x-channel-formfactor'] = getOrSetCookie('x-channel-formfactor', 'Phone');\n config.headers['x-channel-loginchannel'] = getOrSetCookie('x-channel-loginchannel', 'DSP');\n config.headers['x-channel-logintype'] = getOrSetCookie('x-channel-logintype', 'ONPA_PIN');\n config.headers['x-channel-platformname'] = getOrSetCookie('x-channel-platformname', 'IOS');\n config.headers['x-channel-platformversion'] = getOrSetCookie('x-channel-platformversion', '15.4.1');\n config.headers['x-channel-screenid'] = getOrSetCookie('x-channel-screenid', 'ScreenId');\n }\n\n /**\n * 커스텀헤더 주입\n */\n this.headerManager.setCustomHeaders();\n /**\n *\n * this.headers설정된 값을 config headers에 주입\n */\n const headerEntries = Object.entries(this.headers);\n headerEntries.forEach(([key, value]) => {\n if (config?.headers) {\n config.headers[key] = value;\n }\n });\n\n /**\n * isRefreshed가 false이면(= 에러발생하여 token재발행중을 의미)\n * 새로운 요청들을 처리하지 않고,큐에 저장\n * 401에러 Queue처리 Request interceptor 등록\n */\n if (!isRefreshed) {\n return new Promise((resolve, reject) => {\n axiosQueue.push({ resolve, reject, config });\n }).then(() => config);\n }\n\n return config;\n },\n (error) => {\n return Promise.reject(error);\n }\n );\n\n /**\n * 인터셉터 응답 처리\n */\n this.api.interceptors.response.use(\n async (response: AxiosResponse) => {\n /** 디버깅용 로그 */\n await addResponseLog(response);\n if (response.data.isSuccess === false) {\n /**\n * 200 응답이라도 , isSuccess === false인 경우 에러로 reject\n */\n return Promise.reject(response);\n }\n\n return response;\n },\n async (error: AxiosError) => {\n /** 디버깅용 로그 */\n await addErrorLog(error);\n\n const originalRequest = error.config;\n const debugRefreshQueueOff = config.headers?.['Debug-Refresh-Queue-Off'] === 'true';\n /**\n * 401에러 Queue처리\n */\n if (error.response?.status === 401 && !debugRefreshQueueOff) {\n isRefreshed = false;\n const client = new AuthClient();\n client\n .refreshToken()\n .then(() => {\n /**\n * 토큰 갱신 성공, 플래그를 true로 설정\n */\n isRefreshed = true;\n\n /**\n * 큐에 쌓여있던 모든 요청 재시도\n */\n while (axiosQueue.length > 0) {\n const p = axiosQueue.shift(); // axiosQueue에서 첫 번째 요소를 제거하고 반환합니다.\n if (p) {\n /**\n * api 인스턴스를 통해 요청을 재시도합니다. 따라서 재요청들은 다시 인터셉터를 타게 됩니다.\n * 신규토큰을 주입받고 정상처리\n * @todo 재시도후 reject시에는 로그인페이지로 보내는 브릿지 함수를 호출하도록 처리가 필요해보임.\n */\n this.api(p.config)\n .then((response) => p.resolve(response))\n .catch((err) => p.reject(err));\n }\n }\n })\n .catch((error) => {\n /**\n * 토큰 재발행중 에러 발생한 경우 처리\n * @todo 로그인페이지 이동(?)\n */\n return Promise.reject(error);\n });\n\n return new Promise((resolve, reject) => {\n if (originalRequest) {\n axiosQueue.push({ resolve, reject, config: originalRequest });\n }\n });\n } else {\n return Promise.reject(error);\n }\n }\n );\n }\n\n setHeaders(headers: Record<string, string>) {\n this.headers = {\n ...this.headers,\n ...headers\n };\n }\n}\n","// import { bridge } from '@/app/responsive/bridge/tmp-bridge';\n// import { CsrHttpClientAxios } from '../axios/csr-http-client-axios';\n\nimport { getEnvironmentFromHostname, isDspWebview } from 'sales-frontend-utils';\n\nimport { HttpClientAxios } from '../axios/http-client-axios';\nimport { cookieClient } from '../cookie/cookie-client';\n\nexport class AuthClient {\n /**\n * App인지 확인\n * @returns boolean\n */\n isApp() {\n return isDspWebview();\n }\n\n /**\n *\n * @returns Promise<string | undefined>\n * 주소가 localhost인 경우 cookie에서 'AT' 를 읽어온다.\n */\n async getAT(): Promise<string | undefined> {\n /**\n * 주소가 localhost인 경우 cookie에서 'AT' 를 읽어온다.\n */\n if (getEnvironmentFromHostname(location.hostname) === 'local') {\n console.log('localhost token setting!');\n\n return cookieClient.getCookie('accessToken');\n }\n\n if (this.isApp()) {\n /**\n * @todo : 브릿지 함수 호출 스펙에 맞게 수정필요\n */\n // return await bridge.callToNative('', '', 'getAT', {});\n return '';\n } else {\n /**\n * pc인 경우는, middleware.ts 에서 요청헤더에 주입\n */\n }\n }\n\n /**\n * RT를 이용하여 신규 AT/RT발행\n * 기존토큰은 무효화처리\n * 쿠키에 저장.\n * @returns Promise<string> 액세스토큰\n */\n async refreshToken(): Promise<string> {\n if (this.isApp()) {\n /**\n * @todo : 브릿지 함수 호출 스펙에 맞게 수정필요\n */\n // @ts-ignore\n return await bridge.callToNative('', '', 'refreshToken', {});\n } else {\n /**\n * @todo : 내부api호출\n */\n const httpclient = new HttpClientAxios({});\n const res = await httpclient.api.get('/internal/api/auth/refresh');\n\n return res?.data.accessToken;\n }\n }\n}\n//\n"]}
|
package/dist/client.d.cts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { InternalAxiosRequestConfig
|
|
1
|
+
import { InternalAxiosRequestConfig } from 'axios';
|
|
2
2
|
export { H as HttpClientAxios } from './http-client-axios-Cz6Oo35g.cjs';
|
|
3
|
-
import * as zustand from 'zustand';
|
|
4
3
|
import './header.types-duHbFvO0.cjs';
|
|
5
4
|
|
|
6
5
|
declare class AuthClient {
|
|
@@ -30,72 +29,6 @@ interface AxiosQueueType {
|
|
|
30
29
|
config: InternalAxiosRequestConfig;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
interface RequestInfo {
|
|
34
|
-
url: string;
|
|
35
|
-
method: string;
|
|
36
|
-
headers: any;
|
|
37
|
-
params: any;
|
|
38
|
-
data: any;
|
|
39
|
-
startTime: number;
|
|
40
|
-
}
|
|
41
|
-
interface ResponseInfo {
|
|
42
|
-
url: string;
|
|
43
|
-
method: string;
|
|
44
|
-
status: number;
|
|
45
|
-
statusText: string;
|
|
46
|
-
headers: any;
|
|
47
|
-
data: any;
|
|
48
|
-
}
|
|
49
|
-
interface ErrorInfo {
|
|
50
|
-
url: string;
|
|
51
|
-
method: string;
|
|
52
|
-
message: string;
|
|
53
|
-
config: any;
|
|
54
|
-
response?: ResponseInfo;
|
|
55
|
-
}
|
|
56
|
-
interface HeldRequest {
|
|
57
|
-
request: RequestInfo;
|
|
58
|
-
resolver: (value: any) => void;
|
|
59
|
-
}
|
|
60
|
-
interface HeldResponse {
|
|
61
|
-
response: ResponseInfo;
|
|
62
|
-
resolver: (value: any) => void;
|
|
63
|
-
}
|
|
64
|
-
interface HeldError {
|
|
65
|
-
error: ErrorInfo;
|
|
66
|
-
resolver: (value: any) => void;
|
|
67
|
-
}
|
|
68
|
-
interface DebugState {
|
|
69
|
-
requests: RequestInfo[];
|
|
70
|
-
responses: ResponseInfo[];
|
|
71
|
-
errors: ErrorInfo[];
|
|
72
|
-
isHold: boolean;
|
|
73
|
-
heldRequests: HeldRequest[];
|
|
74
|
-
heldResponses: HeldResponse[];
|
|
75
|
-
heldErrors: HeldError[];
|
|
76
|
-
}
|
|
77
|
-
interface DebugActions {
|
|
78
|
-
addRequest: (request: RequestInfo) => void;
|
|
79
|
-
addResponse: (response: ResponseInfo) => void;
|
|
80
|
-
addError: (error: ErrorInfo) => void;
|
|
81
|
-
clear: () => void;
|
|
82
|
-
toggleHold: () => void;
|
|
83
|
-
holdRequest: (request: HeldRequest) => void;
|
|
84
|
-
holdResponse: (response: HeldResponse) => void;
|
|
85
|
-
holdError: (error: HeldError) => void;
|
|
86
|
-
playAllRequests: () => void;
|
|
87
|
-
playAllResponses: () => void;
|
|
88
|
-
}
|
|
89
|
-
type DebugStore = DebugState & DebugActions;
|
|
90
|
-
|
|
91
|
-
declare const useDebugStore: zustand.UseBoundStore<zustand.StoreApi<DebugStore>>;
|
|
92
|
-
|
|
93
|
-
/** debug-tool 에서 사용될 로그 저장 */
|
|
94
|
-
declare function addRequestLog(config: InternalAxiosRequestConfig): Promise<unknown> | undefined;
|
|
95
|
-
/** debug-tool 에서 사용될 로그 저장 */
|
|
96
|
-
declare function addResponseLog(response: AxiosResponse): Promise<unknown> | undefined;
|
|
97
|
-
declare function addErrorLog(error: AxiosError): Promise<unknown> | undefined;
|
|
98
|
-
|
|
99
32
|
/**
|
|
100
33
|
* 클라이언트용 쿠키 함수
|
|
101
34
|
*/
|
|
@@ -113,4 +46,4 @@ declare const cookieClient: {
|
|
|
113
46
|
}): void;
|
|
114
47
|
};
|
|
115
48
|
|
|
116
|
-
export { AuthClient, type AxiosQueueType,
|
|
49
|
+
export { AuthClient, type AxiosQueueType, cookieClient };
|
package/dist/client.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { InternalAxiosRequestConfig
|
|
1
|
+
import { InternalAxiosRequestConfig } from 'axios';
|
|
2
2
|
export { H as HttpClientAxios } from './http-client-axios-D4Ub9Xlb.js';
|
|
3
|
-
import * as zustand from 'zustand';
|
|
4
3
|
import './header.types-duHbFvO0.js';
|
|
5
4
|
|
|
6
5
|
declare class AuthClient {
|
|
@@ -30,72 +29,6 @@ interface AxiosQueueType {
|
|
|
30
29
|
config: InternalAxiosRequestConfig;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
interface RequestInfo {
|
|
34
|
-
url: string;
|
|
35
|
-
method: string;
|
|
36
|
-
headers: any;
|
|
37
|
-
params: any;
|
|
38
|
-
data: any;
|
|
39
|
-
startTime: number;
|
|
40
|
-
}
|
|
41
|
-
interface ResponseInfo {
|
|
42
|
-
url: string;
|
|
43
|
-
method: string;
|
|
44
|
-
status: number;
|
|
45
|
-
statusText: string;
|
|
46
|
-
headers: any;
|
|
47
|
-
data: any;
|
|
48
|
-
}
|
|
49
|
-
interface ErrorInfo {
|
|
50
|
-
url: string;
|
|
51
|
-
method: string;
|
|
52
|
-
message: string;
|
|
53
|
-
config: any;
|
|
54
|
-
response?: ResponseInfo;
|
|
55
|
-
}
|
|
56
|
-
interface HeldRequest {
|
|
57
|
-
request: RequestInfo;
|
|
58
|
-
resolver: (value: any) => void;
|
|
59
|
-
}
|
|
60
|
-
interface HeldResponse {
|
|
61
|
-
response: ResponseInfo;
|
|
62
|
-
resolver: (value: any) => void;
|
|
63
|
-
}
|
|
64
|
-
interface HeldError {
|
|
65
|
-
error: ErrorInfo;
|
|
66
|
-
resolver: (value: any) => void;
|
|
67
|
-
}
|
|
68
|
-
interface DebugState {
|
|
69
|
-
requests: RequestInfo[];
|
|
70
|
-
responses: ResponseInfo[];
|
|
71
|
-
errors: ErrorInfo[];
|
|
72
|
-
isHold: boolean;
|
|
73
|
-
heldRequests: HeldRequest[];
|
|
74
|
-
heldResponses: HeldResponse[];
|
|
75
|
-
heldErrors: HeldError[];
|
|
76
|
-
}
|
|
77
|
-
interface DebugActions {
|
|
78
|
-
addRequest: (request: RequestInfo) => void;
|
|
79
|
-
addResponse: (response: ResponseInfo) => void;
|
|
80
|
-
addError: (error: ErrorInfo) => void;
|
|
81
|
-
clear: () => void;
|
|
82
|
-
toggleHold: () => void;
|
|
83
|
-
holdRequest: (request: HeldRequest) => void;
|
|
84
|
-
holdResponse: (response: HeldResponse) => void;
|
|
85
|
-
holdError: (error: HeldError) => void;
|
|
86
|
-
playAllRequests: () => void;
|
|
87
|
-
playAllResponses: () => void;
|
|
88
|
-
}
|
|
89
|
-
type DebugStore = DebugState & DebugActions;
|
|
90
|
-
|
|
91
|
-
declare const useDebugStore: zustand.UseBoundStore<zustand.StoreApi<DebugStore>>;
|
|
92
|
-
|
|
93
|
-
/** debug-tool 에서 사용될 로그 저장 */
|
|
94
|
-
declare function addRequestLog(config: InternalAxiosRequestConfig): Promise<unknown> | undefined;
|
|
95
|
-
/** debug-tool 에서 사용될 로그 저장 */
|
|
96
|
-
declare function addResponseLog(response: AxiosResponse): Promise<unknown> | undefined;
|
|
97
|
-
declare function addErrorLog(error: AxiosError): Promise<unknown> | undefined;
|
|
98
|
-
|
|
99
32
|
/**
|
|
100
33
|
* 클라이언트용 쿠키 함수
|
|
101
34
|
*/
|
|
@@ -113,4 +46,4 @@ declare const cookieClient: {
|
|
|
113
46
|
}): void;
|
|
114
47
|
};
|
|
115
48
|
|
|
116
|
-
export { AuthClient, type AxiosQueueType,
|
|
49
|
+
export { AuthClient, type AxiosQueueType, cookieClient };
|
package/dist/client.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getEnvironmentFromHostname, isDspWebview } from 'sales-frontend-utils';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import {
|
|
3
|
+
import { addRequestLog, addResponseLog, addErrorLog } from 'sales-frontend-debug';
|
|
4
4
|
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
6
6
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -43,114 +43,6 @@ var cookieClient = {
|
|
|
43
43
|
cookieClient.setCookie(name, "", { ...options, expires: -1 });
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
-
var useDebugStore = create()((set) => ({
|
|
47
|
-
requests: [],
|
|
48
|
-
responses: [],
|
|
49
|
-
errors: [],
|
|
50
|
-
isHold: false,
|
|
51
|
-
heldRequests: [],
|
|
52
|
-
heldResponses: [],
|
|
53
|
-
heldErrors: [],
|
|
54
|
-
addRequest: (request) => set((state) => ({ requests: [...state.requests, request] })),
|
|
55
|
-
addResponse: (response) => set((state) => ({ responses: [...state.responses, response] })),
|
|
56
|
-
addError: (error) => set((state) => ({ errors: [...state.errors, error] })),
|
|
57
|
-
clear: () => set({ requests: [], responses: [], errors: [], heldRequests: [], heldResponses: [], heldErrors: [] }),
|
|
58
|
-
toggleHold: () => set((state) => ({ isHold: !state.isHold })),
|
|
59
|
-
holdRequest: (request) => set((state) => ({ heldRequests: [...state.heldRequests, request] })),
|
|
60
|
-
holdResponse: (response) => set((state) => ({ heldResponses: [...state.heldResponses, response] })),
|
|
61
|
-
holdError: (error) => set((state) => ({ heldErrors: [...state.heldErrors, error] })),
|
|
62
|
-
playAllRequests: () => set((state) => {
|
|
63
|
-
state.heldRequests.forEach((r) => r.resolver(r.request));
|
|
64
|
-
return {
|
|
65
|
-
requests: [...state.requests, ...state.heldRequests.map((r) => r.request)],
|
|
66
|
-
heldRequests: []
|
|
67
|
-
};
|
|
68
|
-
}),
|
|
69
|
-
playAllResponses: () => set((state) => {
|
|
70
|
-
state.heldResponses.forEach((r) => r.resolver(r.response));
|
|
71
|
-
state.heldErrors.forEach((r) => r.resolver(r.error));
|
|
72
|
-
return {
|
|
73
|
-
responses: [...state.responses, ...state.heldResponses.map((r) => r.response)],
|
|
74
|
-
errors: [...state.errors, ...state.heldErrors.map((r) => r.error)],
|
|
75
|
-
heldResponses: [],
|
|
76
|
-
heldErrors: []
|
|
77
|
-
};
|
|
78
|
-
})
|
|
79
|
-
}));
|
|
80
|
-
|
|
81
|
-
// src/http-client/debug/interceptor-function.ts
|
|
82
|
-
function addRequestLog(config) {
|
|
83
|
-
const env = getEnvironmentFromHostname(location.hostname);
|
|
84
|
-
if (env !== "prd") {
|
|
85
|
-
const { addRequest, isHold, holdRequest } = useDebugStore.getState();
|
|
86
|
-
const startTime = Date.now();
|
|
87
|
-
const requestInfo = {
|
|
88
|
-
url: config.url || "",
|
|
89
|
-
method: config.method || "",
|
|
90
|
-
headers: config.headers,
|
|
91
|
-
params: config.params,
|
|
92
|
-
data: config.data,
|
|
93
|
-
startTime
|
|
94
|
-
};
|
|
95
|
-
if (isHold) {
|
|
96
|
-
return new Promise((resolver) => {
|
|
97
|
-
holdRequest({ request: requestInfo, resolver });
|
|
98
|
-
});
|
|
99
|
-
} else {
|
|
100
|
-
addRequest(requestInfo);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
function addResponseLog(response) {
|
|
105
|
-
const env = getEnvironmentFromHostname(location.hostname);
|
|
106
|
-
if (env !== "prd") {
|
|
107
|
-
const { addResponse, isHold, holdResponse } = useDebugStore.getState();
|
|
108
|
-
const { config } = response;
|
|
109
|
-
const responseInfo = {
|
|
110
|
-
url: config.url || "",
|
|
111
|
-
method: config.method || "",
|
|
112
|
-
status: response.status,
|
|
113
|
-
statusText: response.statusText,
|
|
114
|
-
headers: response.headers,
|
|
115
|
-
data: response.data
|
|
116
|
-
};
|
|
117
|
-
if (isHold) {
|
|
118
|
-
return new Promise((resolver) => {
|
|
119
|
-
holdResponse({ response: responseInfo, resolver });
|
|
120
|
-
});
|
|
121
|
-
} else {
|
|
122
|
-
addResponse(responseInfo);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
function addErrorLog(error) {
|
|
127
|
-
const env = getEnvironmentFromHostname(location.hostname);
|
|
128
|
-
if (env !== "prd") {
|
|
129
|
-
const { addError, isHold, holdError } = useDebugStore.getState();
|
|
130
|
-
const { config } = error;
|
|
131
|
-
const errorInfo = {
|
|
132
|
-
url: config?.url || "",
|
|
133
|
-
method: config?.method || "",
|
|
134
|
-
message: error.message,
|
|
135
|
-
config: error.config,
|
|
136
|
-
response: error.response ? {
|
|
137
|
-
url: error.response.config?.url || "",
|
|
138
|
-
method: error.response.config?.method || "",
|
|
139
|
-
status: error.response.status,
|
|
140
|
-
statusText: error.response.statusText,
|
|
141
|
-
headers: error.response.headers,
|
|
142
|
-
data: error.response.data
|
|
143
|
-
} : void 0
|
|
144
|
-
};
|
|
145
|
-
if (isHold) {
|
|
146
|
-
return new Promise((resolver) => {
|
|
147
|
-
holdError({ error: errorInfo, resolver });
|
|
148
|
-
});
|
|
149
|
-
} else {
|
|
150
|
-
addError(errorInfo);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
46
|
|
|
155
47
|
// src/http-client/header/header.types.ts
|
|
156
48
|
var customHeaderNames = [
|
|
@@ -245,10 +137,15 @@ var HttpClientAxios = class {
|
|
|
245
137
|
this.api.interceptors.request.use(
|
|
246
138
|
async (config2) => {
|
|
247
139
|
await addRequestLog(config2);
|
|
140
|
+
const debugRefreshQueueOff = config2.headers?.["Debug-Refresh-Queue-Off"] === "true";
|
|
141
|
+
if (debugRefreshQueueOff) {
|
|
142
|
+
isRefreshed = true;
|
|
143
|
+
}
|
|
248
144
|
const authClient = new AuthClient();
|
|
249
145
|
const accessToken = await authClient.getAT();
|
|
146
|
+
console.log("accessToken", accessToken);
|
|
250
147
|
if (accessToken) {
|
|
251
|
-
config2.headers
|
|
148
|
+
config2.headers["Authorization"] = `Bearer ${accessToken}`;
|
|
252
149
|
}
|
|
253
150
|
if (getEnvironmentFromHostname(location.hostname) === "local") {
|
|
254
151
|
console.log("localhost header setting!");
|
|
@@ -265,7 +162,9 @@ var HttpClientAxios = class {
|
|
|
265
162
|
this.headerManager.setCustomHeaders();
|
|
266
163
|
const headerEntries = Object.entries(this.headers);
|
|
267
164
|
headerEntries.forEach(([key, value]) => {
|
|
268
|
-
config2
|
|
165
|
+
if (config2?.headers) {
|
|
166
|
+
config2.headers[key] = value;
|
|
167
|
+
}
|
|
269
168
|
});
|
|
270
169
|
if (!isRefreshed) {
|
|
271
170
|
return new Promise((resolve, reject) => {
|
|
@@ -289,7 +188,8 @@ var HttpClientAxios = class {
|
|
|
289
188
|
async (error) => {
|
|
290
189
|
await addErrorLog(error);
|
|
291
190
|
const originalRequest = error.config;
|
|
292
|
-
|
|
191
|
+
const debugRefreshQueueOff = config.headers?.["Debug-Refresh-Queue-Off"] === "true";
|
|
192
|
+
if (error.response?.status === 401 && !debugRefreshQueueOff) {
|
|
293
193
|
isRefreshed = false;
|
|
294
194
|
const client = new AuthClient();
|
|
295
195
|
client.refreshToken().then(() => {
|
|
@@ -362,6 +262,6 @@ var AuthClient = class {
|
|
|
362
262
|
}
|
|
363
263
|
};
|
|
364
264
|
|
|
365
|
-
export { AuthClient, HttpClientAxios,
|
|
265
|
+
export { AuthClient, HttpClientAxios, cookieClient };
|
|
366
266
|
//# sourceMappingURL=client.js.map
|
|
367
267
|
//# sourceMappingURL=client.js.map
|