wowok 1.0.3 → 1.0.4
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/LICENSE +201 -0
- package/README.md +17 -0
- package/dist/demand.js +91 -30
- package/dist/guard.js +79 -73
- package/dist/machine.js +130 -65
- package/dist/passport.js +14 -5
- package/dist/permission.js +111 -49
- package/dist/progress.js +74 -30
- package/dist/protocol.js +84 -52
- package/dist/repository.js +138 -50
- package/dist/reward.js +134 -28
- package/dist/service.js +457 -161
- package/dist/util.js +16 -1
- package/dist/vote.js +134 -56
- package/package.json +4 -5
- package/src/address.graphql +0 -0
- package/src/demand.ts +96 -52
- package/src/guard.ts +88 -82
- package/src/machine.ts +126 -81
- package/src/object.graphql +30 -0
- package/src/passport.ts +7 -7
- package/src/permission.ts +110 -59
- package/src/progress.ts +89 -58
- package/src/protocol.ts +80 -33
- package/src/repository.ts +146 -70
- package/src/reward.ts +131 -45
- package/src/service.ts +433 -209
- package/src/util.ts +16 -1
- package/src/vote.ts +141 -74
package/src/protocol.ts
CHANGED
|
@@ -2,25 +2,39 @@ import { SuiClient, SuiObjectResponse, SuiObjectDataOptions, SuiTransactionBlock
|
|
|
2
2
|
SuiTransactionBlockResponse, SuiObjectChange } from '@mysten/sui.js/client';
|
|
3
3
|
import { Ed25519Keypair } from '@mysten/sui.js/keypairs/ed25519';
|
|
4
4
|
import { BCS, getSuiMoveConfig, toHEX, fromHEX, BcsReader } from '@mysten/bcs';
|
|
5
|
-
import { TransactionBlock, Inputs, type TransactionResult } from '@mysten/sui.js/transactions';
|
|
5
|
+
import { TransactionBlock, Inputs, type TransactionResult, type TransactionArgument } from '@mysten/sui.js/transactions';
|
|
6
6
|
import { capitalize } from './util'
|
|
7
7
|
|
|
8
|
-
export type GuardObject = TransactionResult;
|
|
9
|
-
export type GuardAddress = TransactionResult;
|
|
10
|
-
|
|
11
8
|
export const MAX_DESCRIPTION_LENGTH = 1024;
|
|
12
9
|
export const MAX_NAME_LENGTH = 64;
|
|
13
10
|
export const MAX_ENDPOINT_LENGTH = 1024;
|
|
11
|
+
export const OptionNone = (txb:TransactionBlock) : TransactionArgument => { return txb.pure([], BCS.U8) };
|
|
14
12
|
|
|
15
|
-
export
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
export
|
|
19
|
-
|
|
13
|
+
export const IsValidDesription = (description:string) : boolean => { return description.length <= MAX_DESCRIPTION_LENGTH }
|
|
14
|
+
export const IsValidName = (name:string) : boolean => { return name.length <= MAX_NAME_LENGTH && name.length != 0 }
|
|
15
|
+
export const IsValidName_AllowEmpty = (name:string) : boolean => { return name.length <= MAX_NAME_LENGTH }
|
|
16
|
+
export const IsValidEndpoint = (endpoint:string) : boolean => { return endpoint.length <= MAX_ENDPOINT_LENGTH }
|
|
17
|
+
export const IsValidAddress = (address:string) : boolean => { return address.length != 0 }
|
|
18
|
+
export const IsValidArgType = (argType: string) : boolean => { return argType.length != 0 }
|
|
19
|
+
export const IsValidUint = (value: number) : boolean => { return Number.isSafeInteger(value) && value != 0 }
|
|
20
|
+
export const IsValidInt = (value: number) : boolean => { return Number.isSafeInteger(value) }
|
|
21
|
+
export const IsValidPercent = (value: number) : boolean => { return Number.isSafeInteger(value) && value > 0 && value <= 100 }
|
|
22
|
+
export const IsValidArray = (arr: any[], validFunc:any) : boolean => {
|
|
23
|
+
let bValid = true;
|
|
24
|
+
arr.forEach((v) => {
|
|
25
|
+
if (!validFunc(v)) {
|
|
26
|
+
bValid = false;
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
return bValid;
|
|
20
30
|
}
|
|
21
|
-
export
|
|
22
|
-
return
|
|
31
|
+
export const IsValidObjects = (arr:TxbObject[]) : boolean => {
|
|
32
|
+
return IsValidArray(arr, (v:TxbObject)=>{
|
|
33
|
+
if (!v) return false
|
|
34
|
+
return true
|
|
35
|
+
})
|
|
23
36
|
}
|
|
37
|
+
|
|
24
38
|
export enum MODULES {
|
|
25
39
|
machine = 'machine',
|
|
26
40
|
node = 'node',
|
|
@@ -38,7 +52,32 @@ export enum MODULES {
|
|
|
38
52
|
wowok = 'wowok',
|
|
39
53
|
}
|
|
40
54
|
|
|
41
|
-
export type
|
|
55
|
+
export type PermissionAddress = TransactionResult;
|
|
56
|
+
export type PermissionObject = TransactionResult | string;
|
|
57
|
+
export type RepositoryAddress = TransactionResult;
|
|
58
|
+
export type RepositoryObject = TransactionResult | string;
|
|
59
|
+
export type GuardAddress = TransactionResult;
|
|
60
|
+
export type GuardObject = TransactionResult | string;
|
|
61
|
+
export type MachineAddress = TransactionResult;
|
|
62
|
+
export type MachineObject = TransactionResult | string;
|
|
63
|
+
export type PassportObject = TransactionResult;
|
|
64
|
+
export type DemandAddress = TransactionResult;
|
|
65
|
+
export type DemandObject = TransactionResult | string;
|
|
66
|
+
export type ServiceObject = TransactionResult | string;
|
|
67
|
+
export type ServiceAddress = TransactionResult;
|
|
68
|
+
export type ProgressObject = TransactionResult | string;
|
|
69
|
+
export type ProgressAddress = TransactionResult;
|
|
70
|
+
export type RewardObject = TransactionResult | string;
|
|
71
|
+
export type RewardAddress = TransactionResult;
|
|
72
|
+
export type OrderObject = TransactionResult | string;
|
|
73
|
+
export type OrderAddress = TransactionResult;
|
|
74
|
+
export type DiscountObject = TransactionResult | string;
|
|
75
|
+
export type CoinObject = TransactionResult | string;
|
|
76
|
+
export type VoteObject = TransactionResult | string;
|
|
77
|
+
export type VoteAddress = TransactionResult;
|
|
78
|
+
|
|
79
|
+
export type TxbObject = string | TransactionResult | GuardObject | RepositoryObject | PermissionObject | MachineObject | PassportObject |
|
|
80
|
+
DemandObject | ServiceObject | RewardObject | OrderObject | DiscountObject | VoteObject | DemandObject;
|
|
42
81
|
export function TXB_OBJECT(txb:TransactionBlock, arg:TxbObject) : TransactionResult {
|
|
43
82
|
if (typeof arg == 'string') return txb.object(arg) as TransactionResult;
|
|
44
83
|
return arg;
|
|
@@ -53,20 +92,7 @@ export const CLOCK_OBJECT = Inputs.SharedObjectRef({
|
|
|
53
92
|
initialSharedVersion: 1,
|
|
54
93
|
});
|
|
55
94
|
|
|
56
|
-
export enum
|
|
57
|
-
TYPE_DYNAMIC_QUERY = 1,
|
|
58
|
-
TYPE_LOGIC_OPERATOR_U128_GREATER = 11,
|
|
59
|
-
TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL = 12,
|
|
60
|
-
TYPE_LOGIC_OPERATOR_U128_LESSER = 13,
|
|
61
|
-
TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL = 14,
|
|
62
|
-
TYPE_LOGIC_OPERATOR_U128_EQUAL = 15,
|
|
63
|
-
TYPE_LOGIC_OPERATOR_EQUAL = 16, // TYPE&DATA(vector<u8>) MUST BE EQUAL
|
|
64
|
-
TYPE_LOGIC_OPERATOR_HAS_SUBSTRING = 17, // SUBSTRING
|
|
65
|
-
TYPE_LOGIC_ALWAYS_TRUE = 18, // aways true
|
|
66
|
-
// TYPE_LOGIC_OPERATOR_VECU8_CONTAINS = 18, // SUB VEC<U8>
|
|
67
|
-
TYPE_CONTEXT_SIGNER = 60,
|
|
68
|
-
TYPE_CONTEXT_CURRENT_PROGRESS = 61,
|
|
69
|
-
TYPE_CONTEXT_CURRENT_CLOCK = 62,
|
|
95
|
+
export enum ValueType {
|
|
70
96
|
TYPE_STATIC_bool = 100,
|
|
71
97
|
TYPE_STATIC_address = 101,
|
|
72
98
|
TYPE_STATIC_u64 = 102,
|
|
@@ -83,10 +109,28 @@ export enum Data_Type {
|
|
|
83
109
|
TYPE_STATIC_option_u8 = 113,
|
|
84
110
|
TYPE_STATIC_option_u64 = 114,
|
|
85
111
|
TYPE_STATIC_option_u128 = 115,
|
|
86
|
-
TYPE_STATIC_by_value_specified = 126,
|
|
87
|
-
TYPE_STATIC_error = 127,
|
|
88
112
|
}
|
|
89
113
|
|
|
114
|
+
export enum OperatorType {
|
|
115
|
+
TYPE_DYNAMIC_QUERY = 1, // query wowok object
|
|
116
|
+
TYPE_LOGIC_OPERATOR_U128_GREATER = 11,
|
|
117
|
+
TYPE_LOGIC_OPERATOR_U128_GREATER_EQUAL = 12,
|
|
118
|
+
TYPE_LOGIC_OPERATOR_U128_LESSER = 13,
|
|
119
|
+
TYPE_LOGIC_OPERATOR_U128_LESSER_EQUAL = 14,
|
|
120
|
+
TYPE_LOGIC_OPERATOR_U128_EQUAL = 15,
|
|
121
|
+
TYPE_LOGIC_OPERATOR_EQUAL = 16, // TYPE&DATA(vector<u8>) MUST BE EQUAL
|
|
122
|
+
TYPE_LOGIC_OPERATOR_HAS_SUBSTRING = 17, // SUBSTRING
|
|
123
|
+
TYPE_LOGIC_ALWAYS_TRUE = 18, // aways true
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export enum ContextType {
|
|
127
|
+
TYPE_CONTEXT_SIGNER = 60,
|
|
128
|
+
TYPE_CONTEXT_CURRENT_PROGRESS = 61,
|
|
129
|
+
TYPE_CONTEXT_CURRENT_CLOCK = 62,
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export type Data_Type = ValueType | OperatorType | ContextType;
|
|
133
|
+
|
|
90
134
|
export enum ENTRYPOINT {
|
|
91
135
|
mainnet = 'mainnet',
|
|
92
136
|
testnet = 'testnet',
|
|
@@ -101,18 +145,21 @@ export class Protocol {
|
|
|
101
145
|
protected everyone_guard = '';
|
|
102
146
|
|
|
103
147
|
constructor(network:ENTRYPOINT=ENTRYPOINT.localnet, signer="0xe386bb9e01b3528b75f3751ad8a1e418b207ad979fea364087deef5250a73d3f") {
|
|
104
|
-
this.network = network;
|
|
105
148
|
this.signer = signer;
|
|
149
|
+
this.UseNetwork(network);
|
|
150
|
+
}
|
|
151
|
+
UseNetwork(network:ENTRYPOINT=ENTRYPOINT.localnet) {
|
|
152
|
+
this.network = network;
|
|
106
153
|
switch(network) {
|
|
107
154
|
case ENTRYPOINT.localnet:
|
|
108
|
-
this.package = "
|
|
109
|
-
this.everyone_guard = "
|
|
155
|
+
this.package = "0xe9721254e97dd074e06c5efe5c57be169b64b39ae48939d89c00bf2f62b19e10";
|
|
156
|
+
this.everyone_guard = "0xb2a3fe7881cb883743c4e962b7e3c7716a1cd47a67adad01dc79795def4f769d";
|
|
110
157
|
break;
|
|
111
158
|
case ENTRYPOINT.devnet:
|
|
112
159
|
break;
|
|
113
160
|
case ENTRYPOINT.testnet:
|
|
114
|
-
this.package = "
|
|
115
|
-
this.everyone_guard = "
|
|
161
|
+
this.package = "0x3943853a7075742d89cea2df2980c32353a88fca0eec2f7d43d097e857e381bb";
|
|
162
|
+
this.everyone_guard = "0x78a41fcc4f566360839613f6b917fb101ae015e56b43143f496f265b6422fddc";
|
|
116
163
|
break;
|
|
117
164
|
case ENTRYPOINT.mainnet:
|
|
118
165
|
break;
|
package/src/repository.ts
CHANGED
|
@@ -1,132 +1,181 @@
|
|
|
1
1
|
import { TransactionBlock, Inputs, type TransactionResult } from '@mysten/sui.js/transactions';
|
|
2
2
|
import { BCS } from '@mysten/bcs';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import {
|
|
3
|
+
import { FnCallType, PROTOCOL, ValueType, IsValidDesription, IsValidAddress, IsValidArray, OptionNone,
|
|
4
|
+
RepositoryObject, RepositoryAddress, PermissionObject, TXB_OBJECT, PassportObject, IsValidObjects} from './protocol';
|
|
5
|
+
import { IsValidPermissionIndex, PermissionIndexType } from './permission'
|
|
6
|
+
import { BCS_CONVERT, array_unique } from './util';
|
|
6
7
|
|
|
7
|
-
export const MAX_POLICY_COUNT =
|
|
8
|
+
export const MAX_POLICY_COUNT = 1000;
|
|
9
|
+
export const MAX_KEY_LENGTH = 128;
|
|
10
|
+
export const MAX_VALUE_LENGTH = 204800;
|
|
11
|
+
|
|
12
|
+
export const IsValidKey = (key:string) : boolean => {
|
|
13
|
+
return key.length <= MAX_KEY_LENGTH && key.length != 0;
|
|
14
|
+
}
|
|
15
|
+
export const IsValidValue = (value:Uint8Array) : boolean => {
|
|
16
|
+
return value.length < MAX_VALUE_LENGTH;
|
|
17
|
+
}
|
|
8
18
|
|
|
9
19
|
export enum Repository_Policy_Mode {
|
|
10
20
|
POLICY_MODE_FREE = 0,
|
|
11
21
|
POLICY_MODE_STRICT = 1,
|
|
12
22
|
}
|
|
13
23
|
export type Repository_Policy = {
|
|
14
|
-
|
|
24
|
+
key:string;
|
|
15
25
|
description: string;
|
|
16
|
-
|
|
17
|
-
|
|
26
|
+
value_type: ValueType;
|
|
27
|
+
permission?: PermissionIndexType; // PermissionIndex like, must be geater than 10000
|
|
18
28
|
}
|
|
19
29
|
export type Repository_Policy_Data = {
|
|
20
|
-
|
|
30
|
+
key: string;
|
|
21
31
|
data: Repository_Value[];
|
|
22
|
-
value_type?:
|
|
32
|
+
value_type?: ValueType;
|
|
23
33
|
}
|
|
24
34
|
export type Repository_Value = {
|
|
25
35
|
address: string; // UID: address or objectid
|
|
26
36
|
value: Uint8Array;
|
|
27
37
|
}
|
|
28
38
|
|
|
29
|
-
export
|
|
30
|
-
|
|
39
|
+
export function repository(txb:TransactionBlock, permission:PermissionObject, description:string,
|
|
40
|
+
policy_mode: Repository_Policy_Mode, passport?:PassportObject) : RepositoryObject | boolean {
|
|
41
|
+
if (!IsValidObjects([permission])) return false;
|
|
42
|
+
if (!IsValidDesription(description)) return false;
|
|
31
43
|
|
|
32
|
-
export function repository(txb:TransactionBlock, permission:PermissionObject,
|
|
33
|
-
description:string, policy_mode: Repository_Policy_Mode, passport?:PassportObject) : RepositoryObject {
|
|
34
44
|
if (passport) {
|
|
35
45
|
return txb.moveCall({
|
|
36
46
|
target:PROTOCOL.RepositoryFn('new_with_passport') as FnCallType,
|
|
37
|
-
arguments:[passport, txb.pure(
|
|
47
|
+
arguments:[passport, txb.pure(description), txb.pure(policy_mode, BCS.U8), TXB_OBJECT(txb, permission)],
|
|
38
48
|
})
|
|
39
49
|
} else {
|
|
40
50
|
return txb.moveCall({
|
|
41
51
|
target:PROTOCOL.RepositoryFn('new') as FnCallType,
|
|
42
|
-
arguments:[txb.pure(
|
|
52
|
+
arguments:[txb.pure(description), txb.pure(policy_mode, BCS.U8), TXB_OBJECT(txb, permission)],
|
|
43
53
|
})
|
|
44
54
|
}
|
|
55
|
+
return true;
|
|
45
56
|
}
|
|
46
57
|
|
|
47
|
-
export function launch(txb:TransactionBlock, repository:RepositoryObject) : RepositoryAddress {
|
|
58
|
+
export function launch(txb:TransactionBlock, repository:RepositoryObject) : RepositoryAddress | boolean {
|
|
59
|
+
if (!IsValidObjects([repository])) return false;
|
|
48
60
|
return txb.moveCall({
|
|
49
61
|
target:PROTOCOL.RepositoryFn('create') as FnCallType,
|
|
50
|
-
arguments:[repository],
|
|
62
|
+
arguments:[TXB_OBJECT(txb, repository)],
|
|
51
63
|
})
|
|
52
64
|
}
|
|
53
|
-
export function destroy(txb:TransactionBlock, repository:RepositoryObject) {
|
|
54
|
-
return
|
|
65
|
+
export function destroy(txb:TransactionBlock, repository:RepositoryObject) : boolean {
|
|
66
|
+
if (!IsValidObjects([repository])) return false;
|
|
67
|
+
txb.moveCall({
|
|
55
68
|
target:PROTOCOL.RepositoryFn('destroy') as FnCallType,
|
|
56
|
-
arguments: [repository],
|
|
69
|
+
arguments: [TXB_OBJECT(txb, repository)],
|
|
57
70
|
})
|
|
71
|
+
return true
|
|
58
72
|
}
|
|
59
|
-
export function add_data(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, data:Repository_Policy_Data) {
|
|
73
|
+
export function add_data(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, data:Repository_Policy_Data) : boolean {
|
|
74
|
+
if (!IsValidObjects([repository, permission])) return false;
|
|
75
|
+
if (!IsValidKey(data.key)) return false;
|
|
76
|
+
let bValid = true;
|
|
77
|
+
data.data.forEach((value) => {
|
|
78
|
+
if(!IsValidValue(value.value) || !IsValidAddress(value.address)) {
|
|
79
|
+
bValid = false;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
if (!bValid) return false;
|
|
83
|
+
|
|
60
84
|
if (data?.value_type) {
|
|
61
85
|
data.data.forEach((d) => txb.moveCall({
|
|
62
86
|
target:PROTOCOL.RepositoryFn('add') as FnCallType,
|
|
63
|
-
arguments:[repository,
|
|
87
|
+
arguments:[TXB_OBJECT(txb, repository),
|
|
64
88
|
txb.pure(d.address, BCS.ADDRESS),
|
|
65
|
-
txb.pure(
|
|
89
|
+
txb.pure(data.key),
|
|
66
90
|
txb.pure(data.value_type, BCS.U8),
|
|
67
|
-
txb.pure(d.value, 'vector<u8>'),
|
|
68
|
-
permission,
|
|
91
|
+
txb.pure([...d.value], 'vector<u8>'),
|
|
92
|
+
TXB_OBJECT(txb, permission),
|
|
69
93
|
],
|
|
70
|
-
}))
|
|
94
|
+
}))
|
|
71
95
|
} else {
|
|
72
96
|
data.data.forEach((d) => txb.moveCall({
|
|
73
97
|
target:PROTOCOL.RepositoryFn('add_typed_data') as FnCallType,
|
|
74
|
-
arguments:[repository,
|
|
98
|
+
arguments:[TXB_OBJECT(txb, repository),
|
|
75
99
|
txb.pure(d.address, BCS.ADDRESS),
|
|
76
|
-
txb.pure(
|
|
77
|
-
txb.pure(d.value, 'vector<u8>'),
|
|
78
|
-
permission,
|
|
100
|
+
txb.pure(data.key),
|
|
101
|
+
txb.pure([...d.value], 'vector<u8>'),
|
|
102
|
+
TXB_OBJECT(txb, permission),
|
|
79
103
|
],
|
|
80
104
|
}))
|
|
81
105
|
}
|
|
106
|
+
return true;
|
|
82
107
|
}
|
|
83
108
|
|
|
84
|
-
export function remove(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, address:string,
|
|
109
|
+
export function remove(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject, address:string, key:string) : boolean {
|
|
110
|
+
if (!IsValidObjects([repository, permission])) return false;
|
|
111
|
+
if (!IsValidKey(key) || !IsValidAddress(address)) return false;
|
|
112
|
+
|
|
85
113
|
txb.moveCall({
|
|
86
114
|
target:PROTOCOL.RepositoryFn('remove') as FnCallType,
|
|
87
|
-
arguments:[repository,
|
|
115
|
+
arguments:[TXB_OBJECT(txb, repository),
|
|
88
116
|
txb.pure(address, BCS.ADDRESS),
|
|
89
|
-
txb.pure(
|
|
90
|
-
permission,
|
|
117
|
+
txb.pure(key),
|
|
118
|
+
TXB_OBJECT(txb, permission),
|
|
91
119
|
],
|
|
92
|
-
})
|
|
120
|
+
})
|
|
121
|
+
return true
|
|
93
122
|
}
|
|
94
123
|
// add or modify the old
|
|
95
|
-
export function repository_add_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
|
|
124
|
+
export function repository_add_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
|
|
125
|
+
policies:Repository_Policy[], passport?:PassportObject) : boolean {
|
|
126
|
+
if (!IsValidObjects([repository, permission])) return false;
|
|
127
|
+
if (!policies) return false;
|
|
128
|
+
|
|
129
|
+
let bValid = true;
|
|
130
|
+
policies.forEach((p) => {
|
|
131
|
+
if (!IsValidDesription(p.description) || !IsValidKey(p.key)) {
|
|
132
|
+
bValid = false
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
if (!bValid) return false;
|
|
136
|
+
|
|
96
137
|
policies.forEach((policy) => {
|
|
97
|
-
let permission_index = policy?.permission ? txb.pure(policy.permission
|
|
138
|
+
let permission_index = policy?.permission ? txb.pure(BCS_CONVERT.ser_option_u64(policy.permission)) : txb.pure([0], BCS.U8);
|
|
98
139
|
if (passport) {
|
|
99
140
|
txb.moveCall({
|
|
100
141
|
target:PROTOCOL.RepositoryFn('policy_add_with_passport') as FnCallType,
|
|
101
|
-
arguments:[passport, repository,
|
|
102
|
-
txb.pure(
|
|
103
|
-
txb.pure(
|
|
104
|
-
permission_index, txb.pure(policy.value_type, BCS.U8)
|
|
142
|
+
arguments:[passport, TXB_OBJECT(txb, repository),
|
|
143
|
+
txb.pure(policy.key),
|
|
144
|
+
txb.pure(policy.description),
|
|
145
|
+
permission_index, txb.pure(policy.value_type, BCS.U8),
|
|
146
|
+
TXB_OBJECT(txb, permission)]
|
|
105
147
|
})
|
|
106
148
|
} else {
|
|
107
149
|
txb.moveCall({
|
|
108
150
|
target:PROTOCOL.RepositoryFn('policy_add') as FnCallType,
|
|
109
|
-
arguments:[repository,
|
|
110
|
-
txb.pure(
|
|
111
|
-
txb.pure(
|
|
112
|
-
permission_index, txb.pure(policy.value_type, BCS.U8)
|
|
151
|
+
arguments:[TXB_OBJECT(txb, repository),
|
|
152
|
+
txb.pure(policy.key),
|
|
153
|
+
txb.pure(policy.description),
|
|
154
|
+
permission_index, txb.pure(policy.value_type, BCS.U8),
|
|
155
|
+
TXB_OBJECT(txb, permission)]
|
|
113
156
|
})
|
|
114
157
|
}
|
|
115
158
|
});
|
|
159
|
+
return true;
|
|
116
160
|
}
|
|
117
161
|
|
|
118
|
-
export function repository_remove_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
|
|
162
|
+
export function repository_remove_policies(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
|
|
163
|
+
policy_keys:string[], removeall?:boolean, passport?:PassportObject) : boolean {
|
|
164
|
+
if (!IsValidObjects([repository, permission])) return false;
|
|
165
|
+
if (!removeall && !policy_keys) return false;
|
|
166
|
+
if (policy_keys && !IsValidArray(policy_keys, IsValidKey)) return false;
|
|
167
|
+
|
|
119
168
|
if (passport) {
|
|
120
169
|
if (removeall) {
|
|
121
170
|
txb.moveCall({
|
|
122
171
|
target:PROTOCOL.RepositoryFn('policy_remove_all_with_passport') as FnCallType,
|
|
123
|
-
arguments:[passport, repository, permission]
|
|
172
|
+
arguments:[passport, TXB_OBJECT(txb, repository), TXB_OBJECT(txb, permission)]
|
|
124
173
|
})
|
|
125
174
|
} else {
|
|
126
|
-
|
|
175
|
+
array_unique(policy_keys).forEach((key) => {
|
|
127
176
|
txb.moveCall({
|
|
128
177
|
target:PROTOCOL.RepositoryFn('policy_remove_with_passport') as FnCallType,
|
|
129
|
-
arguments:[passport, repository, txb.pure(
|
|
178
|
+
arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(array_unique(key)), TXB_OBJECT(txb, permission)]
|
|
130
179
|
})
|
|
131
180
|
})
|
|
132
181
|
}
|
|
@@ -134,80 +183,107 @@ export function repository_remove_policies(txb:TransactionBlock, repository:Repo
|
|
|
134
183
|
if (removeall) {
|
|
135
184
|
txb.moveCall({
|
|
136
185
|
target:PROTOCOL.RepositoryFn('policy_remove_all') as FnCallType,
|
|
137
|
-
arguments:[repository, permission]
|
|
186
|
+
arguments:[TXB_OBJECT(txb, repository), TXB_OBJECT(txb, permission)]
|
|
138
187
|
})
|
|
139
188
|
} else {
|
|
140
|
-
|
|
189
|
+
policy_keys.forEach((key) => {
|
|
141
190
|
txb.moveCall({
|
|
142
191
|
target:PROTOCOL.RepositoryFn('policy_remove') as FnCallType,
|
|
143
|
-
arguments:[repository, txb.pure(
|
|
192
|
+
arguments:[TXB_OBJECT(txb, repository), txb.pure(key), TXB_OBJECT(txb, permission)]
|
|
144
193
|
})
|
|
145
194
|
})
|
|
146
195
|
}
|
|
147
196
|
}
|
|
197
|
+
return true;
|
|
148
198
|
}
|
|
149
199
|
// PermissionIndex.repository_description_set
|
|
150
|
-
export function repository_set_description(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
|
|
200
|
+
export function repository_set_description(txb:TransactionBlock, repository:RepositoryObject, permission:PermissionObject,
|
|
201
|
+
description:string, passport?:PassportObject) : boolean {
|
|
202
|
+
if (!IsValidObjects([repository, permission])) return false;
|
|
203
|
+
if (!IsValidDesription(description)) return false;
|
|
204
|
+
|
|
151
205
|
if (passport) {
|
|
152
206
|
txb.moveCall({
|
|
153
207
|
target:PROTOCOL.RepositoryFn('description_set_with_passport') as FnCallType,
|
|
154
|
-
arguments:[passport, repository, txb.pure(
|
|
208
|
+
arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(description), TXB_OBJECT(txb, permission)]
|
|
155
209
|
})
|
|
156
210
|
} else {
|
|
157
211
|
txb.moveCall({
|
|
158
212
|
target:PROTOCOL.RepositoryFn('description_set') as FnCallType,
|
|
159
|
-
arguments:[repository, txb.pure(
|
|
213
|
+
arguments:[TXB_OBJECT(txb, repository), txb.pure(description), TXB_OBJECT(txb, permission)]
|
|
160
214
|
})
|
|
161
215
|
}
|
|
216
|
+
return true
|
|
162
217
|
}
|
|
163
218
|
|
|
164
|
-
export function repository_set_policy_mode(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
|
|
219
|
+
export function repository_set_policy_mode(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
|
|
220
|
+
policy_mode:Repository_Policy_Mode, passport?:PassportObject) : boolean {
|
|
221
|
+
if (!IsValidObjects([repository, permission])) return false;
|
|
165
222
|
if (passport) {
|
|
166
223
|
txb.moveCall({
|
|
167
224
|
target:PROTOCOL.RepositoryFn('policy_mode_set_with_passport') as FnCallType,
|
|
168
|
-
arguments:[passport, repository, txb.pure(policy_mode), permission]
|
|
225
|
+
arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(policy_mode), TXB_OBJECT(txb, permission)]
|
|
169
226
|
})
|
|
170
227
|
} else {
|
|
171
228
|
txb.moveCall({
|
|
172
229
|
target:PROTOCOL.RepositoryFn('policy_mode_set') as FnCallType,
|
|
173
|
-
arguments:[repository, txb.pure(policy_mode), permission]
|
|
230
|
+
arguments:[TXB_OBJECT(txb, repository), txb.pure(policy_mode), TXB_OBJECT(txb, permission)]
|
|
174
231
|
})
|
|
175
|
-
}
|
|
232
|
+
}
|
|
233
|
+
return true
|
|
176
234
|
}
|
|
177
235
|
|
|
178
|
-
export function repository_set_policy_description(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
|
|
236
|
+
export function repository_set_policy_description(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
|
|
237
|
+
policy:string, description:string, passport?:PassportObject) : boolean {
|
|
238
|
+
if (!IsValidObjects([repository, permission])) return false;
|
|
239
|
+
if (!IsValidKey(policy) || !IsValidDesription(description)) return false;
|
|
240
|
+
|
|
179
241
|
if (passport) {
|
|
180
242
|
txb.moveCall({
|
|
181
|
-
target:PROTOCOL.RepositoryFn('
|
|
182
|
-
arguments:[passport, repository, txb.pure(
|
|
243
|
+
target:PROTOCOL.RepositoryFn('policy_description_set_with_passport') as FnCallType,
|
|
244
|
+
arguments:[passport, TXB_OBJECT(txb, repository), txb.pure(policy), txb.pure(description), TXB_OBJECT(txb, permission)]
|
|
183
245
|
})
|
|
184
246
|
} else {
|
|
185
247
|
txb.moveCall({
|
|
186
|
-
target:PROTOCOL.RepositoryFn('
|
|
187
|
-
arguments:[repository, txb.pure(
|
|
248
|
+
target:PROTOCOL.RepositoryFn('policy_description_set') as FnCallType,
|
|
249
|
+
arguments:[TXB_OBJECT(txb, repository), txb.pure(policy), txb.pure(description), TXB_OBJECT(txb, permission)]
|
|
188
250
|
})
|
|
189
251
|
}
|
|
252
|
+
return true;
|
|
190
253
|
}
|
|
191
254
|
|
|
192
|
-
export function repository_set_policy_permission(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
|
|
255
|
+
export function repository_set_policy_permission(txb:TransactionBlock, repository: RepositoryObject, permission:PermissionObject,
|
|
256
|
+
policy:string, permission_index?:number, passport?:PassportObject) : boolean {
|
|
257
|
+
if (!IsValidObjects([repository, permission])) return false;
|
|
258
|
+
if (!IsValidKey(policy)) return false;
|
|
259
|
+
|
|
260
|
+
let index = OptionNone(txb);
|
|
261
|
+
if (permission_index) {
|
|
262
|
+
if(!IsValidPermissionIndex(permission_index)) return false;
|
|
263
|
+
index = txb.pure(BCS_CONVERT.ser_option_u64(permission_index));
|
|
264
|
+
}
|
|
265
|
+
|
|
193
266
|
if (passport) {
|
|
194
267
|
txb.moveCall({
|
|
195
|
-
target:PROTOCOL.RepositoryFn('
|
|
196
|
-
arguments:[passport, repository,
|
|
268
|
+
target:PROTOCOL.RepositoryFn('policy_permission_set_with_passport') as FnCallType,
|
|
269
|
+
arguments:[passport, TXB_OBJECT(txb, repository), index, TXB_OBJECT(txb, permission)]
|
|
197
270
|
})
|
|
198
271
|
} else {
|
|
199
272
|
txb.moveCall({
|
|
200
|
-
target:PROTOCOL.RepositoryFn('
|
|
201
|
-
arguments:[repository,
|
|
273
|
+
target:PROTOCOL.RepositoryFn('policy_permission_set') as FnCallType,
|
|
274
|
+
arguments:[TXB_OBJECT(txb, repository), index, TXB_OBJECT(txb, permission)]
|
|
202
275
|
})
|
|
203
276
|
}
|
|
277
|
+
return true
|
|
204
278
|
}
|
|
205
279
|
|
|
206
280
|
export function change_permission(txb:TransactionBlock, repository:RepositoryObject, old_permission:PermissionObject, new_permission:PermissionObject) {
|
|
281
|
+
if (!IsValidObjects([repository, old_permission, new_permission])) return false;
|
|
207
282
|
txb.moveCall({
|
|
208
283
|
target:PROTOCOL.RepositoryFn('permission_set') as FnCallType,
|
|
209
|
-
arguments: [repository, old_permission, new_permission],
|
|
284
|
+
arguments: [TXB_OBJECT(txb, repository), TXB_OBJECT(txb, old_permission), TXB_OBJECT(txb, new_permission)],
|
|
210
285
|
typeArguments:[]
|
|
211
286
|
})
|
|
212
287
|
}
|
|
213
288
|
|
|
289
|
+
|