wowok_agent
Version:
Agent for WoWok: Unlock Co-Creation, Lighting Transaction, Empower Potential.
70 lines (63 loc) • 3.21 kB
text/typescript
import { CallBase, CallResult } from "./base.js";
import { TransactionBlock, PassportObject, Errors, ERROR, Demand, Machine, Service, Treasury, Arbitration, Repository} from 'wowok';
import { ObjectArbitration, ObjectDemand, ObjectMachine, ObjectRepository, ObjectService, ObjectTreasury, query_objects } from "../query/objects.js";
import { LocalMark } from "../local/local.js";
export interface CallObjectPermission_Data {
objects: string[];
new_permission: string;
}
export class CallObjectPermission extends CallBase {
data: CallObjectPermission_Data;
new_perm: string | undefined = undefined;
constructor(data:CallObjectPermission_Data) {
super();
this.data = data;
}
async call(account?:string) : Promise<CallResult> {
this.new_perm = await LocalMark.Instance().get_address(this.data.new_permission);
if (!this.new_perm) {
ERROR(Errors.InvalidParam, 'CallObjectPermission_Data.new_permission:' + this.data.new_permission)
}
if (this.data?.objects.length > 0) {
for(let i=0; i < this.data.objects.length; i++) {
const obj = await LocalMark.Instance().get_address(this.data.objects[i]);
if (!obj) {
ERROR(Errors.InvalidParam, 'CallObjectPermission_Data.objects[' + i + ']:' + this.data.objects[i])
}
this.data.objects[i] = obj;
}
return await this.exec(account)
}
}
protected async operate (txb:TransactionBlock, passport?:PassportObject) {
const r = await query_objects({objects:this.data.objects});
r.objects?.forEach(v => {
switch(v.type) {
case 'Demand':
const demand = v as ObjectDemand;
Demand.From(txb, Demand.parseObjectType(demand.type_raw), demand.permission, demand.object).change_permission(this.new_perm!);
break;
case 'Machine':
const machine = v as ObjectMachine;
Machine.From(txb, machine.permission, machine.object).change_permission(this.new_perm!);
break;
case 'Service':
const service = v as ObjectService;
Service.From(txb, Service.parseObjectType(service.type_raw), service.permission, service.object).change_permission(this.new_perm!);
break;
case 'Treasury':
const treasury = v as ObjectTreasury;
Treasury.From(txb, Treasury.parseObjectType(treasury.type_raw), treasury.permission, treasury.object).change_permission(this.new_perm!);
break;
case 'Arbitration':
const arbitraion = v as ObjectArbitration;
Arbitration.From(txb, Arbitration.parseObjectType(arbitraion.type_raw), arbitraion.permission, arbitraion.object).change_permission(this.new_perm!);
break;
case 'Repository':
const repository = v as ObjectRepository;
Repository.From(txb, repository.permission, repository.object).change_permission(this.new_perm!);
break;
}
})
}
}