From 299d7a82ccdc83385ff4e67c68e90ed645b60908 Mon Sep 17 00:00:00 2001 From: kimsubsub Date: Fri, 8 May 2026 01:07:03 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=EC=BA=A1=EC=B1=A0=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EB=AF=B8=EC=8B=A4=ED=96=89=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/be1.js | 8 ---- api/be3.js | 8 ---- .../scan-url/api/uploadErrors.test.ts | 4 +- src/features/scan-url/api/uploadErrors.ts | 23 +-------- src/pages/QRScan/QRScanPage.tsx | 7 ++- src/pages/QRScan/hooks/useQRScanPage.ts | 48 ++++++++++++++----- vercel.json | 4 +- 7 files changed, 48 insertions(+), 54 deletions(-) delete mode 100644 api/be1.js delete mode 100644 api/be3.js diff --git a/api/be1.js b/api/be1.js deleted file mode 100644 index 13e0ea6..0000000 --- a/api/be1.js +++ /dev/null @@ -1,8 +0,0 @@ -const { proxyRequest } = require('./_proxy'); - -module.exports = function handler(request, response) { - return proxyRequest(request, response, { - envName: 'BE1_PROXY_TARGET_URL', - pathQueryParam: 'path', - }); -}; diff --git a/api/be3.js b/api/be3.js deleted file mode 100644 index b014c05..0000000 --- a/api/be3.js +++ /dev/null @@ -1,8 +0,0 @@ -const { proxyRequest } = require('./_proxy'); - -module.exports = function handler(request, response) { - return proxyRequest(request, response, { - envName: 'BE3_PROXY_TARGET_URL', - pathQueryParam: 'path', - }); -}; diff --git a/src/features/scan-url/api/uploadErrors.test.ts b/src/features/scan-url/api/uploadErrors.test.ts index 15256c1..aa65ace 100644 --- a/src/features/scan-url/api/uploadErrors.test.ts +++ b/src/features/scan-url/api/uploadErrors.test.ts @@ -40,7 +40,7 @@ describe('isCaptchaRequiredUploadError', () => { expect(isCaptchaRequiredUploadError(error)).toBe(false); }); - it('returns false for 429 responses without captcha markers', () => { + it('returns true for plain 429 upload responses', () => { const error = new ApiError({ data: { message: 'Too many requests.', @@ -49,6 +49,6 @@ describe('isCaptchaRequiredUploadError', () => { statusCode: 429, }); - expect(isCaptchaRequiredUploadError(error)).toBe(false); + expect(isCaptchaRequiredUploadError(error)).toBe(true); }); }); diff --git a/src/features/scan-url/api/uploadErrors.ts b/src/features/scan-url/api/uploadErrors.ts index 10cd544..607cc21 100644 --- a/src/features/scan-url/api/uploadErrors.ts +++ b/src/features/scan-url/api/uploadErrors.ts @@ -1,26 +1,5 @@ import { isApiError } from '@/shared/api/errors/apiError'; -import { pickString } from '@/shared/api/responseAccess/payloadAccess'; - -function normalizeValue(value: string | null | undefined): string { - return value?.trim().toLowerCase() ?? ''; -} export function isCaptchaRequiredUploadError(error: unknown): boolean { - if (!isApiError(error) || error.statusCode !== 429) { - return false; - } - - const errorCode = normalizeValue( - pickString(error.data, ['error_code', 'errorCode', 'code', 'status']), - ); - const payloadMessage = pickString(error.data, [ - 'message', - 'detail', - 'error', - 'error_description', - 'description', - ]); - const message = normalizeValue([error.message, payloadMessage].filter(Boolean).join(' ')); - - return errorCode.includes('captcha') || message.includes('captcha') || message.includes('캡차'); + return isApiError(error) && error.statusCode === 429; } diff --git a/src/pages/QRScan/QRScanPage.tsx b/src/pages/QRScan/QRScanPage.tsx index 517d3f7..61404c4 100644 --- a/src/pages/QRScan/QRScanPage.tsx +++ b/src/pages/QRScan/QRScanPage.tsx @@ -203,7 +203,12 @@ export default function QRScanPage() { {isCapturing ? '촬영 중...' : 'QR 스캔하기'} -