UNPKG

@radixdlt/atom

Version:

Container for CRUD instructions known as 'Particles' that are sent to the Radix decentralized ledger

42 lines 2.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.tokenOwnerOnly = exports.tokenPermissionsAll = exports.makeTokenPermissions = void 0; const _types_1 = require("./_types"); const util_1 = require("@radixdlt/util"); const data_formats_1 = require("@radixdlt/data-formats"); const makeTokenPermissions = (permissions) => { const check = (input) => { switch (input.permission) { case _types_1.TokenPermission.ALL: return true; case _types_1.TokenPermission.NONE: return false; case _types_1.TokenPermission.TOKEN_OWNER_ONLY: return input.isOwnerOfToken(); } }; const valueOfRequiredPermission = (transition) => { const permission = permissions[transition]; if (permission) { return permission; } throw new Error(`Incorrect implementation - expected value for REQUIRED permission with key: ${transition.valueOf()}, but got none`); }; const mintPermission = valueOfRequiredPermission(_types_1.TokenTransition.MINT); const burnPermission = valueOfRequiredPermission(_types_1.TokenTransition.BURN); return Object.assign(Object.assign(Object.assign({}, data_formats_1.JSONEncoding(data_formats_1.serializerNotNeeded)(() => ({ [_types_1.TokenTransition.BURN]: `${data_formats_1.Tag.STRING}${permissions.burn}`, [_types_1.TokenTransition.MINT]: `${data_formats_1.Tag.STRING}${permissions.mint}`, }))), data_formats_1.DSONEncoding(data_formats_1.serializerNotNeeded)(() => permissions)), { permissions, mintPermission, canBeMinted: (isOwnerOfToken) => check({ permission: mintPermission, isOwnerOfToken }), canBeBurned: (isOwnerOfToken) => check({ permission: burnPermission, isOwnerOfToken }), equals: (other) => util_1.objectEquals(permissions, other.permissions) }); }; exports.makeTokenPermissions = makeTokenPermissions; exports.tokenPermissionsAll = exports.makeTokenPermissions({ [_types_1.TokenTransition.BURN]: _types_1.TokenPermission.ALL, [_types_1.TokenTransition.MINT]: _types_1.TokenPermission.ALL, }); exports.tokenOwnerOnly = exports.makeTokenPermissions({ [_types_1.TokenTransition.BURN]: _types_1.TokenPermission.TOKEN_OWNER_ONLY, [_types_1.TokenTransition.MINT]: _types_1.TokenPermission.TOKEN_OWNER_ONLY, }); //# sourceMappingURL=tokenPermissions.js.map