@mysten/kiosk 0.14.6 → 1.0.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 +114 -2
- package/dist/client/kiosk-client.d.mts +126 -0
- package/dist/client/kiosk-client.d.mts.map +1 -0
- package/dist/client/kiosk-client.mjs +124 -0
- package/dist/client/kiosk-client.mjs.map +1 -0
- package/dist/client/kiosk-transaction.d.mts +236 -0
- package/dist/client/kiosk-transaction.d.mts.map +1 -0
- package/dist/client/kiosk-transaction.mjs +472 -0
- package/dist/client/kiosk-transaction.mjs.map +1 -0
- package/dist/client/tp-transaction.d.mts +139 -0
- package/dist/client/tp-transaction.d.mts.map +1 -0
- package/dist/client/tp-transaction.mjs +273 -0
- package/dist/client/tp-transaction.mjs.map +1 -0
- package/dist/constants.d.mts +42 -0
- package/dist/constants.d.mts.map +1 -0
- package/dist/constants.mjs +62 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/contracts/0x2/bag.mjs +19 -0
- package/dist/contracts/0x2/bag.mjs.map +1 -0
- package/dist/contracts/0x2/balance.mjs +20 -0
- package/dist/contracts/0x2/balance.mjs.map +1 -0
- package/dist/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs +16 -0
- package/dist/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs.map +1 -0
- package/dist/contracts/0x2/kiosk.mjs +244 -0
- package/dist/contracts/0x2/kiosk.mjs.map +1 -0
- package/dist/contracts/0x2/kiosk_extension.mjs +25 -0
- package/dist/contracts/0x2/kiosk_extension.mjs.map +1 -0
- package/dist/contracts/0x2/transfer_policy.mjs +99 -0
- package/dist/contracts/0x2/transfer_policy.mjs.map +1 -0
- package/dist/contracts/0x2/vec_set.mjs +18 -0
- package/dist/contracts/0x2/vec_set.mjs.map +1 -0
- package/dist/contracts/kiosk/deps/sui/kiosk.mjs +98 -0
- package/dist/contracts/kiosk/deps/sui/kiosk.mjs.map +1 -0
- package/dist/contracts/kiosk/floor_price_rule.mjs +70 -0
- package/dist/contracts/kiosk/floor_price_rule.mjs.map +1 -0
- package/dist/contracts/kiosk/kiosk_lock_rule.mjs +72 -0
- package/dist/contracts/kiosk/kiosk_lock_rule.mjs.map +1 -0
- package/dist/contracts/kiosk/personal_kiosk.mjs +102 -0
- package/dist/contracts/kiosk/personal_kiosk.mjs.map +1 -0
- package/dist/contracts/kiosk/personal_kiosk_rule.mjs +66 -0
- package/dist/contracts/kiosk/personal_kiosk_rule.mjs.map +1 -0
- package/dist/contracts/kiosk/royalty_rule.mjs +115 -0
- package/dist/contracts/kiosk/royalty_rule.mjs.map +1 -0
- package/dist/contracts/utils/index.mjs +118 -0
- package/dist/contracts/utils/index.mjs.map +1 -0
- package/dist/index.d.mts +9 -0
- package/dist/index.mjs +9 -0
- package/dist/query/client-utils.mjs +30 -0
- package/dist/query/client-utils.mjs.map +1 -0
- package/dist/query/kiosk.mjs +154 -0
- package/dist/query/kiosk.mjs.map +1 -0
- package/dist/query/transfer-policy.mjs +110 -0
- package/dist/query/transfer-policy.mjs.map +1 -0
- package/dist/tx/kiosk.mjs +20 -0
- package/dist/tx/kiosk.mjs.map +1 -0
- package/dist/tx/rules/resolve.mjs +114 -0
- package/dist/tx/rules/resolve.mjs.map +1 -0
- package/dist/tx/transfer-policy.mjs +38 -0
- package/dist/tx/transfer-policy.mjs.map +1 -0
- package/dist/types/index.d.mts +23 -0
- package/dist/types/index.d.mts.map +1 -0
- package/dist/types/kiosk.d.mts +165 -0
- package/dist/types/kiosk.d.mts.map +1 -0
- package/dist/types/kiosk.mjs +21 -0
- package/dist/types/kiosk.mjs.map +1 -0
- package/dist/types/transfer-policy.d.mts +56 -0
- package/dist/types/transfer-policy.d.mts.map +1 -0
- package/dist/types/transfer-policy.mjs +19 -0
- package/dist/types/transfer-policy.mjs.map +1 -0
- package/dist/utils.d.mts +45 -0
- package/dist/utils.d.mts.map +1 -0
- package/dist/utils.mjs +156 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +31 -20
- package/src/client/kiosk-client.ts +42 -5
- package/src/client/kiosk-transaction.ts +144 -65
- package/src/client/tp-transaction.ts +149 -95
- package/src/constants.ts +19 -24
- package/src/contracts/0x2/accumulator.ts +24 -0
- package/src/contracts/0x2/accumulator_metadata.ts +38 -0
- package/src/contracts/0x2/accumulator_settlement.ts +14 -0
- package/src/contracts/0x2/address.ts +145 -0
- package/src/contracts/0x2/address_alias.ts +92 -0
- package/src/contracts/0x2/authenticator_state.ts +44 -0
- package/src/contracts/0x2/bag.ts +192 -0
- package/src/contracts/0x2/balance.ts +269 -0
- package/src/contracts/0x2/bcs.ts +495 -0
- package/src/contracts/0x2/bls12381.ts +717 -0
- package/src/contracts/0x2/borrow.ts +99 -0
- package/src/contracts/0x2/clock.ts +30 -0
- package/src/contracts/0x2/coin.ts +977 -0
- package/src/contracts/0x2/coin_registry.ts +874 -0
- package/src/contracts/0x2/config.ts +30 -0
- package/src/contracts/0x2/deny_list.ts +55 -0
- package/src/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.ts +12 -0
- package/src/contracts/0x2/derived_object.ts +95 -0
- package/src/contracts/0x2/display.ts +258 -0
- package/src/contracts/0x2/dynamic_field.ts +171 -0
- package/src/contracts/0x2/dynamic_object_field.ts +167 -0
- package/src/contracts/0x2/ecdsa_k1.ts +65 -0
- package/src/contracts/0x2/ecdsa_r1.ts +49 -0
- package/src/contracts/0x2/ecvrf.ts +29 -0
- package/src/contracts/0x2/ed25519.ts +25 -0
- package/src/contracts/0x2/event.ts +42 -0
- package/src/contracts/0x2/funds_accumulator.ts +86 -0
- package/src/contracts/0x2/groth16.ts +171 -0
- package/src/contracts/0x2/group_ops.ts +49 -0
- package/src/contracts/0x2/hash.ts +37 -0
- package/src/contracts/0x2/hex.ts +37 -0
- package/src/contracts/0x2/hmac.ts +21 -0
- package/src/contracts/0x2/kiosk.ts +797 -0
- package/src/contracts/0x2/kiosk_extension.ts +270 -0
- package/src/contracts/0x2/linked_table.ts +354 -0
- package/src/contracts/0x2/math.ts +117 -0
- package/src/contracts/0x2/nitro_attestation.ts +186 -0
- package/src/contracts/0x2/object.ts +249 -0
- package/src/contracts/0x2/object_bag.ts +210 -0
- package/src/contracts/0x2/object_table.ts +200 -0
- package/src/contracts/0x2/package.ts +414 -0
- package/src/contracts/0x2/party.ts +37 -0
- package/src/contracts/0x2/pay.ts +153 -0
- package/src/contracts/0x2/poseidon.ts +21 -0
- package/src/contracts/0x2/priority_queue.ts +139 -0
- package/src/contracts/0x2/random.ts +294 -0
- package/src/contracts/0x2/sui.ts +29 -0
- package/src/contracts/0x2/table.ts +200 -0
- package/src/contracts/0x2/table_vec.ts +232 -0
- package/src/contracts/0x2/token.ts +873 -0
- package/src/contracts/0x2/transfer.ts +216 -0
- package/src/contracts/0x2/transfer_policy.ts +400 -0
- package/src/contracts/0x2/tx_context.ts +129 -0
- package/src/contracts/0x2/types.ts +24 -0
- package/src/contracts/0x2/url.ts +77 -0
- package/src/contracts/0x2/vdf.ts +45 -0
- package/src/contracts/0x2/vec_map.ts +401 -0
- package/src/contracts/0x2/vec_set.ts +211 -0
- package/src/contracts/0x2/versioned.ts +153 -0
- package/src/contracts/0x2/zklogin_verified_id.ts +172 -0
- package/src/contracts/0x2/zklogin_verified_issuer.ts +99 -0
- package/src/contracts/kiosk/deps/sui/kiosk.ts +94 -0
- package/src/contracts/kiosk/deps/sui/object.ts +15 -0
- package/src/contracts/kiosk/floor_price_rule.ts +92 -0
- package/src/contracts/kiosk/kiosk_lock_rule.ts +97 -0
- package/src/contracts/kiosk/personal_kiosk.ts +295 -0
- package/src/contracts/kiosk/personal_kiosk_rule.ts +89 -0
- package/src/contracts/kiosk/royalty_rule.ts +144 -0
- package/src/contracts/kiosk/witness_rule.ts +92 -0
- package/src/contracts/utils/index.ts +234 -0
- package/src/query/client-utils.ts +51 -0
- package/src/query/kiosk.ts +128 -100
- package/src/query/transfer-policy.ts +112 -78
- package/src/tx/kiosk.ts +7 -231
- package/src/tx/rules/resolve.ts +97 -48
- package/src/tx/transfer-policy.ts +25 -86
- package/src/types/index.ts +3 -14
- package/src/types/kiosk.ts +10 -12
- package/src/types/transfer-policy.ts +4 -4
- package/src/utils.ts +90 -128
- package/dist/cjs/bcs.d.ts +0 -23
- package/dist/cjs/bcs.js +0 -50
- package/dist/cjs/bcs.js.map +0 -7
- package/dist/cjs/client/kiosk-client.d.ts +0 -76
- package/dist/cjs/client/kiosk-client.js +0 -123
- package/dist/cjs/client/kiosk-client.js.map +0 -7
- package/dist/cjs/client/kiosk-transaction.d.ts +0 -186
- package/dist/cjs/client/kiosk-transaction.js +0 -462
- package/dist/cjs/client/kiosk-transaction.js.map +0 -7
- package/dist/cjs/client/tp-transaction.d.ts +0 -114
- package/dist/cjs/client/tp-transaction.js +0 -307
- package/dist/cjs/client/tp-transaction.js.map +0 -7
- package/dist/cjs/constants.d.ts +0 -31
- package/dist/cjs/constants.js +0 -102
- package/dist/cjs/constants.js.map +0 -7
- package/dist/cjs/index.d.ts +0 -6
- package/dist/cjs/index.js +0 -24
- package/dist/cjs/index.js.map +0 -7
- package/dist/cjs/package.json +0 -5
- package/dist/cjs/query/kiosk.d.ts +0 -8
- package/dist/cjs/query/kiosk.js +0 -181
- package/dist/cjs/query/kiosk.js.map +0 -7
- package/dist/cjs/query/transfer-policy.d.ts +0 -29
- package/dist/cjs/query/transfer-policy.js +0 -92
- package/dist/cjs/query/transfer-policy.js.map +0 -7
- package/dist/cjs/tx/kiosk.d.ts +0 -71
- package/dist/cjs/tx/kiosk.js +0 -130
- package/dist/cjs/tx/kiosk.js.map +0 -7
- package/dist/cjs/tx/personal-kiosk.d.ts +0 -7
- package/dist/cjs/tx/personal-kiosk.js +0 -38
- package/dist/cjs/tx/personal-kiosk.js.map +0 -7
- package/dist/cjs/tx/rules/attach.d.ts +0 -7
- package/dist/cjs/tx/rules/attach.js +0 -62
- package/dist/cjs/tx/rules/attach.js.map +0 -7
- package/dist/cjs/tx/rules/resolve.d.ts +0 -15
- package/dist/cjs/tx/rules/resolve.js +0 -109
- package/dist/cjs/tx/rules/resolve.js.map +0 -7
- package/dist/cjs/tx/transfer-policy.d.ts +0 -29
- package/dist/cjs/tx/transfer-policy.js +0 -78
- package/dist/cjs/tx/transfer-policy.js.map +0 -7
- package/dist/cjs/types/index.d.ts +0 -27
- package/dist/cjs/types/index.js +0 -33
- package/dist/cjs/types/index.js.map +0 -7
- package/dist/cjs/types/kiosk.d.ts +0 -160
- package/dist/cjs/types/kiosk.js +0 -37
- package/dist/cjs/types/kiosk.js.map +0 -7
- package/dist/cjs/types/transfer-policy.d.ts +0 -53
- package/dist/cjs/types/transfer-policy.js +0 -35
- package/dist/cjs/types/transfer-policy.js.map +0 -7
- package/dist/cjs/utils.d.ts +0 -51
- package/dist/cjs/utils.js +0 -198
- package/dist/cjs/utils.js.map +0 -7
- package/dist/esm/bcs.d.ts +0 -23
- package/dist/esm/bcs.js +0 -35
- package/dist/esm/bcs.js.map +0 -7
- package/dist/esm/client/kiosk-client.d.ts +0 -76
- package/dist/esm/client/kiosk-client.js +0 -114
- package/dist/esm/client/kiosk-client.js.map +0 -7
- package/dist/esm/client/kiosk-transaction.d.ts +0 -186
- package/dist/esm/client/kiosk-transaction.js +0 -432
- package/dist/esm/client/kiosk-transaction.js.map +0 -7
- package/dist/esm/client/tp-transaction.d.ts +0 -114
- package/dist/esm/client/tp-transaction.js +0 -298
- package/dist/esm/client/tp-transaction.js.map +0 -7
- package/dist/esm/constants.d.ts +0 -31
- package/dist/esm/constants.js +0 -87
- package/dist/esm/constants.js.map +0 -7
- package/dist/esm/index.d.ts +0 -6
- package/dist/esm/index.js +0 -7
- package/dist/esm/index.js.map +0 -7
- package/dist/esm/package.json +0 -5
- package/dist/esm/query/kiosk.d.ts +0 -8
- package/dist/esm/query/kiosk.js +0 -169
- package/dist/esm/query/kiosk.js.map +0 -7
- package/dist/esm/query/transfer-policy.d.ts +0 -29
- package/dist/esm/query/transfer-policy.js +0 -76
- package/dist/esm/query/transfer-policy.js.map +0 -7
- package/dist/esm/tx/kiosk.d.ts +0 -71
- package/dist/esm/tx/kiosk.js +0 -110
- package/dist/esm/tx/kiosk.js.map +0 -7
- package/dist/esm/tx/personal-kiosk.d.ts +0 -7
- package/dist/esm/tx/personal-kiosk.js +0 -18
- package/dist/esm/tx/personal-kiosk.js.map +0 -7
- package/dist/esm/tx/rules/attach.d.ts +0 -7
- package/dist/esm/tx/rules/attach.js +0 -42
- package/dist/esm/tx/rules/attach.js.map +0 -7
- package/dist/esm/tx/rules/resolve.d.ts +0 -15
- package/dist/esm/tx/rules/resolve.js +0 -89
- package/dist/esm/tx/rules/resolve.js.map +0 -7
- package/dist/esm/tx/transfer-policy.d.ts +0 -29
- package/dist/esm/tx/transfer-policy.js +0 -58
- package/dist/esm/tx/transfer-policy.js.map +0 -7
- package/dist/esm/types/index.d.ts +0 -27
- package/dist/esm/types/index.js +0 -12
- package/dist/esm/types/index.js.map +0 -7
- package/dist/esm/types/kiosk.d.ts +0 -160
- package/dist/esm/types/kiosk.js +0 -17
- package/dist/esm/types/kiosk.js.map +0 -7
- package/dist/esm/types/transfer-policy.d.ts +0 -53
- package/dist/esm/types/transfer-policy.js +0 -15
- package/dist/esm/types/transfer-policy.js.map +0 -7
- package/dist/esm/utils.d.ts +0 -51
- package/dist/esm/utils.js +0 -183
- package/dist/esm/utils.js.map +0 -7
- package/dist/tsconfig.esm.tsbuildinfo +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/bcs.ts +0 -39
- package/src/tx/personal-kiosk.ts +0 -34
- package/src/tx/rules/attach.ts +0 -73
package/src/query/kiosk.ts
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
PaginationArguments,
|
|
7
|
-
SuiClient,
|
|
8
|
-
SuiObjectData,
|
|
9
|
-
SuiObjectResponse,
|
|
10
|
-
} from '@mysten/sui/client';
|
|
4
|
+
import type { PaginationArguments } from '@mysten/sui/jsonRpc';
|
|
5
|
+
import type { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client';
|
|
11
6
|
import { isValidSuiAddress } from '@mysten/sui/utils';
|
|
12
7
|
|
|
8
|
+
import { Extension, ExtensionKey } from '../contracts/0x2/kiosk_extension.js';
|
|
13
9
|
import type {
|
|
14
10
|
FetchKioskOptions,
|
|
15
11
|
KioskExtension,
|
|
@@ -27,9 +23,10 @@ import {
|
|
|
27
23
|
getAllObjects,
|
|
28
24
|
getKioskObject,
|
|
29
25
|
} from '../utils.js';
|
|
26
|
+
import { PersonalKioskCap } from '../contracts/kiosk/personal_kiosk.js';
|
|
30
27
|
|
|
31
28
|
export async function fetchKiosk(
|
|
32
|
-
client:
|
|
29
|
+
client: ClientWithCoreApi,
|
|
33
30
|
kioskId: string,
|
|
34
31
|
pagination: PaginationArguments<string>,
|
|
35
32
|
options: FetchKioskOptions,
|
|
@@ -51,14 +48,8 @@ export async function fetchKiosk(
|
|
|
51
48
|
// For listings we usually seek the DF value (price) / exclusivity.
|
|
52
49
|
const [kiosk, listingObjects, items] = await Promise.all([
|
|
53
50
|
options.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),
|
|
54
|
-
options.withListingPrices
|
|
55
|
-
|
|
56
|
-
showContent: true,
|
|
57
|
-
})
|
|
58
|
-
: Promise.resolve([]),
|
|
59
|
-
options.withObjects
|
|
60
|
-
? getAllObjects(client, kioskData.itemIds, options.objectOptions || { showDisplay: true })
|
|
61
|
-
: Promise.resolve([]),
|
|
51
|
+
options.withListingPrices ? getAllObjects(client, kioskData.listingIds) : Promise.resolve([]),
|
|
52
|
+
options.withObjects ? getAllObjects(client, kioskData.itemIds) : Promise.resolve([]),
|
|
62
53
|
]);
|
|
63
54
|
|
|
64
55
|
if (options.withKioskFields) kioskData.kiosk = kiosk;
|
|
@@ -68,10 +59,7 @@ export async function fetchKiosk(
|
|
|
68
59
|
attachLockedItems(kioskData, lockedItemIds);
|
|
69
60
|
|
|
70
61
|
// Attach the objects for the queried items.
|
|
71
|
-
attachObjects(
|
|
72
|
-
kioskData,
|
|
73
|
-
items.filter((x) => !!x.data).map((x) => x.data!),
|
|
74
|
-
);
|
|
62
|
+
attachObjects(kioskData, items);
|
|
75
63
|
|
|
76
64
|
return {
|
|
77
65
|
data: kioskData,
|
|
@@ -91,7 +79,7 @@ const DEFAULT_PAGE_SIZE = 50;
|
|
|
91
79
|
const PERSON_KIOSK_CURSOR = 'personal';
|
|
92
80
|
const OWNED_KIOSKS_CURSOR = 'owned';
|
|
93
81
|
export async function getOwnedKiosks(
|
|
94
|
-
client:
|
|
82
|
+
client: ClientWithCoreApi,
|
|
95
83
|
address: string,
|
|
96
84
|
options?: {
|
|
97
85
|
pagination?: PaginationArguments<string>;
|
|
@@ -115,19 +103,36 @@ export async function getOwnedKiosks(
|
|
|
115
103
|
];
|
|
116
104
|
|
|
117
105
|
if (options?.personalKioskType && cursorType === PERSON_KIOSK_CURSOR) {
|
|
106
|
+
const personalResult = await client.core.listOwnedObjects({
|
|
107
|
+
owner: address,
|
|
108
|
+
type: options.personalKioskType,
|
|
109
|
+
cursor,
|
|
110
|
+
limit,
|
|
111
|
+
include: {
|
|
112
|
+
content: true,
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
const personalKioskData = personalResult.objects
|
|
117
|
+
.filter((obj) => !(obj instanceof Error))
|
|
118
|
+
.map((obj) => {
|
|
119
|
+
return { obj, kioskId: PersonalKioskCap.parse(obj.content).cap?.for };
|
|
120
|
+
})
|
|
121
|
+
.filter(
|
|
122
|
+
(
|
|
123
|
+
item,
|
|
124
|
+
): item is {
|
|
125
|
+
obj: SuiClientTypes.Object<{ content: true }>;
|
|
126
|
+
kioskId: string;
|
|
127
|
+
} => item.kioskId !== undefined,
|
|
128
|
+
);
|
|
129
|
+
|
|
118
130
|
const personalKioskResponse = formatOwnedKioskResponse(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
options: {
|
|
125
|
-
showContent: true,
|
|
126
|
-
showType: true,
|
|
127
|
-
},
|
|
128
|
-
cursor,
|
|
129
|
-
limit,
|
|
130
|
-
}),
|
|
131
|
+
{
|
|
132
|
+
data: personalKioskData,
|
|
133
|
+
hasNextPage: personalResult.hasNextPage,
|
|
134
|
+
nextCursor: personalResult.cursor,
|
|
135
|
+
},
|
|
131
136
|
PERSON_KIOSK_CURSOR,
|
|
132
137
|
);
|
|
133
138
|
|
|
@@ -148,18 +153,38 @@ export async function getOwnedKiosks(
|
|
|
148
153
|
};
|
|
149
154
|
}
|
|
150
155
|
|
|
156
|
+
const ownedResult = await client.core.listOwnedObjects({
|
|
157
|
+
owner: address,
|
|
158
|
+
type: KIOSK_OWNER_CAP,
|
|
159
|
+
cursor: null,
|
|
160
|
+
limit: remainingLimit,
|
|
161
|
+
include: {
|
|
162
|
+
content: true,
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');
|
|
167
|
+
|
|
168
|
+
const ownedKioskData = ownedResult.objects
|
|
169
|
+
.filter((obj) => !(obj instanceof Error))
|
|
170
|
+
.map((obj) => {
|
|
171
|
+
return { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };
|
|
172
|
+
})
|
|
173
|
+
.filter(
|
|
174
|
+
(
|
|
175
|
+
item,
|
|
176
|
+
): item is {
|
|
177
|
+
obj: SuiClientTypes.Object<{ content: true }>;
|
|
178
|
+
kioskId: string;
|
|
179
|
+
} => item.kioskId !== undefined,
|
|
180
|
+
);
|
|
181
|
+
|
|
151
182
|
const ownedKiosksResponse = formatOwnedKioskResponse(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
options: {
|
|
158
|
-
showContent: true,
|
|
159
|
-
showType: true,
|
|
160
|
-
},
|
|
161
|
-
limit: remainingLimit,
|
|
162
|
-
}),
|
|
183
|
+
{
|
|
184
|
+
data: ownedKioskData,
|
|
185
|
+
hasNextPage: ownedResult.hasNextPage,
|
|
186
|
+
nextCursor: ownedResult.cursor,
|
|
187
|
+
},
|
|
163
188
|
OWNED_KIOSKS_CURSOR,
|
|
164
189
|
);
|
|
165
190
|
|
|
@@ -174,91 +199,94 @@ export async function getOwnedKiosks(
|
|
|
174
199
|
};
|
|
175
200
|
}
|
|
176
201
|
|
|
202
|
+
const result = await client.core.listOwnedObjects({
|
|
203
|
+
owner: address,
|
|
204
|
+
type: KIOSK_OWNER_CAP,
|
|
205
|
+
cursor: cursor || null,
|
|
206
|
+
limit,
|
|
207
|
+
include: {
|
|
208
|
+
content: true,
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
const { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');
|
|
213
|
+
|
|
214
|
+
const ownedKioskData = result.objects
|
|
215
|
+
.filter((obj) => !(obj instanceof Error))
|
|
216
|
+
.map((obj) => {
|
|
217
|
+
return { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };
|
|
218
|
+
})
|
|
219
|
+
.filter(
|
|
220
|
+
(
|
|
221
|
+
item,
|
|
222
|
+
): item is {
|
|
223
|
+
obj: SuiClientTypes.Object<{ content: true }>;
|
|
224
|
+
kioskId: string;
|
|
225
|
+
} => item.kioskId !== undefined,
|
|
226
|
+
);
|
|
227
|
+
|
|
177
228
|
return formatOwnedKioskResponse(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
options: {
|
|
184
|
-
showContent: true,
|
|
185
|
-
showType: true,
|
|
186
|
-
},
|
|
187
|
-
// cursor might be an empty string if the number of personal kiosks was a multiple of the limit.
|
|
188
|
-
cursor: cursor ? cursor : null,
|
|
189
|
-
limit,
|
|
190
|
-
}),
|
|
229
|
+
{
|
|
230
|
+
data: ownedKioskData,
|
|
231
|
+
hasNextPage: result.hasNextPage,
|
|
232
|
+
nextCursor: result.cursor,
|
|
233
|
+
},
|
|
191
234
|
OWNED_KIOSKS_CURSOR,
|
|
192
235
|
);
|
|
193
236
|
}
|
|
194
237
|
|
|
195
238
|
function formatOwnedKioskResponse(
|
|
196
|
-
response:
|
|
239
|
+
response: {
|
|
240
|
+
data: {
|
|
241
|
+
obj: SuiClientTypes.Object<{ content: true }>;
|
|
242
|
+
kioskId: string;
|
|
243
|
+
}[];
|
|
244
|
+
hasNextPage: boolean;
|
|
245
|
+
nextCursor: string | null;
|
|
246
|
+
},
|
|
197
247
|
cursorType: string,
|
|
198
248
|
): OwnedKiosks {
|
|
199
249
|
const { data, hasNextPage, nextCursor } = response;
|
|
200
|
-
// get kioskIds from the OwnerCaps.
|
|
201
|
-
const kioskIdList = data?.map((x: SuiObjectResponse) => {
|
|
202
|
-
const fields =
|
|
203
|
-
x.data?.content?.dataType === 'moveObject'
|
|
204
|
-
? (x.data.content.fields as unknown as
|
|
205
|
-
| {
|
|
206
|
-
cap: { fields: { for: string } };
|
|
207
|
-
for?: never;
|
|
208
|
-
}
|
|
209
|
-
| {
|
|
210
|
-
cap?: never;
|
|
211
|
-
for: string;
|
|
212
|
-
})
|
|
213
|
-
: null;
|
|
214
|
-
return fields?.cap ? fields?.cap?.fields?.for : (fields?.for as string);
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
// clean up data that might have an error in them.
|
|
218
|
-
// only return valid objects.
|
|
219
|
-
const filteredData = data.filter((x) => 'data' in x).map((x) => x.data) as SuiObjectData[];
|
|
220
250
|
|
|
221
251
|
return {
|
|
222
252
|
nextCursor: nextCursor ? `${cursorType}:${nextCursor}` : nextCursor,
|
|
223
253
|
hasNextPage,
|
|
224
|
-
kioskOwnerCaps:
|
|
225
|
-
isPersonal
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
254
|
+
kioskOwnerCaps: data.map((item) => {
|
|
255
|
+
const isPersonal = item.obj.type?.includes('PersonalKioskCap') || false;
|
|
256
|
+
return {
|
|
257
|
+
isPersonal,
|
|
258
|
+
digest: item.obj.digest,
|
|
259
|
+
version: item.obj.version,
|
|
260
|
+
objectId: item.obj.objectId,
|
|
261
|
+
kioskId: item.kioskId,
|
|
262
|
+
};
|
|
263
|
+
}),
|
|
264
|
+
kioskIds: data.map((item) => item.kioskId),
|
|
232
265
|
};
|
|
233
266
|
}
|
|
234
267
|
|
|
235
268
|
// Get a kiosk extension data for a given kioskId and extensionType.
|
|
236
269
|
export async function fetchKioskExtension(
|
|
237
|
-
client:
|
|
270
|
+
client: ClientWithCoreApi,
|
|
238
271
|
kioskId: string,
|
|
239
272
|
extensionType: string,
|
|
240
273
|
): Promise<KioskExtension | null> {
|
|
241
|
-
const
|
|
274
|
+
const { dynamicField } = await client.core.getDynamicField({
|
|
242
275
|
parentId: kioskId,
|
|
243
276
|
name: {
|
|
244
277
|
type: `0x2::kiosk_extension::ExtensionKey<${extensionType}>`,
|
|
245
|
-
|
|
246
|
-
dummy_field: false,
|
|
247
|
-
},
|
|
278
|
+
bcs: ExtensionKey.serialize({ dummy_field: false }).toBytes(),
|
|
248
279
|
},
|
|
249
280
|
});
|
|
250
281
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
const fields = (extension?.data?.content as { fields: { [k: string]: any } })?.fields?.value
|
|
254
|
-
?.fields;
|
|
282
|
+
const extension = Extension.parse(dynamicField.value.bcs);
|
|
255
283
|
|
|
256
284
|
return {
|
|
257
|
-
objectId:
|
|
285
|
+
objectId: dynamicField.fieldId,
|
|
258
286
|
type: extensionType,
|
|
259
|
-
isEnabled:
|
|
260
|
-
permissions:
|
|
261
|
-
storageId:
|
|
262
|
-
storageSize:
|
|
287
|
+
isEnabled: extension.is_enabled,
|
|
288
|
+
permissions: extension.permissions.toString(),
|
|
289
|
+
storageId: extension.storage.id,
|
|
290
|
+
storageSize: Number(extension.storage.size),
|
|
263
291
|
};
|
|
264
292
|
}
|
|
@@ -1,133 +1,167 @@
|
|
|
1
1
|
// Copyright (c) Mysten Labs, Inc.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
4
|
+
import { isValidSuiAddress } from '@mysten/sui/utils';
|
|
5
|
+
import type { ClientWithCoreApi } from '@mysten/sui/client';
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
import {
|
|
8
|
+
TransferPolicyCap as TransferPolicyCapStruct,
|
|
9
|
+
TransferPolicy as TransferPolicyStruct,
|
|
10
|
+
} from '../contracts/0x2/transfer_policy.js';
|
|
10
11
|
import type { TransferPolicy, TransferPolicyCap } from '../types/index.js';
|
|
11
12
|
import {
|
|
12
13
|
TRANSFER_POLICY_CAP_TYPE,
|
|
13
14
|
TRANSFER_POLICY_CREATED_EVENT,
|
|
14
15
|
TRANSFER_POLICY_TYPE,
|
|
15
16
|
} from '../types/index.js';
|
|
16
|
-
import {
|
|
17
|
+
import { queryEvents } from './client-utils.js';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
|
-
* Searches the `TransferPolicy`-s for the given type. The
|
|
20
|
+
* Searches the `TransferPolicy`-s for the given type. The search is performed via
|
|
20
21
|
* the `TransferPolicyCreated` event. The policy can either be owned or shared,
|
|
21
22
|
* and the caller needs to filter the results accordingly (ie single owner can not
|
|
22
23
|
* be accessed by anyone but the owner).
|
|
23
24
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
25
|
+
* This method requires event querying support (JSON-RPC or GraphQL clients).
|
|
26
|
+
* gRPC clients do not support event querying and will throw an error.
|
|
27
|
+
*
|
|
28
|
+
* @param client - The Sui client (must support event querying)
|
|
29
|
+
* @param type - The type of the asset (e.g., "0x123::nft::NFT")
|
|
30
|
+
* @throws Error if the client doesn't support event querying
|
|
26
31
|
*/
|
|
27
32
|
export async function queryTransferPolicy(
|
|
28
|
-
client:
|
|
33
|
+
client: ClientWithCoreApi,
|
|
29
34
|
type: string,
|
|
30
35
|
): Promise<TransferPolicy[]> {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
MoveEventType: `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`,
|
|
35
|
-
},
|
|
36
|
-
});
|
|
36
|
+
const data = await queryEvents(client, `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);
|
|
37
|
+
|
|
38
|
+
const search = data.map((event) => event.json as { id: string });
|
|
37
39
|
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
options: { showBcs: true, showOwner: true },
|
|
40
|
+
const { objects } = await client.core.getObjects({
|
|
41
|
+
objectIds: search.map((policy: { id: string }) => policy.id),
|
|
42
|
+
include: { content: true },
|
|
42
43
|
});
|
|
43
44
|
|
|
44
|
-
return
|
|
45
|
-
.filter((
|
|
46
|
-
.map((
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (!policy || !policy.bcs || !('bcsBytes' in policy.bcs)) {
|
|
50
|
-
throw new Error(`Invalid policy: ${policy?.objectId}, expected object, got package`);
|
|
45
|
+
return objects
|
|
46
|
+
.filter((obj) => !(obj instanceof Error) && obj.content)
|
|
47
|
+
.map((obj) => {
|
|
48
|
+
if (obj instanceof Error) {
|
|
49
|
+
throw obj;
|
|
51
50
|
}
|
|
52
51
|
|
|
53
|
-
|
|
52
|
+
if (!obj.content) {
|
|
53
|
+
throw new Error(`Invalid policy: ${obj.objectId}, expected object with content`);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const parsed = TransferPolicyStruct.parse(obj.content);
|
|
54
57
|
|
|
55
58
|
return {
|
|
56
|
-
id:
|
|
59
|
+
id: obj.objectId,
|
|
57
60
|
type: `${TRANSFER_POLICY_TYPE}<${type}>`,
|
|
58
|
-
owner:
|
|
59
|
-
rules: parsed.rules,
|
|
60
|
-
balance: parsed.balance,
|
|
61
|
+
owner: obj.owner,
|
|
62
|
+
rules: parsed.rules.contents.map((rule) => rule.name),
|
|
63
|
+
balance: parsed.balance.value.toString(),
|
|
61
64
|
} as TransferPolicy;
|
|
62
65
|
});
|
|
63
66
|
}
|
|
64
67
|
|
|
65
68
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* @
|
|
69
|
+
* Fetches all TransferPolicyCap objects owned by an address for a specific type.
|
|
70
|
+
*
|
|
71
|
+
* @param client - The Sui client
|
|
72
|
+
* @param address - The owner address
|
|
73
|
+
* @param type - The type of the asset
|
|
74
|
+
* @returns Array of TransferPolicyCap objects
|
|
71
75
|
*/
|
|
72
76
|
export async function queryTransferPolicyCapsByType(
|
|
73
|
-
client:
|
|
77
|
+
client: ClientWithCoreApi,
|
|
74
78
|
address: string,
|
|
75
79
|
type: string,
|
|
76
80
|
): Promise<TransferPolicyCap[]> {
|
|
77
81
|
if (!isValidSuiAddress(address)) return [];
|
|
78
82
|
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
83
|
+
const policies = [];
|
|
84
|
+
let hasNextPage = true;
|
|
85
|
+
let cursor: string | null = null;
|
|
86
|
+
|
|
87
|
+
while (hasNextPage) {
|
|
88
|
+
const result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =
|
|
89
|
+
await client.core.listOwnedObjects({
|
|
90
|
+
owner: address,
|
|
91
|
+
type: `${TRANSFER_POLICY_CAP_TYPE}<${type}>`,
|
|
92
|
+
cursor,
|
|
93
|
+
limit: 50,
|
|
94
|
+
include: {
|
|
95
|
+
content: true,
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
for (const obj of result.objects) {
|
|
100
|
+
if (obj.content) {
|
|
101
|
+
policies.push({
|
|
102
|
+
policyId: TransferPolicyCapStruct.parse(obj.content).policy_id,
|
|
103
|
+
policyCapId: obj.objectId,
|
|
104
|
+
type,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
93
108
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
109
|
+
hasNextPage = result.hasNextPage;
|
|
110
|
+
cursor = result.cursor;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return policies;
|
|
97
114
|
}
|
|
98
115
|
|
|
99
116
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
117
|
+
* Fetches all TransferPolicyCap objects owned by an address (all types).
|
|
118
|
+
*
|
|
119
|
+
* Uses struct-level filtering (without type parameters) to efficiently query
|
|
120
|
+
* only TransferPolicyCap objects. This matches all generic instantiations
|
|
121
|
+
* (e.g., TransferPolicyCap<T> for any T) and is supported natively by all clients.
|
|
122
|
+
*
|
|
123
|
+
* @param client - The Sui client
|
|
124
|
+
* @param address - The owner address
|
|
125
|
+
* @returns Array of TransferPolicyCap objects or undefined if address is invalid
|
|
105
126
|
*/
|
|
106
127
|
export async function queryOwnedTransferPolicies(
|
|
107
|
-
client:
|
|
128
|
+
client: ClientWithCoreApi,
|
|
108
129
|
address: string,
|
|
109
130
|
): Promise<TransferPolicyCap[] | undefined> {
|
|
110
131
|
if (!isValidSuiAddress(address)) return;
|
|
111
132
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
{
|
|
115
|
-
MoveModule: {
|
|
116
|
-
module: 'transfer_policy',
|
|
117
|
-
package: '0x2',
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
],
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
// fetch all owned kiosk caps, paginated.
|
|
124
|
-
const data = await getAllOwnedObjects({ client, owner: address, filter });
|
|
125
|
-
|
|
133
|
+
let hasNextPage = true;
|
|
134
|
+
let cursor: string | null = null;
|
|
126
135
|
const policies: TransferPolicyCap[] = [];
|
|
127
136
|
|
|
128
|
-
|
|
129
|
-
const
|
|
130
|
-
|
|
137
|
+
while (hasNextPage) {
|
|
138
|
+
const result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =
|
|
139
|
+
await client.core.listOwnedObjects({
|
|
140
|
+
owner: address,
|
|
141
|
+
type: TRANSFER_POLICY_CAP_TYPE,
|
|
142
|
+
cursor,
|
|
143
|
+
limit: 50,
|
|
144
|
+
include: {
|
|
145
|
+
content: true,
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// All results are TransferPolicyCap objects, extract the type parameter
|
|
150
|
+
for (const obj of result.objects) {
|
|
151
|
+
if (obj.content) {
|
|
152
|
+
// Extract the type parameter T from "0x2::transfer_policy::TransferPolicyCap<T>"
|
|
153
|
+
const objectType = obj.type!.replace(`${TRANSFER_POLICY_CAP_TYPE}<`, '').slice(0, -1);
|
|
154
|
+
|
|
155
|
+
policies.push({
|
|
156
|
+
policyId: TransferPolicyCapStruct.parse(obj.content).policy_id,
|
|
157
|
+
policyCapId: obj.objectId,
|
|
158
|
+
type: objectType,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
hasNextPage = result.hasNextPage;
|
|
164
|
+
cursor = result.cursor;
|
|
131
165
|
}
|
|
132
166
|
|
|
133
167
|
return policies;
|