wowok_agent 1.3.47 → 1.3.49
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/arbitration.d.ts +4 -3
- package/dist/call/arbitration.d.ts.map +1 -1
- package/dist/call/arbitration.js +134 -131
- package/dist/call/arbitration.js.map +1 -1
- package/dist/call/base.d.ts +15 -7
- package/dist/call/base.d.ts.map +1 -1
- package/dist/call/base.js +21 -23
- package/dist/call/base.js.map +1 -1
- package/dist/call/call.d.ts +0 -6
- package/dist/call/call.d.ts.map +1 -1
- package/dist/call/demand.d.ts +1 -0
- package/dist/call/demand.d.ts.map +1 -1
- package/dist/call/demand.js +86 -80
- package/dist/call/demand.js.map +1 -1
- package/dist/call/machine.d.ts +10 -10
- package/dist/call/machine.d.ts.map +1 -1
- package/dist/call/machine.js +174 -146
- package/dist/call/machine.js.map +1 -1
- package/dist/call/permission.d.ts +10 -9
- package/dist/call/permission.d.ts.map +1 -1
- package/dist/call/permission.js +90 -85
- package/dist/call/permission.js.map +1 -1
- package/dist/call/personal.d.ts +3 -3
- package/dist/call/personal.d.ts.map +1 -1
- package/dist/call/personal.js +6 -12
- package/dist/call/personal.js.map +1 -1
- package/dist/call/repository.d.ts +24 -8
- package/dist/call/repository.d.ts.map +1 -1
- package/dist/call/repository.js +114 -94
- package/dist/call/repository.js.map +1 -1
- package/dist/call/service.d.ts +15 -26
- package/dist/call/service.d.ts.map +1 -1
- package/dist/call/service.js +274 -264
- package/dist/call/service.js.map +1 -1
- package/dist/call/treasury.d.ts +5 -7
- package/dist/call/treasury.d.ts.map +1 -1
- package/dist/call/treasury.js +108 -97
- package/dist/call/treasury.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/query/objects.d.ts +2 -1
- package/dist/query/objects.d.ts.map +1 -1
- package/dist/query/objects.js +7 -7
- package/dist/query/objects.js.map +1 -1
- package/dist/query/owned.d.ts +2 -0
- package/dist/query/owned.d.ts.map +1 -0
- package/dist/query/owned.js +2 -0
- package/dist/query/owned.js.map +1 -0
- package/dist/query/permission.d.ts +3 -2
- package/dist/query/permission.d.ts.map +1 -1
- package/dist/query/permission.js +6 -3
- package/dist/query/permission.js.map +1 -1
- package/dist/query/treasury_received.d.ts +14 -0
- package/dist/query/treasury_received.d.ts.map +1 -0
- package/dist/query/treasury_received.js +19 -0
- package/dist/query/treasury_received.js.map +1 -0
- package/package.json +1 -1
- package/src/call/arbitration.ts +144 -141
- package/src/call/base.ts +27 -29
- package/src/call/call.ts +6 -6
- package/src/call/demand.ts +89 -81
- package/src/call/machine.ts +184 -145
- package/src/call/permission.ts +98 -90
- package/src/call/personal.ts +8 -13
- package/src/call/repository.ts +138 -95
- package/src/call/service.ts +290 -272
- package/src/call/treasury.ts +110 -99
- package/src/index.ts +1 -0
- package/src/query/objects.ts +10 -10
- package/src/query/permission.ts +9 -6
- package/src/query/treasury_received.ts +35 -0
- package/tsconfig.tsbuildinfo +1 -1
package/src/call/machine.ts
CHANGED
|
@@ -1,25 +1,34 @@
|
|
|
1
1
|
import { PassportObject, Errors, ERROR, Permission, PermissionIndex, TransactionBlock, TxbAddress,
|
|
2
|
-
PermissionIndexType, Machine, Machine_Forward, Machine_Node,
|
|
2
|
+
PermissionIndexType, Machine, Machine_Forward, Machine_Node, ParentProgress, Progress, ProgressNext,
|
|
3
|
+
PermissionObject,
|
|
4
|
+
OrderWrap,
|
|
5
|
+
Service,
|
|
3
6
|
} from 'wowok';
|
|
4
|
-
import { CallBase, CallResult, GetObjectExisted, GetObjectMain, GetObjectParam, Namedbject, ObjectMain, TypeNamedObjectWithPermission } from "./base.js";
|
|
5
|
-
import { ObjectMachine } from '../query/objects.js';
|
|
7
|
+
import { AccountOrMark_Address, CallBase, CallResult, GetAccountOrMark_Address, GetManyAccountOrMark_Address, GetObjectExisted, GetObjectMain, GetObjectParam, Namedbject, ObjectMain, ObjectsOp, TypeNamedObjectWithPermission } from "./base.js";
|
|
8
|
+
import { ObjectMachine, query_objects } from '../query/objects.js';
|
|
6
9
|
import { LocalMark } from '../local/local.js';
|
|
7
10
|
import { Account } from '../local/account.js';
|
|
8
11
|
|
|
12
|
+
|
|
13
|
+
export interface ProgressDeliverable {
|
|
14
|
+
msg: string;
|
|
15
|
+
orders: string[];
|
|
16
|
+
}
|
|
17
|
+
|
|
9
18
|
/// The execution priority is determined by the order in which the object attributes are arranged
|
|
10
19
|
export interface CallMachine_Data {
|
|
11
20
|
object?: ObjectMain;
|
|
12
21
|
progress_new?: {task_address?:string, namedNew?: Namedbject};
|
|
13
22
|
progress_context_repository?: {progress?:string; repository?:string};
|
|
14
|
-
progress_namedOperator?: {progress?:string; data:{name:string, operators:
|
|
23
|
+
progress_namedOperator?: {progress?:string; data:{name:string, operators:AccountOrMark_Address[]}[]};
|
|
15
24
|
progress_parent?: {progress?:string, parent?:ParentProgress};
|
|
16
25
|
progress_hold?: {progress?:string; operation:ProgressNext; bHold:boolean; adminUnhold?:boolean};
|
|
17
26
|
progress_task?: {progress:string; task_address:string};
|
|
18
|
-
progress_next?: {progress:string; operation:ProgressNext; deliverable:
|
|
27
|
+
progress_next?: {progress:string; operation:ProgressNext; deliverable:ProgressDeliverable};
|
|
19
28
|
|
|
20
29
|
description?: string;
|
|
21
30
|
endpoint?: string;
|
|
22
|
-
consensus_repository?:
|
|
31
|
+
consensus_repository?: ObjectsOp;
|
|
23
32
|
nodes?: {op: 'add'; data: Machine_Node[]} | {op: 'remove'; names: string[], bTransferMyself?:boolean}
|
|
24
33
|
| {op:'rename node'; data:{old:string; new:string}[]} | {op:'add from myself'; addresses: string[]}
|
|
25
34
|
| {op:'remove pair'; pairs: {prior_node_name:string; node_name:string}[]}
|
|
@@ -38,19 +47,26 @@ export class CallMachine extends CallBase { //@ todo self-owned node operate
|
|
|
38
47
|
super();
|
|
39
48
|
this.data = data;
|
|
40
49
|
}
|
|
50
|
+
protected async prepare() {
|
|
51
|
+
if (!this.object_address) {
|
|
52
|
+
this.object_address = (await LocalMark.Instance().get_address(GetObjectExisted(this.data?.object)));
|
|
53
|
+
|
|
54
|
+
if (this.object_address) {
|
|
55
|
+
await this.update_content('Machine', this.object_address);
|
|
56
|
+
if (!this.content) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.object:' + this.object_address);
|
|
57
|
+
this.permission_address = (this.content as ObjectMachine).permission;
|
|
58
|
+
} else {
|
|
59
|
+
const n = GetObjectMain(this.data?.object) as TypeNamedObjectWithPermission;
|
|
60
|
+
this.permission_address = (await LocalMark.Instance().get_address(GetObjectExisted(n?.permission)));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
41
65
|
async call(account?:string) : Promise<CallResult> {
|
|
42
66
|
var checkOwner = false; const guards : string[] = [];
|
|
43
67
|
const perms : PermissionIndexType[] = [];
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
await this.update_content('Machine', this.object_address);
|
|
47
|
-
if (!this.content) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.object:' + this.object_address);
|
|
48
|
-
this.permission_address = (this.content as ObjectMachine).permission;
|
|
49
|
-
} else {
|
|
50
|
-
const n = GetObjectMain(this.data?.object) as TypeNamedObjectWithPermission;
|
|
51
|
-
this.permission_address = (await LocalMark.Instance().get_address(GetObjectExisted(n?.permission)));
|
|
52
|
-
}
|
|
53
|
-
|
|
68
|
+
|
|
69
|
+
await this.prepare();
|
|
54
70
|
if (this.permission_address) {
|
|
55
71
|
if (!this.data?.object) {
|
|
56
72
|
perms.push(PermissionIndex.machine)
|
|
@@ -120,158 +136,181 @@ export class CallMachine extends CallBase { //@ todo self-owned node operate
|
|
|
120
136
|
}
|
|
121
137
|
|
|
122
138
|
protected async operate(txb:TransactionBlock, passport?:PassportObject, account?:string) {
|
|
123
|
-
let obj : Machine | undefined ; let
|
|
139
|
+
let obj : Machine | undefined ; let perm: Permission | undefined;
|
|
140
|
+
let permission : PermissionObject | undefined;
|
|
141
|
+
|
|
124
142
|
if (this.object_address) {
|
|
125
143
|
obj = Machine.From(txb, this.permission_address!, this.object_address);
|
|
144
|
+
permission = this.permission_address;
|
|
126
145
|
} else {
|
|
127
146
|
const n = GetObjectMain(this.data?.object) as TypeNamedObjectWithPermission;
|
|
128
|
-
|
|
129
|
-
|
|
147
|
+
permission = await LocalMark.Instance().get_address(GetObjectExisted(n?.permission));
|
|
148
|
+
if (!permission) {
|
|
149
|
+
perm = Permission.New(txb, GetObjectParam(n?.permission)?.description ?? '');
|
|
150
|
+
permission = perm.get_object();
|
|
130
151
|
}
|
|
131
|
-
|
|
132
|
-
obj = Machine.New(txb, permission
|
|
152
|
+
|
|
153
|
+
obj = Machine.New(txb, permission, this.data?.description??'',
|
|
133
154
|
this.data?.endpoint, permission?undefined:passport);
|
|
134
155
|
}
|
|
135
156
|
|
|
136
|
-
if (obj)
|
|
137
|
-
|
|
138
|
-
const perm = permission ? permission.get_object() : this.permission_address;
|
|
157
|
+
if (!obj) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.object');
|
|
158
|
+
if (!permission) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.object.permission');
|
|
139
159
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
160
|
+
const pst = perm?undefined:passport;
|
|
161
|
+
var new_progress : Progress | undefined;
|
|
162
|
+
if (this.data?.progress_new !== undefined) {
|
|
163
|
+
const task = await LocalMark.Instance().get_address(this.data?.progress_new?.task_address);
|
|
164
|
+
new_progress = Progress?.New(txb, obj?.get_object(), permission, task, pst);
|
|
165
|
+
}
|
|
166
|
+
if (this.data?.progress_context_repository !== undefined) {
|
|
167
|
+
const p = this.data?.progress_context_repository.progress
|
|
168
|
+
? await LocalMark.Instance().get_address(this.data?.progress_context_repository.progress)
|
|
169
|
+
: new_progress?.get_object();
|
|
170
|
+
if (!p) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.progress_context_repository.progress');
|
|
171
|
+
const rep = await LocalMark.Instance().get_address(this.data?.progress_context_repository.repository);
|
|
172
|
+
Progress.From(txb, obj?.get_object(), permission, p!).set_context_repository(rep, pst)
|
|
173
|
+
}
|
|
174
|
+
if (this.data?.progress_namedOperator !== undefined) {
|
|
175
|
+
const p = this.data?.progress_namedOperator.progress
|
|
176
|
+
? await LocalMark.Instance().get_address(this.data?.progress_namedOperator.progress)
|
|
177
|
+
: new_progress?.get_object();
|
|
178
|
+
if (!p) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.progress_namedOperator.progress');
|
|
158
179
|
|
|
159
|
-
|
|
160
|
-
|
|
180
|
+
let pp = Progress.From(txb, obj?.get_object(), permission, p!);
|
|
181
|
+
for(let i=0; i<this.data.progress_namedOperator.data.length; i++) {
|
|
182
|
+
const v = this.data.progress_namedOperator.data[i];
|
|
183
|
+
const addrs = await GetManyAccountOrMark_Address(v.operators);
|
|
184
|
+
pp.set_namedOperator(v.name, addrs, pst);
|
|
161
185
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
186
|
+
}
|
|
187
|
+
if (this.data?.progress_parent !== undefined) {
|
|
188
|
+
const p = this.data?.progress_parent.progress
|
|
189
|
+
? await LocalMark.Instance().get_address(this.data?.progress_parent.progress)
|
|
190
|
+
: new_progress?.get_object();
|
|
191
|
+
if (!p) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.progress_parent.progress');
|
|
167
192
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
} else {
|
|
175
|
-
Progress.From(txb, obj?.get_object(), perm, p!).parent_none();
|
|
193
|
+
if (this.data.progress_parent.parent) {
|
|
194
|
+
const parent = await LocalMark.Instance().get_address(this.data.progress_parent.parent.parent_id);
|
|
195
|
+
if (parent) {
|
|
196
|
+
this.data.progress_parent.parent.parent_id = parent;
|
|
197
|
+
Progress.From(txb, obj?.get_object(), permission, p!).parent(this.data.progress_parent.parent);
|
|
176
198
|
}
|
|
199
|
+
} else {
|
|
200
|
+
Progress.From(txb, obj?.get_object(), permission, p!).parent_none();
|
|
177
201
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
202
|
+
}
|
|
203
|
+
if (this.data?.progress_hold !== undefined) {
|
|
204
|
+
const p = this.data?.progress_hold.progress
|
|
205
|
+
? await LocalMark.Instance().get_address(this.data?.progress_hold.progress)
|
|
206
|
+
: new_progress?.get_object();
|
|
207
|
+
if (!p) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.progress_hold.progress');
|
|
183
208
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
209
|
+
if (this.data?.progress_hold.adminUnhold) {
|
|
210
|
+
Progress.From(txb, obj?.get_object(), permission, p!).unhold(this.data.progress_hold.operation, pst)
|
|
211
|
+
} else {
|
|
212
|
+
Progress.From(txb, obj?.get_object(), permission, p!).hold(this.data.progress_hold.operation, this.data.progress_hold.bHold)
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (this.data?.progress_task !== undefined) {
|
|
216
|
+
const [p, task] = await LocalMark.Instance().get_many_address([this.data?.progress_task.progress, this.data?.progress_task.task_address]);
|
|
217
|
+
if (p && task) Progress.From(txb, obj?.get_object(), permission, p).bind_task(task, pst);
|
|
218
|
+
}
|
|
219
|
+
if (this.data?.progress_next !== undefined) {
|
|
220
|
+
const p = await LocalMark.Instance().get_address(this.data?.progress_next.progress);
|
|
221
|
+
if (!p) ERROR(Errors.InvalidParam, 'CallMachine_Data.data.progress_next.progress');
|
|
222
|
+
var t: OrderWrap[] = [];
|
|
199
223
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
224
|
+
if (this.data.progress_next.deliverable.orders.length > 0) {
|
|
225
|
+
const o = await query_objects({objects:this.data.progress_next.deliverable.orders});
|
|
226
|
+
if (o?.objects?.length !== this.data.progress_next.deliverable.orders.length) {
|
|
227
|
+
ERROR(Errors.InvalidParam, 'CallMachine_Data.data.progress_next.deliverable.orders');
|
|
228
|
+
}
|
|
229
|
+
t = o.objects.map(v => {
|
|
230
|
+
if (v.type !== 'Order') {
|
|
231
|
+
ERROR(Errors.InvalidParam, 'CallMachine_Data.data.progress_next.deliverable.orders');
|
|
232
|
+
}
|
|
233
|
+
return {object:v.object, pay_token_type:Service.parseOrderObjectType(v.type_raw)}
|
|
234
|
+
})
|
|
203
235
|
}
|
|
236
|
+
Progress.From(txb, obj?.get_object(), permission, p!).next(this.data.progress_next.operation,
|
|
237
|
+
{msg:this.data.progress_next.deliverable.msg, orders:t}, pst);
|
|
238
|
+
}
|
|
204
239
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
obj?.set_endpoint(this.data.endpoint, pst)
|
|
210
|
-
}
|
|
240
|
+
const addr = new_progress?.launch();
|
|
241
|
+
if (addr) {
|
|
242
|
+
await this.new_with_mark('Progress', txb, addr, this.data?.progress_new?.namedNew, account);
|
|
243
|
+
}
|
|
211
244
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
if (reps.length > 0) {
|
|
225
|
-
obj?.remove_repository(reps, false, pst);
|
|
226
|
-
}
|
|
227
|
-
break;
|
|
228
|
-
case 'removeall':
|
|
245
|
+
if (this.data?.description !== undefined && this.object_address) {
|
|
246
|
+
obj?.set_description(this.data.description, pst);
|
|
247
|
+
}
|
|
248
|
+
if (this.data?.endpoint !== undefined && this.object_address) {
|
|
249
|
+
obj?.set_endpoint(this.data.endpoint, pst)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if (this.data?.consensus_repository !== undefined) {
|
|
253
|
+
switch (this.data.consensus_repository.op) {
|
|
254
|
+
case 'add':
|
|
255
|
+
case 'set':
|
|
256
|
+
if (this.data.consensus_repository.op === 'set') {
|
|
229
257
|
obj?.remove_repository([], true, pst);
|
|
230
|
-
break;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
if (this.data?.nodes !== undefined) {
|
|
234
|
-
switch (this.data?.nodes?.op) {
|
|
235
|
-
case 'add':
|
|
236
|
-
obj?.add_node(this.data.nodes.data, pst)
|
|
237
|
-
break;
|
|
238
|
-
case 'remove':
|
|
239
|
-
obj?.remove_node(this.data.nodes.names, this.data.nodes?.bTransferMyself, pst)
|
|
240
|
-
break;
|
|
241
|
-
case 'rename node':
|
|
242
|
-
this.data.nodes.data.forEach(v => obj?.rename_node(v.old, v.new, pst));
|
|
243
|
-
break;
|
|
244
|
-
case 'add from myself':
|
|
245
|
-
obj?.add_node2(this.data.nodes.addresses, pst);
|
|
246
|
-
break;
|
|
247
|
-
case 'add forward':
|
|
248
|
-
this.data.nodes.data.forEach(v => obj?.add_forward(v.prior_node_name, v.node_name, v.forward, v.threshold, v.remove_forward, pst))
|
|
249
|
-
break;
|
|
250
|
-
case 'remove forward':
|
|
251
|
-
this.data.nodes.data.forEach(v => obj?.remove_forward(v.prior_node_name, v.node_name, v.forward_name, pst))
|
|
252
|
-
break;
|
|
253
|
-
case 'remove pair':
|
|
254
|
-
this.data.nodes.pairs.forEach(v => obj?.remove_pair(v.prior_node_name, v.node_name, pst));
|
|
255
|
-
break;
|
|
256
258
|
}
|
|
259
|
+
var reps = await LocalMark.Instance().get_many_address2(this.data.consensus_repository.objects);
|
|
260
|
+
reps.forEach(v=>obj?.add_repository(v, pst)) ;
|
|
261
|
+
break;
|
|
262
|
+
case 'remove':
|
|
263
|
+
var reps = await LocalMark.Instance().get_many_address2(this.data.consensus_repository.objects);
|
|
264
|
+
if (reps.length > 0) {
|
|
265
|
+
obj?.remove_repository(reps, false, pst);
|
|
266
|
+
}
|
|
267
|
+
break;
|
|
268
|
+
case 'removeall':
|
|
269
|
+
obj?.remove_repository([], true, pst);
|
|
270
|
+
break;
|
|
257
271
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
272
|
+
}
|
|
273
|
+
if (this.data?.nodes !== undefined) {
|
|
274
|
+
switch (this.data?.nodes?.op) {
|
|
275
|
+
case 'add':
|
|
276
|
+
obj?.add_node(this.data.nodes.data, pst)
|
|
277
|
+
break;
|
|
278
|
+
case 'remove':
|
|
279
|
+
obj?.remove_node(this.data.nodes.names, this.data.nodes?.bTransferMyself, pst)
|
|
280
|
+
break;
|
|
281
|
+
case 'rename node':
|
|
282
|
+
this.data.nodes.data.forEach(v => obj?.rename_node(v.old, v.new, pst));
|
|
283
|
+
break;
|
|
284
|
+
case 'add from myself':
|
|
285
|
+
obj?.add_node2(this.data.nodes.addresses, pst);
|
|
286
|
+
break;
|
|
287
|
+
case 'add forward':
|
|
288
|
+
this.data.nodes.data.forEach(v => obj?.add_forward(v.prior_node_name, v.node_name, v.forward, v.threshold, v.remove_forward, pst))
|
|
289
|
+
break;
|
|
290
|
+
case 'remove forward':
|
|
291
|
+
this.data.nodes.data.forEach(v => obj?.remove_forward(v.prior_node_name, v.node_name, v.forward_name, pst))
|
|
292
|
+
break;
|
|
293
|
+
case 'remove pair':
|
|
294
|
+
this.data.nodes.pairs.forEach(v => obj?.remove_pair(v.prior_node_name, v.node_name, pst));
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (this.data?.bPublished ) {
|
|
299
|
+
obj?.publish(passport)
|
|
300
|
+
}
|
|
261
301
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
}
|
|
302
|
+
if (this.data?.bPaused !== undefined) {
|
|
303
|
+
obj?.pause(this.data.bPaused, pst)
|
|
304
|
+
}
|
|
305
|
+
if (this.data?.clone_new !== undefined && this.object_address) {
|
|
306
|
+
await this.new_with_mark('Machine', txb, obj?.clone(true, pst) as TxbAddress, (this.data?.clone_new as any)?.namedNew, account);
|
|
307
|
+
}
|
|
308
|
+
if (perm) {
|
|
309
|
+
const n = GetObjectMain(this.data?.object) as TypeNamedObjectWithPermission;
|
|
310
|
+
await this.new_with_mark('Permission', txb, perm.launch(), GetObjectParam(n?.permission), account);
|
|
311
|
+
}
|
|
312
|
+
if (!this.object_address) {
|
|
313
|
+
await this.new_with_mark('Machine', txb, obj.launch(), GetObjectMain(this.data?.object), account);
|
|
275
314
|
}
|
|
276
315
|
}
|
|
277
316
|
}
|
package/src/call/permission.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { LocalMark } from "../local/local.js";
|
|
2
2
|
import { AccountOrMark_Address, CallBase, CallResult, GetAccountOrMark_Address, GetManyAccountOrMark_Address,
|
|
3
|
-
GetObjectExisted, GetObjectMain, ObjectMain
|
|
3
|
+
GetObjectExisted, GetObjectMain, ObjectMain,
|
|
4
|
+
ObjectPermissionMain} from "./base.js";
|
|
4
5
|
import { PassportObject, Permission, BizPermission,
|
|
5
6
|
PermissionIndexType, TransactionBlock, Permission_Entity as Wowok_Permission_Entity,
|
|
6
|
-
Permission_Index as Wowok_Permission_Index, Permission_Index_Entity as Wowok_Permission_Index_Entity,
|
|
7
|
+
Permission_Index as Wowok_Permission_Index, Permission_Index_Entity as Wowok_Permission_Index_Entity,
|
|
8
|
+
ERROR,
|
|
9
|
+
Errors,
|
|
7
10
|
} from 'wowok';
|
|
8
11
|
|
|
9
12
|
|
|
@@ -14,12 +17,12 @@ export interface Entity_Permission {
|
|
|
14
17
|
}
|
|
15
18
|
|
|
16
19
|
export interface Permission_Entity {
|
|
17
|
-
|
|
20
|
+
address: AccountOrMark_Address;
|
|
18
21
|
permissions:Entity_Permission[];
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
export interface Permission_Index_Entity {
|
|
22
|
-
|
|
25
|
+
address: AccountOrMark_Address;
|
|
23
26
|
guard?: string;
|
|
24
27
|
}
|
|
25
28
|
|
|
@@ -29,13 +32,13 @@ export interface Permission_Index {
|
|
|
29
32
|
}
|
|
30
33
|
/// The execution priority is determined by the order in which the object attributes are arranged
|
|
31
34
|
export interface CallPermission_Data {
|
|
32
|
-
object?:
|
|
35
|
+
object?: ObjectPermissionMain;
|
|
33
36
|
description?: string;
|
|
34
37
|
biz_permission?: {op:'add'; data: BizPermission[]} | {op:'remove'; permissions: PermissionIndexType[]};
|
|
35
38
|
permission?: {op:'add entity'; entities:Permission_Entity[]} | {op:'add permission'; permissions:Permission_Index[]}
|
|
36
|
-
| {op:'remove entity';
|
|
37
|
-
| {op:'transfer permission',
|
|
38
|
-
admin?: {op:'add' | 'remove' | 'set',
|
|
39
|
+
| {op:'remove entity'; addresses:AccountOrMark_Address[]} | {op:'remove permission'; address:AccountOrMark_Address; index:PermissionIndexType[]}
|
|
40
|
+
| {op:'transfer permission', from: AccountOrMark_Address, to: AccountOrMark_Address};
|
|
41
|
+
admin?: {op:'add' | 'remove' | 'set', addresses:AccountOrMark_Address[]} | {op:'removeall'};
|
|
39
42
|
builder?: AccountOrMark_Address;
|
|
40
43
|
}
|
|
41
44
|
export class CallPermission extends CallBase {
|
|
@@ -46,10 +49,15 @@ export class CallPermission extends CallBase {
|
|
|
46
49
|
this.data = data;
|
|
47
50
|
}
|
|
48
51
|
|
|
52
|
+
protected async prepare(): Promise<void> {
|
|
53
|
+
if (!this.object_address) {
|
|
54
|
+
this.object_address = await LocalMark.Instance().get_address(GetObjectExisted(this.data?.object));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
49
57
|
async call(account?:string) : Promise<CallResult> {
|
|
50
58
|
var checkOwner = false; var checkAdmin = false;
|
|
51
|
-
|
|
52
|
-
|
|
59
|
+
|
|
60
|
+
await this.prepare();
|
|
53
61
|
if (this.object_address) {
|
|
54
62
|
if (this.data?.builder !== undefined || this.data?.admin !== undefined) {
|
|
55
63
|
checkOwner = true;
|
|
@@ -73,92 +81,92 @@ export class CallPermission extends CallBase {
|
|
|
73
81
|
obj = Permission.From(txb, this.object_address)
|
|
74
82
|
}
|
|
75
83
|
|
|
76
|
-
if (obj)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
84
|
+
if (!obj) ERROR(Errors.InvalidParam, 'CallPermission_Data.data.object');
|
|
85
|
+
|
|
86
|
+
if (this.data?.description !== undefined && this.data?.object) {
|
|
87
|
+
obj?.set_description(this.data.description)
|
|
88
|
+
}
|
|
89
|
+
if (this.data?.biz_permission !== undefined) { // High priority operate
|
|
90
|
+
switch(this.data.biz_permission.op) {
|
|
91
|
+
case 'add':
|
|
92
|
+
this.data.biz_permission.data.forEach(v => {
|
|
93
|
+
obj?.add_bizPermission(v.index, v.name);
|
|
94
|
+
})
|
|
95
|
+
break;
|
|
96
|
+
case 'remove':
|
|
97
|
+
this.data.biz_permission.permissions.forEach(v => {
|
|
98
|
+
obj?.remove_bizPermission(v);
|
|
99
|
+
})
|
|
100
|
+
break;
|
|
93
101
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
102
|
+
}
|
|
103
|
+
if (this.data?.permission !== undefined) {
|
|
104
|
+
switch (this.data.permission.op) {
|
|
105
|
+
case 'add entity':
|
|
106
|
+
var add_entity:Wowok_Permission_Entity[] = [];
|
|
107
|
+
for (let i = 0; i < this.data.permission.entities.length; ++i) {
|
|
108
|
+
const v = this.data.permission.entities[i];
|
|
109
|
+
const addr = await GetAccountOrMark_Address(v.address);
|
|
110
|
+
if (addr) {
|
|
111
|
+
add_entity.push({address:addr, permissions:v.permissions});
|
|
104
112
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
113
|
+
}
|
|
114
|
+
obj?.add_entity(add_entity);
|
|
115
|
+
break;
|
|
116
|
+
case 'add permission':
|
|
117
|
+
var add_permission: Wowok_Permission_Index[] = [];
|
|
118
|
+
for (let i = 0; i < this.data.permission.permissions.length; ++i) {
|
|
119
|
+
const v = this.data.permission.permissions[i];
|
|
120
|
+
const e:Wowok_Permission_Index_Entity[] = [];
|
|
121
|
+
for (let j = 0; j < v.entities.length; ++j) {
|
|
122
|
+
const addr = await GetAccountOrMark_Address(v.entities[j].address);
|
|
123
|
+
const guard = await LocalMark.Instance().get_address(v.entities[j].guard as string) ;
|
|
124
|
+
if (addr) {
|
|
125
|
+
e.push({address:addr, guard:guard})
|
|
118
126
|
}
|
|
119
|
-
add_permission.push({index:v.index, entities:e});
|
|
120
127
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (this.data?.admin !== undefined) {
|
|
139
|
-
switch(this.data.admin?.op) {
|
|
140
|
-
case 'add':
|
|
141
|
-
case 'set':
|
|
142
|
-
if (this.data.admin?.op === 'set') obj?.remove_admin([], true);
|
|
143
|
-
const add = await GetManyAccountOrMark_Address(this.data.admin.entities);
|
|
144
|
-
obj?.add_admin(add.filter((v): v is string => v!== undefined));
|
|
145
|
-
break;
|
|
146
|
-
case 'remove':
|
|
147
|
-
const remove = await GetManyAccountOrMark_Address(this.data.admin.entities);
|
|
148
|
-
obj?.remove_admin(remove.filter((v): v is string => typeof(v) === 'string'));
|
|
149
|
-
break;
|
|
150
|
-
case 'removeall':
|
|
151
|
-
obj?.remove_admin([], true);
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
if (this.data?.builder !== undefined ) {
|
|
156
|
-
const b = await GetAccountOrMark_Address(this.data.builder);
|
|
157
|
-
if (b) obj?.change_owner(b);
|
|
128
|
+
add_permission.push({index:v.index, entities:e});
|
|
129
|
+
}
|
|
130
|
+
obj?.add_entity3(add_permission);
|
|
131
|
+
break;
|
|
132
|
+
case 'remove entity':
|
|
133
|
+
const entities:string[] = (await GetManyAccountOrMark_Address(this.data.permission.addresses)).filter((v): v is string => v!== undefined);
|
|
134
|
+
obj?.remove_entity(entities);
|
|
135
|
+
break;
|
|
136
|
+
case 'remove permission':
|
|
137
|
+
const addr = await GetAccountOrMark_Address(this.data.permission.address);
|
|
138
|
+
if (addr) obj?.remove_index(addr, this.data.permission.index);
|
|
139
|
+
break;
|
|
140
|
+
case 'transfer permission':
|
|
141
|
+
const from = await GetAccountOrMark_Address(this.data.permission.from);
|
|
142
|
+
const to = await GetAccountOrMark_Address(this.data.permission.to);
|
|
143
|
+
if (from && to) obj?.transfer_permission(from, to);
|
|
144
|
+
break;
|
|
158
145
|
}
|
|
159
|
-
|
|
160
|
-
|
|
146
|
+
}
|
|
147
|
+
if (this.data?.admin !== undefined) {
|
|
148
|
+
switch(this.data.admin?.op) {
|
|
149
|
+
case 'add':
|
|
150
|
+
case 'set':
|
|
151
|
+
if (this.data.admin?.op === 'set') obj?.remove_admin([], true);
|
|
152
|
+
const add = await GetManyAccountOrMark_Address(this.data.admin.addresses);
|
|
153
|
+
obj?.add_admin(add.filter((v): v is string => v!== undefined));
|
|
154
|
+
break;
|
|
155
|
+
case 'remove':
|
|
156
|
+
const remove = await GetManyAccountOrMark_Address(this.data.admin.addresses);
|
|
157
|
+
obj?.remove_admin(remove.filter((v): v is string => typeof(v) === 'string'));
|
|
158
|
+
break;
|
|
159
|
+
case 'removeall':
|
|
160
|
+
obj?.remove_admin([], true);
|
|
161
|
+
break;
|
|
161
162
|
}
|
|
162
163
|
}
|
|
164
|
+
if (this.data?.builder !== undefined ) {
|
|
165
|
+
const b = await GetAccountOrMark_Address(this.data.builder);
|
|
166
|
+
if (b) obj?.change_owner(b);
|
|
167
|
+
}
|
|
168
|
+
if (!this.object_address) {
|
|
169
|
+
await this.new_with_mark('Permission', txb, obj.launch(), GetObjectMain(this.data?.object), account);
|
|
170
|
+
}
|
|
163
171
|
}
|
|
164
172
|
}
|