wowok_agent 1.2.41 → 1.2.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/call/base.js +2 -2
- package/dist/call/base.js.map +1 -1
- package/dist/call/object_permission.d.ts.map +1 -1
- package/dist/call/object_permission.js +7 -0
- package/dist/call/object_permission.js.map +1 -1
- package/dist/call/personal.d.ts +1 -6
- package/dist/call/personal.d.ts.map +1 -1
- package/dist/call/personal.js +17 -10
- package/dist/call/personal.js.map +1 -1
- package/dist/local/account.d.ts +1 -1
- package/dist/local/account.d.ts.map +1 -1
- package/dist/local/account.js +7 -5
- package/dist/local/account.js.map +1 -1
- package/dist/local/index.d.ts +2 -2
- package/dist/local/index.d.ts.map +1 -1
- package/dist/local/index.js +3 -3
- package/dist/local/index.js.map +1 -1
- package/dist/local/local.d.ts +3 -3
- package/dist/local/local.d.ts.map +1 -1
- package/dist/local/local.js +11 -11
- package/dist/local/local.js.map +1 -1
- package/dist/query/permission.d.ts +2 -2
- package/dist/query/permission.d.ts.map +1 -1
- package/dist/query/permission.js +13 -13
- package/dist/query/permission.js.map +1 -1
- package/package.json +2 -2
- package/src/call/base.ts +2 -2
- package/src/call/object_permission.ts +9 -0
- package/src/call/personal.ts +15 -10
- package/src/local/account.ts +7 -5
- package/src/local/index.ts +4 -4
- package/src/local/local.ts +13 -13
- package/src/query/permission.ts +17 -14
- package/tsconfig.tsbuildinfo +1 -1
package/dist/query/permission.js
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Provides permission lookup for an address:
|
|
3
3
|
* not only the permission table, but also the administrator or Builder identity.
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
5
|
+
import { LocalMark } from '../local/local.js';
|
|
6
|
+
import { TransactionBlock, Protocol, Bcs, Errors, ERROR, Permission, BCS } from 'wowok';
|
|
6
7
|
/*json: PermissionQuery; return PermissionAnswer */
|
|
7
8
|
export const query_permission_json = async (json) => {
|
|
8
9
|
try {
|
|
@@ -14,28 +15,27 @@ export const query_permission_json = async (json) => {
|
|
|
14
15
|
}
|
|
15
16
|
};
|
|
16
17
|
export const query_permission = async (query) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}*/
|
|
18
|
+
const object_address = await LocalMark.Instance().get_address(query.object_address_or_name);
|
|
19
|
+
const entity_address = await LocalMark.Instance().get_address(query.entity_address_or_name);
|
|
20
|
+
if (!object_address || !entity_address) {
|
|
21
|
+
ERROR(Errors.InvalidParam, 'query.object_address_or_name or query.entity_address_or_name');
|
|
22
|
+
}
|
|
23
23
|
const txb = new TransactionBlock();
|
|
24
|
-
const object = Permission.From(txb,
|
|
25
|
-
object.query_permissions_all(
|
|
26
|
-
const res = await Protocol.Client().devInspectTransactionBlock({ sender:
|
|
24
|
+
const object = Permission.From(txb, object_address);
|
|
25
|
+
object.query_permissions_all(entity_address);
|
|
26
|
+
const res = await Protocol.Client().devInspectTransactionBlock({ sender: entity_address, transactionBlock: txb });
|
|
27
27
|
if (res.results && res.results[0].returnValues && res.results[0].returnValues.length !== 2) {
|
|
28
28
|
ERROR(Errors.Fail, 'permission.retValues');
|
|
29
29
|
}
|
|
30
30
|
const perm = Bcs.getInstance().de(BCS.U8, Uint8Array.from(res.results[0].returnValues[0][0]));
|
|
31
31
|
if (perm === Permission.PERMISSION_ADMIN || perm === Permission.PERMISSION_OWNER_AND_ADMIN) {
|
|
32
|
-
return { who:
|
|
32
|
+
return { who: entity_address, admin: true, owner: perm % 2 === 1, items: [], object: object_address };
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
35
|
const perms = Bcs.getInstance().de_perms(Uint8Array.from(res.results[0].returnValues[1][0]));
|
|
36
|
-
return { who:
|
|
36
|
+
return { who: entity_address, admin: false, owner: perm % 2 === 1, items: perms.map((v) => {
|
|
37
37
|
return { query: v?.index, permission: true, guard: v?.guard };
|
|
38
|
-
}), object:
|
|
38
|
+
}), object: object_address };
|
|
39
39
|
}
|
|
40
40
|
};
|
|
41
41
|
//# sourceMappingURL=permission.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/query/permission.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/query/permission.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wowok_agent",
|
|
3
|
-
"version": "1.2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.2.44",
|
|
4
|
+
"description": "Agent for WoWok: Unlock Co-Creation, Lighting Transaction, Empower Potential.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
7
|
"module": "node",
|
package/src/call/base.ts
CHANGED
|
@@ -86,7 +86,7 @@ export class CallBase {
|
|
|
86
86
|
const addr = await Account.Instance().get(account);
|
|
87
87
|
if (!addr) ERROR(Errors.InvalidParam, 'check_permission_and_call: account invalid');
|
|
88
88
|
|
|
89
|
-
const p = await query_permission({
|
|
89
|
+
const p = await query_permission({object_address_or_name:permission, entity_address_or_name:addr.address});
|
|
90
90
|
if (checkOwner && !p.owner) ERROR(Errors.noPermission, 'owner');
|
|
91
91
|
if (checkAdmin && !p.admin) ERROR(Errors.noPermission, 'admin');
|
|
92
92
|
|
|
@@ -184,7 +184,7 @@ export class CallBase {
|
|
|
184
184
|
const namedNew = this.traceMarkNew.get(v.type);
|
|
185
185
|
if (namedNew) {
|
|
186
186
|
LocalMark.Instance().put(namedNew.name,
|
|
187
|
-
{
|
|
187
|
+
{address:v.object, tags:namedNew?.tags ? [...namedNew?.tags, v.type] : [v.type]},
|
|
188
188
|
namedNew?.useAddressIfNameExist);
|
|
189
189
|
}
|
|
190
190
|
}
|
|
@@ -24,6 +24,15 @@ export class CallObjectPermission extends CallBase {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
if (this.data?.objects.length > 0) {
|
|
27
|
+
for(let i=0; i < this.data.objects.length; i++) {
|
|
28
|
+
const obj = await LocalMark.Instance().get_address(this.data.objects[i]);
|
|
29
|
+
|
|
30
|
+
if (!obj) {
|
|
31
|
+
ERROR(Errors.InvalidParam, 'CallObjectPermission_Data.objects[' + i + ']:' + this.data.objects[i])
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
this.data.objects[i] = obj;
|
|
35
|
+
}
|
|
27
36
|
return await this.exec(account)
|
|
28
37
|
}
|
|
29
38
|
}
|
package/src/call/personal.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { TransactionBlock, PassportObject, IsValidAddress, Errors, ERROR, Entity, Entity_Info, Resource} from 'wowok';
|
|
2
2
|
import { CallBase, CallResult, Namedbject } from "./base.js";
|
|
3
3
|
import { LocalMark } from '../local/local.js';
|
|
4
|
+
import { query_personal } from '../query/objects.js';
|
|
5
|
+
import { Account } from '../local/account.js';
|
|
4
6
|
|
|
5
7
|
/// The execution priority is determined by the order in which the object attributes are arranged
|
|
6
8
|
export interface CallPersonal_Data {
|
|
7
|
-
mark_object?: {address:string} | {namedNew?: Namedbject}; // undefined or {named_new...} for creating a new personal resource object ; // undefined for creating personal resource object
|
|
8
9
|
information?: Entity_Info;
|
|
9
10
|
mark?: {op:'add'; data:{address:string; name?:string; tags?:string[]}[]}
|
|
10
11
|
| {op:'remove'; data:{address:string; tags?:string[]}[]}
|
|
@@ -24,7 +25,18 @@ export class CallPersonal extends CallBase {
|
|
|
24
25
|
return await this.exec(account)
|
|
25
26
|
}
|
|
26
27
|
protected async operate (txb:TransactionBlock, passport?:PassportObject, account?: string) {
|
|
28
|
+
const entity_address = (await Account.Instance().get(account))?.address;
|
|
29
|
+
if (!entity_address) {
|
|
30
|
+
ERROR(Errors.InvalidParam, 'account - ' + account)
|
|
31
|
+
};
|
|
32
|
+
|
|
27
33
|
let obj : Resource | undefined ; let entity: Entity = Entity.From(txb);
|
|
34
|
+
const entity_data = await query_personal({address:entity_address});
|
|
35
|
+
if (entity_data?.mark_object) {
|
|
36
|
+
obj = Resource.From(txb, entity_data.mark_object);
|
|
37
|
+
} else {
|
|
38
|
+
obj = Resource.From(txb, entity.create_resource2());
|
|
39
|
+
}
|
|
28
40
|
|
|
29
41
|
if (this.data?.information !== undefined ) {
|
|
30
42
|
entity.update(this.data.information)
|
|
@@ -33,13 +45,6 @@ export class CallPersonal extends CallBase {
|
|
|
33
45
|
if (this.data?.mark === undefined) {
|
|
34
46
|
return ;
|
|
35
47
|
}
|
|
36
|
-
|
|
37
|
-
const object_address = await LocalMark.Instance().get_address((this.data?.mark_object as any)?.address);
|
|
38
|
-
if (!object_address) {
|
|
39
|
-
obj = Resource.From(txb, entity.create_resource2());
|
|
40
|
-
} else {
|
|
41
|
-
obj = Resource.From(txb, object_address)
|
|
42
|
-
}
|
|
43
48
|
|
|
44
49
|
if (this.data?.mark?.op === 'destroy') {
|
|
45
50
|
entity.destroy_resource(obj)
|
|
@@ -97,8 +102,8 @@ export class CallPersonal extends CallBase {
|
|
|
97
102
|
if (addr) entity.use_resource(Resource.From(txb, addr));
|
|
98
103
|
}
|
|
99
104
|
|
|
100
|
-
if (!
|
|
101
|
-
|
|
105
|
+
if (!entity_data?.mark_object) {
|
|
106
|
+
obj.launch();
|
|
102
107
|
}
|
|
103
108
|
}
|
|
104
109
|
}
|
package/src/local/account.ts
CHANGED
|
@@ -147,7 +147,7 @@ export class Account {
|
|
|
147
147
|
}
|
|
148
148
|
return address_or_names.map(v => undefined);
|
|
149
149
|
}
|
|
150
|
-
async set_name(name:string,
|
|
150
|
+
async set_name(name:string, address_or_name?:string) : Promise<boolean> {
|
|
151
151
|
if (!IsValidName(name)) {
|
|
152
152
|
ERROR(Errors.IsValidName, `Name ${name} is not valid`);
|
|
153
153
|
}
|
|
@@ -159,7 +159,7 @@ export class Account {
|
|
|
159
159
|
ERROR(Errors.IsValidName, `Name ${name} already exists`);
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
if (!
|
|
162
|
+
if (!address_or_name) {
|
|
163
163
|
const f = s.find(v => v.default);
|
|
164
164
|
if (f) {
|
|
165
165
|
f.name = name;
|
|
@@ -167,7 +167,7 @@ export class Account {
|
|
|
167
167
|
return true;
|
|
168
168
|
}
|
|
169
169
|
} else {
|
|
170
|
-
const f = s.find(v => v.address ===
|
|
170
|
+
const f = s.find(v => v.address === address_or_name || v.name === address_or_name);
|
|
171
171
|
if (f) {
|
|
172
172
|
f.name = name;
|
|
173
173
|
await this.storage.put(AccountKey, JSON.stringify(s));
|
|
@@ -199,14 +199,17 @@ export class Account {
|
|
|
199
199
|
const f = s.find(v => v.default);
|
|
200
200
|
if (f) {
|
|
201
201
|
f.suspended = suspend;
|
|
202
|
+
f.name = undefined;
|
|
203
|
+
await this.storage.put(AccountKey, JSON.stringify(s));
|
|
202
204
|
}
|
|
203
205
|
} else {
|
|
204
206
|
const f = s.find(v => v.address === address_or_name || v.name === address_or_name);
|
|
205
207
|
if (f) {
|
|
206
208
|
f.suspended = suspend;
|
|
209
|
+
f.name = undefined;
|
|
210
|
+
await this.storage.put(AccountKey, JSON.stringify(s));
|
|
207
211
|
}
|
|
208
212
|
}
|
|
209
|
-
await this.storage.put(AccountKey, JSON.stringify(s));
|
|
210
213
|
}
|
|
211
214
|
}
|
|
212
215
|
|
|
@@ -220,7 +223,6 @@ export class Account {
|
|
|
220
223
|
|
|
221
224
|
async sign_and_commit(txb: TransactionBlock, address_or_name?:string) : Promise<CallResponse | undefined> {
|
|
222
225
|
const a = await this.get_imp(address_or_name);
|
|
223
|
-
console.log('sign_and_commit', a, address_or_name);
|
|
224
226
|
if (a) {
|
|
225
227
|
const pair = Ed25519Keypair.fromSecretKey(fromHEX(a.secret!));
|
|
226
228
|
if (pair) {
|
package/src/local/index.ts
CHANGED
|
@@ -65,7 +65,7 @@ export interface AccountOperation {
|
|
|
65
65
|
gen?: {name?:string, default?: boolean} | null; // generate a new account, if not specified, generate a new default account.
|
|
66
66
|
default?: {name_or_address: string} | null; // set the default account.
|
|
67
67
|
suspend?: {name_or_address?: string, suspend?:boolean} | null; // suspend the account, if not specified, suspend the default account.
|
|
68
|
-
name?: {
|
|
68
|
+
name?: {new_name:string, name_or_address?:string} | null; // name the account, if not specified, name the default account.
|
|
69
69
|
transfer?: {name_or_address_from?: string, name_or_address_to?:string, amount:number|string, token_type?: string} | null; // transfer the token.
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -87,11 +87,11 @@ export const account_operation = async(op: AccountOperation) : Promise<AccountOp
|
|
|
87
87
|
await Account.Instance().suspend(op.suspend.name_or_address, op.suspend.suspend);
|
|
88
88
|
}
|
|
89
89
|
if (op.name) {
|
|
90
|
-
await Account.Instance().set_name(op.name.
|
|
90
|
+
await Account.Instance().set_name(op.name.new_name, op.name.name_or_address);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
if(op.transfer) {
|
|
94
|
-
res.transfer = await Account.Instance().transfer(op.transfer.amount, op.transfer.token_type, op.transfer.
|
|
94
|
+
res.transfer = await Account.Instance().transfer(op.transfer.amount, op.transfer.token_type, op.transfer.name_or_address_to, op.transfer.name_or_address_from);
|
|
95
95
|
}
|
|
96
96
|
return res;
|
|
97
97
|
}
|
|
@@ -108,7 +108,7 @@ export const local_mark_operation = async(op: LocalMarkOperation) : Promise<void
|
|
|
108
108
|
case 'add':
|
|
109
109
|
for (let i = 0; i < op.data.data.length; ++ i) {
|
|
110
110
|
const v = op.data.data[i];
|
|
111
|
-
await LocalMark.Instance().put(v.name, {
|
|
111
|
+
await LocalMark.Instance().put(v.name, {address: v.address, tags: v.tags} as MarkData, v.useAddressIfNameExist);
|
|
112
112
|
};
|
|
113
113
|
return ;
|
|
114
114
|
case 'remove':
|
package/src/local/local.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
/**
|
|
3
|
-
* manage
|
|
3
|
+
* manage address name and tags locally
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import path from "path";
|
|
@@ -10,7 +10,7 @@ import { isBrowser } from "../common.js";
|
|
|
10
10
|
import { ERROR, Errors, IsValidAddress, TagName } from "wowok";
|
|
11
11
|
|
|
12
12
|
export interface MarkData {
|
|
13
|
-
|
|
13
|
+
address: string;
|
|
14
14
|
tags?: string[];
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -22,7 +22,7 @@ export interface InfoData {
|
|
|
22
22
|
export interface LocalMarkFilter {
|
|
23
23
|
name?: string;
|
|
24
24
|
tags?: string[];
|
|
25
|
-
|
|
25
|
+
address?: string;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
export const LocalMarkLocation = 'wowok-mark';
|
|
@@ -51,14 +51,14 @@ export class LocalMark {
|
|
|
51
51
|
// otherwise, use this name and change the original name to its address.
|
|
52
52
|
async put(name:string | undefined | null, mark:MarkData, useAddressIfNameExist?:boolean) : Promise<string> {
|
|
53
53
|
// object address invalid
|
|
54
|
-
if (!IsValidAddress(mark.
|
|
55
|
-
ERROR(Errors.InvalidParam, `LocalMark.put.mark.
|
|
54
|
+
if (!IsValidAddress(mark.address) && mark.address !== '0x2' && mark.address !== '0x6') {
|
|
55
|
+
ERROR(Errors.InvalidParam, `LocalMark.put.mark.address: ${mark.address}`)
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
// use address as name if name is undefined or null
|
|
59
59
|
if (name === undefined || name === null) {
|
|
60
|
-
this.storage.put(mark.
|
|
61
|
-
return mark.
|
|
60
|
+
this.storage.put(mark.address, JSON.stringify(mark));
|
|
61
|
+
return mark.address
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
if (name.length > LocalMarkNameMaxLength) {
|
|
@@ -68,11 +68,11 @@ export class LocalMark {
|
|
|
68
68
|
const r = await this.storage.get(name);
|
|
69
69
|
if (r) {
|
|
70
70
|
if (useAddressIfNameExist) {
|
|
71
|
-
this.storage.put(mark.
|
|
72
|
-
return mark.
|
|
71
|
+
this.storage.put(mark.address, JSON.stringify(mark));
|
|
72
|
+
return mark.address
|
|
73
73
|
} else {
|
|
74
74
|
const obj = JSON.parse(r) as MarkData;
|
|
75
|
-
await this.storage.put(obj.
|
|
75
|
+
await this.storage.put(obj.address, r)
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -95,7 +95,7 @@ export class LocalMark {
|
|
|
95
95
|
if (name_or_address !== undefined && name_or_address !== null) {
|
|
96
96
|
const r = await this.storage.get(name_or_address);
|
|
97
97
|
if (r) {
|
|
98
|
-
return JSON.parse(r).
|
|
98
|
+
return JSON.parse(r).address;
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
}
|
|
@@ -109,7 +109,7 @@ export class LocalMark {
|
|
|
109
109
|
if (check(v)) {
|
|
110
110
|
const r = q.shift();
|
|
111
111
|
if (r) {
|
|
112
|
-
return JSON.parse(q.shift()!)?.
|
|
112
|
+
return JSON.parse(q.shift()!)?.address;
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
return v
|
|
@@ -169,7 +169,7 @@ export class LocalMark {
|
|
|
169
169
|
return (await this.storage.iterator().all()).filter(v => {
|
|
170
170
|
const obj = JSON.parse(v[1]) as MarkData;
|
|
171
171
|
if (filter?.name && v[0] !== filter.name) return false;
|
|
172
|
-
if (filter?.
|
|
172
|
+
if (filter?.address && obj.address !== filter.address) return false;
|
|
173
173
|
|
|
174
174
|
if (filter?.tags && filter.tags.length > 0) {
|
|
175
175
|
if (!obj.tags || obj.tags.length === 0) return false;
|
package/src/query/permission.ts
CHANGED
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
* not only the permission table, but also the administrator or Builder identity.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { LocalMark } from '../local/local.js';
|
|
6
7
|
import { TransactionBlock, Protocol, Bcs, IsValidAddress, Errors, ERROR, Permission, PermissionAnswer, BCS} from 'wowok';
|
|
7
8
|
|
|
8
9
|
export interface PermissionQuery {
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
object_address_or_name: string;
|
|
11
|
+
entity_address_or_name: string;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
/*json: PermissionQuery; return PermissionAnswer */
|
|
@@ -21,29 +22,31 @@ export const query_permission_json = async (json:string) : Promise<string> => {
|
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
export const query_permission = async (query:PermissionQuery) : Promise<PermissionAnswer> => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (!
|
|
28
|
-
ERROR(Errors.
|
|
29
|
-
}
|
|
25
|
+
const object_address = await LocalMark.Instance().get_address(query.object_address_or_name);
|
|
26
|
+
const entity_address = await LocalMark.Instance().get_address(query.entity_address_or_name);
|
|
27
|
+
|
|
28
|
+
if (!object_address || !entity_address) {
|
|
29
|
+
ERROR(Errors.InvalidParam, 'query.object_address_or_name or query.entity_address_or_name');
|
|
30
|
+
}
|
|
31
|
+
|
|
30
32
|
const txb = new TransactionBlock();
|
|
31
|
-
const object = Permission.From(txb,
|
|
32
|
-
|
|
33
|
+
const object = Permission.From(txb, object_address);
|
|
34
|
+
|
|
35
|
+
object.query_permissions_all(entity_address);
|
|
33
36
|
|
|
34
|
-
const res = await Protocol.Client().devInspectTransactionBlock({sender:
|
|
37
|
+
const res = await Protocol.Client().devInspectTransactionBlock({sender:entity_address, transactionBlock:txb});
|
|
35
38
|
if (res.results && res.results[0].returnValues && res.results[0].returnValues.length !== 2 ) {
|
|
36
39
|
ERROR(Errors.Fail, 'permission.retValues')
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
const perm = Bcs.getInstance().de(BCS.U8, Uint8Array.from((res.results as any)[0].returnValues[0][0]));
|
|
40
43
|
if (perm === Permission.PERMISSION_ADMIN || perm === Permission.PERMISSION_OWNER_AND_ADMIN) {
|
|
41
|
-
return {who:
|
|
44
|
+
return {who:entity_address, admin:true, owner:perm%2===1, items:[], object:object_address}
|
|
42
45
|
} else {
|
|
43
46
|
const perms = Bcs.getInstance().de_perms(Uint8Array.from((res.results as any)[0].returnValues[1][0]));
|
|
44
|
-
return {who:
|
|
47
|
+
return {who:entity_address, admin:false, owner:perm%2===1, items:perms.map((v:any)=>{
|
|
45
48
|
return {query:v?.index, permission:true, guard:v?.guard}
|
|
46
|
-
}), object:
|
|
49
|
+
}), object:object_address};
|
|
47
50
|
}
|
|
48
51
|
}
|
|
49
52
|
|