UNPKG

@catalabs/catalyst-sdk

Version:
91 lines 3.56 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SignatureTransfer = void 0; const ethers_1 = require("ethers"); const tiny_invariant_1 = __importDefault(require("tiny-invariant")); const constants_1 = require("../constants"); const utils_1 = require("../utils"); function permitTransferFromWithWitnessType(witness) { return { PermitWitnessTransferFrom: [ { name: 'permitted', type: 'TokenPermissions' }, { name: 'spender', type: 'address' }, { name: 'nonce', type: 'uint256' }, { name: 'deadline', type: 'uint256' }, { name: 'witness', type: witness.witnessTypeName }, ], TokenPermissions: constants_1.TOKEN_PERMISSIONS, ...witness.witnessType, }; } function permitBatchTransferFromWithWitnessType(witness) { return { PermitBatchWitnessTransferFrom: [ { name: 'permitted', type: 'TokenPermissions[]' }, { name: 'spender', type: 'address' }, { name: 'nonce', type: 'uint256' }, { name: 'deadline', type: 'uint256' }, { name: 'witness', type: witness.witnessTypeName }, ], TokenPermissions: constants_1.TOKEN_PERMISSIONS, ...witness.witnessType, }; } function isPermitTransferFrom(permit) { return !Array.isArray(permit.permitted); } class SignatureTransfer { constructor() { } static getPermitData({ permit, permit2Address, chainId, witness, }) { (0, tiny_invariant_1.default)(constants_1.MaxSigDeadline >= permit.deadline, 'SIG_DEADLINE_OUT_OF_RANGE'); (0, tiny_invariant_1.default)(constants_1.MaxUnorderedNonce >= permit.nonce, 'NONCE_OUT_OF_RANGE'); const domain = (0, utils_1.getPermit2Domain)(permit2Address, chainId); if (isPermitTransferFrom(permit)) { validateTokenPermissions(permit.permitted); const types = witness ? permitTransferFromWithWitnessType(witness) : constants_1.PERMIT_TRANSFER_FROM_TYPES; const values = witness ? Object.assign(permit, { witness: witness.witness }) : permit; return { domain, types, values, }; } else { permit.permitted.forEach(validateTokenPermissions); const types = witness ? permitBatchTransferFromWithWitnessType(witness) : constants_1.PERMIT_BATCH_TRANSFER_FROM_TYPES; const values = witness ? Object.assign(permit, { witness: witness.witness }) : permit; return { domain, types, values, }; } } static hash(permit, permit2Address, chainId, witness) { const { domain, types, values } = SignatureTransfer.getPermitData({ permit, permit2Address, chainId, witness, }); return ethers_1.TypedDataEncoder.hash(domain, types, values); } } exports.SignatureTransfer = SignatureTransfer; function validateTokenPermissions(permissions) { (0, tiny_invariant_1.default)(constants_1.MaxSignatureTransferAmount >= permissions.amount, 'AMOUNT_OUT_OF_RANGE'); } //# sourceMappingURL=SignatureTransfer.lib.js.map