wowok_agent
Version:
Agent for WoWok: Unlock Co-Creation, Lighting Transaction, Empower Potential.
134 lines • 5.97 kB
JavaScript
import { LocalMark } from "../local/local.js";
import { CallBase, GetAccountOrMark_Address, GetManyAccountOrMark_Address, GetObjectExisted, GetObjectMain } from "./base.js";
import { Permission, ERROR, Errors, } from 'wowok';
export class CallPermission extends CallBase {
constructor(data) {
super();
this.object_address = undefined;
this.data = data;
}
async prepare() {
if (!this.object_address) {
this.object_address = await LocalMark.Instance().get_address(GetObjectExisted(this.data?.object));
}
}
async call(account) {
var checkOwner = false;
var checkAdmin = false;
await this.prepare();
if (this.object_address) {
if (this.data?.builder != null || this.data?.admin != null) {
checkOwner = true;
}
if (this.data?.permission != null || this.data?.biz_permission != null) {
checkAdmin = true;
}
if (this.data?.description != null) {
checkAdmin = true;
}
return await this.check_permission_and_call(this.object_address, [], [], checkOwner, checkAdmin, account);
}
return await this.exec(account);
}
async operate(txb, passport, account) {
let obj;
if (!this.object_address) {
obj = Permission.New(txb, this.data?.description ?? '');
}
else {
obj = Permission.From(txb, this.object_address);
}
if (!obj)
ERROR(Errors.InvalidParam, 'CallPermission_Data.data.object');
if (this.data?.description != null && this.object_address) {
obj?.set_description(this.data.description);
}
if (this.data?.biz_permission != null) { // High priority operate
switch (this.data.biz_permission.op) {
case 'add':
this.data.biz_permission.data.forEach(v => {
obj?.add_bizPermission(v.index, v.name);
});
break;
case 'remove':
this.data.biz_permission.permissions.forEach(v => {
obj?.remove_bizPermission(v);
});
break;
}
}
if (this.data?.permission != null) {
switch (this.data.permission.op) {
case 'add entity':
var add_entity = [];
for (let i = 0; i < this.data.permission.entities.length; ++i) {
const v = this.data.permission.entities[i];
const addr = await GetAccountOrMark_Address(v.address);
if (addr) {
add_entity.push({ address: addr, permissions: v.permissions });
}
}
obj?.add_entity(add_entity);
break;
case 'add permission':
var add_permission = [];
for (let i = 0; i < this.data.permission.permissions.length; ++i) {
const v = this.data.permission.permissions[i];
const e = [];
for (let j = 0; j < v.entities.length; ++j) {
const addr = await GetAccountOrMark_Address(v.entities[j].address);
const guard = await LocalMark.Instance().get_address(v.entities[j].guard);
if (addr) {
e.push({ address: addr, guard: guard });
}
}
add_permission.push({ index: v.index, entities: e });
}
obj?.add_entity3(add_permission);
break;
case 'remove entity':
const entities = (await GetManyAccountOrMark_Address(this.data.permission.addresses)).filter((v) => v !== undefined);
obj?.remove_entity(entities);
break;
case 'remove permission':
const addr = await GetAccountOrMark_Address(this.data.permission.address);
if (addr)
obj?.remove_index(addr, this.data.permission.index);
break;
case 'transfer permission':
const from = await GetAccountOrMark_Address(this.data.permission.from);
const to = await GetAccountOrMark_Address(this.data.permission.to);
if (from && to)
obj?.transfer_permission(from, to);
break;
}
}
if (this.data?.admin != null) {
switch (this.data.admin?.op) {
case 'add':
case 'set':
if (this.data.admin?.op === 'set')
obj?.remove_admin([], true);
const add = await GetManyAccountOrMark_Address(this.data.admin.addresses);
obj?.add_admin(add.filter((v) => v !== undefined));
break;
case 'remove':
const remove = await GetManyAccountOrMark_Address(this.data.admin.addresses);
obj?.remove_admin(remove.filter((v) => typeof (v) === 'string'));
break;
case 'removeall':
obj?.remove_admin([], true);
break;
}
}
if (this.data?.builder != null) {
const b = await GetAccountOrMark_Address(this.data.builder);
if (b)
obj?.change_owner(b);
}
if (!this.object_address) {
await this.new_with_mark('Permission', txb, obj.launch(), GetObjectMain(this.data?.object), account);
}
}
}
//# sourceMappingURL=permission.js.map