@lifi/sdk
Version:
LI.FI Any-to-Any Cross-Chain-Swap SDK
41 lines • 1.5 kB
JavaScript
/**
* Checks if an existing native permit is valid for the given requirements
*/
export const isNativePermitValid = (permit, typedData) => {
// Only check native permits (EIP-2612)
if (permit.primaryType !== 'Permit') {
return false;
}
// Check if the permit is for the correct chain
if (Number(permit.domain.chainId) !== Number(typedData.domain.chainId) ||
(permit.domain.salt && permit.domain.salt !== typedData.domain.salt)) {
return false;
}
// Check if the permit message has the required fields
const message = permit.message;
if (!message) {
return false;
}
// Check spender
if (message.spender?.toLowerCase() !== typedData.message.spender?.toLowerCase()) {
return false;
}
// Check owner
if (message.owner?.toLowerCase() !== typedData.message.owner?.toLowerCase()) {
return false;
}
// Check amount (value field in native permits)
const permitAmount = BigInt(message.value || 0);
if (permitAmount < BigInt(typedData.message.value || 0)) {
return false;
}
// Check deadline (must have at least 5 minutes remaining)
const deadlineTimestamp = parseInt(message.deadline || 0, 10);
// Add 5 minutes bufferto the current timestamp
const allowedTimestamp = Math.floor(Date.now() / 1000) + 5 * 60;
if (deadlineTimestamp <= allowedTimestamp) {
return false;
}
return true;
};
//# sourceMappingURL=isNativePermitValid.js.map