wowok 1.1.1 → 1.1.3
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/README.md +3 -2
- package/dist/exception.d.ts +3 -1
- package/dist/exception.d.ts.map +1 -1
- package/dist/exception.js +2 -0
- package/dist/graphql.d.ts +2 -0
- package/dist/graphql.d.ts.map +1 -1
- package/dist/graphql.js +19 -0
- package/dist/guard.d.ts +29 -34
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +401 -397
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/machine.d.ts +6 -6
- package/dist/machine.d.ts.map +1 -1
- package/dist/passport.d.ts +39 -24
- package/dist/passport.d.ts.map +1 -1
- package/dist/passport.js +186 -251
- package/dist/permission.d.ts +3 -0
- package/dist/permission.d.ts.map +1 -1
- package/dist/permission.js +3 -0
- package/dist/protocol.d.ts +40 -40
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +45 -51
- package/dist/repository.d.ts +2 -0
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +68 -0
- package/dist/utils.d.ts +9 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +37 -0
- package/package.json +3 -2
- package/src/exception.ts +2 -0
- package/src/graphql.ts +20 -0
- package/src/guard.ts +390 -394
- package/src/index.ts +1 -0
- package/src/machine.ts +3 -3
- package/src/passport.ts +209 -282
- package/src/permission.ts +3 -0
- package/src/protocol.ts +51 -56
- package/src/repository.ts +68 -0
- package/src/utils.ts +42 -0
- package/tsconfig.json +3 -2
package/dist/passport.js
CHANGED
|
@@ -1,268 +1,212 @@
|
|
|
1
1
|
import { Inputs } from '@mysten/sui.js/transactions';
|
|
2
|
-
import { Protocol, ContextType, OperatorType, ValueType
|
|
3
|
-
import { parse_object_type, array_unique, Bcs, ulebDecode } from './utils';
|
|
4
|
-
import { Guard } from './guard';
|
|
2
|
+
import { Protocol, ContextType, OperatorType, ValueType } from './protocol';
|
|
3
|
+
import { parse_object_type, array_unique, Bcs, ulebDecode, IsValidAddress, IsValidArray } from './utils';
|
|
5
4
|
import { BCS } from '@mysten/bcs';
|
|
6
5
|
import { ERROR, Errors } from './exception';
|
|
7
6
|
export class GuardParser {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
guard_list = [];
|
|
8
|
+
protocol;
|
|
9
|
+
guards;
|
|
10
|
+
index = 0;
|
|
11
|
+
get_index() { return this.index++; }
|
|
12
|
+
constructor(protocol, guards) {
|
|
13
|
+
this.protocol = protocol;
|
|
14
|
+
this.guards = guards.map(g => protocol.CurrentSession().object(g));
|
|
15
|
+
}
|
|
16
|
+
guardlist = () => { return this.guard_list; };
|
|
17
|
+
static CreateAsync = async (protocol, guards) => {
|
|
18
|
+
if (!IsValidArray(guards, IsValidAddress)) {
|
|
19
|
+
ERROR(Errors.IsValidArray, 'guards');
|
|
20
|
+
}
|
|
21
|
+
let guard_list = array_unique(guards);
|
|
22
|
+
const me = new GuardParser(protocol, guards);
|
|
23
|
+
let res = await protocol.Query_Raw(guard_list);
|
|
24
|
+
res.forEach((r) => {
|
|
25
|
+
let c = r.data?.content;
|
|
26
|
+
if (!c)
|
|
27
|
+
return;
|
|
28
|
+
let index = protocol.WOWOK_OBJECTS_TYPE().findIndex(v => { return v.includes('guard::Guard') && v == c.type; });
|
|
29
|
+
if (index == -1)
|
|
30
|
+
return;
|
|
31
|
+
let info = { id: c.fields.id.id, query_list: [], variable: [], input_witness: [] };
|
|
32
|
+
me.parse_variable(info, c.fields.variables);
|
|
33
|
+
if (c.fields.input.type == (protocol.Package() + '::bcs::BCS')) {
|
|
34
|
+
me.parse_bcs(info, Uint8Array.from(c.fields.input.fields.bytes));
|
|
35
|
+
}
|
|
36
|
+
me.guard_list.push(info);
|
|
12
37
|
});
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
38
|
+
return me;
|
|
39
|
+
};
|
|
40
|
+
parse_variable = (info, variables) => {
|
|
41
|
+
variables.forEach((v) => {
|
|
42
|
+
if (v.type == (this.protocol.Package() + '::guard::Variable')) {
|
|
43
|
+
// ValueType.TYPE_ADDRESS: Query_Cmd maybe used the address, so save it for using
|
|
44
|
+
if (v.fields.type == ContextType.TYPE_WITNESS_ID || v.fields.type == ValueType.TYPE_ADDRESS) {
|
|
45
|
+
info.variable.push({ identifier: v.fields.identifier, index: this.get_index(), type: v.fields.type,
|
|
46
|
+
value_or_witness: '0x' + Bcs.getInstance().de(BCS.ADDRESS, Uint8Array.from(v.fields.value)) });
|
|
19
47
|
}
|
|
20
|
-
}
|
|
48
|
+
}
|
|
21
49
|
});
|
|
22
|
-
return future_objects_result;
|
|
23
50
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var arr = [].slice.call(chain_sense_bsc.reverse());
|
|
51
|
+
parse_bcs = (info, chain_bytes) => {
|
|
52
|
+
var arr = [].slice.call(chain_bytes.reverse());
|
|
27
53
|
while (arr.length > 0) {
|
|
28
54
|
var type = arr.shift();
|
|
29
55
|
// console.log(type);
|
|
30
56
|
switch (type) {
|
|
31
|
-
case ContextType.
|
|
32
|
-
case ContextType.
|
|
33
|
-
case OperatorType.
|
|
34
|
-
case OperatorType.
|
|
35
|
-
case OperatorType.
|
|
36
|
-
case OperatorType.
|
|
37
|
-
case OperatorType.
|
|
38
|
-
case OperatorType.
|
|
39
|
-
case OperatorType.
|
|
57
|
+
case ContextType.TYPE_SIGNER:
|
|
58
|
+
case ContextType.TYPE_CLOCK:
|
|
59
|
+
case OperatorType.TYPE_LOGIC_AS_U256_GREATER:
|
|
60
|
+
case OperatorType.TYPE_LOGIC_AS_U256_GREATER_EQUAL:
|
|
61
|
+
case OperatorType.TYPE_LOGIC_AS_U256_LESSER:
|
|
62
|
+
case OperatorType.TYPE_LOGIC_AS_U256_LESSER_EQUAL:
|
|
63
|
+
case OperatorType.TYPE_LOGIC_AS_U256_EQUAL:
|
|
64
|
+
case OperatorType.TYPE_LOGIC_EQUAL:
|
|
65
|
+
case OperatorType.TYPE_LOGIC_HAS_SUBSTRING:
|
|
40
66
|
case OperatorType.TYPE_LOGIC_ALWAYS_TRUE:
|
|
67
|
+
case OperatorType.TYPE_LOGIC_NOT:
|
|
68
|
+
case OperatorType.TYPE_LOGIC_AND:
|
|
69
|
+
case OperatorType.TYPE_LOGIC_OR:
|
|
41
70
|
break;
|
|
42
|
-
case ContextType.
|
|
43
|
-
|
|
44
|
-
var identifer = arr.splice(0, 1);
|
|
45
|
-
if (type == OperatorType.TYPE_FUTURE_QUERY) {
|
|
46
|
-
arr.splice(0, 1); // cmd
|
|
47
|
-
}
|
|
48
|
-
if (!variable || variable?.get(identifer[0])?.type != type)
|
|
49
|
-
return false;
|
|
50
|
-
let witness = Guard.get_variable_witness(variable, identifer[0], type);
|
|
51
|
-
if (!witness)
|
|
52
|
-
return false;
|
|
53
|
-
result.push({ guardid: guardid, identifier: identifer[0], type: type, value: '',
|
|
54
|
-
witness: '0x' + Bcs.getInstance().de(BCS.ADDRESS, Uint8Array.from(witness)) });
|
|
71
|
+
case ContextType.TYPE_VARIABLE:
|
|
72
|
+
arr.splice(0, 1); // identifier of variable
|
|
55
73
|
break;
|
|
56
|
-
case ContextType.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
case ContextType.TYPE_CONTEXT_vec_u8:
|
|
61
|
-
case ValueType.TYPE_STATIC_bool:
|
|
62
|
-
case ValueType.TYPE_STATIC_u8:
|
|
63
|
-
arr.splice(0, 1); // identifier
|
|
74
|
+
case ContextType.TYPE_WITNESS_ID: // add to variable
|
|
75
|
+
let addr = '0x' + Bcs.getInstance().de(BCS.ADDRESS, Uint8Array.from(arr)).toString();
|
|
76
|
+
arr.splice(0, 32); // address
|
|
77
|
+
info.input_witness.push({ index: this.get_index(), type: ContextType.TYPE_WITNESS_ID, value_or_witness: addr });
|
|
64
78
|
break;
|
|
65
|
-
case
|
|
66
|
-
|
|
79
|
+
case ValueType.TYPE_BOOL:
|
|
80
|
+
case ValueType.TYPE_U8:
|
|
81
|
+
arr.splice(0, 1); // identifier
|
|
67
82
|
break;
|
|
68
|
-
case ValueType.
|
|
83
|
+
case ValueType.TYPE_ADDRESS:
|
|
69
84
|
arr.splice(0, 32);
|
|
70
85
|
break;
|
|
71
|
-
case ValueType.
|
|
86
|
+
case ValueType.TYPE_U64:
|
|
72
87
|
arr.splice(0, 8);
|
|
73
88
|
break;
|
|
74
|
-
case ValueType.
|
|
89
|
+
case ValueType.TYPE_U128:
|
|
75
90
|
arr.splice(0, 16);
|
|
76
91
|
break;
|
|
77
|
-
case ValueType.
|
|
92
|
+
case ValueType.TYPE_U256:
|
|
93
|
+
arr.splice(0, 32);
|
|
94
|
+
break;
|
|
95
|
+
case ValueType.TYPE_VEC_U8:
|
|
78
96
|
let { value, length } = ulebDecode(Uint8Array.from(arr));
|
|
79
97
|
arr.splice(0, value + length);
|
|
80
98
|
break;
|
|
81
99
|
case OperatorType.TYPE_QUERY:
|
|
82
|
-
arr.splice(0,
|
|
100
|
+
let type = arr.splice(0, 1);
|
|
101
|
+
if (type[0] == ValueType.TYPE_ADDRESS || type[0] == ContextType.TYPE_WITNESS_ID) {
|
|
102
|
+
let addr = '0x' + Bcs.getInstance().de(BCS.ADDRESS, Uint8Array.from(arr)).toString();
|
|
103
|
+
arr.splice(0, 33); // address + cmd
|
|
104
|
+
if (type[0] == ValueType.TYPE_ADDRESS) {
|
|
105
|
+
info.query_list.push(addr);
|
|
106
|
+
}
|
|
107
|
+
else if (type[0] == ContextType.TYPE_WITNESS_ID) {
|
|
108
|
+
info.query_list.push({ index: this.get_index(), type: type[0], value_or_witness: addr });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (type[0] == ContextType.TYPE_VARIABLE) {
|
|
112
|
+
let identifer = arr.splice(0, 2); // key + cmd
|
|
113
|
+
let variable = info.variable.find((v) => (v.identifier == identifer[0]) &&
|
|
114
|
+
((v.type == ValueType.TYPE_ADDRESS) || (v.type == ContextType.TYPE_WITNESS_ID)));
|
|
115
|
+
if (!variable) {
|
|
116
|
+
ERROR(Errors.Fail, 'indentifier not in variable');
|
|
117
|
+
}
|
|
118
|
+
if (variable?.type == ValueType.TYPE_ADDRESS) {
|
|
119
|
+
info.query_list.push(variable.value_or_witness);
|
|
120
|
+
}
|
|
121
|
+
else if (variable?.type == ContextType.TYPE_WITNESS_ID) {
|
|
122
|
+
info.query_list.push({ identifier: identifer[0], type: variable.type, value_or_witness: variable.value_or_witness, index: this.get_index() });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
ERROR(Errors.Fail, 'variable type invalid');
|
|
127
|
+
}
|
|
83
128
|
break;
|
|
84
129
|
default:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
130
|
+
ERROR(Errors.Fail, 'parse_bcs types');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
get_object(guardid, info, fill) {
|
|
135
|
+
let r = fill?.find(i => guardid == i.guard && i.index == info.index);
|
|
136
|
+
if (!r || !r.future) {
|
|
137
|
+
if (!info.future) {
|
|
138
|
+
ERROR(Errors.InvalidParam, 'index invalid for fill');
|
|
89
139
|
}
|
|
90
140
|
}
|
|
91
|
-
|
|
141
|
+
else {
|
|
142
|
+
info.future = r.future;
|
|
143
|
+
}
|
|
144
|
+
return info.future;
|
|
92
145
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
146
|
+
done = async (fill) => {
|
|
147
|
+
let objects = [];
|
|
148
|
+
this.guard_list.forEach((g) => {
|
|
149
|
+
g.variable.filter(v => v.type == ContextType.TYPE_WITNESS_ID).forEach((q) => {
|
|
150
|
+
objects.push(this.get_object(g.id, q, fill));
|
|
151
|
+
});
|
|
152
|
+
let list = g.query_list.map((q) => {
|
|
153
|
+
if (typeof (q) === "string") {
|
|
154
|
+
objects.push(q);
|
|
155
|
+
return q;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
let r = this.get_object(g.id, q, fill);
|
|
159
|
+
objects.push(r);
|
|
160
|
+
return r;
|
|
108
161
|
}
|
|
109
162
|
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
sense_objects.forEach((value) => {
|
|
115
|
-
sense_objects_result = sense_objects_result.concat(value.data);
|
|
116
|
-
});
|
|
117
|
-
sense_objects_result = array_unique(sense_objects_result); // objects in guards
|
|
118
|
-
let queries = sense_objects_result.map((value) => {
|
|
119
|
-
return { objectid: value, callback: GuardParser.rpc_query_cmd_fn, data: [] };
|
|
163
|
+
g.query_list = list;
|
|
164
|
+
g.input_witness.forEach((q) => {
|
|
165
|
+
objects.push(this.get_object(g.id, q, fill));
|
|
166
|
+
});
|
|
120
167
|
});
|
|
121
|
-
|
|
122
|
-
let res =
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (!
|
|
129
|
-
|
|
130
|
-
console.log(queries);
|
|
131
|
-
console.log(object);
|
|
132
|
-
return;
|
|
168
|
+
// objects info
|
|
169
|
+
let res = await this.protocol.Query_Raw(array_unique(objects), { showType: true });
|
|
170
|
+
let query = [];
|
|
171
|
+
let witness = [];
|
|
172
|
+
this.guard_list.forEach(g => {
|
|
173
|
+
g.query_list.forEach(q => {
|
|
174
|
+
let r = res.find(r => r.data?.objectId == q);
|
|
175
|
+
if (!r) {
|
|
176
|
+
ERROR(Errors.Fail, 'query object not match');
|
|
133
177
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
return res;
|
|
138
|
-
};
|
|
139
|
-
// parse guard senses input bytes of a guard, return [objectids] for 'query_cmd'
|
|
140
|
-
static parse_sense_bsc(result, guardid, chain_sense_bsc, variable) {
|
|
141
|
-
var arr = [].slice.call(chain_sense_bsc.reverse());
|
|
142
|
-
while (arr.length > 0) {
|
|
143
|
-
var type = arr.shift();
|
|
144
|
-
// console.log(type);
|
|
145
|
-
switch (type) {
|
|
146
|
-
case ContextType.TYPE_CONTEXT_SIGNER:
|
|
147
|
-
case ContextType.TYPE_CONTEXT_CLOCK:
|
|
148
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER:
|
|
149
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL:
|
|
150
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER:
|
|
151
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL:
|
|
152
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_U128_EQUAL:
|
|
153
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_EQUAL:
|
|
154
|
-
case OperatorType.TYPE_LOGIC_OPERATOR_HAS_SUBSTRING:
|
|
155
|
-
case OperatorType.TYPE_LOGIC_ALWAYS_TRUE:
|
|
156
|
-
break;
|
|
157
|
-
case ContextType.TYPE_CONTEXT_FUTURE_ID: // MACHINE-ID
|
|
158
|
-
var v = arr.splice(0, 1);
|
|
159
|
-
if (!variable || variable?.get(v[0])?.type != type)
|
|
160
|
-
return false;
|
|
161
|
-
break;
|
|
162
|
-
case ContextType.TYPE_CONTEXT_address:
|
|
163
|
-
case ContextType.TYPE_CONTEXT_bool:
|
|
164
|
-
case ContextType.TYPE_CONTEXT_u8:
|
|
165
|
-
case ContextType.TYPE_CONTEXT_u64:
|
|
166
|
-
case ContextType.TYPE_CONTEXT_vec_u8:
|
|
167
|
-
arr.splice(0, 1); // identifier
|
|
168
|
-
break;
|
|
169
|
-
case ValueType.TYPE_STATIC_address:
|
|
170
|
-
//console.log('0x' + bcs.de(BCS.ADDRESS, Uint8Array.from(array)).toString());
|
|
171
|
-
arr.splice(0, 32);
|
|
172
|
-
break;
|
|
173
|
-
case ValueType.TYPE_STATIC_bool:
|
|
174
|
-
case ValueType.TYPE_STATIC_u8:
|
|
175
|
-
arr.splice(0, 1);
|
|
176
|
-
break;
|
|
177
|
-
case ValueType.TYPE_STATIC_u64:
|
|
178
|
-
arr.splice(0, 8);
|
|
179
|
-
break;
|
|
180
|
-
case ValueType.TYPE_STATIC_u128:
|
|
181
|
-
arr.splice(0, 16);
|
|
182
|
-
break;
|
|
183
|
-
case ValueType.TYPE_STATIC_vec_u8:
|
|
184
|
-
let { value, length } = ulebDecode(Uint8Array.from(arr));
|
|
185
|
-
arr.splice(0, value + length);
|
|
186
|
-
break;
|
|
187
|
-
case OperatorType.TYPE_QUERY:
|
|
188
|
-
result.push('0x' + Bcs.getInstance().de(BCS.ADDRESS, Uint8Array.from(arr)).toString());
|
|
189
|
-
arr.splice(0, 33); // address + cmd
|
|
190
|
-
break;
|
|
191
|
-
case OperatorType.TYPE_QUERY_FROM_CONTEXT:
|
|
192
|
-
case OperatorType.TYPE_FUTURE_QUERY:
|
|
193
|
-
var identifer = arr.splice(0, 1);
|
|
194
|
-
if (variable) {
|
|
195
|
-
let v = Guard.get_variable_value(variable, identifer[0], type);
|
|
196
|
-
if (v) {
|
|
197
|
-
result.push('0x' + Bcs.getInstance().de(BCS.ADDRESS, Uint8Array.from(v)).toString());
|
|
198
|
-
arr.splice(0, 1); // splice cmd
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
;
|
|
203
|
-
return false;
|
|
204
|
-
default:
|
|
205
|
-
console.error('parse_sense_bsc:undefined');
|
|
206
|
-
console.log(type);
|
|
207
|
-
console.log(arr);
|
|
208
|
-
return false; // error
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
return true;
|
|
212
|
-
}
|
|
213
|
-
// callback to parse guard's object-queries into Guard_Query_Object[]
|
|
214
|
-
static rpc_sense_objects_fn = (protocol, response, param, option) => {
|
|
215
|
-
if (!response.error) {
|
|
216
|
-
let c = response?.data?.content;
|
|
217
|
-
let index = protocol.WOWOK_OBJECTS_TYPE().findIndex(v => v.includes('guard::Guard') && v == c.type);
|
|
218
|
-
if (index >= 0 && c.fields.id.id == param.objectid) { // GUARD OBJECT
|
|
219
|
-
if (!param?.variables) {
|
|
220
|
-
let v = new Map();
|
|
221
|
-
for (let i = 0; i < c.fields.variables.length; i++) {
|
|
222
|
-
let variable = c.fields.variables[i];
|
|
223
|
-
let bret;
|
|
224
|
-
if (variable.type == (protocol.WOWOK_OBJECTS_PREFIX_TYPE()[index] + 'Variable')) { // ...::guard::Variable
|
|
225
|
-
if (variable.fields.type == OperatorType.TYPE_FUTURE_QUERY || variable.fields.type == ContextType.TYPE_CONTEXT_FUTURE_ID) {
|
|
226
|
-
bret = Guard.add_future_variable(v, variable.fields.identifier, variable.fields.type, variable.fields?.value ? Uint8Array.from(variable.fields.value) : undefined, undefined, false);
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
bret = Guard.add_variable(v, variable.fields.identifier, variable.fields.type, variable.fields?.value ? Uint8Array.from(variable.fields.value) : undefined, false);
|
|
230
|
-
}
|
|
231
|
-
if (!bret) {
|
|
232
|
-
console.log('rpc_sense_objects_fn add_variable error');
|
|
233
|
-
console.log(variable);
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
param.variables = v;
|
|
178
|
+
let object = this.object_query(r.data);
|
|
179
|
+
if (!object) {
|
|
180
|
+
ERROR(Errors.Fail, 'query object fail');
|
|
239
181
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
182
|
+
query.push(object);
|
|
183
|
+
});
|
|
184
|
+
res.forEach(q => {
|
|
185
|
+
let r1 = g.variable.find(v => v.future == q.data?.objectId);
|
|
186
|
+
let r2 = g.input_witness.find(v => v.future == q.data?.objectId);
|
|
187
|
+
// not match r1 || r2 means query-cmd, not witness-cmd
|
|
188
|
+
if (r1 || r2) {
|
|
189
|
+
let object = this.object_query(q.data, 'witness');
|
|
190
|
+
if (!object) {
|
|
191
|
+
ERROR(Errors.Fail, 'witness object fail');
|
|
247
192
|
}
|
|
193
|
+
witness.push(object);
|
|
248
194
|
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
return { guard: this.guards, query: query, witness: witness };
|
|
251
198
|
};
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
types: parse_object_type(response?.data?.type),
|
|
264
|
-
id: param.objectid, };
|
|
265
|
-
}
|
|
199
|
+
object_query = (data, method = 'guard_query') => {
|
|
200
|
+
for (let k = 0; k < this.protocol.WOWOK_OBJECTS_TYPE().length; k++) {
|
|
201
|
+
if (data.type.includes(this.protocol.WOWOK_OBJECTS_TYPE()[k])) { // type: pack::m::Object<...>
|
|
202
|
+
return { target: this.protocol.WOWOK_OBJECTS_PREFIX_TYPE()[k] + method,
|
|
203
|
+
object: Inputs.SharedObjectRef({
|
|
204
|
+
objectId: data.objectId,
|
|
205
|
+
mutable: false,
|
|
206
|
+
initialSharedVersion: data.version,
|
|
207
|
+
}),
|
|
208
|
+
types: parse_object_type(data.type),
|
|
209
|
+
id: data.objectId, };
|
|
266
210
|
}
|
|
267
211
|
}
|
|
268
212
|
};
|
|
@@ -273,11 +217,11 @@ export class Passport {
|
|
|
273
217
|
protocol;
|
|
274
218
|
get_object() { return this.passport; }
|
|
275
219
|
// return passport object used
|
|
276
|
-
constructor(protocol,
|
|
277
|
-
if (!
|
|
220
|
+
constructor(protocol, query) {
|
|
221
|
+
if (!query.guard || query.guard.length > Passport.MAX_GUARD_COUNT) {
|
|
278
222
|
ERROR(Errors.InvalidParam, 'guards');
|
|
279
223
|
}
|
|
280
|
-
if (!Protocol.IsValidObjects(
|
|
224
|
+
if (!Protocol.IsValidObjects(query.guard)) {
|
|
281
225
|
ERROR(Errors.IsValidObjects, 'guards');
|
|
282
226
|
}
|
|
283
227
|
this.protocol = protocol;
|
|
@@ -287,41 +231,32 @@ export class Passport {
|
|
|
287
231
|
arguments: []
|
|
288
232
|
});
|
|
289
233
|
// add others guards, if any
|
|
290
|
-
|
|
234
|
+
query.guard.forEach((g) => {
|
|
291
235
|
txb.moveCall({
|
|
292
236
|
target: protocol.PassportFn('guard_add'),
|
|
293
|
-
arguments: [this.passport, Protocol.TXB_OBJECT(txb,
|
|
237
|
+
arguments: [this.passport, Protocol.TXB_OBJECT(txb, g)]
|
|
294
238
|
});
|
|
295
239
|
});
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
if (result.has(v.guardid)) {
|
|
299
|
-
result.get(v.guardid)?.identifier.push(v.identifier);
|
|
300
|
-
result.get(v.guardid)?.real_address.push(v.value);
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
result.set(v.guardid, { identifier: [v.identifier], real_address: [v.value] });
|
|
304
|
-
}
|
|
305
|
-
});
|
|
306
|
-
result.forEach((v, k) => {
|
|
240
|
+
// witness
|
|
241
|
+
query?.witness.forEach((w) => {
|
|
307
242
|
txb.moveCall({
|
|
308
|
-
target:
|
|
309
|
-
arguments: [this.passport, txb.
|
|
310
|
-
|
|
243
|
+
target: w.target,
|
|
244
|
+
arguments: [this.passport, txb.object(w.object)],
|
|
245
|
+
typeArguments: w.types,
|
|
311
246
|
});
|
|
312
247
|
});
|
|
313
248
|
// rules: 'verify' & 'query' in turns;'verify' at final end.
|
|
314
|
-
|
|
315
|
-
let
|
|
249
|
+
query?.query.forEach((q) => {
|
|
250
|
+
let address = txb.moveCall({
|
|
316
251
|
target: protocol.PassportFn('passport_verify'),
|
|
317
|
-
arguments: [this.passport, txb.object(Protocol.CLOCK_OBJECT)
|
|
252
|
+
arguments: [this.passport, txb.object(Protocol.CLOCK_OBJECT)]
|
|
318
253
|
});
|
|
319
254
|
txb.moveCall({
|
|
320
|
-
target:
|
|
321
|
-
arguments: [txb.object(
|
|
322
|
-
typeArguments:
|
|
255
|
+
target: q.target,
|
|
256
|
+
arguments: [txb.object(q.object), this.passport, address],
|
|
257
|
+
typeArguments: q.types,
|
|
323
258
|
});
|
|
324
|
-
}
|
|
259
|
+
});
|
|
325
260
|
txb.moveCall({
|
|
326
261
|
target: protocol.PassportFn('passport_verify'),
|
|
327
262
|
arguments: [this.passport, txb.object(Protocol.CLOCK_OBJECT)]
|
package/dist/permission.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export declare enum PermissionIndex {
|
|
|
7
7
|
repository_remove_policies = 104,
|
|
8
8
|
repository_set_policy_description = 105,
|
|
9
9
|
repository_set_policy_permission = 106,
|
|
10
|
+
repository_reference_add = 107,
|
|
11
|
+
repository_reference_remove = 108,
|
|
12
|
+
repository_reference_removeall = 108,
|
|
10
13
|
vote = 150,
|
|
11
14
|
vote_set_description = 151,
|
|
12
15
|
vote_set_reference = 152,
|
package/dist/permission.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../src/permission.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../src/permission.ts"],"names":[],"mappings":"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"}
|
package/dist/permission.js
CHANGED
|
@@ -11,6 +11,9 @@ export var PermissionIndex;
|
|
|
11
11
|
PermissionIndex[PermissionIndex["repository_remove_policies"] = 104] = "repository_remove_policies";
|
|
12
12
|
PermissionIndex[PermissionIndex["repository_set_policy_description"] = 105] = "repository_set_policy_description";
|
|
13
13
|
PermissionIndex[PermissionIndex["repository_set_policy_permission"] = 106] = "repository_set_policy_permission";
|
|
14
|
+
PermissionIndex[PermissionIndex["repository_reference_add"] = 107] = "repository_reference_add";
|
|
15
|
+
PermissionIndex[PermissionIndex["repository_reference_remove"] = 108] = "repository_reference_remove";
|
|
16
|
+
PermissionIndex[PermissionIndex["repository_reference_removeall"] = 108] = "repository_reference_removeall";
|
|
14
17
|
PermissionIndex[PermissionIndex["vote"] = 150] = "vote";
|
|
15
18
|
PermissionIndex[PermissionIndex["vote_set_description"] = 151] = "vote_set_description";
|
|
16
19
|
PermissionIndex[PermissionIndex["vote_set_reference"] = 152] = "vote_set_reference";
|