zksync-sso
Version:
ZKsync Smart Sign On SDK
63 lines • 2.63 kB
JavaScript
import { getAddress } from "viem";
export var LimitType;
(function (LimitType) {
LimitType[LimitType["Unlimited"] = 0] = "Unlimited";
LimitType[LimitType["Lifetime"] = 1] = "Lifetime";
LimitType[LimitType["Allowance"] = 2] = "Allowance";
})(LimitType || (LimitType = {}));
export const LimitUnlimited = {
limitType: LimitType.Unlimited,
limit: 0n,
period: 0n,
};
export const LimitZero = {
limitType: LimitType.Lifetime,
limit: 0n,
period: 0n,
};
/**
* Common logic operators to used combine multiple constraints
*/
export 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 || (ConstraintCondition = {}));
export var SessionStatus;
(function (SessionStatus) {
SessionStatus[SessionStatus["NotInitialized"] = 0] = "NotInitialized";
SessionStatus[SessionStatus["Active"] = 1] = "Active";
SessionStatus[SessionStatus["Closed"] = 2] = "Closed";
})(SessionStatus || (SessionStatus = {}));
export const getPeriodIdsForTransaction = (args) => {
const timestamp = args.timestamp || BigInt(Math.floor(Date.now() / 1000));
const target = getAddress(args.target.toLowerCase());
const getId = (limit) => {
if (limit.limitType === LimitType.Allowance) {
return timestamp / limit.period;
}
return 0n;
};
const findTransferPolicy = () => {
return args.sessionConfig.transferPolicies.find((policy) => policy.target === target);
};
const findCallPolicy = () => {
return args.sessionConfig.callPolicies.find((policy) => policy.target === target && policy.selector == args.selector);
};
const isContractCall = !!args.selector;
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;
};
//# sourceMappingURL=session.js.map