@abstract-foundation/agw-client
Version:
Abstract Global Wallet Client SDK
90 lines • 3.94 kB
JavaScript
;
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