@radixdlt/atom
Version:
Container for CRUD instructions known as 'Particles' that are sent to the Radix decentralized ledger
42 lines • 2.41 kB
JavaScript
;
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