@mysten/kiosk 0.2.0 → 0.3.1
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 +26 -2
- package/README.md +31 -19
- 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 +192 -45
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +178 -44
- package/dist/index.mjs.map +1 -1
- package/dist/query/kiosk.d.ts +10 -52
- 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 +113 -0
- package/dist/types/transfer-policy.d.ts +23 -0
- package/dist/utils.d.ts +32 -10
- 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 +72 -61
- package/src/query/transfer-policy.ts +8 -10
- package/src/tx/kiosk.ts +65 -28
- package/src/tx/transfer-policy.ts +40 -14
- package/src/types/env.ts +22 -0
- package/src/types/index.ts +21 -0
- package/src/types/kiosk.ts +139 -0
- package/src/types/transfer-policy.ts +33 -0
- package/src/utils.ts +74 -20
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,38 @@
|
|
|
1
1
|
# @mysten/kiosk
|
|
2
2
|
|
|
3
|
+
## 0.3.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 6a2a42d779: Add `getOwnedKiosks` query to easily get owned kiosks and their ownerCaps for an address
|
|
8
|
+
- abf6ad381e: Refactor the fetchKiosk function to return all content instead of paginating, to prevent missing data
|
|
9
|
+
- d72fdb5a5c: Fix on createTransferPolicy method. Updated type arguments for public_share_object command.
|
|
10
|
+
- Updated dependencies [3ea9adb71a]
|
|
11
|
+
- Updated dependencies [1cfb1c9da3]
|
|
12
|
+
- Updated dependencies [1cfb1c9da3]
|
|
13
|
+
- Updated dependencies [fb3bb9118a]
|
|
14
|
+
- @mysten/sui.js@0.36.0
|
|
15
|
+
|
|
16
|
+
## 0.3.0
|
|
17
|
+
|
|
18
|
+
### Minor Changes
|
|
19
|
+
|
|
20
|
+
- 968304368d: Support kiosk_lock_rule and environment support for rules package. Breaks `purchaseAndResolvePolicies` as it changes signature and return format.
|
|
21
|
+
|
|
22
|
+
### Patch Changes
|
|
23
|
+
|
|
24
|
+
- Updated dependencies [09d77325a9]
|
|
25
|
+
- @mysten/sui.js@0.35.1
|
|
26
|
+
|
|
3
27
|
## 0.2.0
|
|
4
28
|
|
|
5
29
|
### Minor Changes
|
|
6
30
|
|
|
7
31
|
- c322a230da: Fix fetchKiosk consistency/naming, include locked state in items
|
|
8
32
|
|
|
9
|
-
## 1.0
|
|
33
|
+
## 0.1.0
|
|
10
34
|
|
|
11
|
-
###
|
|
35
|
+
### Minor Changes
|
|
12
36
|
|
|
13
37
|
- 4ea96d909a: Kiosk SDK for managing, querying and interacting with Kiosk and TransferPolicy objects
|
|
14
38
|
|
package/README.md
CHANGED
|
@@ -33,30 +33,24 @@ const provider = new JsonRpcProvider(
|
|
|
33
33
|
const getKiosk = async () => {
|
|
34
34
|
const kioskAddress = `0xSomeKioskAddress`;
|
|
35
35
|
|
|
36
|
-
const {
|
|
37
|
-
data: res,
|
|
38
|
-
nextCursor,
|
|
39
|
-
hasNextPage,
|
|
40
|
-
} = await fetchKiosk(
|
|
36
|
+
const { data } = await fetchKiosk(
|
|
41
37
|
provider,
|
|
42
38
|
kioskAddress,
|
|
43
|
-
{
|
|
39
|
+
{}, // empty pagination, currently disabled.
|
|
44
40
|
{ withListingPrices: true, withKioskFields: true },
|
|
45
|
-
);
|
|
41
|
+
);
|
|
46
42
|
|
|
47
|
-
console.log(
|
|
48
|
-
console.log(nextCursor); // null
|
|
49
|
-
console.log(hasNextPage); // false
|
|
43
|
+
console.log(data); // { items: [], itemIds: [], listingIds: [], kiosk: {...} }
|
|
50
44
|
};
|
|
51
45
|
```
|
|
52
46
|
|
|
53
47
|
</details>
|
|
54
48
|
|
|
55
49
|
<details>
|
|
56
|
-
<summary>Purchasing an item (currently supports royalty rule
|
|
50
|
+
<summary>Purchasing an item (currently supports royalty rule, kiosk_lock_rule, no rules, (combination works too))</summary>
|
|
57
51
|
|
|
58
52
|
```typescript
|
|
59
|
-
import {
|
|
53
|
+
import { queryTransferPolicy, purchaseAndResolvePolicies, place, testnetEnvironment } from '@mysten/kiosk';
|
|
60
54
|
import { Connection, JsonRpcProvider } from '@mysten/sui.js';
|
|
61
55
|
|
|
62
56
|
const provider = new JsonRpcProvider(
|
|
@@ -76,6 +70,9 @@ const item = {
|
|
|
76
70
|
price: "20000000000" // in MIST
|
|
77
71
|
}
|
|
78
72
|
}
|
|
73
|
+
const ownedKiosk = `0xMyKioskAddress`;
|
|
74
|
+
const ownedKioskCap = `0xMyKioskOwnerCap`;
|
|
75
|
+
|
|
79
76
|
const purchaseItem = async (item, kioskId) => {
|
|
80
77
|
|
|
81
78
|
// fetch the policy of the item (could be an array, if there's more than one transfer policy)
|
|
@@ -85,14 +82,25 @@ const purchaseItem = async (item, kioskId) => {
|
|
|
85
82
|
// initialize tx block.
|
|
86
83
|
const tx = new TransactionBlock();
|
|
87
84
|
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
const
|
|
85
|
+
// Both are required if you there is a `kiosk_lock_rule`.
|
|
86
|
+
// Optional otherwise. Function will throw an error if there's a kiosk_lock_rule and these are missing.
|
|
87
|
+
const extraParams = {
|
|
88
|
+
ownedKiosk,
|
|
89
|
+
ownedKioskCap
|
|
90
|
+
}
|
|
91
|
+
// Define the environment.
|
|
92
|
+
// To use a custom package address for rules, you could call:
|
|
93
|
+
// const environment = customEnvironment('<PackageAddress>');
|
|
94
|
+
const environment = testnetEnvironment;
|
|
91
95
|
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
96
|
+
// Extra params. Optional, but required if the user tries to resolve a `kiosk_lock_rule`.
|
|
97
|
+
// Purchases the item. Supports `kiosk_lock_rule`, `royalty_rule` (accepts combination too).
|
|
98
|
+
const result = purchaseAndResolvePolicies(tx, item.type, item.listing.price, kioskId, item.objectId, policy[0], environment, extraParams);
|
|
99
|
+
|
|
100
|
+
// result = {item: <the_purchased_item>, canTransfer: true/false // depending on whether there was a kiosk lock rule }
|
|
101
|
+
// if the item didn't have a kiosk_lock_rule, we need to do something with it.
|
|
102
|
+
// for e..g place it in our own kiosk. (demonstrated below)
|
|
103
|
+
if(result.canTransfer) place(tx, item.type, ownedKiosk, ownedKioskCap , result.item);
|
|
96
104
|
|
|
97
105
|
// ...finally, sign PTB & execute it.
|
|
98
106
|
|
|
@@ -158,12 +166,16 @@ import { TransactionBlock } from '@mysten/sui.js';
|
|
|
158
166
|
const withdraw = async () => {
|
|
159
167
|
const kiosk = 'SomeKioskId';
|
|
160
168
|
const kioskCap = 'KioskCapObjectId';
|
|
169
|
+
const address = '0xSomeAddressThatReceivesTheFunds';
|
|
161
170
|
const amount = '100000';
|
|
162
171
|
|
|
163
172
|
const tx = new TransactionBlock();
|
|
164
173
|
|
|
165
174
|
withdrawFromKiosk(tx, kiosk, kioskCap, amount);
|
|
166
175
|
|
|
176
|
+
// transfer the Coin to self or any other address.
|
|
177
|
+
tx.transferObjects([coin], tx.pure(address, 'address'));
|
|
178
|
+
|
|
167
179
|
// ... continue to sign and execute the transaction
|
|
168
180
|
// ...
|
|
169
181
|
};
|
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,18 @@ __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,
|
|
51
|
+
getAllDynamicFields: () => getAllDynamicFields,
|
|
42
52
|
getKioskObject: () => getKioskObject,
|
|
53
|
+
getOwnedKiosks: () => getOwnedKiosks,
|
|
54
|
+
getRulePackageAddress: () => getRulePackageAddress,
|
|
43
55
|
getTypeWithoutPackageAddress: () => getTypeWithoutPackageAddress,
|
|
44
56
|
list: () => list,
|
|
45
57
|
lock: () => lock,
|
|
58
|
+
mainnetEnvironment: () => mainnetEnvironment,
|
|
46
59
|
objArg: () => objArg,
|
|
47
60
|
place: () => place,
|
|
48
61
|
placeAndList: () => placeAndList,
|
|
@@ -50,9 +63,12 @@ __export(src_exports, {
|
|
|
50
63
|
purchaseAndResolvePolicies: () => purchaseAndResolvePolicies,
|
|
51
64
|
queryTransferPolicy: () => queryTransferPolicy,
|
|
52
65
|
removeTransferPolicyRule: () => removeTransferPolicyRule,
|
|
66
|
+
resolveKioskLockRule: () => resolveKioskLockRule,
|
|
53
67
|
resolveRoyaltyRule: () => resolveRoyaltyRule,
|
|
54
68
|
returnValue: () => returnValue,
|
|
69
|
+
rulesPackageAddresses: () => rulesPackageAddresses,
|
|
55
70
|
take: () => take,
|
|
71
|
+
testnetEnvironment: () => testnetEnvironment,
|
|
56
72
|
withdrawFromKiosk: () => withdrawFromKiosk,
|
|
57
73
|
withdrawFromPolicy: () => withdrawFromPolicy
|
|
58
74
|
});
|
|
@@ -63,29 +79,65 @@ var import_sui2 = require("@mysten/sui.js");
|
|
|
63
79
|
|
|
64
80
|
// src/bcs.ts
|
|
65
81
|
var import_sui = require("@mysten/sui.js");
|
|
66
|
-
|
|
82
|
+
|
|
83
|
+
// src/types/kiosk.ts
|
|
84
|
+
var KIOSK_MODULE = "0x2::kiosk";
|
|
85
|
+
var KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;
|
|
86
|
+
var KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;
|
|
87
|
+
var KIOSK_ITEM = `${KIOSK_MODULE}::Item`;
|
|
88
|
+
var KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;
|
|
89
|
+
var KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;
|
|
90
|
+
var KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;
|
|
91
|
+
|
|
92
|
+
// src/types/transfer-policy.ts
|
|
93
|
+
var TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
|
|
94
|
+
var TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;
|
|
95
|
+
var TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;
|
|
96
|
+
var KIOSK_LOCK_RULE = "kiosk_lock_rule::Rule";
|
|
97
|
+
var ROYALTY_RULE = "royalty_rule::Rule";
|
|
98
|
+
|
|
99
|
+
// src/types/env.ts
|
|
100
|
+
var testnetEnvironment = { env: "testnet" };
|
|
101
|
+
var mainnetEnvironment = { env: "mainnet" };
|
|
102
|
+
var customEnvironment = (address) => ({
|
|
103
|
+
env: "custom",
|
|
104
|
+
address
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// src/bcs.ts
|
|
108
|
+
import_sui.bcs.registerStructType(KIOSK_TYPE, {
|
|
67
109
|
id: "address",
|
|
68
110
|
profits: "u64",
|
|
69
111
|
owner: "address",
|
|
70
112
|
itemCount: "u32",
|
|
71
113
|
allowExtensions: "bool"
|
|
72
114
|
});
|
|
73
|
-
import_sui.bcs.registerStructType(
|
|
115
|
+
import_sui.bcs.registerStructType(KIOSK_PURCHASE_CAP, {
|
|
74
116
|
id: "address",
|
|
75
117
|
kioskId: "address",
|
|
76
118
|
itemId: "address",
|
|
77
119
|
minPrice: "u64"
|
|
78
120
|
});
|
|
79
|
-
import_sui.bcs.registerStructType(
|
|
121
|
+
import_sui.bcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {
|
|
80
122
|
id: "address"
|
|
81
123
|
});
|
|
82
|
-
import_sui.bcs.registerStructType(
|
|
124
|
+
import_sui.bcs.registerStructType(TRANSFER_POLICY_TYPE, {
|
|
83
125
|
id: "address",
|
|
84
126
|
balance: "u64",
|
|
85
127
|
rules: ["vector", "string"]
|
|
86
128
|
});
|
|
87
129
|
|
|
130
|
+
// src/constants.ts
|
|
131
|
+
var TESTNET_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
|
|
132
|
+
var MAINNET_RULES_PACKAGE_ADDRESS = "0x434b5bd8f6a7b05fede0ff46c6e511d71ea326ed38056e3bcd681d2d7c2a7879";
|
|
133
|
+
|
|
88
134
|
// src/utils.ts
|
|
135
|
+
var rulesPackageAddresses = {
|
|
136
|
+
mainnet: MAINNET_RULES_PACKAGE_ADDRESS,
|
|
137
|
+
testnet: TESTNET_RULES_PACKAGE_ADDRESS,
|
|
138
|
+
devnet: "",
|
|
139
|
+
custom: null
|
|
140
|
+
};
|
|
89
141
|
function objArg(tx, arg) {
|
|
90
142
|
if (typeof arg === "string") {
|
|
91
143
|
return tx.object(arg);
|
|
@@ -109,7 +161,7 @@ async function getKioskObject(provider, id) {
|
|
|
109
161
|
if (!queryRes.data.bcs || !("bcsBytes" in queryRes.data.bcs)) {
|
|
110
162
|
throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);
|
|
111
163
|
}
|
|
112
|
-
return import_sui.bcs.de(
|
|
164
|
+
return import_sui.bcs.de(KIOSK_TYPE, queryRes.data.bcs.bcsBytes, "base64");
|
|
113
165
|
}
|
|
114
166
|
function extractKioskData(data, listings, lockedItemIds) {
|
|
115
167
|
return data.reduce(
|
|
@@ -141,10 +193,10 @@ function extractKioskData(data, listings, lockedItemIds) {
|
|
|
141
193
|
{ items: [], itemIds: [], listingIds: [], extensions: [] }
|
|
142
194
|
);
|
|
143
195
|
}
|
|
144
|
-
|
|
196
|
+
function getTypeWithoutPackageAddress(type) {
|
|
145
197
|
return type.split("::").slice(-2).join("::");
|
|
146
|
-
}
|
|
147
|
-
|
|
198
|
+
}
|
|
199
|
+
function attachListingsAndPrices(kioskData, listings, listingObjects) {
|
|
148
200
|
const itemListings = listings.reduce(
|
|
149
201
|
(acc, item, idx) => {
|
|
150
202
|
acc[item.objectId] = { ...item };
|
|
@@ -161,8 +213,8 @@ var attachListingsAndPrices = (kioskData, listings, listingObjects) => {
|
|
|
161
213
|
kioskData.items.map((item) => {
|
|
162
214
|
item.listing = itemListings[item.objectId] || void 0;
|
|
163
215
|
});
|
|
164
|
-
}
|
|
165
|
-
|
|
216
|
+
}
|
|
217
|
+
function attachLockedItems(kioskData, lockedItemIds) {
|
|
166
218
|
const lockedStatuses = lockedItemIds.reduce(
|
|
167
219
|
(acc, item) => {
|
|
168
220
|
acc[item] = true;
|
|
@@ -173,11 +225,33 @@ var attachLockedItems = (kioskData, lockedItemIds) => {
|
|
|
173
225
|
kioskData.items.map((item) => {
|
|
174
226
|
item.isLocked = lockedStatuses[item.objectId] || false;
|
|
175
227
|
});
|
|
176
|
-
}
|
|
228
|
+
}
|
|
229
|
+
function getRulePackageAddress(environment) {
|
|
230
|
+
if (environment.env === "custom") {
|
|
231
|
+
if (!environment.address)
|
|
232
|
+
throw new Error("Please supply the custom package address for rules.");
|
|
233
|
+
return environment.address;
|
|
234
|
+
}
|
|
235
|
+
return rulesPackageAddresses[environment.env];
|
|
236
|
+
}
|
|
237
|
+
async function getAllDynamicFields(provider, parentId, pagination) {
|
|
238
|
+
let hasNextPage = true;
|
|
239
|
+
let cursor = void 0;
|
|
240
|
+
const data = [];
|
|
241
|
+
while (hasNextPage) {
|
|
242
|
+
const result = await provider.getDynamicFields({
|
|
243
|
+
parentId,
|
|
244
|
+
limit: pagination.limit || void 0,
|
|
245
|
+
cursor
|
|
246
|
+
});
|
|
247
|
+
data.push(...result.data);
|
|
248
|
+
hasNextPage = result.hasNextPage;
|
|
249
|
+
cursor = result.nextCursor;
|
|
250
|
+
}
|
|
251
|
+
return data;
|
|
252
|
+
}
|
|
177
253
|
|
|
178
254
|
// src/tx/transfer-policy.ts
|
|
179
|
-
var TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
|
|
180
|
-
var TRANSFER_POLICY_RULES_PACKAGE_ADDRESS = "bd8fc1947cf119350184107a3087e2dc27efefa0dd82e25a1f699069fe81a585";
|
|
181
255
|
function createTransferPolicy(tx, itemType, publisher) {
|
|
182
256
|
let [transferPolicy, transferPolicyCap] = tx.moveCall({
|
|
183
257
|
target: `${TRANSFER_POLICY_MODULE}::new`,
|
|
@@ -186,13 +260,13 @@ function createTransferPolicy(tx, itemType, publisher) {
|
|
|
186
260
|
});
|
|
187
261
|
tx.moveCall({
|
|
188
262
|
target: `0x2::transfer::public_share_object`,
|
|
189
|
-
typeArguments: [itemType],
|
|
263
|
+
typeArguments: [`${TRANSFER_POLICY_TYPE}<${itemType}>`],
|
|
190
264
|
arguments: [transferPolicy]
|
|
191
265
|
});
|
|
192
266
|
return transferPolicyCap;
|
|
193
267
|
}
|
|
194
268
|
function withdrawFromPolicy(tx, itemType, policy, policyCap, amount) {
|
|
195
|
-
let amountArg = amount !== null ? tx.pure(amount, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
|
|
269
|
+
let amountArg = amount !== null ? tx.pure({ Some: amount }, "Option<u64>") : tx.pure({ None: true }, "Option<u64>");
|
|
196
270
|
let [profits] = tx.moveCall({
|
|
197
271
|
target: `${TRANSFER_POLICY_MODULE}::withdraw`,
|
|
198
272
|
typeArguments: [itemType],
|
|
@@ -214,25 +288,30 @@ function removeTransferPolicyRule(tx, itemType, ruleType, configType, policy, po
|
|
|
214
288
|
arguments: [objArg(tx, policy), policyCap]
|
|
215
289
|
});
|
|
216
290
|
}
|
|
217
|
-
function resolveRoyaltyRule(tx, itemType, price, policyId, transferRequest) {
|
|
291
|
+
function resolveRoyaltyRule(tx, itemType, price, policyId, transferRequest, environment) {
|
|
218
292
|
const policyObj = objArg(tx, policyId);
|
|
219
293
|
const [amount] = tx.moveCall({
|
|
220
|
-
target: `${
|
|
294
|
+
target: `${getRulePackageAddress(environment)}::royalty_rule::fee_amount`,
|
|
221
295
|
typeArguments: [itemType],
|
|
222
296
|
arguments: [policyObj, objArg(tx, price)]
|
|
223
297
|
});
|
|
224
298
|
const feeCoin = tx.splitCoins(tx.gas, [amount]);
|
|
225
299
|
tx.moveCall({
|
|
226
|
-
target: `${
|
|
300
|
+
target: `${getRulePackageAddress(environment)}::royalty_rule::pay`,
|
|
227
301
|
typeArguments: [itemType],
|
|
228
302
|
arguments: [policyObj, transferRequest, feeCoin]
|
|
229
303
|
});
|
|
230
304
|
}
|
|
305
|
+
function resolveKioskLockRule(tx, itemType, item, kiosk, kioskCap, policyId, transferRequest, environment) {
|
|
306
|
+
lock(tx, itemType, kiosk, kioskCap, policyId, item);
|
|
307
|
+
tx.moveCall({
|
|
308
|
+
target: `${getRulePackageAddress(environment)}::kiosk_lock_rule::prove`,
|
|
309
|
+
typeArguments: [itemType],
|
|
310
|
+
arguments: [transferRequest, objArg(tx, kiosk)]
|
|
311
|
+
});
|
|
312
|
+
}
|
|
231
313
|
|
|
232
314
|
// 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
315
|
function createKiosk(tx) {
|
|
237
316
|
let [kiosk, kioskOwnerCap] = tx.moveCall({
|
|
238
317
|
target: `${KIOSK_MODULE}::new`
|
|
@@ -329,7 +408,12 @@ function purchase(tx, itemType, kiosk, itemId, payment) {
|
|
|
329
408
|
return [item, transferRequest];
|
|
330
409
|
}
|
|
331
410
|
function withdrawFromKiosk(tx, kiosk, kioskCap, amount) {
|
|
332
|
-
let amountArg = amount !== null ? tx.pure(
|
|
411
|
+
let amountArg = amount !== null ? tx.pure(
|
|
412
|
+
{
|
|
413
|
+
Some: amount
|
|
414
|
+
},
|
|
415
|
+
"Option<u64>"
|
|
416
|
+
) : tx.pure({ None: true }, "Option<u64>");
|
|
333
417
|
let [coin] = tx.moveCall({
|
|
334
418
|
target: `${KIOSK_MODULE}::withdraw`,
|
|
335
419
|
arguments: [objArg(tx, kiosk), objArg(tx, kioskCap), amountArg]
|
|
@@ -379,27 +463,46 @@ function returnValue(tx, itemType, kiosk, item, promise) {
|
|
|
379
463
|
arguments: [objArg(tx, kiosk), item, promise]
|
|
380
464
|
});
|
|
381
465
|
}
|
|
382
|
-
function purchaseAndResolvePolicies(tx, itemType,
|
|
383
|
-
if (
|
|
384
|
-
|
|
385
|
-
const coin = tx.splitCoins(tx.gas, [tx.pure(
|
|
466
|
+
function purchaseAndResolvePolicies(tx, itemType, price, kiosk, itemId, policy, environment, extraParams) {
|
|
467
|
+
if (price === void 0 || typeof price !== "string")
|
|
468
|
+
throw new Error(`Price of the listing is not supplied.`);
|
|
469
|
+
const coin = tx.splitCoins(tx.gas, [tx.pure(price, "u64")]);
|
|
386
470
|
const [purchasedItem, transferRequest] = purchase(
|
|
387
471
|
tx,
|
|
388
472
|
itemType,
|
|
389
|
-
|
|
473
|
+
kiosk,
|
|
390
474
|
itemId,
|
|
391
475
|
coin
|
|
392
476
|
);
|
|
477
|
+
let hasKioskLockRule = false;
|
|
393
478
|
for (let rule of policy.rules) {
|
|
394
479
|
const ruleWithoutAddr = getTypeWithoutPackageAddress(rule);
|
|
395
480
|
switch (ruleWithoutAddr) {
|
|
396
|
-
case
|
|
481
|
+
case ROYALTY_RULE:
|
|
397
482
|
resolveRoyaltyRule(
|
|
398
483
|
tx,
|
|
399
484
|
itemType,
|
|
400
|
-
|
|
485
|
+
price,
|
|
486
|
+
policy.id,
|
|
487
|
+
transferRequest,
|
|
488
|
+
environment
|
|
489
|
+
);
|
|
490
|
+
break;
|
|
491
|
+
case KIOSK_LOCK_RULE:
|
|
492
|
+
if (!extraParams?.ownedKiosk || !extraParams?.ownedKioskCap)
|
|
493
|
+
throw new Error(
|
|
494
|
+
`This item type ${itemType} has a 'kiosk_lock_rule', but function call is missing user's kiosk and kioskCap params`
|
|
495
|
+
);
|
|
496
|
+
hasKioskLockRule = true;
|
|
497
|
+
resolveKioskLockRule(
|
|
498
|
+
tx,
|
|
499
|
+
itemType,
|
|
500
|
+
purchasedItem,
|
|
501
|
+
extraParams.ownedKiosk,
|
|
502
|
+
extraParams.ownedKioskCap,
|
|
401
503
|
policy.id,
|
|
402
|
-
transferRequest
|
|
504
|
+
transferRequest,
|
|
505
|
+
environment
|
|
403
506
|
);
|
|
404
507
|
break;
|
|
405
508
|
default:
|
|
@@ -407,15 +510,16 @@ function purchaseAndResolvePolicies(tx, itemType, listing, kioskId, itemId, poli
|
|
|
407
510
|
}
|
|
408
511
|
}
|
|
409
512
|
confirmRequest(tx, itemType, policy.id, transferRequest);
|
|
410
|
-
return
|
|
513
|
+
return {
|
|
514
|
+
item: purchasedItem,
|
|
515
|
+
canTransfer: !hasKioskLockRule
|
|
516
|
+
};
|
|
411
517
|
}
|
|
412
518
|
|
|
413
519
|
// src/query/kiosk.ts
|
|
520
|
+
var import_sui3 = require("@mysten/sui.js");
|
|
414
521
|
async function fetchKiosk(provider, kioskId, pagination, options) {
|
|
415
|
-
const
|
|
416
|
-
parentId: kioskId,
|
|
417
|
-
...pagination
|
|
418
|
-
});
|
|
522
|
+
const data = await getAllDynamicFields(provider, kioskId, pagination);
|
|
419
523
|
const listings = [];
|
|
420
524
|
const lockedItemIds = [];
|
|
421
525
|
const kioskData = extractKioskData(data, listings, lockedItemIds);
|
|
@@ -434,13 +538,44 @@ async function fetchKiosk(provider, kioskId, pagination, options) {
|
|
|
434
538
|
attachLockedItems(kioskData, lockedItemIds);
|
|
435
539
|
return {
|
|
436
540
|
data: kioskData,
|
|
541
|
+
nextCursor: null,
|
|
542
|
+
hasNextPage: false
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
async function getOwnedKiosks(provider, address, options) {
|
|
546
|
+
if (!(0, import_sui3.isValidSuiAddress)(address))
|
|
547
|
+
return {
|
|
548
|
+
nextCursor: null,
|
|
549
|
+
hasNextPage: false,
|
|
550
|
+
kioskOwnerCaps: [],
|
|
551
|
+
kioskIds: []
|
|
552
|
+
};
|
|
553
|
+
const { data, hasNextPage, nextCursor } = await provider.getOwnedObjects({
|
|
554
|
+
owner: address,
|
|
555
|
+
filter: { StructType: KIOSK_OWNER_CAP },
|
|
556
|
+
options: {
|
|
557
|
+
showContent: true
|
|
558
|
+
},
|
|
559
|
+
...options?.pagination || {}
|
|
560
|
+
});
|
|
561
|
+
const kioskIdList = data?.map(
|
|
562
|
+
(x) => (0, import_sui3.getObjectFields)(x)?.for
|
|
563
|
+
);
|
|
564
|
+
const filteredData = data.filter((x) => "data" in x).map((x) => x.data);
|
|
565
|
+
return {
|
|
437
566
|
nextCursor,
|
|
438
|
-
hasNextPage
|
|
567
|
+
hasNextPage,
|
|
568
|
+
kioskOwnerCaps: filteredData.map((x, idx) => ({
|
|
569
|
+
digest: x.digest,
|
|
570
|
+
version: x.version,
|
|
571
|
+
objectId: x.objectId,
|
|
572
|
+
kioskId: kioskIdList[idx]
|
|
573
|
+
})),
|
|
574
|
+
kioskIds: kioskIdList
|
|
439
575
|
};
|
|
440
576
|
}
|
|
441
577
|
|
|
442
578
|
// src/query/transfer-policy.ts
|
|
443
|
-
var TRANSFER_POLICY_CREATED_EVENT = `0x2::transfer_policy::TransferPolicyCreated`;
|
|
444
579
|
async function queryTransferPolicy(provider, type) {
|
|
445
580
|
const { data } = await provider.queryEvents({
|
|
446
581
|
query: {
|
|
@@ -458,14 +593,10 @@ async function queryTransferPolicy(provider, type) {
|
|
|
458
593
|
`Invalid policy: ${policy?.objectId}, expected object, got package`
|
|
459
594
|
);
|
|
460
595
|
}
|
|
461
|
-
let parsed = import_sui.bcs.de(
|
|
462
|
-
"0x2::transfer_policy::TransferPolicy",
|
|
463
|
-
policy.bcs.bcsBytes,
|
|
464
|
-
"base64"
|
|
465
|
-
);
|
|
596
|
+
let parsed = import_sui.bcs.de(TRANSFER_POLICY_TYPE, policy.bcs.bcsBytes, "base64");
|
|
466
597
|
return {
|
|
467
598
|
id: policy?.objectId,
|
|
468
|
-
type:
|
|
599
|
+
type: `${TRANSFER_POLICY_TYPE}<${type}>`,
|
|
469
600
|
owner: policy?.owner,
|
|
470
601
|
rules: parsed.rules,
|
|
471
602
|
balance: parsed.balance
|
|
@@ -474,12 +605,20 @@ async function queryTransferPolicy(provider, type) {
|
|
|
474
605
|
}
|
|
475
606
|
// Annotate the CommonJS export names for ESM import in node:
|
|
476
607
|
0 && (module.exports = {
|
|
608
|
+
KIOSK_ITEM,
|
|
609
|
+
KIOSK_LISTING,
|
|
610
|
+
KIOSK_LOCK,
|
|
611
|
+
KIOSK_LOCK_RULE,
|
|
477
612
|
KIOSK_MODULE,
|
|
478
613
|
KIOSK_OWNER_CAP,
|
|
614
|
+
KIOSK_PURCHASE_CAP,
|
|
479
615
|
KIOSK_TYPE,
|
|
616
|
+
MAINNET_RULES_PACKAGE_ADDRESS,
|
|
617
|
+
ROYALTY_RULE,
|
|
618
|
+
TESTNET_RULES_PACKAGE_ADDRESS,
|
|
480
619
|
TRANSFER_POLICY_CREATED_EVENT,
|
|
481
620
|
TRANSFER_POLICY_MODULE,
|
|
482
|
-
|
|
621
|
+
TRANSFER_POLICY_TYPE,
|
|
483
622
|
attachListingsAndPrices,
|
|
484
623
|
attachLockedItems,
|
|
485
624
|
bcs,
|
|
@@ -490,13 +629,18 @@ async function queryTransferPolicy(provider, type) {
|
|
|
490
629
|
createKiosk,
|
|
491
630
|
createKioskAndShare,
|
|
492
631
|
createTransferPolicy,
|
|
632
|
+
customEnvironment,
|
|
493
633
|
delist,
|
|
494
634
|
extractKioskData,
|
|
495
635
|
fetchKiosk,
|
|
636
|
+
getAllDynamicFields,
|
|
496
637
|
getKioskObject,
|
|
638
|
+
getOwnedKiosks,
|
|
639
|
+
getRulePackageAddress,
|
|
497
640
|
getTypeWithoutPackageAddress,
|
|
498
641
|
list,
|
|
499
642
|
lock,
|
|
643
|
+
mainnetEnvironment,
|
|
500
644
|
objArg,
|
|
501
645
|
place,
|
|
502
646
|
placeAndList,
|
|
@@ -504,9 +648,12 @@ async function queryTransferPolicy(provider, type) {
|
|
|
504
648
|
purchaseAndResolvePolicies,
|
|
505
649
|
queryTransferPolicy,
|
|
506
650
|
removeTransferPolicyRule,
|
|
651
|
+
resolveKioskLockRule,
|
|
507
652
|
resolveRoyaltyRule,
|
|
508
653
|
returnValue,
|
|
654
|
+
rulesPackageAddresses,
|
|
509
655
|
take,
|
|
656
|
+
testnetEnvironment,
|
|
510
657
|
withdrawFromKiosk,
|
|
511
658
|
withdrawFromPolicy
|
|
512
659
|
});
|