UNPKG

@abstract-foundation/agw-client

Version:
90 lines 3.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPeriodIdsForTransaction = exports.SessionStatus = exports.ConstraintCondition = exports.LimitZero = exports.LimitUnlimited = exports.LimitType = void 0; exports.getSessionSpec = getSessionSpec; exports.encodeSession = encodeSession; exports.encodeSessionWithPeriodIds = encodeSessionWithPeriodIds; exports.getSessionHash = getSessionHash; const viem_1 = require("viem"); const SessionKeyValidator_js_1 = require("./abis/SessionKeyValidator.js"); var LimitType; (function (LimitType) { LimitType[LimitType["Unlimited"] = 0] = "Unlimited"; LimitType[LimitType["Lifetime"] = 1] = "Lifetime"; LimitType[LimitType["Allowance"] = 2] = "Allowance"; })(LimitType || (exports.LimitType = LimitType = {})); exports.LimitUnlimited = { limitType: LimitType.Unlimited, limit: 0n, period: 0n, }; exports.LimitZero = { limitType: LimitType.Lifetime, limit: 0n, period: 0n, }; var ConstraintCondition; (function (ConstraintCondition) { ConstraintCondition[ConstraintCondition["Unconstrained"] = 0] = "Unconstrained"; ConstraintCondition[ConstraintCondition["Equal"] = 1] = "Equal"; ConstraintCondition[ConstraintCondition["Greater"] = 2] = "Greater"; ConstraintCondition[ConstraintCondition["Less"] = 3] = "Less"; ConstraintCondition[ConstraintCondition["GreaterEqual"] = 4] = "GreaterEqual"; ConstraintCondition[ConstraintCondition["LessEqual"] = 5] = "LessEqual"; ConstraintCondition[ConstraintCondition["NotEqual"] = 6] = "NotEqual"; })(ConstraintCondition || (exports.ConstraintCondition = ConstraintCondition = {})); var SessionStatus; (function (SessionStatus) { SessionStatus[SessionStatus["NotInitialized"] = 0] = "NotInitialized"; SessionStatus[SessionStatus["Active"] = 1] = "Active"; SessionStatus[SessionStatus["Closed"] = 2] = "Closed"; SessionStatus[SessionStatus["Expired"] = 3] = "Expired"; })(SessionStatus || (exports.SessionStatus = SessionStatus = {})); function getSessionSpec() { return (0, viem_1.getAbiItem)({ abi: SessionKeyValidator_js_1.SessionKeyValidatorAbi, name: 'createSession', }).inputs[0]; } function encodeSession(sessionConfig) { return (0, viem_1.encodeAbiParameters)([getSessionSpec()], [sessionConfig]); } function encodeSessionWithPeriodIds(sessionConfig, periods) { return (0, viem_1.encodeAbiParameters)([getSessionSpec(), { type: 'uint64[]' }], [sessionConfig, periods]); } const getPeriodIdsForTransaction = (args) => { const timestamp = args.timestamp || BigInt(Math.floor(Date.now() / 1000)); const target = (0, viem_1.getAddress)(args.target); const getId = (limit) => { if (limit.limitType === LimitType.Allowance) { return timestamp / limit.period; } return 0n; }; const findTransferPolicy = () => { return args.sessionConfig.transferPolicies.find((policy) => policy.target.toLowerCase() === target.toLowerCase()); }; const findCallPolicy = () => { return args.sessionConfig.callPolicies.find((policy) => policy.target.toLowerCase() === target.toLowerCase() && policy.selector == args.selector); }; const isContractCall = !!args.selector && args.selector.length >= 10; const policy = isContractCall ? findCallPolicy() : findTransferPolicy(); if (!policy) throw new Error('Transaction does not fit any policy'); const periodIds = [ getId(args.sessionConfig.feeLimit), getId(policy.valueLimit), ...(isContractCall ? policy.constraints.map((constraint) => getId(constraint.limit)) : []), ]; return periodIds; }; exports.getPeriodIdsForTransaction = getPeriodIdsForTransaction; function getSessionHash(sessionConfig) { return (0, viem_1.keccak256)(encodeSession(sessionConfig)); } //# sourceMappingURL=sessions.js.map