@openocean.finance/widget-sdk
Version:
OpenOcean Any-to-Any Cross-Chain-Swap SDK
42 lines • 1.6 kB
JavaScript
import { keccak256 } from 'viem';
import { signTypedData } from 'viem/actions';
import { getAction } from 'viem/utils';
import { getPermitTransferFromValues } from './getPermitTransferFromValues.js';
import { getPermitData } from './signatureTransfer.js';
export async function signPermit2Message(params) {
const { client, chain, tokenAddress, amount, data, witness } = params;
const permitTransferFrom = await getPermitTransferFromValues(client, chain, tokenAddress, amount);
// Create witness data for the OpenOcean call
const _witness = witness
? {
witness: {
diamondAddress: chain.diamondAddress,
diamondCalldataHash: keccak256(data),
},
witnessTypeName: 'OpenOceanCall',
witnessType: {
OpenOceanCall: [
{ name: 'diamondAddress', type: 'address' },
{ name: 'diamondCalldataHash', type: 'bytes32' },
],
},
}
: undefined;
const permitData = getPermitData(permitTransferFrom, chain.permit2, chain.id, _witness);
const primaryType = witness
? 'PermitWitnessTransferFrom'
: 'PermitTransferFrom';
const signature = await getAction(client, signTypedData, 'signTypedData')({
account: client.account,
primaryType,
domain: permitData.domain,
types: permitData.types,
message: permitData.message,
});
return {
...permitData,
primaryType,
signature,
};
}
//# sourceMappingURL=signPermit2Message.js.map