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:
parent
b45ec4b56e
commit
dc55d85056
@ -291,6 +291,32 @@ export async function getUserSubscribe(
|
|||||||
params: {
|
params: {
|
||||||
...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 || {}),
|
...(options || {}),
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user