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.
This commit is contained in:
EUForest 2026-02-14 00:44:28 +08:00
parent b45ec4b56e
commit dc55d85056

View File

@ -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 || {}),
}
);