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.
@@ -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 { TransactionBlock, Protocol, Bcs, IsValidAddress, Errors, ERROR, Permission, BCS } from 'wowok';
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
- if (!IsValidAddress(query.permission_object)) {
18
- ERROR(Errors.IsValidAddress, 'permission.permission_object');
19
- } /*
20
- if (!IsValidAddress(query.address)) {
21
- ERROR(Errors.IsValidAddress, 'permission.address')
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, query.permission_object);
25
- object.query_permissions_all(query.address);
26
- const res = await Protocol.Client().devInspectTransactionBlock({ sender: query.address, transactionBlock: txb });
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: query.address, admin: true, owner: perm % 2 === 1, items: [], object: query.permission_object };
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: query.address, admin: false, owner: perm % 2 === 1, items: perms.map((v) => {
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: query.permission_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":"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"}
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.41",
4
- "description": "Create, collaborate, and transact on your own terms with the AI-driven web3 collaboration protocol.",
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({permission_object:permission, address:addr.address});
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
- {object:v.object, tags:namedNew?.tags ? [...namedNew?.tags, v.type] : [v.type]},
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
  }
@@ -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 (!object_address) {
101
- await this.new_with_mark('PersonalMark', txb, obj.launch(), (this.data?.mark_object as any)?.namedNew, account);
105
+ if (!entity_data?.mark_object) {
106
+ obj.launch();
102
107
  }
103
108
  }
104
109
  }
@@ -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, address?:string) : Promise<boolean> {
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 (!address) {
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 === 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) {
@@ -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?: {name:string, address?:string} | null; // name the account, if not specified, name the default account.
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.name, op.name.address);
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.name_or_address_from, op.transfer.name_or_address_to);
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, {object: v.address, tags: v.tags}, v.useAddressIfNameExist);
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':
@@ -1,6 +1,6 @@
1
1
 
2
2
  /**
3
- * manage object's name and tags locally
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
- object: string;
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
- object?: string;
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.object) && mark.object !== '0x2' && mark.object !== '0x6') {
55
- ERROR(Errors.InvalidParam, `LocalMark.put.mark.object: ${mark.object}`)
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.object, JSON.stringify(mark));
61
- return mark.object
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.object, JSON.stringify(mark));
72
- return mark.object
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.object, r)
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).object;
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()!)?.object;
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?.object && obj.object !== filter.object) return false;
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;
@@ -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
- permission_object: string;
10
- address: string;
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
- if (!IsValidAddress(query.permission_object)) {
25
- ERROR(Errors.IsValidAddress, 'permission.permission_object');
26
- }/*
27
- if (!IsValidAddress(query.address)) {
28
- ERROR(Errors.IsValidAddress, 'permission.address')
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, query.permission_object);
32
- object.query_permissions_all(query.address);
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:query.address, transactionBlock:txb});
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:query.address, admin:true, owner:perm%2===1, items:[], object:query.permission_object}
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:query.address, admin:false, owner:perm%2===1, items:perms.map((v:any)=>{
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:query.permission_object};
49
+ }), object:object_address};
47
50
  }
48
51
  }
49
52