sales-frontend-server-side-helper 0.0.50 → 0.0.51

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.
@@ -1,8 +1,15 @@
1
1
  'use strict';
2
2
 
3
3
  // src/config/middleware-config.ts
4
- var middlewareDefaultMather = ["/:path*"];
4
+ var middlewareDefaultMatcher = [
5
+ "/api/:path*",
6
+ // /api 허용
7
+ "/",
8
+ // 루트 허용
9
+ "/((?!_next/static|_next/image|favicon.ico)(?!.*\\.).*)"
10
+ // 정적 자원 제외
11
+ ];
5
12
 
6
- exports.middlewareDefaultMather = middlewareDefaultMather;
13
+ exports.middlewareDefaultMatcher = middlewareDefaultMatcher;
7
14
  //# sourceMappingURL=index.cjs.map
8
15
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/middleware-config.ts"],"names":[],"mappings":";;;AAAa,IAAA,uBAAA,GAA0B,CAAC,SAAS","file":"index.cjs","sourcesContent":["export const middlewareDefaultMather = ['/:path*'];\n"]}
1
+ {"version":3,"sources":["../../src/config/middleware-config.ts"],"names":[],"mappings":";;;AAAO,IAAM,wBAA2B,GAAA;AAAA,EACtC,aAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA;AAAA;AACF","file":"index.cjs","sourcesContent":["export const middlewareDefaultMatcher = [\n '/api/:path*', // /api 허용\n '/', // 루트 허용\n '/((?!_next/static|_next/image|favicon.ico)(?!.*\\\\.).*)' // 정적 자원 제외\n];\n"]}
@@ -1,3 +1,3 @@
1
- declare const middlewareDefaultMather: string[];
1
+ declare const middlewareDefaultMatcher: string[];
2
2
 
3
- export { middlewareDefaultMather };
3
+ export { middlewareDefaultMatcher };
@@ -1,3 +1,3 @@
1
- declare const middlewareDefaultMather: string[];
1
+ declare const middlewareDefaultMatcher: string[];
2
2
 
3
- export { middlewareDefaultMather };
3
+ export { middlewareDefaultMatcher };
@@ -1,6 +1,13 @@
1
1
  // src/config/middleware-config.ts
2
- var middlewareDefaultMather = ["/:path*"];
2
+ var middlewareDefaultMatcher = [
3
+ "/api/:path*",
4
+ // /api 허용
5
+ "/",
6
+ // 루트 허용
7
+ "/((?!_next/static|_next/image|favicon.ico)(?!.*\\.).*)"
8
+ // 정적 자원 제외
9
+ ];
3
10
 
4
- export { middlewareDefaultMather };
11
+ export { middlewareDefaultMatcher };
5
12
  //# sourceMappingURL=index.js.map
6
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/middleware-config.ts"],"names":[],"mappings":";AAAa,IAAA,uBAAA,GAA0B,CAAC,SAAS","file":"index.js","sourcesContent":["export const middlewareDefaultMather = ['/:path*'];\n"]}
1
+ {"version":3,"sources":["../../src/config/middleware-config.ts"],"names":[],"mappings":";AAAO,IAAM,wBAA2B,GAAA;AAAA,EACtC,aAAA;AAAA;AAAA,EACA,GAAA;AAAA;AAAA,EACA;AAAA;AACF","file":"index.js","sourcesContent":["export const middlewareDefaultMatcher = [\n '/api/:path*', // /api 허용\n '/', // 루트 허용\n '/((?!_next/static|_next/image|favicon.ico)(?!.*\\\\.).*)' // 정적 자원 제외\n];\n"]}
@@ -202,7 +202,7 @@ var handleAdaptiveProcessing = (request, config) => {
202
202
  const formFactor = getFormFactor(request);
203
203
  const rewrittenUrl = nextUrl.clone();
204
204
  rewrittenUrl.pathname = convertAdaptiveTargetPath(nextUrl.pathname, formFactor);
205
- console.log(`[DSP Middleware] ReWrite \uCC98\uB9AC:: ${rewrittenUrl.pathname}`);
205
+ console.log(`[DSP Middleware] \uC801\uC751\uD615 ReWrite \uCC98\uB9AC:: ${rewrittenUrl.pathname}`);
206
206
  return createResponseWithCookies(server.NextResponse.rewrite(rewrittenUrl), request, {
207
207
  tokens: config?.cookieData?.tokens ?? null
208
208
  });
@@ -309,12 +309,12 @@ var processDspMiddleware = async (request, config) => {
309
309
  }
310
310
  const externalInternalResponse = handleExternalInternalPaths(request, { cookieData: { tokens } });
311
311
  if (externalInternalResponse) {
312
- console.log(`[DSP Middleware] External/Internal \uACBD\uB85C\uB85C \uCC98\uB9AC:: ${pathname}`);
312
+ console.log(`[DSP Middleware] External/Internal \uACBD\uB85C \uCC98\uB9AC:: ${pathname}`);
313
313
  return externalInternalResponse;
314
314
  }
315
315
  const directUrlResponse = handleDirectUrlAccess(request, { cookieData: { tokens } });
316
316
  if (directUrlResponse) {
317
- console.log(`[DSP Middleware] \uC9C1\uC811 URL \uC811\uADFC\uC73C\uB85C \uCC98\uB9AC:: ${pathname}`);
317
+ console.log(`[DSP Middleware] \uC801\uC751\uD615 \uACBD\uB85C \uCC98\uB9AC:: ${pathname}`);
318
318
  return directUrlResponse;
319
319
  }
320
320
  const responsivePathResponse = handleResponsivePaths(request, {
@@ -322,7 +322,7 @@ var processDspMiddleware = async (request, config) => {
322
322
  responsivePaths: config?.responsivePaths
323
323
  });
324
324
  if (responsivePathResponse) {
325
- console.log(`[DSP Middleware] \uBC18\uC751\uD615 \uACBD\uB85C\uB85C \uCC98\uB9AC:: ${pathname}`);
325
+ console.log(`[DSP Middleware] \uBC18\uC751\uD615 \uACBD\uB85C \uCC98\uB9AC:: ${pathname}`);
326
326
  return responsivePathResponse;
327
327
  }
328
328
  const adaptiveResponse = handleAdaptiveProcessing(request, { cookieData: { tokens } });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/parse-utils.ts","../../src/utils/middleware-utils.ts","../../src/config/cookie-config.ts","../../src/utils/cookie-utils.ts","../../src/middleware/handlers/handleAdaptiveProcessing.ts","../../src/middleware/handlers/handleApiRequest.ts","../../src/middleware/handlers/handleDirectUrlAccess.ts","../../src/middleware/handlers/handleExternalInternalPaths.ts","../../src/middleware/handlers/handleResponsivePaths.ts","../../src/middleware/handlers/handleTempToken.ts","../../src/middleware/dsp-middleware.ts","../../src/middleware/handlers/createMiddleware.ts"],"names":["getFormFactorFromUserAgent","getEnvironmentFromHostname","NextResponse","requestAccessTokens","getApiHostNameFromEnvironment"],"mappings":"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","file":"index.cjs","sourcesContent":["import { NextRequest } from 'next/server';\n\n/**\n * 요청 헤더에 값 파싱\n * @param request\n * @returns\n */\nexport const parseRequestHeaders = (request: NextRequest) => {\n return {\n acceptLanguage: request.headers.get('Accept-Language'),\n deviceId: request.headers.get('X-Channel-DeviceId'),\n loginType: request.headers.get('X-Channel-LoginType'),\n platformName: request.headers.get('X-Channel-PlatformName'),\n platformVersion: request.headers.get('X-Channel-PlatformVersion'),\n appVersion: request.headers.get('X-Channel-AppVersion'),\n deviceModel: request.headers.get('X-Channel-DeviceModel'),\n loginChannel: request.headers.get('X-Channel-LoginChannel'),\n formFactor: request.headers.get('X-Channel-FormFactor')\n };\n};\n\n/**\n * 쿼리 스트링 값 파싱\n * @param request\n * @returns\n */\nexport const parseQueryParameters = (request: NextRequest) => {\n const { searchParams } = request.nextUrl;\n\n return {\n tempToken: searchParams.get('tempToken'),\n mode: searchParams.get('mode')\n };\n};\n\n/**\n * 요청 쿠키에 값 파싱\n * @param request\n * @returns\n */\nexport const parseCookies = (request: NextRequest) => {\n return {\n formFactor: request.cookies.get('formFactor')?.value,\n accessToken: request.cookies.get('accessToken')?.value\n };\n};\n","import { NextRequest } from 'next/server';\n\nimport { getFormFactorFromUserAgent } from 'sales-frontend-utils';\n\nimport { parseCookies, parseRequestHeaders } from './parse-utils';\n\n/**\n * FormFactor에 따른 적응형 경로 변환\n * @param pathname\n * @param formFactor\n * @returns\n */\nexport const convertAdaptiveTargetPath = (pathname: string, formFactor: string) => {\n if (pathname === '/') {\n return pathname;\n }\n\n switch (formFactor.toLowerCase()) {\n case 'tablet':\n return `/tablet${pathname}`;\n case 'phone':\n case 'smartphone':\n return `/mobile${pathname}`;\n case 'desktop':\n case 'pc':\n return `/pc${pathname}`;\n default:\n return pathname;\n }\n};\n\n/**\n * FormFactor 구하기\n * @param request\n * @returns\n */\nexport const getFormFactor = (request: NextRequest) => {\n const userAgent = request.headers.get('user-agent') || '';\n\n // 1순위: Custom Header\n const headerValue = parseRequestHeaders(request).formFactor;\n if (headerValue) {\n return headerValue;\n }\n\n // 2순위: Cookie\n const cookieValue = parseCookies(request).formFactor;\n if (cookieValue) {\n return cookieValue;\n }\n\n // 3순위: User-Agent 판단\n return getFormFactorFromUserAgent(userAgent);\n};\n\n/**\n * 반응형 전용 pathname 판단\n * @param pathname\n * @param responsivePaths\n * @returns\n */\nexport const isResponsivePath = (pathname: string, responsivePaths: string[] = []): boolean => {\n return responsivePaths.some((path) => pathname.startsWith(path));\n};\n\n/**\n * 정적 자원 체크 함수\n * @param pathname\n * @returns\n */\nexport const isStaticAsset = (pathname: string): boolean => {\n // API 라우트는 제외\n if (pathname.startsWith('/api')) {\n return false;\n }\n\n // _next 관련 파일들\n if (pathname.startsWith('/_next') || pathname === '/favicon.ico') {\n return true;\n }\n\n // 확장자가 있으면 정적 자원\n return /\\.[a-zA-Z0-9]+$/.test(pathname);\n};\n","export const COOKIE_DEFAULT_CONFIG = {\n httpOnly: false,\n sameSite: 'strict' as const,\n secure: true\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { COOKIE_DEFAULT_CONFIG } from '../config/cookie-config';\nimport { CookieData } from '../server-side-helper.types';\n\nimport { getFormFactor } from './middleware-utils';\nimport { parseRequestHeaders } from './parse-utils';\n\n/**\n * 쿠키 생성\n * @param response\n * @param cookieData\n * @returns\n */\nexport const createResponseWithCookies = (\n response: NextResponse,\n request: NextRequest,\n cookieData?: CookieData\n): NextResponse => {\n const { hostname } = new URL(request.url);\n const formFactor = getFormFactor(request);\n\n // 헤더에 있는 데이터 > 쿠키 > 초기 셋업\n const { acceptLanguage, appVersion, deviceId, deviceModel, loginChannel, loginType, platformName, platformVersion } =\n parseRequestHeaders(request);\n\n // 토큰타입\n if (cookieData?.tokens?.tokenType) {\n response.cookies.set({\n name: 'tokenType',\n value: cookieData.tokens.tokenType,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // expiresIn\n if (cookieData?.tokens?.expiresIn) {\n response.cookies.set({\n name: 'expiresIn',\n value: String(cookieData.tokens.expiresIn),\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // 액세스 토큰 쿠키\n if (cookieData?.tokens?.accessToken) {\n response.cookies.set({\n name: 'accessToken',\n value: cookieData.tokens.accessToken,\n ...getDefaultCookieConfig(hostname),\n //! middleware 커스텀헤더 세팅 불가로 우선 풀어 넣음\n httpOnly: false\n });\n }\n\n // 리프레시 토큰 쿠키\n if (cookieData?.tokens?.refreshToken) {\n response.cookies.set({\n name: 'refreshToken',\n value: cookieData.tokens.refreshToken,\n ...getDefaultCookieConfig(hostname),\n httpOnly: true\n });\n }\n\n // FormFactor 쿠키\n if (formFactor) {\n response.cookies.set({\n name: 'formFactor',\n value: formFactor,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Accept Language 쿠키\n if (acceptLanguage) {\n response.cookies.set({\n name: 'acceptLanguage',\n value: acceptLanguage,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // App Version 쿠키\n if (appVersion) {\n response.cookies.set({\n name: 'appVersion',\n value: appVersion,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Device ID 쿠키\n if (deviceId) {\n response.cookies.set({\n name: 'deviceId',\n value: deviceId,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Device Model 쿠키\n if (deviceModel) {\n response.cookies.set({\n name: 'deviceModel',\n value: deviceModel,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Login Channel 쿠키\n if (loginChannel) {\n response.cookies.set({\n name: 'loginChannel',\n value: loginChannel,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Login Type 쿠키\n if (loginType) {\n response.cookies.set({\n name: 'loginType',\n value: loginType,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Platform Name 쿠키\n if (platformName) {\n response.cookies.set({\n name: 'platformName',\n value: platformName,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Platform Version 쿠키\n if (platformVersion) {\n response.cookies.set({\n name: 'platformVersion',\n value: platformVersion,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n return response;\n};\n\n/**\n * 환경에 따른 기본 쿠키 설정값 반환\n * @param hostname\n * @returns\n */\nexport const getDefaultCookieConfig = (hostname: string) => {\n const environment = getEnvironmentFromHostname(hostname);\n\n if (environment !== 'prd') {\n return {\n ...COOKIE_DEFAULT_CONFIG,\n sameSite: 'lax' as const\n };\n }\n\n return COOKIE_DEFAULT_CONFIG;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\nimport { getFormFactor, convertAdaptiveTargetPath } from '../../utils/middleware-utils';\n\n/**\n * 적응형 경로 처리(rewrite 처리)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleAdaptiveProcessing: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { nextUrl } = request;\n const formFactor = getFormFactor(request);\n\n const rewrittenUrl = nextUrl.clone();\n rewrittenUrl.pathname = convertAdaptiveTargetPath(nextUrl.pathname, formFactor);\n\n console.log(`[DSP Middleware] ReWrite 처리:: ${rewrittenUrl.pathname}`);\n\n return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\n/**\n * API 요청 처리\n * Cookie에 AccessToken이 있으면 Authorization 헤더에 셋팅을 담당하는 함수\n * Only api 요청만 처리\n * @param request\n * @returns\n */\nexport const handleApiRequest = async (request: NextRequest): Promise<NextResponse | null> => {\n const { pathname } = request.nextUrl;\n\n if (!pathname.startsWith('/api/')) {\n // 처리하지 않음 (온니 api 요청만 처리)\n return null;\n }\n\n return NextResponse.next();\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\n\n/**\n * 직접 URL 접근 처리\n * 직접 URL 입력한 경우 그대로 통과\n * 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleDirectUrlAccess: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { pathname } = request.nextUrl;\n\n const directPaths = ['/tablet/', '/mobile/', '/pc/', '/responsive/'];\n\n if (directPaths.some((path) => pathname.startsWith(path))) {\n return createResponseWithCookies(NextResponse.next(), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n }\n\n return null;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\n\n/**\n * External/Internal 경로 처리\n * 컨텍스트를 벗어난 페이지 처리(아무런 간섭을 받지 않음)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleExternalInternalPaths: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { pathname } = request.nextUrl;\n\n if (pathname.startsWith('/external') || pathname.startsWith('/internal')) {\n return createResponseWithCookies(NextResponse.next(), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n }\n\n return null;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\nimport { isResponsivePath } from '../../utils/middleware-utils';\n\n/**\n * 반응형 경로 처리(rewrite 처리)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleResponsivePaths: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { nextUrl } = request;\n const { pathname } = nextUrl;\n\n if (!isResponsivePath(pathname, config?.responsivePaths)) {\n return null;\n }\n\n const rewrittenUrl = nextUrl.clone();\n rewrittenUrl.pathname = `/responsive${pathname}`;\n\n return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport {\n requestAccessTokens,\n DspResponseDspTokenResponseDto,\n DspTokenResponseDto\n} from 'sales-frontend-api/middleware';\nimport { getApiHostNameFromEnvironment } from 'sales-frontend-utils';\n\nimport { parseCookies, parseQueryParameters, createResponseWithCookies } from '../../utils';\n\n/**\n * 임시토큰만 있을 경우 AT, RT를 발급받는다.\n * @param request\n * @param tempToken\n * @returns\n */\nexport const getTokensFromServer = async (\n request: NextRequest,\n forceApiHostName?: string\n): Promise<DspResponseDspTokenResponseDto | null> => {\n const { accessToken } = parseCookies(request);\n const { tempToken, mode } = parseQueryParameters(request);\n\n // tempToken 없으면 발급 불가\n if (!tempToken) {\n return null;\n }\n\n // accessToken이 있고 mode가 initial이 아니면 발급 스킵\n if (accessToken && mode !== 'initial') {\n return null;\n }\n\n console.log(`[DSP Middleware] 임시 토큰 처리:: 시작 (mode: ${mode || 'none'})`);\n\n const data = await requestAccessTokens(tempToken, {\n baseURL: getApiHostNameFromEnvironment(new URL(request.url).hostname, forceApiHostName)\n });\n\n if (data.isSuccess === false) {\n console.error('[DSP Middleware] 토큰 발급 실패');\n\n throw new Error('토큰 발급 실패');\n }\n\n console.log(`[DSP Middleware] 토큰 발급 성공`, data);\n\n return data;\n};\n\nexport const cleanupTempTokenParameters = (\n request: NextRequest,\n tokens?: DspTokenResponseDto | null\n): NextResponse | null => {\n if (!tokens) {\n return null;\n }\n\n const { tempToken } = parseQueryParameters(request);\n\n if (!tempToken) {\n return null;\n }\n console.log('[DSP Middleware] 토큰 발급 완료 - 쿼리스트링 제거 후 리다이렉트');\n\n // 쿼리스트링 제거\n const url = new URL(request.url);\n url.searchParams.delete('tempToken');\n url.searchParams.delete('mode');\n\n // 리다이렉트 응답 생성 + 쿠키 설정\n const response = NextResponse.redirect(url);\n\n return createResponseWithCookies(response, request, {\n tokens\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareConfig } from '../server-side-helper.types';\nimport { isStaticAsset } from '../utils/middleware-utils';\n\nimport { handleAdaptiveProcessing } from './handlers/handleAdaptiveProcessing';\nimport { handleApiRequest } from './handlers/handleApiRequest';\nimport { handleDirectUrlAccess } from './handlers/handleDirectUrlAccess';\nimport { handleExternalInternalPaths } from './handlers/handleExternalInternalPaths';\nimport { handleResponsivePaths } from './handlers/handleResponsivePaths';\nimport { getTokensFromServer, cleanupTempTokenParameters } from './handlers/handleTempToken';\n\nexport const processDspMiddleware = async (request: NextRequest, config?: MiddlewareConfig): Promise<NextResponse> => {\n const { pathname } = request.nextUrl;\n\n // 0. 정적 자원 체크(Skip)\n if (isStaticAsset(pathname)) {\n return NextResponse.next();\n }\n\n console.log(`[DSP Middleware] 처리 시작:: ${request.url}`);\n\n // 1. 토큰 받기 (임시토큰만 있으면)\n let tokens;\n try {\n const tokensResponse = await getTokensFromServer(request);\n tokens = tokensResponse?.data;\n } catch (error) {\n // 토큰 없이 계속 진행\n console.error(`[DSP Middleware] 토큰 획득 실패:: ${pathname}`, error);\n tokens = null;\n }\n\n // 1-1. 토큰 발급 성공 시 쿼리스트링 제거 후 리다이렉트\n const cleanupResponse = cleanupTempTokenParameters(request, tokens);\n if (cleanupResponse) {\n return cleanupResponse;\n }\n\n // 2. API 요청 처리(by pass)\n const apiResponse = await handleApiRequest(request);\n if (apiResponse) {\n console.log(`[DSP Middleware] API 요청 pathname:: ${pathname}`);\n\n return apiResponse;\n }\n\n // 3. 외부/내부 경로 처리\n const externalInternalResponse = handleExternalInternalPaths(request, { cookieData: { tokens } });\n if (externalInternalResponse) {\n console.log(`[DSP Middleware] External/Internal 경로로 처리:: ${pathname}`);\n\n return externalInternalResponse;\n }\n\n // 4. 직접 적응형 URL 접근 처리\n const directUrlResponse = handleDirectUrlAccess(request, { cookieData: { tokens } });\n if (directUrlResponse) {\n console.log(`[DSP Middleware] 직접 URL 접근으로 처리:: ${pathname}`);\n\n return directUrlResponse;\n }\n\n // 5. 반응형 전용 경로 처리\n const responsivePathResponse = handleResponsivePaths(request, {\n cookieData: { tokens },\n responsivePaths: config?.responsivePaths\n });\n if (responsivePathResponse) {\n console.log(`[DSP Middleware] 반응형 경로로 처리:: ${pathname}`);\n\n return responsivePathResponse;\n }\n\n // 6. 적응형 경로 처리\n const adaptiveResponse = handleAdaptiveProcessing(request, { cookieData: { tokens } });\n if (adaptiveResponse) {\n return adaptiveResponse;\n }\n\n // 모든 핸들러가 null을 반환하면 기본 처리\n return NextResponse.next();\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\n\n/**\n * 미들웨어 조립 함수\n * @param handlers\n * @param config\n * @returns\n */\nexport const createMiddleware = (handlers: MiddlewareHandler[], config?: MiddlewareConfig) => {\n return (request: NextRequest): NextResponse => {\n // 핸들러들을 순서대로 실행\n for (const handler of handlers) {\n const result = handler(request, config);\n if (result) {\n return result; // 첫 번째로 처리된 결과 반환\n }\n }\n\n // 모든 핸들러가 null을 반환하면 기본 처리\n return NextResponse.next();\n };\n};\n"]}
1
+ {"version":3,"sources":["../../src/utils/parse-utils.ts","../../src/utils/middleware-utils.ts","../../src/config/cookie-config.ts","../../src/utils/cookie-utils.ts","../../src/middleware/handlers/handleAdaptiveProcessing.ts","../../src/middleware/handlers/handleApiRequest.ts","../../src/middleware/handlers/handleDirectUrlAccess.ts","../../src/middleware/handlers/handleExternalInternalPaths.ts","../../src/middleware/handlers/handleResponsivePaths.ts","../../src/middleware/handlers/handleTempToken.ts","../../src/middleware/dsp-middleware.ts","../../src/middleware/handlers/createMiddleware.ts"],"names":["getFormFactorFromUserAgent","getEnvironmentFromHostname","NextResponse","requestAccessTokens","getApiHostNameFromEnvironment"],"mappings":"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","file":"index.cjs","sourcesContent":["import { NextRequest } from 'next/server';\n\n/**\n * 요청 헤더에 값 파싱\n * @param request\n * @returns\n */\nexport const parseRequestHeaders = (request: NextRequest) => {\n return {\n acceptLanguage: request.headers.get('Accept-Language'),\n deviceId: request.headers.get('X-Channel-DeviceId'),\n loginType: request.headers.get('X-Channel-LoginType'),\n platformName: request.headers.get('X-Channel-PlatformName'),\n platformVersion: request.headers.get('X-Channel-PlatformVersion'),\n appVersion: request.headers.get('X-Channel-AppVersion'),\n deviceModel: request.headers.get('X-Channel-DeviceModel'),\n loginChannel: request.headers.get('X-Channel-LoginChannel'),\n formFactor: request.headers.get('X-Channel-FormFactor')\n };\n};\n\n/**\n * 쿼리 스트링 값 파싱\n * @param request\n * @returns\n */\nexport const parseQueryParameters = (request: NextRequest) => {\n const { searchParams } = request.nextUrl;\n\n return {\n tempToken: searchParams.get('tempToken'),\n mode: searchParams.get('mode')\n };\n};\n\n/**\n * 요청 쿠키에 값 파싱\n * @param request\n * @returns\n */\nexport const parseCookies = (request: NextRequest) => {\n return {\n formFactor: request.cookies.get('formFactor')?.value,\n accessToken: request.cookies.get('accessToken')?.value\n };\n};\n","import { NextRequest } from 'next/server';\n\nimport { getFormFactorFromUserAgent } from 'sales-frontend-utils';\n\nimport { parseCookies, parseRequestHeaders } from './parse-utils';\n\n/**\n * FormFactor에 따른 적응형 경로 변환\n * @param pathname\n * @param formFactor\n * @returns\n */\nexport const convertAdaptiveTargetPath = (pathname: string, formFactor: string) => {\n if (pathname === '/') {\n return pathname;\n }\n\n switch (formFactor.toLowerCase()) {\n case 'tablet':\n return `/tablet${pathname}`;\n case 'phone':\n case 'smartphone':\n return `/mobile${pathname}`;\n case 'desktop':\n case 'pc':\n return `/pc${pathname}`;\n default:\n return pathname;\n }\n};\n\n/**\n * FormFactor 구하기\n * @param request\n * @returns\n */\nexport const getFormFactor = (request: NextRequest) => {\n const userAgent = request.headers.get('user-agent') || '';\n\n // 1순위: Custom Header\n const headerValue = parseRequestHeaders(request).formFactor;\n if (headerValue) {\n return headerValue;\n }\n\n // 2순위: Cookie\n const cookieValue = parseCookies(request).formFactor;\n if (cookieValue) {\n return cookieValue;\n }\n\n // 3순위: User-Agent 판단\n return getFormFactorFromUserAgent(userAgent);\n};\n\n/**\n * 반응형 전용 pathname 판단\n * @param pathname\n * @param responsivePaths\n * @returns\n */\nexport const isResponsivePath = (pathname: string, responsivePaths: string[] = []): boolean => {\n return responsivePaths.some((path) => pathname.startsWith(path));\n};\n\n/**\n * 정적 자원 체크 함수\n * @param pathname\n * @returns\n */\nexport const isStaticAsset = (pathname: string): boolean => {\n // API 라우트는 제외\n if (pathname.startsWith('/api')) {\n return false;\n }\n\n // _next 관련 파일들\n if (pathname.startsWith('/_next') || pathname === '/favicon.ico') {\n return true;\n }\n\n // 확장자가 있으면 정적 자원\n return /\\.[a-zA-Z0-9]+$/.test(pathname);\n};\n","export const COOKIE_DEFAULT_CONFIG = {\n httpOnly: false,\n sameSite: 'strict' as const,\n secure: true\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { COOKIE_DEFAULT_CONFIG } from '../config/cookie-config';\nimport { CookieData } from '../server-side-helper.types';\n\nimport { getFormFactor } from './middleware-utils';\nimport { parseRequestHeaders } from './parse-utils';\n\n/**\n * 쿠키 생성\n * @param response\n * @param cookieData\n * @returns\n */\nexport const createResponseWithCookies = (\n response: NextResponse,\n request: NextRequest,\n cookieData?: CookieData\n): NextResponse => {\n const { hostname } = new URL(request.url);\n const formFactor = getFormFactor(request);\n\n // 헤더에 있는 데이터 > 쿠키 > 초기 셋업\n const { acceptLanguage, appVersion, deviceId, deviceModel, loginChannel, loginType, platformName, platformVersion } =\n parseRequestHeaders(request);\n\n // 토큰타입\n if (cookieData?.tokens?.tokenType) {\n response.cookies.set({\n name: 'tokenType',\n value: cookieData.tokens.tokenType,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // expiresIn\n if (cookieData?.tokens?.expiresIn) {\n response.cookies.set({\n name: 'expiresIn',\n value: String(cookieData.tokens.expiresIn),\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // 액세스 토큰 쿠키\n if (cookieData?.tokens?.accessToken) {\n response.cookies.set({\n name: 'accessToken',\n value: cookieData.tokens.accessToken,\n ...getDefaultCookieConfig(hostname),\n //! middleware 커스텀헤더 세팅 불가로 우선 풀어 넣음\n httpOnly: false\n });\n }\n\n // 리프레시 토큰 쿠키\n if (cookieData?.tokens?.refreshToken) {\n response.cookies.set({\n name: 'refreshToken',\n value: cookieData.tokens.refreshToken,\n ...getDefaultCookieConfig(hostname),\n httpOnly: true\n });\n }\n\n // FormFactor 쿠키\n if (formFactor) {\n response.cookies.set({\n name: 'formFactor',\n value: formFactor,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Accept Language 쿠키\n if (acceptLanguage) {\n response.cookies.set({\n name: 'acceptLanguage',\n value: acceptLanguage,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // App Version 쿠키\n if (appVersion) {\n response.cookies.set({\n name: 'appVersion',\n value: appVersion,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Device ID 쿠키\n if (deviceId) {\n response.cookies.set({\n name: 'deviceId',\n value: deviceId,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Device Model 쿠키\n if (deviceModel) {\n response.cookies.set({\n name: 'deviceModel',\n value: deviceModel,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Login Channel 쿠키\n if (loginChannel) {\n response.cookies.set({\n name: 'loginChannel',\n value: loginChannel,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Login Type 쿠키\n if (loginType) {\n response.cookies.set({\n name: 'loginType',\n value: loginType,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Platform Name 쿠키\n if (platformName) {\n response.cookies.set({\n name: 'platformName',\n value: platformName,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Platform Version 쿠키\n if (platformVersion) {\n response.cookies.set({\n name: 'platformVersion',\n value: platformVersion,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n return response;\n};\n\n/**\n * 환경에 따른 기본 쿠키 설정값 반환\n * @param hostname\n * @returns\n */\nexport const getDefaultCookieConfig = (hostname: string) => {\n const environment = getEnvironmentFromHostname(hostname);\n\n if (environment !== 'prd') {\n return {\n ...COOKIE_DEFAULT_CONFIG,\n sameSite: 'lax' as const\n };\n }\n\n return COOKIE_DEFAULT_CONFIG;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\nimport { getFormFactor, convertAdaptiveTargetPath } from '../../utils/middleware-utils';\n\n/**\n * 적응형 경로 처리(rewrite 처리)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleAdaptiveProcessing: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { nextUrl } = request;\n const formFactor = getFormFactor(request);\n\n const rewrittenUrl = nextUrl.clone();\n rewrittenUrl.pathname = convertAdaptiveTargetPath(nextUrl.pathname, formFactor);\n\n console.log(`[DSP Middleware] 적응형 ReWrite 처리:: ${rewrittenUrl.pathname}`);\n\n return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\n/**\n * API 요청 처리\n * Cookie에 AccessToken이 있으면 Authorization 헤더에 셋팅을 담당하는 함수\n * Only api 요청만 처리\n * @param request\n * @returns\n */\nexport const handleApiRequest = async (request: NextRequest): Promise<NextResponse | null> => {\n const { pathname } = request.nextUrl;\n\n if (!pathname.startsWith('/api/')) {\n // 처리하지 않음 (온니 api 요청만 처리)\n return null;\n }\n\n return NextResponse.next();\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\n\n/**\n * 직접 URL 접근 처리\n * 직접 URL 입력한 경우 그대로 통과\n * 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleDirectUrlAccess: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { pathname } = request.nextUrl;\n\n const directPaths = ['/tablet/', '/mobile/', '/pc/', '/responsive/'];\n\n if (directPaths.some((path) => pathname.startsWith(path))) {\n return createResponseWithCookies(NextResponse.next(), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n }\n\n return null;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\n\n/**\n * External/Internal 경로 처리\n * 컨텍스트를 벗어난 페이지 처리(아무런 간섭을 받지 않음)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleExternalInternalPaths: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { pathname } = request.nextUrl;\n\n if (pathname.startsWith('/external') || pathname.startsWith('/internal')) {\n return createResponseWithCookies(NextResponse.next(), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n }\n\n return null;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\nimport { isResponsivePath } from '../../utils/middleware-utils';\n\n/**\n * 반응형 경로 처리(rewrite 처리)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleResponsivePaths: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { nextUrl } = request;\n const { pathname } = nextUrl;\n\n if (!isResponsivePath(pathname, config?.responsivePaths)) {\n return null;\n }\n\n const rewrittenUrl = nextUrl.clone();\n rewrittenUrl.pathname = `/responsive${pathname}`;\n\n return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport {\n requestAccessTokens,\n DspResponseDspTokenResponseDto,\n DspTokenResponseDto\n} from 'sales-frontend-api/middleware';\nimport { getApiHostNameFromEnvironment } from 'sales-frontend-utils';\n\nimport { parseCookies, parseQueryParameters, createResponseWithCookies } from '../../utils';\n\n/**\n * 임시토큰만 있을 경우 AT, RT를 발급받는다.\n * @param request\n * @param tempToken\n * @returns\n */\nexport const getTokensFromServer = async (\n request: NextRequest,\n forceApiHostName?: string\n): Promise<DspResponseDspTokenResponseDto | null> => {\n const { accessToken } = parseCookies(request);\n const { tempToken, mode } = parseQueryParameters(request);\n\n // tempToken 없으면 발급 불가\n if (!tempToken) {\n return null;\n }\n\n // accessToken이 있고 mode가 initial이 아니면 발급 스킵\n if (accessToken && mode !== 'initial') {\n return null;\n }\n\n console.log(`[DSP Middleware] 임시 토큰 처리:: 시작 (mode: ${mode || 'none'})`);\n\n const data = await requestAccessTokens(tempToken, {\n baseURL: getApiHostNameFromEnvironment(new URL(request.url).hostname, forceApiHostName)\n });\n\n if (data.isSuccess === false) {\n console.error('[DSP Middleware] 토큰 발급 실패');\n\n throw new Error('토큰 발급 실패');\n }\n\n console.log(`[DSP Middleware] 토큰 발급 성공`, data);\n\n return data;\n};\n\nexport const cleanupTempTokenParameters = (\n request: NextRequest,\n tokens?: DspTokenResponseDto | null\n): NextResponse | null => {\n if (!tokens) {\n return null;\n }\n\n const { tempToken } = parseQueryParameters(request);\n\n if (!tempToken) {\n return null;\n }\n console.log('[DSP Middleware] 토큰 발급 완료 - 쿼리스트링 제거 후 리다이렉트');\n\n // 쿼리스트링 제거\n const url = new URL(request.url);\n url.searchParams.delete('tempToken');\n url.searchParams.delete('mode');\n\n // 리다이렉트 응답 생성 + 쿠키 설정\n const response = NextResponse.redirect(url);\n\n return createResponseWithCookies(response, request, {\n tokens\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareConfig } from '../server-side-helper.types';\nimport { isStaticAsset } from '../utils/middleware-utils';\n\nimport { handleAdaptiveProcessing } from './handlers/handleAdaptiveProcessing';\nimport { handleApiRequest } from './handlers/handleApiRequest';\nimport { handleDirectUrlAccess } from './handlers/handleDirectUrlAccess';\nimport { handleExternalInternalPaths } from './handlers/handleExternalInternalPaths';\nimport { handleResponsivePaths } from './handlers/handleResponsivePaths';\nimport { getTokensFromServer, cleanupTempTokenParameters } from './handlers/handleTempToken';\n\nexport const processDspMiddleware = async (request: NextRequest, config?: MiddlewareConfig): Promise<NextResponse> => {\n const { pathname } = request.nextUrl;\n\n // 0. 정적 자원 체크(Skip)\n if (isStaticAsset(pathname)) {\n return NextResponse.next();\n }\n\n console.log(`[DSP Middleware] 처리 시작:: ${request.url}`);\n\n // 1. 토큰 받기 (임시토큰만 있으면)\n let tokens;\n try {\n const tokensResponse = await getTokensFromServer(request);\n tokens = tokensResponse?.data;\n } catch (error) {\n // 토큰 없이 계속 진행\n console.error(`[DSP Middleware] 토큰 획득 실패:: ${pathname}`, error);\n tokens = null;\n }\n\n // 1-1. 토큰 발급 성공 시 쿼리스트링 제거 후 리다이렉트\n const cleanupResponse = cleanupTempTokenParameters(request, tokens);\n if (cleanupResponse) {\n return cleanupResponse;\n }\n\n // 2. API 요청 처리(by pass)\n const apiResponse = await handleApiRequest(request);\n if (apiResponse) {\n console.log(`[DSP Middleware] API 요청 pathname:: ${pathname}`);\n\n return apiResponse;\n }\n\n // 3. 외부/내부 경로 처리\n const externalInternalResponse = handleExternalInternalPaths(request, { cookieData: { tokens } });\n if (externalInternalResponse) {\n console.log(`[DSP Middleware] External/Internal 경로 처리:: ${pathname}`);\n\n return externalInternalResponse;\n }\n\n // 4. 적응형 URL 접근 처리\n const directUrlResponse = handleDirectUrlAccess(request, { cookieData: { tokens } });\n if (directUrlResponse) {\n console.log(`[DSP Middleware] 적응형 경로 처리:: ${pathname}`);\n\n return directUrlResponse;\n }\n\n // 5. 반응형 전용 경로 처리\n const responsivePathResponse = handleResponsivePaths(request, {\n cookieData: { tokens },\n responsivePaths: config?.responsivePaths\n });\n if (responsivePathResponse) {\n console.log(`[DSP Middleware] 반응형 경로 처리:: ${pathname}`);\n\n return responsivePathResponse;\n }\n\n // 6. 적응형 경로 처리\n const adaptiveResponse = handleAdaptiveProcessing(request, { cookieData: { tokens } });\n if (adaptiveResponse) {\n return adaptiveResponse;\n }\n\n // 모든 핸들러가 null을 반환하면 기본 처리\n return NextResponse.next();\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\n\n/**\n * 미들웨어 조립 함수\n * @param handlers\n * @param config\n * @returns\n */\nexport const createMiddleware = (handlers: MiddlewareHandler[], config?: MiddlewareConfig) => {\n return (request: NextRequest): NextResponse => {\n // 핸들러들을 순서대로 실행\n for (const handler of handlers) {\n const result = handler(request, config);\n if (result) {\n return result; // 첫 번째로 처리된 결과 반환\n }\n }\n\n // 모든 핸들러가 null을 반환하면 기본 처리\n return NextResponse.next();\n };\n};\n"]}
@@ -200,7 +200,7 @@ var handleAdaptiveProcessing = (request, config) => {
200
200
  const formFactor = getFormFactor(request);
201
201
  const rewrittenUrl = nextUrl.clone();
202
202
  rewrittenUrl.pathname = convertAdaptiveTargetPath(nextUrl.pathname, formFactor);
203
- console.log(`[DSP Middleware] ReWrite \uCC98\uB9AC:: ${rewrittenUrl.pathname}`);
203
+ console.log(`[DSP Middleware] \uC801\uC751\uD615 ReWrite \uCC98\uB9AC:: ${rewrittenUrl.pathname}`);
204
204
  return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {
205
205
  tokens: config?.cookieData?.tokens ?? null
206
206
  });
@@ -307,12 +307,12 @@ var processDspMiddleware = async (request, config) => {
307
307
  }
308
308
  const externalInternalResponse = handleExternalInternalPaths(request, { cookieData: { tokens } });
309
309
  if (externalInternalResponse) {
310
- console.log(`[DSP Middleware] External/Internal \uACBD\uB85C\uB85C \uCC98\uB9AC:: ${pathname}`);
310
+ console.log(`[DSP Middleware] External/Internal \uACBD\uB85C \uCC98\uB9AC:: ${pathname}`);
311
311
  return externalInternalResponse;
312
312
  }
313
313
  const directUrlResponse = handleDirectUrlAccess(request, { cookieData: { tokens } });
314
314
  if (directUrlResponse) {
315
- console.log(`[DSP Middleware] \uC9C1\uC811 URL \uC811\uADFC\uC73C\uB85C \uCC98\uB9AC:: ${pathname}`);
315
+ console.log(`[DSP Middleware] \uC801\uC751\uD615 \uACBD\uB85C \uCC98\uB9AC:: ${pathname}`);
316
316
  return directUrlResponse;
317
317
  }
318
318
  const responsivePathResponse = handleResponsivePaths(request, {
@@ -320,7 +320,7 @@ var processDspMiddleware = async (request, config) => {
320
320
  responsivePaths: config?.responsivePaths
321
321
  });
322
322
  if (responsivePathResponse) {
323
- console.log(`[DSP Middleware] \uBC18\uC751\uD615 \uACBD\uB85C\uB85C \uCC98\uB9AC:: ${pathname}`);
323
+ console.log(`[DSP Middleware] \uBC18\uC751\uD615 \uACBD\uB85C \uCC98\uB9AC:: ${pathname}`);
324
324
  return responsivePathResponse;
325
325
  }
326
326
  const adaptiveResponse = handleAdaptiveProcessing(request, { cookieData: { tokens } });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/parse-utils.ts","../../src/utils/middleware-utils.ts","../../src/config/cookie-config.ts","../../src/utils/cookie-utils.ts","../../src/middleware/handlers/handleAdaptiveProcessing.ts","../../src/middleware/handlers/handleApiRequest.ts","../../src/middleware/handlers/handleDirectUrlAccess.ts","../../src/middleware/handlers/handleExternalInternalPaths.ts","../../src/middleware/handlers/handleResponsivePaths.ts","../../src/middleware/handlers/handleTempToken.ts","../../src/middleware/dsp-middleware.ts","../../src/middleware/handlers/createMiddleware.ts"],"names":["NextResponse"],"mappings":"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","file":"index.js","sourcesContent":["import { NextRequest } from 'next/server';\n\n/**\n * 요청 헤더에 값 파싱\n * @param request\n * @returns\n */\nexport const parseRequestHeaders = (request: NextRequest) => {\n return {\n acceptLanguage: request.headers.get('Accept-Language'),\n deviceId: request.headers.get('X-Channel-DeviceId'),\n loginType: request.headers.get('X-Channel-LoginType'),\n platformName: request.headers.get('X-Channel-PlatformName'),\n platformVersion: request.headers.get('X-Channel-PlatformVersion'),\n appVersion: request.headers.get('X-Channel-AppVersion'),\n deviceModel: request.headers.get('X-Channel-DeviceModel'),\n loginChannel: request.headers.get('X-Channel-LoginChannel'),\n formFactor: request.headers.get('X-Channel-FormFactor')\n };\n};\n\n/**\n * 쿼리 스트링 값 파싱\n * @param request\n * @returns\n */\nexport const parseQueryParameters = (request: NextRequest) => {\n const { searchParams } = request.nextUrl;\n\n return {\n tempToken: searchParams.get('tempToken'),\n mode: searchParams.get('mode')\n };\n};\n\n/**\n * 요청 쿠키에 값 파싱\n * @param request\n * @returns\n */\nexport const parseCookies = (request: NextRequest) => {\n return {\n formFactor: request.cookies.get('formFactor')?.value,\n accessToken: request.cookies.get('accessToken')?.value\n };\n};\n","import { NextRequest } from 'next/server';\n\nimport { getFormFactorFromUserAgent } from 'sales-frontend-utils';\n\nimport { parseCookies, parseRequestHeaders } from './parse-utils';\n\n/**\n * FormFactor에 따른 적응형 경로 변환\n * @param pathname\n * @param formFactor\n * @returns\n */\nexport const convertAdaptiveTargetPath = (pathname: string, formFactor: string) => {\n if (pathname === '/') {\n return pathname;\n }\n\n switch (formFactor.toLowerCase()) {\n case 'tablet':\n return `/tablet${pathname}`;\n case 'phone':\n case 'smartphone':\n return `/mobile${pathname}`;\n case 'desktop':\n case 'pc':\n return `/pc${pathname}`;\n default:\n return pathname;\n }\n};\n\n/**\n * FormFactor 구하기\n * @param request\n * @returns\n */\nexport const getFormFactor = (request: NextRequest) => {\n const userAgent = request.headers.get('user-agent') || '';\n\n // 1순위: Custom Header\n const headerValue = parseRequestHeaders(request).formFactor;\n if (headerValue) {\n return headerValue;\n }\n\n // 2순위: Cookie\n const cookieValue = parseCookies(request).formFactor;\n if (cookieValue) {\n return cookieValue;\n }\n\n // 3순위: User-Agent 판단\n return getFormFactorFromUserAgent(userAgent);\n};\n\n/**\n * 반응형 전용 pathname 판단\n * @param pathname\n * @param responsivePaths\n * @returns\n */\nexport const isResponsivePath = (pathname: string, responsivePaths: string[] = []): boolean => {\n return responsivePaths.some((path) => pathname.startsWith(path));\n};\n\n/**\n * 정적 자원 체크 함수\n * @param pathname\n * @returns\n */\nexport const isStaticAsset = (pathname: string): boolean => {\n // API 라우트는 제외\n if (pathname.startsWith('/api')) {\n return false;\n }\n\n // _next 관련 파일들\n if (pathname.startsWith('/_next') || pathname === '/favicon.ico') {\n return true;\n }\n\n // 확장자가 있으면 정적 자원\n return /\\.[a-zA-Z0-9]+$/.test(pathname);\n};\n","export const COOKIE_DEFAULT_CONFIG = {\n httpOnly: false,\n sameSite: 'strict' as const,\n secure: true\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { COOKIE_DEFAULT_CONFIG } from '../config/cookie-config';\nimport { CookieData } from '../server-side-helper.types';\n\nimport { getFormFactor } from './middleware-utils';\nimport { parseRequestHeaders } from './parse-utils';\n\n/**\n * 쿠키 생성\n * @param response\n * @param cookieData\n * @returns\n */\nexport const createResponseWithCookies = (\n response: NextResponse,\n request: NextRequest,\n cookieData?: CookieData\n): NextResponse => {\n const { hostname } = new URL(request.url);\n const formFactor = getFormFactor(request);\n\n // 헤더에 있는 데이터 > 쿠키 > 초기 셋업\n const { acceptLanguage, appVersion, deviceId, deviceModel, loginChannel, loginType, platformName, platformVersion } =\n parseRequestHeaders(request);\n\n // 토큰타입\n if (cookieData?.tokens?.tokenType) {\n response.cookies.set({\n name: 'tokenType',\n value: cookieData.tokens.tokenType,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // expiresIn\n if (cookieData?.tokens?.expiresIn) {\n response.cookies.set({\n name: 'expiresIn',\n value: String(cookieData.tokens.expiresIn),\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // 액세스 토큰 쿠키\n if (cookieData?.tokens?.accessToken) {\n response.cookies.set({\n name: 'accessToken',\n value: cookieData.tokens.accessToken,\n ...getDefaultCookieConfig(hostname),\n //! middleware 커스텀헤더 세팅 불가로 우선 풀어 넣음\n httpOnly: false\n });\n }\n\n // 리프레시 토큰 쿠키\n if (cookieData?.tokens?.refreshToken) {\n response.cookies.set({\n name: 'refreshToken',\n value: cookieData.tokens.refreshToken,\n ...getDefaultCookieConfig(hostname),\n httpOnly: true\n });\n }\n\n // FormFactor 쿠키\n if (formFactor) {\n response.cookies.set({\n name: 'formFactor',\n value: formFactor,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Accept Language 쿠키\n if (acceptLanguage) {\n response.cookies.set({\n name: 'acceptLanguage',\n value: acceptLanguage,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // App Version 쿠키\n if (appVersion) {\n response.cookies.set({\n name: 'appVersion',\n value: appVersion,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Device ID 쿠키\n if (deviceId) {\n response.cookies.set({\n name: 'deviceId',\n value: deviceId,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Device Model 쿠키\n if (deviceModel) {\n response.cookies.set({\n name: 'deviceModel',\n value: deviceModel,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Login Channel 쿠키\n if (loginChannel) {\n response.cookies.set({\n name: 'loginChannel',\n value: loginChannel,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Login Type 쿠키\n if (loginType) {\n response.cookies.set({\n name: 'loginType',\n value: loginType,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Platform Name 쿠키\n if (platformName) {\n response.cookies.set({\n name: 'platformName',\n value: platformName,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Platform Version 쿠키\n if (platformVersion) {\n response.cookies.set({\n name: 'platformVersion',\n value: platformVersion,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n return response;\n};\n\n/**\n * 환경에 따른 기본 쿠키 설정값 반환\n * @param hostname\n * @returns\n */\nexport const getDefaultCookieConfig = (hostname: string) => {\n const environment = getEnvironmentFromHostname(hostname);\n\n if (environment !== 'prd') {\n return {\n ...COOKIE_DEFAULT_CONFIG,\n sameSite: 'lax' as const\n };\n }\n\n return COOKIE_DEFAULT_CONFIG;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\nimport { getFormFactor, convertAdaptiveTargetPath } from '../../utils/middleware-utils';\n\n/**\n * 적응형 경로 처리(rewrite 처리)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleAdaptiveProcessing: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { nextUrl } = request;\n const formFactor = getFormFactor(request);\n\n const rewrittenUrl = nextUrl.clone();\n rewrittenUrl.pathname = convertAdaptiveTargetPath(nextUrl.pathname, formFactor);\n\n console.log(`[DSP Middleware] ReWrite 처리:: ${rewrittenUrl.pathname}`);\n\n return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\n/**\n * API 요청 처리\n * Cookie에 AccessToken이 있으면 Authorization 헤더에 셋팅을 담당하는 함수\n * Only api 요청만 처리\n * @param request\n * @returns\n */\nexport const handleApiRequest = async (request: NextRequest): Promise<NextResponse | null> => {\n const { pathname } = request.nextUrl;\n\n if (!pathname.startsWith('/api/')) {\n // 처리하지 않음 (온니 api 요청만 처리)\n return null;\n }\n\n return NextResponse.next();\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\n\n/**\n * 직접 URL 접근 처리\n * 직접 URL 입력한 경우 그대로 통과\n * 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleDirectUrlAccess: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { pathname } = request.nextUrl;\n\n const directPaths = ['/tablet/', '/mobile/', '/pc/', '/responsive/'];\n\n if (directPaths.some((path) => pathname.startsWith(path))) {\n return createResponseWithCookies(NextResponse.next(), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n }\n\n return null;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\n\n/**\n * External/Internal 경로 처리\n * 컨텍스트를 벗어난 페이지 처리(아무런 간섭을 받지 않음)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleExternalInternalPaths: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { pathname } = request.nextUrl;\n\n if (pathname.startsWith('/external') || pathname.startsWith('/internal')) {\n return createResponseWithCookies(NextResponse.next(), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n }\n\n return null;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\nimport { isResponsivePath } from '../../utils/middleware-utils';\n\n/**\n * 반응형 경로 처리(rewrite 처리)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleResponsivePaths: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { nextUrl } = request;\n const { pathname } = nextUrl;\n\n if (!isResponsivePath(pathname, config?.responsivePaths)) {\n return null;\n }\n\n const rewrittenUrl = nextUrl.clone();\n rewrittenUrl.pathname = `/responsive${pathname}`;\n\n return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport {\n requestAccessTokens,\n DspResponseDspTokenResponseDto,\n DspTokenResponseDto\n} from 'sales-frontend-api/middleware';\nimport { getApiHostNameFromEnvironment } from 'sales-frontend-utils';\n\nimport { parseCookies, parseQueryParameters, createResponseWithCookies } from '../../utils';\n\n/**\n * 임시토큰만 있을 경우 AT, RT를 발급받는다.\n * @param request\n * @param tempToken\n * @returns\n */\nexport const getTokensFromServer = async (\n request: NextRequest,\n forceApiHostName?: string\n): Promise<DspResponseDspTokenResponseDto | null> => {\n const { accessToken } = parseCookies(request);\n const { tempToken, mode } = parseQueryParameters(request);\n\n // tempToken 없으면 발급 불가\n if (!tempToken) {\n return null;\n }\n\n // accessToken이 있고 mode가 initial이 아니면 발급 스킵\n if (accessToken && mode !== 'initial') {\n return null;\n }\n\n console.log(`[DSP Middleware] 임시 토큰 처리:: 시작 (mode: ${mode || 'none'})`);\n\n const data = await requestAccessTokens(tempToken, {\n baseURL: getApiHostNameFromEnvironment(new URL(request.url).hostname, forceApiHostName)\n });\n\n if (data.isSuccess === false) {\n console.error('[DSP Middleware] 토큰 발급 실패');\n\n throw new Error('토큰 발급 실패');\n }\n\n console.log(`[DSP Middleware] 토큰 발급 성공`, data);\n\n return data;\n};\n\nexport const cleanupTempTokenParameters = (\n request: NextRequest,\n tokens?: DspTokenResponseDto | null\n): NextResponse | null => {\n if (!tokens) {\n return null;\n }\n\n const { tempToken } = parseQueryParameters(request);\n\n if (!tempToken) {\n return null;\n }\n console.log('[DSP Middleware] 토큰 발급 완료 - 쿼리스트링 제거 후 리다이렉트');\n\n // 쿼리스트링 제거\n const url = new URL(request.url);\n url.searchParams.delete('tempToken');\n url.searchParams.delete('mode');\n\n // 리다이렉트 응답 생성 + 쿠키 설정\n const response = NextResponse.redirect(url);\n\n return createResponseWithCookies(response, request, {\n tokens\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareConfig } from '../server-side-helper.types';\nimport { isStaticAsset } from '../utils/middleware-utils';\n\nimport { handleAdaptiveProcessing } from './handlers/handleAdaptiveProcessing';\nimport { handleApiRequest } from './handlers/handleApiRequest';\nimport { handleDirectUrlAccess } from './handlers/handleDirectUrlAccess';\nimport { handleExternalInternalPaths } from './handlers/handleExternalInternalPaths';\nimport { handleResponsivePaths } from './handlers/handleResponsivePaths';\nimport { getTokensFromServer, cleanupTempTokenParameters } from './handlers/handleTempToken';\n\nexport const processDspMiddleware = async (request: NextRequest, config?: MiddlewareConfig): Promise<NextResponse> => {\n const { pathname } = request.nextUrl;\n\n // 0. 정적 자원 체크(Skip)\n if (isStaticAsset(pathname)) {\n return NextResponse.next();\n }\n\n console.log(`[DSP Middleware] 처리 시작:: ${request.url}`);\n\n // 1. 토큰 받기 (임시토큰만 있으면)\n let tokens;\n try {\n const tokensResponse = await getTokensFromServer(request);\n tokens = tokensResponse?.data;\n } catch (error) {\n // 토큰 없이 계속 진행\n console.error(`[DSP Middleware] 토큰 획득 실패:: ${pathname}`, error);\n tokens = null;\n }\n\n // 1-1. 토큰 발급 성공 시 쿼리스트링 제거 후 리다이렉트\n const cleanupResponse = cleanupTempTokenParameters(request, tokens);\n if (cleanupResponse) {\n return cleanupResponse;\n }\n\n // 2. API 요청 처리(by pass)\n const apiResponse = await handleApiRequest(request);\n if (apiResponse) {\n console.log(`[DSP Middleware] API 요청 pathname:: ${pathname}`);\n\n return apiResponse;\n }\n\n // 3. 외부/내부 경로 처리\n const externalInternalResponse = handleExternalInternalPaths(request, { cookieData: { tokens } });\n if (externalInternalResponse) {\n console.log(`[DSP Middleware] External/Internal 경로로 처리:: ${pathname}`);\n\n return externalInternalResponse;\n }\n\n // 4. 직접 적응형 URL 접근 처리\n const directUrlResponse = handleDirectUrlAccess(request, { cookieData: { tokens } });\n if (directUrlResponse) {\n console.log(`[DSP Middleware] 직접 URL 접근으로 처리:: ${pathname}`);\n\n return directUrlResponse;\n }\n\n // 5. 반응형 전용 경로 처리\n const responsivePathResponse = handleResponsivePaths(request, {\n cookieData: { tokens },\n responsivePaths: config?.responsivePaths\n });\n if (responsivePathResponse) {\n console.log(`[DSP Middleware] 반응형 경로로 처리:: ${pathname}`);\n\n return responsivePathResponse;\n }\n\n // 6. 적응형 경로 처리\n const adaptiveResponse = handleAdaptiveProcessing(request, { cookieData: { tokens } });\n if (adaptiveResponse) {\n return adaptiveResponse;\n }\n\n // 모든 핸들러가 null을 반환하면 기본 처리\n return NextResponse.next();\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\n\n/**\n * 미들웨어 조립 함수\n * @param handlers\n * @param config\n * @returns\n */\nexport const createMiddleware = (handlers: MiddlewareHandler[], config?: MiddlewareConfig) => {\n return (request: NextRequest): NextResponse => {\n // 핸들러들을 순서대로 실행\n for (const handler of handlers) {\n const result = handler(request, config);\n if (result) {\n return result; // 첫 번째로 처리된 결과 반환\n }\n }\n\n // 모든 핸들러가 null을 반환하면 기본 처리\n return NextResponse.next();\n };\n};\n"]}
1
+ {"version":3,"sources":["../../src/utils/parse-utils.ts","../../src/utils/middleware-utils.ts","../../src/config/cookie-config.ts","../../src/utils/cookie-utils.ts","../../src/middleware/handlers/handleAdaptiveProcessing.ts","../../src/middleware/handlers/handleApiRequest.ts","../../src/middleware/handlers/handleDirectUrlAccess.ts","../../src/middleware/handlers/handleExternalInternalPaths.ts","../../src/middleware/handlers/handleResponsivePaths.ts","../../src/middleware/handlers/handleTempToken.ts","../../src/middleware/dsp-middleware.ts","../../src/middleware/handlers/createMiddleware.ts"],"names":["NextResponse"],"mappings":"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","file":"index.js","sourcesContent":["import { NextRequest } from 'next/server';\n\n/**\n * 요청 헤더에 값 파싱\n * @param request\n * @returns\n */\nexport const parseRequestHeaders = (request: NextRequest) => {\n return {\n acceptLanguage: request.headers.get('Accept-Language'),\n deviceId: request.headers.get('X-Channel-DeviceId'),\n loginType: request.headers.get('X-Channel-LoginType'),\n platformName: request.headers.get('X-Channel-PlatformName'),\n platformVersion: request.headers.get('X-Channel-PlatformVersion'),\n appVersion: request.headers.get('X-Channel-AppVersion'),\n deviceModel: request.headers.get('X-Channel-DeviceModel'),\n loginChannel: request.headers.get('X-Channel-LoginChannel'),\n formFactor: request.headers.get('X-Channel-FormFactor')\n };\n};\n\n/**\n * 쿼리 스트링 값 파싱\n * @param request\n * @returns\n */\nexport const parseQueryParameters = (request: NextRequest) => {\n const { searchParams } = request.nextUrl;\n\n return {\n tempToken: searchParams.get('tempToken'),\n mode: searchParams.get('mode')\n };\n};\n\n/**\n * 요청 쿠키에 값 파싱\n * @param request\n * @returns\n */\nexport const parseCookies = (request: NextRequest) => {\n return {\n formFactor: request.cookies.get('formFactor')?.value,\n accessToken: request.cookies.get('accessToken')?.value\n };\n};\n","import { NextRequest } from 'next/server';\n\nimport { getFormFactorFromUserAgent } from 'sales-frontend-utils';\n\nimport { parseCookies, parseRequestHeaders } from './parse-utils';\n\n/**\n * FormFactor에 따른 적응형 경로 변환\n * @param pathname\n * @param formFactor\n * @returns\n */\nexport const convertAdaptiveTargetPath = (pathname: string, formFactor: string) => {\n if (pathname === '/') {\n return pathname;\n }\n\n switch (formFactor.toLowerCase()) {\n case 'tablet':\n return `/tablet${pathname}`;\n case 'phone':\n case 'smartphone':\n return `/mobile${pathname}`;\n case 'desktop':\n case 'pc':\n return `/pc${pathname}`;\n default:\n return pathname;\n }\n};\n\n/**\n * FormFactor 구하기\n * @param request\n * @returns\n */\nexport const getFormFactor = (request: NextRequest) => {\n const userAgent = request.headers.get('user-agent') || '';\n\n // 1순위: Custom Header\n const headerValue = parseRequestHeaders(request).formFactor;\n if (headerValue) {\n return headerValue;\n }\n\n // 2순위: Cookie\n const cookieValue = parseCookies(request).formFactor;\n if (cookieValue) {\n return cookieValue;\n }\n\n // 3순위: User-Agent 판단\n return getFormFactorFromUserAgent(userAgent);\n};\n\n/**\n * 반응형 전용 pathname 판단\n * @param pathname\n * @param responsivePaths\n * @returns\n */\nexport const isResponsivePath = (pathname: string, responsivePaths: string[] = []): boolean => {\n return responsivePaths.some((path) => pathname.startsWith(path));\n};\n\n/**\n * 정적 자원 체크 함수\n * @param pathname\n * @returns\n */\nexport const isStaticAsset = (pathname: string): boolean => {\n // API 라우트는 제외\n if (pathname.startsWith('/api')) {\n return false;\n }\n\n // _next 관련 파일들\n if (pathname.startsWith('/_next') || pathname === '/favicon.ico') {\n return true;\n }\n\n // 확장자가 있으면 정적 자원\n return /\\.[a-zA-Z0-9]+$/.test(pathname);\n};\n","export const COOKIE_DEFAULT_CONFIG = {\n httpOnly: false,\n sameSite: 'strict' as const,\n secure: true\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { getEnvironmentFromHostname } from 'sales-frontend-utils';\n\nimport { COOKIE_DEFAULT_CONFIG } from '../config/cookie-config';\nimport { CookieData } from '../server-side-helper.types';\n\nimport { getFormFactor } from './middleware-utils';\nimport { parseRequestHeaders } from './parse-utils';\n\n/**\n * 쿠키 생성\n * @param response\n * @param cookieData\n * @returns\n */\nexport const createResponseWithCookies = (\n response: NextResponse,\n request: NextRequest,\n cookieData?: CookieData\n): NextResponse => {\n const { hostname } = new URL(request.url);\n const formFactor = getFormFactor(request);\n\n // 헤더에 있는 데이터 > 쿠키 > 초기 셋업\n const { acceptLanguage, appVersion, deviceId, deviceModel, loginChannel, loginType, platformName, platformVersion } =\n parseRequestHeaders(request);\n\n // 토큰타입\n if (cookieData?.tokens?.tokenType) {\n response.cookies.set({\n name: 'tokenType',\n value: cookieData.tokens.tokenType,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // expiresIn\n if (cookieData?.tokens?.expiresIn) {\n response.cookies.set({\n name: 'expiresIn',\n value: String(cookieData.tokens.expiresIn),\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // 액세스 토큰 쿠키\n if (cookieData?.tokens?.accessToken) {\n response.cookies.set({\n name: 'accessToken',\n value: cookieData.tokens.accessToken,\n ...getDefaultCookieConfig(hostname),\n //! middleware 커스텀헤더 세팅 불가로 우선 풀어 넣음\n httpOnly: false\n });\n }\n\n // 리프레시 토큰 쿠키\n if (cookieData?.tokens?.refreshToken) {\n response.cookies.set({\n name: 'refreshToken',\n value: cookieData.tokens.refreshToken,\n ...getDefaultCookieConfig(hostname),\n httpOnly: true\n });\n }\n\n // FormFactor 쿠키\n if (formFactor) {\n response.cookies.set({\n name: 'formFactor',\n value: formFactor,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Accept Language 쿠키\n if (acceptLanguage) {\n response.cookies.set({\n name: 'acceptLanguage',\n value: acceptLanguage,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // App Version 쿠키\n if (appVersion) {\n response.cookies.set({\n name: 'appVersion',\n value: appVersion,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Device ID 쿠키\n if (deviceId) {\n response.cookies.set({\n name: 'deviceId',\n value: deviceId,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Device Model 쿠키\n if (deviceModel) {\n response.cookies.set({\n name: 'deviceModel',\n value: deviceModel,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Login Channel 쿠키\n if (loginChannel) {\n response.cookies.set({\n name: 'loginChannel',\n value: loginChannel,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Login Type 쿠키\n if (loginType) {\n response.cookies.set({\n name: 'loginType',\n value: loginType,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Platform Name 쿠키\n if (platformName) {\n response.cookies.set({\n name: 'platformName',\n value: platformName,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n // Platform Version 쿠키\n if (platformVersion) {\n response.cookies.set({\n name: 'platformVersion',\n value: platformVersion,\n ...getDefaultCookieConfig(hostname)\n });\n }\n\n return response;\n};\n\n/**\n * 환경에 따른 기본 쿠키 설정값 반환\n * @param hostname\n * @returns\n */\nexport const getDefaultCookieConfig = (hostname: string) => {\n const environment = getEnvironmentFromHostname(hostname);\n\n if (environment !== 'prd') {\n return {\n ...COOKIE_DEFAULT_CONFIG,\n sameSite: 'lax' as const\n };\n }\n\n return COOKIE_DEFAULT_CONFIG;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\nimport { getFormFactor, convertAdaptiveTargetPath } from '../../utils/middleware-utils';\n\n/**\n * 적응형 경로 처리(rewrite 처리)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleAdaptiveProcessing: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { nextUrl } = request;\n const formFactor = getFormFactor(request);\n\n const rewrittenUrl = nextUrl.clone();\n rewrittenUrl.pathname = convertAdaptiveTargetPath(nextUrl.pathname, formFactor);\n\n console.log(`[DSP Middleware] 적응형 ReWrite 처리:: ${rewrittenUrl.pathname}`);\n\n return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\n/**\n * API 요청 처리\n * Cookie에 AccessToken이 있으면 Authorization 헤더에 셋팅을 담당하는 함수\n * Only api 요청만 처리\n * @param request\n * @returns\n */\nexport const handleApiRequest = async (request: NextRequest): Promise<NextResponse | null> => {\n const { pathname } = request.nextUrl;\n\n if (!pathname.startsWith('/api/')) {\n // 처리하지 않음 (온니 api 요청만 처리)\n return null;\n }\n\n return NextResponse.next();\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\n\n/**\n * 직접 URL 접근 처리\n * 직접 URL 입력한 경우 그대로 통과\n * 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleDirectUrlAccess: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { pathname } = request.nextUrl;\n\n const directPaths = ['/tablet/', '/mobile/', '/pc/', '/responsive/'];\n\n if (directPaths.some((path) => pathname.startsWith(path))) {\n return createResponseWithCookies(NextResponse.next(), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n }\n\n return null;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\n\n/**\n * External/Internal 경로 처리\n * 컨텍스트를 벗어난 페이지 처리(아무런 간섭을 받지 않음)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleExternalInternalPaths: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { pathname } = request.nextUrl;\n\n if (pathname.startsWith('/external') || pathname.startsWith('/internal')) {\n return createResponseWithCookies(NextResponse.next(), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n }\n\n return null;\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\nimport { createResponseWithCookies } from '../../utils/cookie-utils';\nimport { isResponsivePath } from '../../utils/middleware-utils';\n\n/**\n * 반응형 경로 처리(rewrite 처리)\n * 단, 쿠키를 넘겨주면 쿠키 생성을 해줌\n * @param request\n * @param config\n * @returns\n */\nexport const handleResponsivePaths: MiddlewareHandler = (request: NextRequest, config?: MiddlewareConfig) => {\n const { nextUrl } = request;\n const { pathname } = nextUrl;\n\n if (!isResponsivePath(pathname, config?.responsivePaths)) {\n return null;\n }\n\n const rewrittenUrl = nextUrl.clone();\n rewrittenUrl.pathname = `/responsive${pathname}`;\n\n return createResponseWithCookies(NextResponse.rewrite(rewrittenUrl), request, {\n tokens: config?.cookieData?.tokens ?? null\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport {\n requestAccessTokens,\n DspResponseDspTokenResponseDto,\n DspTokenResponseDto\n} from 'sales-frontend-api/middleware';\nimport { getApiHostNameFromEnvironment } from 'sales-frontend-utils';\n\nimport { parseCookies, parseQueryParameters, createResponseWithCookies } from '../../utils';\n\n/**\n * 임시토큰만 있을 경우 AT, RT를 발급받는다.\n * @param request\n * @param tempToken\n * @returns\n */\nexport const getTokensFromServer = async (\n request: NextRequest,\n forceApiHostName?: string\n): Promise<DspResponseDspTokenResponseDto | null> => {\n const { accessToken } = parseCookies(request);\n const { tempToken, mode } = parseQueryParameters(request);\n\n // tempToken 없으면 발급 불가\n if (!tempToken) {\n return null;\n }\n\n // accessToken이 있고 mode가 initial이 아니면 발급 스킵\n if (accessToken && mode !== 'initial') {\n return null;\n }\n\n console.log(`[DSP Middleware] 임시 토큰 처리:: 시작 (mode: ${mode || 'none'})`);\n\n const data = await requestAccessTokens(tempToken, {\n baseURL: getApiHostNameFromEnvironment(new URL(request.url).hostname, forceApiHostName)\n });\n\n if (data.isSuccess === false) {\n console.error('[DSP Middleware] 토큰 발급 실패');\n\n throw new Error('토큰 발급 실패');\n }\n\n console.log(`[DSP Middleware] 토큰 발급 성공`, data);\n\n return data;\n};\n\nexport const cleanupTempTokenParameters = (\n request: NextRequest,\n tokens?: DspTokenResponseDto | null\n): NextResponse | null => {\n if (!tokens) {\n return null;\n }\n\n const { tempToken } = parseQueryParameters(request);\n\n if (!tempToken) {\n return null;\n }\n console.log('[DSP Middleware] 토큰 발급 완료 - 쿼리스트링 제거 후 리다이렉트');\n\n // 쿼리스트링 제거\n const url = new URL(request.url);\n url.searchParams.delete('tempToken');\n url.searchParams.delete('mode');\n\n // 리다이렉트 응답 생성 + 쿠키 설정\n const response = NextResponse.redirect(url);\n\n return createResponseWithCookies(response, request, {\n tokens\n });\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareConfig } from '../server-side-helper.types';\nimport { isStaticAsset } from '../utils/middleware-utils';\n\nimport { handleAdaptiveProcessing } from './handlers/handleAdaptiveProcessing';\nimport { handleApiRequest } from './handlers/handleApiRequest';\nimport { handleDirectUrlAccess } from './handlers/handleDirectUrlAccess';\nimport { handleExternalInternalPaths } from './handlers/handleExternalInternalPaths';\nimport { handleResponsivePaths } from './handlers/handleResponsivePaths';\nimport { getTokensFromServer, cleanupTempTokenParameters } from './handlers/handleTempToken';\n\nexport const processDspMiddleware = async (request: NextRequest, config?: MiddlewareConfig): Promise<NextResponse> => {\n const { pathname } = request.nextUrl;\n\n // 0. 정적 자원 체크(Skip)\n if (isStaticAsset(pathname)) {\n return NextResponse.next();\n }\n\n console.log(`[DSP Middleware] 처리 시작:: ${request.url}`);\n\n // 1. 토큰 받기 (임시토큰만 있으면)\n let tokens;\n try {\n const tokensResponse = await getTokensFromServer(request);\n tokens = tokensResponse?.data;\n } catch (error) {\n // 토큰 없이 계속 진행\n console.error(`[DSP Middleware] 토큰 획득 실패:: ${pathname}`, error);\n tokens = null;\n }\n\n // 1-1. 토큰 발급 성공 시 쿼리스트링 제거 후 리다이렉트\n const cleanupResponse = cleanupTempTokenParameters(request, tokens);\n if (cleanupResponse) {\n return cleanupResponse;\n }\n\n // 2. API 요청 처리(by pass)\n const apiResponse = await handleApiRequest(request);\n if (apiResponse) {\n console.log(`[DSP Middleware] API 요청 pathname:: ${pathname}`);\n\n return apiResponse;\n }\n\n // 3. 외부/내부 경로 처리\n const externalInternalResponse = handleExternalInternalPaths(request, { cookieData: { tokens } });\n if (externalInternalResponse) {\n console.log(`[DSP Middleware] External/Internal 경로 처리:: ${pathname}`);\n\n return externalInternalResponse;\n }\n\n // 4. 적응형 URL 접근 처리\n const directUrlResponse = handleDirectUrlAccess(request, { cookieData: { tokens } });\n if (directUrlResponse) {\n console.log(`[DSP Middleware] 적응형 경로 처리:: ${pathname}`);\n\n return directUrlResponse;\n }\n\n // 5. 반응형 전용 경로 처리\n const responsivePathResponse = handleResponsivePaths(request, {\n cookieData: { tokens },\n responsivePaths: config?.responsivePaths\n });\n if (responsivePathResponse) {\n console.log(`[DSP Middleware] 반응형 경로 처리:: ${pathname}`);\n\n return responsivePathResponse;\n }\n\n // 6. 적응형 경로 처리\n const adaptiveResponse = handleAdaptiveProcessing(request, { cookieData: { tokens } });\n if (adaptiveResponse) {\n return adaptiveResponse;\n }\n\n // 모든 핸들러가 null을 반환하면 기본 처리\n return NextResponse.next();\n};\n","import { NextRequest, NextResponse } from 'next/server';\n\nimport { MiddlewareHandler, MiddlewareConfig } from '../../server-side-helper.types';\n\n/**\n * 미들웨어 조립 함수\n * @param handlers\n * @param config\n * @returns\n */\nexport const createMiddleware = (handlers: MiddlewareHandler[], config?: MiddlewareConfig) => {\n return (request: NextRequest): NextResponse => {\n // 핸들러들을 순서대로 실행\n for (const handler of handlers) {\n const result = handler(request, config);\n if (result) {\n return result; // 첫 번째로 처리된 결과 반환\n }\n }\n\n // 모든 핸들러가 null을 반환하면 기본 처리\n return NextResponse.next();\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sales-frontend-server-side-helper",
3
- "version": "0.0.50",
3
+ "version": "0.0.51",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "files": [
@@ -60,8 +60,8 @@
60
60
  "next": ">=15.3.0"
61
61
  },
62
62
  "dependencies": {
63
- "sales-frontend-utils": "0.0.14",
64
- "sales-frontend-api": "0.0.67"
63
+ "sales-frontend-api": "0.0.68",
64
+ "sales-frontend-utils": "0.0.14"
65
65
  },
66
66
  "scripts": {
67
67
  "lint": "eslint . --max-warnings 0",