UNPKG

@openocean.finance/widget-sdk

Version:

OpenOcean Any-to-Any Cross-Chain-Swap SDK

100 lines 3.85 kB
"use strict"; 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