From dc55d85056edaadc5c810f1e2161cd4d74822579 Mon Sep 17 00:00:00 2001 From: EUForest Date: Sat, 14 Feb 2026 00:44:28 +0800 Subject: [PATCH] fix(admin): handle int64 precision loss in getUserSubscribe API Add transformResponse to convert large integers to strings before JSON parsing to prevent precision loss for int64 values like user IDs that exceed JavaScript's MAX_SAFE_INTEGER. --- packages/ui/src/services/admin/user.ts | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/packages/ui/src/services/admin/user.ts b/packages/ui/src/services/admin/user.ts index 264debc..f07a63e 100644 --- a/packages/ui/src/services/admin/user.ts +++ b/packages/ui/src/services/admin/user.ts @@ -291,6 +291,32 @@ export async function getUserSubscribe( params: { ...params, }, + transformResponse: [ + (data) => { + try { + if (typeof data === "string") { + // Convert large integers (int64) to strings BEFORE JSON.parse to prevent precision loss + // JavaScript MAX_SAFE_INTEGER is 2^53 - 1 = 9007199254740991 + // This regex finds all numbers >= 10^16 (larger than MAX_SAFE_INTEGER) + const processedData = data.replace( + /"([^"]+)":\s*(\d{16,})/g, + (match, key, value) => { + // Check if number exceeds MAX_SAFE_INTEGER + const num = parseInt(value, 10); + if (!Number.isSafeInteger(num)) { + return `"${key}": "${value}"`; + } + return match; + } + ); + return JSON.parse(processedData); + } + return data; + } catch { + return data; + } + }, + ], ...(options || {}), } );