@mysten/kiosk 0.2.0 → 0.3.0
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/CHANGELOG.md +13 -2
- package/README.md +27 -9
- package/dist/bcs.d.ts +1 -32
- package/dist/constants.d.ts +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +136 -39
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +121 -38
- package/dist/index.mjs.map +1 -1
- package/dist/query/kiosk.d.ts +1 -1
- package/dist/query/transfer-policy.d.ts +1 -3
- package/dist/tx/kiosk.d.ts +6 -11
- package/dist/tx/transfer-policy.d.ts +8 -6
- package/dist/types/env.d.ts +13 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/kiosk.d.ts +52 -0
- package/dist/types/transfer-policy.d.ts +23 -0
- package/dist/utils.d.ts +14 -8
- package/package.json +2 -2
- package/src/bcs.ts +11 -40
- package/src/constants.ts +10 -0
- package/src/index.ts +2 -0
- package/src/query/kiosk.ts +1 -1
- package/src/query/transfer-policy.ts +8 -10
- package/src/tx/kiosk.ts +65 -28
- package/src/tx/transfer-policy.ts +38 -13
- package/src/types/env.ts +22 -0
- package/src/types/index.ts +21 -0
- package/src/types/kiosk.ts +66 -0
- package/src/types/transfer-policy.ts +33 -0
- package/src/utils.ts +39 -19
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
# @mysten/kiosk
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 968304368d: Support kiosk_lock_rule and environment support for rules package. Breaks `purchaseAndResolvePolicies` as it changes signature and return format.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [09d77325a9]
|
|
12
|
+
- @mysten/sui.js@0.35.1
|
|
13
|
+
|
|
3
14
|
## 0.2.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
|
6
17
|
|
|
7
18
|
- c322a230da: Fix fetchKiosk consistency/naming, include locked state in items
|
|
8
19
|
|
|
9
|
-
## 1.0
|
|
20
|
+
## 0.1.0
|
|
10
21
|
|
|
11
|
-
###
|
|
22
|
+
### Minor Changes
|
|
12
23
|
|
|
13
24
|
- 4ea96d909a: Kiosk SDK for managing, querying and interacting with Kiosk and TransferPolicy objects
|
|
14
25
|
|
package/README.md
CHANGED
|
@@ -53,10 +53,10 @@ const getKiosk = async () => {
|
|
|
53
53
|
</details>
|
|
54
54
|
|
|
55
55
|
<details>
|
|
56
|
-
<summary>Purchasing an item (currently supports royalty rule
|
|
56
|
+
<summary>Purchasing an item (currently supports royalty rule, kiosk_lock_rule, no rules, (combination works too))</summary>
|
|
57
57
|
|
|
58
58
|
```typescript
|
|
59
|
-
import {
|
|
59
|
+
import { queryTransferPolicy, purchaseAndResolvePolicies, place, testnetEnvironment } from '@mysten/kiosk';
|
|
60
60
|
import { Connection, JsonRpcProvider } from '@mysten/sui.js';
|
|
61
61
|
|
|
62
62
|
const provider = new JsonRpcProvider(
|
|
@@ -76,6 +76,9 @@ const item = {
|
|
|
76
76
|
price: "20000000000" // in MIST
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
+
const ownedKiosk = `0xMyKioskAddress`;
|
|
80
|
+
const ownedKioskCap = `0xMyKioskOwnerCap`;
|
|
81
|
+
|
|
79
82
|
const purchaseItem = async (item, kioskId) => {
|
|
80
83
|
|
|
81
84
|
// fetch the policy of the item (could be an array, if there's more than one transfer policy)
|
|
@@ -85,14 +88,25 @@ const purchaseItem = async (item, kioskId) => {
|
|
|
85
88
|
// initialize tx block.
|
|
86
89
|
const tx = new TransactionBlock();
|
|
87
90
|
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
const
|
|
91
|
+
// Both are required if you there is a `kiosk_lock_rule`.
|
|
92
|
+
// Optional otherwise. Function will throw an error if there's a kiosk_lock_rule and these are missing.
|
|
93
|
+
const extraParams = {
|
|
94
|
+
ownedKiosk,
|
|
95
|
+
ownedKioskCap
|
|
96
|
+
}
|
|
97
|
+
// Define the environment.
|
|
98
|
+
// To use a custom package address for rules, you could call:
|
|
99
|
+
// const environment = customEnvironment('<PackageAddress>');
|
|
100
|
+
const environment = testnetEnvironment;
|
|
91
101
|
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
102
|
+
// Extra params. Optional, but required if the user tries to resolve a `kiosk_lock_rule`.
|
|
103
|
+
// Purchases the item. Supports `kiosk_lock_rule`, `royalty_rule` (accepts combination too).
|
|
104
|
+
const result = purchaseAndResolvePolicies(tx, item.type, item.listing.price, kioskId, item.objectId, policy[0], environment, extraParams);
|
|
105
|
+
|
|
106
|
+
// result = {item: <the_purchased_item>, canTransfer: true/false // depending on whether there was a kiosk lock rule }
|
|
107
|
+
// if the item didn't have a kiosk_lock_rule, we need to do something with it.
|
|
108
|
+
// for e..g place it in our own kiosk. (demonstrated below)
|
|
109
|
+
if(result.canTransfer) place(tx, item.type, ownedKiosk, ownedKioskCap , result.item);
|
|
96
110
|
|
|
97
111
|
// ...finally, sign PTB & execute it.
|
|
98
112
|
|
|
@@ -158,12 +172,16 @@ import { TransactionBlock } from '@mysten/sui.js';
|
|
|
158
172
|
const withdraw = async () => {
|
|
159
173
|
const kiosk = 'SomeKioskId';
|
|
160
174
|
const kioskCap = 'KioskCapObjectId';
|
|
175
|
+
const address = '0xSomeAddressThatReceivesTheFunds';
|
|
161
176
|
const amount = '100000';
|
|
162
177
|
|
|
163
178
|
const tx = new TransactionBlock();
|
|
164
179
|
|
|
165
180
|
withdrawFromKiosk(tx, kiosk, kioskCap, amount);
|
|
166
181
|
|
|
182
|
+
// transfer the Coin to self or any other address.
|
|
183
|
+
tx.transferObjects([coin], tx.pure(address, 'address'));
|
|
184
|
+
|
|
167
185
|
// ... continue to sign and execute the transaction
|
|
168
186
|
// ...
|
|
169
187
|
};
|
package/dist/bcs.d.ts
CHANGED
|
@@ -1,33 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/**
|
|
3
|
-
* The Kiosk object fields (for BCS queries).
|
|
4
|
-
*/
|
|
5
|
-
export type Kiosk = {
|
|
6
|
-
id: string;
|
|
7
|
-
profits: string;
|
|
8
|
-
owner: string;
|
|
9
|
-
itemCount: number;
|
|
10
|
-
allowExtensions: boolean;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* PurchaseCap object fields (for BCS queries).
|
|
14
|
-
*/
|
|
15
|
-
export type PurchaseCap = {
|
|
16
|
-
id: string;
|
|
17
|
-
kioskId: string;
|
|
18
|
-
itemId: string;
|
|
19
|
-
minPrice: string;
|
|
20
|
-
};
|
|
21
|
-
/** Event emitted when a TransferPolicy is created. */
|
|
22
|
-
export type TransferPolicyCreated = {
|
|
23
|
-
id: string;
|
|
24
|
-
};
|
|
25
|
-
/** The `TransferPolicy` object */
|
|
26
|
-
export type TransferPolicy = {
|
|
27
|
-
id: string;
|
|
28
|
-
type: string;
|
|
29
|
-
balance: string;
|
|
30
|
-
rules: string[];
|
|
31
|
-
owner: ObjectOwner;
|
|
32
|
-
};
|
|
1
|
+
import { bcs } from '@mysten/sui.js';
|
|
33
2
|
export { bcs };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The Transer Policy Rules package address on testnet */
|
|
2
|
+
export declare const TESTNET_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
|
|
3
|
+
/** The transfer policy rules package address on mainnet */
|
|
4
|
+
export declare const MAINNET_RULES_PACKAGE_ADDRESS = "0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879";
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -20,12 +20,20 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
|
+
KIOSK_ITEM: () => KIOSK_ITEM,
|
|
24
|
+
KIOSK_LISTING: () => KIOSK_LISTING,
|
|
25
|
+
KIOSK_LOCK: () => KIOSK_LOCK,
|
|
26
|
+
KIOSK_LOCK_RULE: () => KIOSK_LOCK_RULE,
|
|
23
27
|
KIOSK_MODULE: () => KIOSK_MODULE,
|
|
24
28
|
KIOSK_OWNER_CAP: () => KIOSK_OWNER_CAP,
|
|
29
|
+
KIOSK_PURCHASE_CAP: () => KIOSK_PURCHASE_CAP,
|
|
25
30
|
KIOSK_TYPE: () => KIOSK_TYPE,
|
|
31
|
+
MAINNET_RULES_PACKAGE_ADDRESS: () => MAINNET_RULES_PACKAGE_ADDRESS,
|
|
32
|
+
ROYALTY_RULE: () => ROYALTY_RULE,
|
|
33
|
+
TESTNET_RULES_PACKAGE_ADDRESS: () => TESTNET_RULES_PACKAGE_ADDRESS,
|
|
26
34
|
TRANSFER_POLICY_CREATED_EVENT: () => TRANSFER_POLICY_CREATED_EVENT,
|
|
27
35
|
TRANSFER_POLICY_MODULE: () => TRANSFER_POLICY_MODULE,
|
|
28
|
-
|
|
36
|
+
TRANSFER_POLICY_TYPE: () => TRANSFER_POLICY_TYPE,
|
|
29
37
|
attachListingsAndPrices: () => attachListingsAndPrices,
|
|
30
38
|
attachLockedItems: () => attachLockedItems,
|
|
31
39
|
bcs: () => import_sui.bcs,
|
|
@@ -36,13 +44,16 @@ __export(src_exports, {
|
|
|
36
44
|
createKiosk: () => createKiosk,
|
|
37
45
|
createKioskAndShare: () => createKioskAndShare,
|
|
38
46
|
createTransferPolicy: () => createTransferPolicy,
|
|
47
|
+
customEnvironment: () => customEnvironment,
|
|
39
48
|
delist: () => delist,
|
|
40
49
|
extractKioskData: () => extractKioskData,
|
|
41
50
|
fetchKiosk: () => fetchKiosk,
|
|
42
51
|
getKioskObject: () => getKioskObject,
|
|
52
|
+
getRulePackageAddress: () => getRulePackageAddress,
|
|
43
53
|
getTypeWithoutPackageAddress: () => getTypeWithoutPackageAddress,
|
|
44
54
|
list: () => list,
|
|
45
55
|
lock: () => lock,
|
|
56
|
+
mainnetEnvironment: () => mainnetEnvironment,
|
|
46
57
|
objArg: () => objArg,
|
|
47
58
|
place: () => place,
|
|
48
59
|
placeAndList: () => placeAndList,
|
|
@@ -50,9 +61,12 @@ __export(src_exports, {
|
|
|
50
61
|
purchaseAndResolvePolicies: () => purchaseAndResolvePolicies,
|
|
51
62
|
queryTransferPolicy: () => queryTransferPolicy,
|
|
52
63
|
removeTransferPolicyRule: () => removeTransferPolicyRule,
|
|
64
|
+
resolveKioskLockRule: () => resolveKioskLockRule,
|
|
53
65
|
resolveRoyaltyRule: () => resolveRoyaltyRule,
|
|
54
66
|
returnValue: () => returnValue,
|
|
67
|
+
rulesPackageAddresses: () => rulesPackageAddresses,
|
|
55
68
|
take: () => take,
|
|
69
|
+
testnetEnvironment: () => testnetEnvironment,
|
|
56
70
|
withdrawFromKiosk: () => withdrawFromKiosk,
|
|
57
71
|
withdrawFromPolicy: () => withdrawFromPolicy
|
|
58
72
|
});
|
|
@@ -63,29 +77,65 @@ var import_sui2 = require("@mysten/sui.js");
|
|
|
63
77
|
|
|
64
78
|
// src/bcs.ts
|
|
65
79
|
var import_sui = require("@mysten/sui.js");
|
|
66
|
-
|
|
80
|
+
|
|
81
|
+
// src/types/kiosk.ts
|
|
82
|
+
var KIOSK_MODULE = "0x2::kiosk";
|
|
83
|
+
var KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;
|
|
84
|
+
var KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;
|
|
85
|
+
var KIOSK_ITEM = `${KIOSK_MODULE}::Item`;
|
|
86
|
+
var KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;
|
|
87
|
+
var KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;
|
|
88
|
+
var KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;
|
|
89
|
+
|
|
90
|
+
// src/types/transfer-policy.ts
|
|
91
|
+
var TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
|
|
92
|
+
var TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;
|
|
93
|
+
var TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;
|
|
94
|
+
var KIOSK_LOCK_RULE = "kiosk_lock_rule::Rule";
|
|
95
|
+
var ROYALTY_RULE = "royalty_rule::Rule";
|
|
96
|
+
|
|
97
|
+
// src/types/env.ts
|
|
98
|
+
var testnetEnvironment = { env: "testnet" };
|
|
99
|
+
var mainnetEnvironment = { env: "mainnet" };
|
|
100
|
+
var customEnvironment = (address) => ({
|
|
101
|
+
env: "custom",
|
|
102
|
+
address
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// src/bcs.ts
|
|
106
|
+
import_sui.bcs.registerStructType(KIOSK_TYPE, {
|
|
67
107
|
id: "address",
|
|
68
108
|
profits: "u64",
|
|
69
109
|
owner: "address",
|
|
70
110
|
itemCount: "u32",
|
|
71
111
|
allowExtensions: "bool"
|
|
72
112
|
});
|
|
73
|
-
import_sui.bcs.registerStructType(
|
|
113
|
+
import_sui.bcs.registerStructType(KIOSK_PURCHASE_CAP, {
|
|
74
114
|
id: "address",
|
|
75
115
|
kioskId: "address",
|
|
76
116
|
itemId: "address",
|
|
77
117
|
minPrice: "u64"
|
|
78
118
|
});
|
|
79
|
-
import_sui.bcs.registerStructType(
|
|
119
|
+
import_sui.bcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {
|
|
80
120
|
id: "address"
|
|
81
121
|
});
|
|
82
|
-
import_sui.bcs.registerStructType(
|
|
122
|
+
import_sui.bcs.registerStructType(TRANSFER_POLICY_TYPE, {
|
|
83
123
|
id: "address",
|
|
84
124
|
balance: "u64",
|
|
85
125
|
rules: ["vector", "string"]
|
|
86
126
|
});
|
|
87
127
|
|
|
128
|
+
// src/constants.ts
|
|
129
|
+
var TESTNET_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
|
|
130
|
+
var MAINNET_RULES_PACKAGE_ADDRESS = "0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879";
|
|
131
|
+
|
|
88
132
|
// src/utils.ts
|
|
133
|
+
var rulesPackageAddresses = {
|
|
134
|
+
mainnet: MAINNET_RULES_PACKAGE_ADDRESS,
|
|
135
|
+
testnet: TESTNET_RULES_PACKAGE_ADDRESS,
|
|
136
|
+
devnet: "",
|
|
137
|
+
custom: null
|
|
138
|
+
};
|
|
89
139
|
function objArg(tx, arg) {
|
|
90
140
|
if (typeof arg === "string") {
|
|
91
141
|
return tx.object(arg);
|
|
@@ -109,7 +159,7 @@ async function getKioskObject(provider, id) {
|
|
|
109
159
|
if (!queryRes.data.bcs || !("bcsBytes" in queryRes.data.bcs)) {
|
|
110
160
|
throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);
|
|
111
161
|
}
|
|
112
|
-
return import_sui.bcs.de(
|
|
162
|
+
return import_sui.bcs.de(KIOSK_TYPE, queryRes.data.bcs.bcsBytes, "base64");
|
|
113
163
|
}
|
|
114
164
|
function extractKioskData(data, listings, lockedItemIds) {
|
|
115
165
|
return data.reduce(
|
|
@@ -141,10 +191,10 @@ function extractKioskData(data, listings, lockedItemIds) {
|
|
|
141
191
|
{ items: [], itemIds: [], listingIds: [], extensions: [] }
|
|
142
192
|
);
|
|
143
193
|
}
|
|
144
|
-
|
|
194
|
+
function getTypeWithoutPackageAddress(type) {
|
|
145
195
|
return type.split("::").slice(-2).join("::");
|
|
146
|
-
}
|
|
147
|
-
|
|
196
|
+
}
|
|
197
|
+
function attachListingsAndPrices(kioskData, listings, listingObjects) {
|
|
148
198
|
const itemListings = listings.reduce(
|
|
149
199
|
(acc, item, idx) => {
|
|
150
200
|
acc[item.objectId] = { ...item };
|
|
@@ -161,8 +211,8 @@ var attachListingsAndPrices = (kioskData, listings, listingObjects) => {
|
|
|
161
211
|
kioskData.items.map((item) => {
|
|
162
212
|
item.listing = itemListings[item.objectId] || void 0;
|
|
163
213
|
});
|
|
164
|
-
}
|
|
165
|
-
|
|
214
|
+
}
|
|
215
|
+
function attachLockedItems(kioskData, lockedItemIds) {
|
|
166
216
|
const lockedStatuses = lockedItemIds.reduce(
|
|
167
217
|
(acc, item) => {
|
|
168
218
|
acc[item] = true;
|
|
@@ -173,11 +223,17 @@ var attachLockedItems = (kioskData, lockedItemIds) => {
|
|
|
173
223
|
kioskData.items.map((item) => {
|
|
174
224
|
item.isLocked = lockedStatuses[item.objectId] || false;
|
|
175
225
|
});
|
|
176
|
-
}
|
|
226
|
+
}
|
|
227
|
+
function getRulePackageAddress(environment) {
|
|
228
|
+
if (environment.env === "custom") {
|
|
229
|
+
if (!environment.address)
|
|
230
|
+
throw new Error("Please supply the custom package address for rules.");
|
|
231
|
+
return environment.address;
|
|
232
|
+
}
|
|
233
|
+
return rulesPackageAddresses[environment.env];
|
|
234
|
+
}
|
|
177
235
|
|
|
178
236
|
// src/tx/transfer-policy.ts
|
|
179
|
-
var TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
|
|
180
|
-
var TRANSFER_POLICY_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
|
|
181
237
|
function createTransferPolicy(tx, itemType, publisher) {
|
|
182
238
|
let [transferPolicy, transferPolicyCap] = tx.moveCall({
|
|
183
239
|
target: `${TRANSFER_POLICY_MODULE}::new`,
|
|
@@ -192,7 +248,7 @@ function createTransferPolicy(tx, itemType, publisher) {
|
|
|
192
248
|
return transferPolicyCap;
|
|
193
249
|
}
|
|
194
250
|
function withdrawFromPolicy(tx, itemType, policy, policyCap, amount) {
|
|
195
|
-
let amountArg = amount !== null ? tx.pure(amount, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
|
|
251
|
+
let amountArg = amount !== null ? tx.pure({ Some: amount }, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
|
|
196
252
|
let [profits] = tx.moveCall({
|
|
197
253
|
target: `${TRANSFER_POLICY_MODULE}::withdraw`,
|
|
198
254
|
typeArguments: [itemType],
|
|
@@ -214,25 +270,30 @@ function removeTransferPolicyRule(tx, itemType, ruleType, configType, policy, po
|
|
|
214
270
|
arguments: [objArg(tx, policy), policyCap]
|
|
215
271
|
});
|
|
216
272
|
}
|
|
217
|
-
function resolveRoyaltyRule(tx, itemType, price, policyId, transferRequest) {
|
|
273
|
+
function resolveRoyaltyRule(tx, itemType, price, policyId, transferRequest, environment) {
|
|
218
274
|
const policyObj = objArg(tx, policyId);
|
|
219
275
|
const [amount] = tx.moveCall({
|
|
220
|
-
target: `${
|
|
276
|
+
target: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,
|
|
221
277
|
typeArguments: [itemType],
|
|
222
278
|
arguments: [policyObj, objArg(tx, price)]
|
|
223
279
|
});
|
|
224
280
|
const feeCoin = tx.splitCoins(tx.gas, [amount]);
|
|
225
281
|
tx.moveCall({
|
|
226
|
-
target: `${
|
|
282
|
+
target: `${getRulePackageAddress(environment)}::royalty_rule::pay`,
|
|
227
283
|
typeArguments: [itemType],
|
|
228
284
|
arguments: [policyObj, transferRequest, feeCoin]
|
|
229
285
|
});
|
|
230
286
|
}
|
|
287
|
+
function resolveKioskLockRule(tx, itemType, item, kiosk, kioskCap, policyId, transferRequest, environment) {
|
|
288
|
+
lock(tx, itemType, kiosk, kioskCap, policyId, item);
|
|
289
|
+
tx.moveCall({
|
|
290
|
+
target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,
|
|
291
|
+
typeArguments: [itemType],
|
|
292
|
+
arguments: [transferRequest, objArg(tx, kiosk)]
|
|
293
|
+
});
|
|
294
|
+
}
|
|
231
295
|
|
|
232
296
|
// src/tx/kiosk.ts
|
|
233
|
-
var KIOSK_MODULE = "0x2::kiosk";
|
|
234
|
-
var KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;
|
|
235
|
-
var KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;
|
|
236
297
|
function createKiosk(tx) {
|
|
237
298
|
let [kiosk, kioskOwnerCap] = tx.moveCall({
|
|
238
299
|
target: `${KIOSK_MODULE}::new`
|
|
@@ -329,7 +390,12 @@ function purchase(tx, itemType, kiosk, itemId, payment) {
|
|
|
329
390
|
return [item, transferRequest];
|
|
330
391
|
}
|
|
331
392
|
function withdrawFromKiosk(tx, kiosk, kioskCap, amount) {
|
|
332
|
-
let amountArg = amount !== null ? tx.pure(
|
|
393
|
+
let amountArg = amount !== null ? tx.pure(
|
|
394
|
+
{
|
|
395
|
+
Some: amount
|
|
396
|
+
},
|
|
397
|
+
"Option<u64>"
|
|
398
|
+
) : tx.pure({ None: true }, "Option<u64>");
|
|
333
399
|
let [coin] = tx.moveCall({
|
|
334
400
|
target: `${KIOSK_MODULE}::withdraw`,
|
|
335
401
|
arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg]
|
|
@@ -379,27 +445,46 @@ function returnValue(tx, itemType, kiosk, item, promise) {
|
|
|
379
445
|
arguments: [objArg(tx, kiosk), item, promise]
|
|
380
446
|
});
|
|
381
447
|
}
|
|
382
|
-
function purchaseAndResolvePolicies(tx, itemType,
|
|
383
|
-
if (
|
|
384
|
-
|
|
385
|
-
const coin = tx.splitCoins(tx.gas, [tx.pure(
|
|
448
|
+
function purchaseAndResolvePolicies(tx, itemType, price, kiosk, itemId, policy, environment, extraParams) {
|
|
449
|
+
if (price === void 0 || typeof price !== "string")
|
|
450
|
+
throw new Error(`Price of the listing is not supplied.`);
|
|
451
|
+
const coin = tx.splitCoins(tx.gas, [tx.pure(price, "u64")]);
|
|
386
452
|
const [purchasedItem, transferRequest] = purchase(
|
|
387
453
|
tx,
|
|
388
454
|
itemType,
|
|
389
|
-
|
|
455
|
+
kiosk,
|
|
390
456
|
itemId,
|
|
391
457
|
coin
|
|
392
458
|
);
|
|
459
|
+
let hasKioskLockRule = false;
|
|
393
460
|
for (let rule of policy.rules) {
|
|
394
461
|
const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);
|
|
395
462
|
switch (ruleWithoutAddr) {
|
|
396
|
-
case
|
|
463
|
+
case ROYALTY_RULE:
|
|
397
464
|
resolveRoyaltyRule(
|
|
398
465
|
tx,
|
|
399
466
|
itemType,
|
|
400
|
-
|
|
467
|
+
price,
|
|
401
468
|
policy.id,
|
|
402
|
-
transferRequest
|
|
469
|
+
transferRequest,
|
|
470
|
+
environment
|
|
471
|
+
);
|
|
472
|
+
break;
|
|
473
|
+
case KIOSK_LOCK_RULE:
|
|
474
|
+
if (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)
|
|
475
|
+
throw new Error(
|
|
476
|
+
`This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`
|
|
477
|
+
);
|
|
478
|
+
hasKioskLockRule = true;
|
|
479
|
+
resolveKioskLockRule(
|
|
480
|
+
tx,
|
|
481
|
+
itemType,
|
|
482
|
+
purchasedItem,
|
|
483
|
+
extraParams.ownedKiosk,
|
|
484
|
+
extraParams.ownedKioskCap,
|
|
485
|
+
policy.id,
|
|
486
|
+
transferRequest,
|
|
487
|
+
environment
|
|
403
488
|
);
|
|
404
489
|
break;
|
|
405
490
|
default:
|
|
@@ -407,7 +492,10 @@ function purchaseAndResolvePolicies(tx, itemType, listing, kioskId, itemId, poli
|
|
|
407
492
|
}
|
|
408
493
|
}
|
|
409
494
|
confirmRequest(tx, itemType, policy.id, transferRequest);
|
|
410
|
-
return
|
|
495
|
+
return {
|
|
496
|
+
item: purchasedItem,
|
|
497
|
+
canTransfer: !hasKioskLockRule
|
|
498
|
+
};
|
|
411
499
|
}
|
|
412
500
|
|
|
413
501
|
// src/query/kiosk.ts
|
|
@@ -440,7 +528,6 @@ async function fetchKiosk(provider, kioskId, pagination, options) {
|
|
|
440
528
|
}
|
|
441
529
|
|
|
442
530
|
// src/query/transfer-policy.ts
|
|
443
|
-
var TRANSFER_POLICY_CREATED_EVENT = `0x2::transfer_policy::TransferPolicyCreated`;
|
|
444
531
|
async function queryTransferPolicy(provider, type) {
|
|
445
532
|
const { data } = await provider.queryEvents({
|
|
446
533
|
query: {
|
|
@@ -458,14 +545,10 @@ async function queryTransferPolicy(provider, type) {
|
|
|
458
545
|
`Invalid policy: ${policy?.objectId}, expected object, got package`
|
|
459
546
|
);
|
|
460
547
|
}
|
|
461
|
-
let parsed = import_sui.bcs.de(
|
|
462
|
-
"0x2::transfer_policy::TransferPolicy",
|
|
463
|
-
policy.bcs.bcsBytes,
|
|
464
|
-
"base64"
|
|
465
|
-
);
|
|
548
|
+
let parsed = import_sui.bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, "base64");
|
|
466
549
|
return {
|
|
467
550
|
id: policy?.objectId,
|
|
468
|
-
type:
|
|
551
|
+
type: `${TRANSFER_POLICY_TYPE}<${type}>`,
|
|
469
552
|
owner: policy?.owner,
|
|
470
553
|
rules: parsed.rules,
|
|
471
554
|
balance: parsed.balance
|
|
@@ -474,12 +557,20 @@ async function queryTransferPolicy(provider, type) {
|
|
|
474
557
|
}
|
|
475
558
|
// Annotate the CommonJS export names for ESM import in node:
|
|
476
559
|
0 && (module.exports = {
|
|
560
|
+
KIOSK_ITEM,
|
|
561
|
+
KIOSK_LISTING,
|
|
562
|
+
KIOSK_LOCK,
|
|
563
|
+
KIOSK_LOCK_RULE,
|
|
477
564
|
KIOSK_MODULE,
|
|
478
565
|
KIOSK_OWNER_CAP,
|
|
566
|
+
KIOSK_PURCHASE_CAP,
|
|
479
567
|
KIOSK_TYPE,
|
|
568
|
+
MAINNET_RULES_PACKAGE_ADDRESS,
|
|
569
|
+
ROYALTY_RULE,
|
|
570
|
+
TESTNET_RULES_PACKAGE_ADDRESS,
|
|
480
571
|
TRANSFER_POLICY_CREATED_EVENT,
|
|
481
572
|
TRANSFER_POLICY_MODULE,
|
|
482
|
-
|
|
573
|
+
TRANSFER_POLICY_TYPE,
|
|
483
574
|
attachListingsAndPrices,
|
|
484
575
|
attachLockedItems,
|
|
485
576
|
bcs,
|
|
@@ -490,13 +581,16 @@ async function queryTransferPolicy(provider, type) {
|
|
|
490
581
|
createKiosk,
|
|
491
582
|
createKioskAndShare,
|
|
492
583
|
createTransferPolicy,
|
|
584
|
+
customEnvironment,
|
|
493
585
|
delist,
|
|
494
586
|
extractKioskData,
|
|
495
587
|
fetchKiosk,
|
|
496
588
|
getKioskObject,
|
|
589
|
+
getRulePackageAddress,
|
|
497
590
|
getTypeWithoutPackageAddress,
|
|
498
591
|
list,
|
|
499
592
|
lock,
|
|
593
|
+
mainnetEnvironment,
|
|
500
594
|
objArg,
|
|
501
595
|
place,
|
|
502
596
|
placeAndList,
|
|
@@ -504,9 +598,12 @@ async function queryTransferPolicy(provider, type) {
|
|
|
504
598
|
purchaseAndResolvePolicies,
|
|
505
599
|
queryTransferPolicy,
|
|
506
600
|
removeTransferPolicyRule,
|
|
601
|
+
resolveKioskLockRule,
|
|
507
602
|
resolveRoyaltyRule,
|
|
508
603
|
returnValue,
|
|
604
|
+
rulesPackageAddresses,
|
|
509
605
|
take,
|
|
606
|
+
testnetEnvironment,
|
|
510
607
|
withdrawFromKiosk,
|
|
511
608
|
withdrawFromPolicy
|
|
512
609
|
});
|