@openocean.finance/widget-sdk
Version:
OpenOcean Any-to-Any Cross-Chain-Swap SDK
100 lines • 3.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MaxOrderedNonce = exports.MaxAllowanceExpiration = exports.MaxAllowanceTransferAmount = void 0;
exports.getPermitSingleData = getPermitSingleData;
exports.getPermitBatchData = getPermitBatchData;
exports.getPermitData = getPermitData;
exports.hash = hash;
const viem_1 = require("viem");
const constants_js_1 = require("../../../constants.js");
const invariant_js_1 = require("../../../utils/invariant.js");
const constants_js_2 = require("./constants.js");
const domain_js_1 = require("./domain.js");
exports.MaxAllowanceTransferAmount = constants_js_1.MaxUint160;
exports.MaxAllowanceExpiration = constants_js_1.MaxUint48;
exports.MaxOrderedNonce = constants_js_1.MaxUint48;
const PERMIT_DETAILS = [
{ name: 'token', type: 'address' },
{ name: 'amount', type: 'uint160' },
{ name: 'expiration', type: 'uint48' },
{ name: 'nonce', type: 'uint48' },
];
const PERMIT_TYPES = {
PermitDetails: PERMIT_DETAILS,
PermitSingle: [
{ name: 'details', type: 'PermitDetails' },
{ name: 'spender', type: 'address' },
{ name: 'sigDeadline', type: 'uint256' },
],
};
const PERMIT_BATCH_TYPES = {
PermitDetails: PERMIT_DETAILS,
PermitBatch: [
{ name: 'details', type: 'PermitDetails[]' },
{ name: 'spender', type: 'address' },
{ name: 'sigDeadline', type: 'uint256' },
],
};
function isPermit(permit) {
return !Array.isArray(permit.details);
}
function getPermitSingleData(permit, permit2Address, chainId) {
(0, invariant_js_1.invariant)(constants_js_2.MaxSigDeadline >= permit.sigDeadline, 'SIG_DEADLINE_OUT_OF_RANGE');
const domain = (0, domain_js_1.permit2Domain)(permit2Address, chainId);
validatePermitDetails(permit.details);
return {
domain,
message: permit,
};
}
function getPermitBatchData(permit, permit2Address, chainId) {
(0, invariant_js_1.invariant)(constants_js_2.MaxSigDeadline >= permit.sigDeadline, 'SIG_DEADLINE_OUT_OF_RANGE');
const domain = (0, domain_js_1.permit2Domain)(permit2Address, chainId);
permit.details.forEach(validatePermitDetails);
return {
domain,
message: permit,
};
}
function getPermitData(permit, permit2Address, chainId) {
(0, invariant_js_1.invariant)(constants_js_2.MaxSigDeadline >= permit.sigDeadline, 'SIG_DEADLINE_OUT_OF_RANGE');
const domain = (0, domain_js_1.permit2Domain)(permit2Address, chainId);
if (isPermit(permit)) {
validatePermitDetails(permit.details);
return {
domain,
types: PERMIT_TYPES,
message: permit,
};
}
permit.details.forEach(validatePermitDetails);
return {
domain,
types: PERMIT_BATCH_TYPES,
message: permit,
};
}
function hash(permit, permit2Address, chainId) {
if (isPermit(permit)) {
const { domain, message } = getPermitSingleData(permit, permit2Address, chainId);
return (0, viem_1.hashTypedData)({
domain,
types: PERMIT_TYPES,
primaryType: 'PermitSingle',
message: message,
});
}
const { domain, message } = getPermitBatchData(permit, permit2Address, chainId);
return (0, viem_1.hashTypedData)({
domain,
types: PERMIT_BATCH_TYPES,
primaryType: 'PermitBatch',
message: message,
});
}
function validatePermitDetails(details) {
(0, invariant_js_1.invariant)(exports.MaxOrderedNonce >= details.nonce, 'NONCE_OUT_OF_RANGE');
(0, invariant_js_1.invariant)(exports.MaxAllowanceTransferAmount >= details.amount, 'AMOUNT_OUT_OF_RANGE');
(0, invariant_js_1.invariant)(exports.MaxAllowanceExpiration >= details.expiration, 'EXPIRATION_OUT_OF_RANGE');
}
//# sourceMappingURL=allowanceTransfer.js.map