UNPKG

@biconomy/abstractjs

Version:

SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.

164 lines 5.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildActionPolicy = exports.calldataArgument = exports.getUniversalActionPolicyConditionType = exports.UniversalPolicyAbi = void 0; const viem_1 = require("viem"); const constants_1 = require("../../constants/index.js"); const modules_1 = require("../../modules/index.js"); const utils_1 = require("../utils/index.js"); exports.UniversalPolicyAbi = [ { components: [ { name: "valueLimitPerUse", type: "uint256" }, { components: [ { name: "length", type: "uint256" }, { components: [ { name: "condition", type: "uint8" }, { name: "offset", type: "uint64" }, { name: "isLimited", type: "bool" }, { name: "ref", type: "bytes32" }, { components: [ { name: "limit", type: "uint256" }, { name: "used", type: "uint256" } ], name: "usage", type: "tuple" } ], name: "rules", type: "tuple[16]" } ], name: "paramRules", type: "tuple" } ], name: "ActionConfig", type: "tuple" } ]; const getUniversalActionPolicyConditionType = (conditionType) => { let condition = modules_1.ParamCondition.EQUAL; switch (conditionType) { case "equal": condition = modules_1.ParamCondition.EQUAL; break; case "greaterThan": condition = modules_1.ParamCondition.GREATER_THAN; break; case "lessThan": condition = modules_1.ParamCondition.LESS_THAN; break; case "greaterThanOrEqual": condition = modules_1.ParamCondition.GREATER_THAN_OR_EQUAL; break; case "lessThanOrEqual": condition = modules_1.ParamCondition.LESS_THAN_OR_EQUAL; break; case "notEqual": condition = modules_1.ParamCondition.NOT_EQUAL; break; default: condition = modules_1.ParamCondition.EQUAL; break; } return condition; }; exports.getUniversalActionPolicyConditionType = getUniversalActionPolicyConditionType; const calldataArgument = (value) => { if (value <= 0) { throw new Error("Invalid calldata argument value"); } return BigInt((value - 1) * 32); }; exports.calldataArgument = calldataArgument; const getUniversalPolicy = (params) => { const { rules, valueLimitPerUse } = params; if (rules.length > 16) { throw new Error("Universal policy only supports 16 rules"); } const paramRules = []; const defaultParamRule = { condition: modules_1.ParamCondition.GREATER_THAN, isLimited: false, offset: (0, exports.calldataArgument)(1), ref: (0, viem_1.toHex)((0, viem_1.toBytes)("0x", { size: 32 })), usage: { limit: BigInt(0), used: BigInt(0) } }; for (let index = 0; index < 16; index++) { const configuredRule = rules[index]; if (configuredRule) { paramRules.push({ condition: (0, exports.getUniversalActionPolicyConditionType)(configuredRule.condition), offset: configuredRule.calldataOffset, ref: (0, utils_1.toBytes32)(configuredRule.comparisonValue), isLimited: configuredRule.isLimited ?? false, usage: configuredRule.usage || { limit: BigInt(0), used: BigInt(0) } }); } else { paramRules.push(defaultParamRule); } } return (0, constants_1.getUniversalActionPolicy)({ paramRules: { length: BigInt(rules.length), rules: paramRules }, valueLimitPerUse: valueLimitPerUse || 0n }); }; const buildActionPolicy = (parameters) => { const { type } = parameters; switch (type) { case "sudo": { return (0, constants_1.getSudoPolicy)(); } case "universal": { return getUniversalPolicy(parameters); } case "timeframe": { return (0, constants_1.getTimeFramePolicy)({ validAfter: parameters.validAfter, validUntil: parameters.validUntil }); } case "usageLimit": { return (0, constants_1.getUsageLimitPolicy)({ limit: parameters.limit }); } case "spendingLimits": { return (0, constants_1.getSpendingLimitsPolicy)(parameters.tokenLimits); } default: { throw new Error(`Unknown build action policy type: ${type}`); } } }; exports.buildActionPolicy = buildActionPolicy; //# sourceMappingURL=buildActionPolicy.js.map