UNPKG

@sfpro/sdk

Version:

TypeScript SDK for Superfluid Protocol - stream money every second

56 lines (55 loc) 1.88 kB
import { encodeAbiParameters, parseAbiParameters } from "viem"; export const OPERATION_TYPE = { UNSUPPORTED: 0, ERC20_APPROVE: 1, ERC20_TRANSFER_FROM: 2, ERC777_SEND: 3, ERC20_INCREASE_ALLOWANCE: 4, ERC20_DECREASE_ALLOWANCE: 5, SUPERTOKEN_UPGRADE: 101, SUPERTOKEN_DOWNGRADE: 102, SUPERFLUID_CALL_AGREEMENT: 201, CALL_APP_ACTION: 202, SIMPLE_FORWARD_CALL: 301, ERC2771_FORWARD_CALL: 302, }; export const stripFunctionSelector = (callData) => "0x".concat(callData.slice(10)); export function prepareOperationData({ operationType, data, ...rest }) { switch (operationType) { case OPERATION_TYPE.SUPERFLUID_CALL_AGREEMENT: { const userData = rest.userData ?? "0x"; return encodeAbiParameters(parseAbiParameters("bytes, bytes"), [data, userData]); } case OPERATION_TYPE.CALL_APP_ACTION: case OPERATION_TYPE.SIMPLE_FORWARD_CALL: case OPERATION_TYPE.ERC2771_FORWARD_CALL: return data; case OPERATION_TYPE.ERC20_APPROVE: case OPERATION_TYPE.ERC20_TRANSFER_FROM: case OPERATION_TYPE.ERC777_SEND: case OPERATION_TYPE.ERC20_INCREASE_ALLOWANCE: case OPERATION_TYPE.ERC20_DECREASE_ALLOWANCE: case OPERATION_TYPE.SUPERTOKEN_UPGRADE: case OPERATION_TYPE.SUPERTOKEN_DOWNGRADE: return stripFunctionSelector(data); default: throw new Error(`Unsupported operation type: ${operationType}`); } } export function prepareOperation(args) { const { operationType, target, data, ...rest } = args; return { operationType, target, data: prepareOperationData({ operationType, data, ...rest }), }; } export const TIME_UNIT = { second: 1, minute: 60, hour: 3600, day: 86400, week: 604800, month: 2628000, year: 31536000, };