wowok_agent
Version:
Create, collaborate, and transact on your own terms with the AI-driven web3 collaboration protocol.
41 lines (40 loc) • 1.93 kB
JavaScript
/**
* Provides permission lookup for an address:
* not only the permission table, but also the administrator or Builder identity.
*/
import { TransactionBlock, Protocol, Bcs, IsValidAddress, Errors, ERROR, Permission, BCS } from 'wowok';
/*json: PermissionQuery; return PermissionAnswer */
export const query_permission_json = async (json) => {
try {
const q = JSON.parse(json);
return JSON.stringify({ data: await query_permission(q) });
}
catch (e) {
return JSON.stringify({ error: e });
}
};
export const query_permission = async (query) => {
if (!IsValidAddress(query.permission_object)) {
ERROR(Errors.IsValidAddress, 'permission.permission_object');
} /*
if (!IsValidAddress(query.address)) {
ERROR(Errors.IsValidAddress, 'permission.address')
}*/
const txb = new TransactionBlock();
const object = Permission.From(txb, query.permission_object);
object.query_permissions_all(query.address);
const res = await Protocol.Client().devInspectTransactionBlock({ sender: query.address, transactionBlock: txb });
if (res.results && res.results[0].returnValues && res.results[0].returnValues.length !== 2) {
ERROR(Errors.Fail, 'permission.retValues');
}
const perm = Bcs.getInstance().de(BCS.U8, Uint8Array.from(res.results[0].returnValues[0][0]));
if (perm === Permission.PERMISSION_ADMIN || perm === Permission.PERMISSION_OWNER_AND_ADMIN) {
return { who: query.address, admin: true, owner: perm % 2 === 1, items: [], object: query.permission_object };
}
else {
const perms = Bcs.getInstance().de_perms(Uint8Array.from(res.results[0].returnValues[1][0]));
return { who: query.address, admin: false, owner: perm % 2 === 1, items: perms.map((v) => {
return { query: v?.index, permission: true, guard: v?.guard };
}), object: query.permission_object };
}
};