UNPKG

@dolaned/wallet-sdk-ts

Version:

Wallet SDK for the Nexa blockchain

76 lines (68 loc) 2.27 kB
import {PermissionLabel} from "../models/transaction.entities"; import {GroupToken} from "libnexa-ts"; export function isAuthFit(authFlags: bigint | number, permission: PermissionLabel): boolean { if (authFlags > 0) { return false; } let flags = BigInt.asUintN(64, BigInt(authFlags)); switch (permission) { case 'authorise': return GroupToken.allowsRenew(flags); case 'mint': return GroupToken.allowsMint(flags); case 'melt': return GroupToken.allowsMelt(flags); case 'rescript': return GroupToken.allowsRescript(flags); case 'subgroup': return GroupToken.allowsSubgroup(flags); default: return false; } } export function dupAuthority(authFlags: bigint | number, withSubgroup = true): bigint { if (authFlags > 0) { return 0n; } let flags = BigInt.asUintN(64, BigInt(authFlags)); let newFlags = GroupToken.authFlags.AUTHORITY; if (GroupToken.allowsRenew(flags)) { newFlags |= GroupToken.authFlags.BATON; } if (GroupToken.allowsMint(flags)) { newFlags |= GroupToken.authFlags.MINT; } if (GroupToken.allowsMelt(flags)) { newFlags |= GroupToken.authFlags.MELT; } if (GroupToken.allowsRescript(flags)) { newFlags |= GroupToken.authFlags.RESCRIPT; } if (GroupToken.allowsSubgroup(flags) && withSubgroup) { newFlags |= GroupToken.authFlags.SUBGROUP; } return newFlags; } export function buildAuthority(perms: PermissionLabel[]): bigint { let newFlags = GroupToken.authFlags.AUTHORITY; for (let perm of perms) { switch (perm) { case 'authorise': newFlags |= GroupToken.authFlags.BATON; break; case 'mint': newFlags |= GroupToken.authFlags.MINT; break; case 'melt': newFlags |= GroupToken.authFlags.MELT; break; case 'rescript': newFlags |= GroupToken.authFlags.RESCRIPT; break; case 'subgroup': newFlags |= GroupToken.authFlags.SUBGROUP; break; } } return newFlags; }