@iota/kiosk 0.1.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 +12 -0
- package/LICENSE +201 -0
- package/README.md +8 -0
- package/dist/cjs/bcs.d.ts +2 -0
- package/dist/cjs/bcs.js +47 -0
- package/dist/cjs/bcs.js.map +7 -0
- package/dist/cjs/client/kiosk-client.d.ts +74 -0
- package/dist/cjs/client/kiosk-client.js +121 -0
- package/dist/cjs/client/kiosk-client.js.map +7 -0
- package/dist/cjs/client/kiosk-transaction.d.ts +184 -0
- package/dist/cjs/client/kiosk-transaction.js +511 -0
- package/dist/cjs/client/kiosk-transaction.js.map +7 -0
- package/dist/cjs/client/tp-transaction.d.ts +112 -0
- package/dist/cjs/client/tp-transaction.js +323 -0
- package/dist/cjs/client/tp-transaction.js.map +7 -0
- package/dist/cjs/constants.d.ts +24 -0
- package/dist/cjs/constants.js +66 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/query/kiosk.d.ts +14 -0
- package/dist/cjs/query/kiosk.js +128 -0
- package/dist/cjs/query/kiosk.js.map +7 -0
- package/dist/cjs/query/transfer-policy.d.ts +28 -0
- package/dist/cjs/query/transfer-policy.js +96 -0
- package/dist/cjs/query/transfer-policy.js.map +7 -0
- package/dist/cjs/tx/kiosk.d.ts +71 -0
- package/dist/cjs/tx/kiosk.js +130 -0
- package/dist/cjs/tx/kiosk.js.map +7 -0
- package/dist/cjs/tx/personal-kiosk.d.ts +7 -0
- package/dist/cjs/tx/personal-kiosk.js +38 -0
- package/dist/cjs/tx/personal-kiosk.js.map +7 -0
- package/dist/cjs/tx/rules/attach.d.ts +7 -0
- package/dist/cjs/tx/rules/attach.js +62 -0
- package/dist/cjs/tx/rules/attach.js.map +7 -0
- package/dist/cjs/tx/rules/resolve.d.ts +15 -0
- package/dist/cjs/tx/rules/resolve.js +81 -0
- package/dist/cjs/tx/rules/resolve.js.map +7 -0
- package/dist/cjs/tx/transfer-policy.d.ts +29 -0
- package/dist/cjs/tx/transfer-policy.js +78 -0
- package/dist/cjs/tx/transfer-policy.js.map +7 -0
- package/dist/cjs/types/index.d.ts +17 -0
- package/dist/cjs/types/index.js +20 -0
- package/dist/cjs/types/index.js.map +7 -0
- package/dist/cjs/types/kiosk.d.ts +160 -0
- package/dist/cjs/types/kiosk.js +37 -0
- package/dist/cjs/types/kiosk.js.map +7 -0
- package/dist/cjs/types/transfer-policy.d.ts +49 -0
- package/dist/cjs/types/transfer-policy.js +35 -0
- package/dist/cjs/types/transfer-policy.js.map +7 -0
- package/dist/cjs/utils.d.ts +51 -0
- package/dist/cjs/utils.js +204 -0
- package/dist/cjs/utils.js.map +7 -0
- package/dist/esm/bcs.d.ts +2 -0
- package/dist/esm/bcs.js +32 -0
- package/dist/esm/bcs.js.map +7 -0
- package/dist/esm/client/kiosk-client.d.ts +74 -0
- package/dist/esm/client/kiosk-client.js +105 -0
- package/dist/esm/client/kiosk-client.js.map +7 -0
- package/dist/esm/client/kiosk-transaction.d.ts +184 -0
- package/dist/esm/client/kiosk-transaction.js +481 -0
- package/dist/esm/client/kiosk-transaction.js.map +7 -0
- package/dist/esm/client/tp-transaction.d.ts +112 -0
- package/dist/esm/client/tp-transaction.js +314 -0
- package/dist/esm/client/tp-transaction.js.map +7 -0
- package/dist/esm/constants.d.ts +24 -0
- package/dist/esm/constants.js +51 -0
- package/dist/esm/constants.js.map +7 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/package.json +5 -0
- package/dist/esm/query/kiosk.d.ts +14 -0
- package/dist/esm/query/kiosk.js +116 -0
- package/dist/esm/query/kiosk.js.map +7 -0
- package/dist/esm/query/transfer-policy.d.ts +28 -0
- package/dist/esm/query/transfer-policy.js +80 -0
- package/dist/esm/query/transfer-policy.js.map +7 -0
- package/dist/esm/tx/kiosk.d.ts +71 -0
- package/dist/esm/tx/kiosk.js +110 -0
- package/dist/esm/tx/kiosk.js.map +7 -0
- package/dist/esm/tx/personal-kiosk.d.ts +7 -0
- package/dist/esm/tx/personal-kiosk.js +18 -0
- package/dist/esm/tx/personal-kiosk.js.map +7 -0
- package/dist/esm/tx/rules/attach.d.ts +7 -0
- package/dist/esm/tx/rules/attach.js +42 -0
- package/dist/esm/tx/rules/attach.js.map +7 -0
- package/dist/esm/tx/rules/resolve.d.ts +15 -0
- package/dist/esm/tx/rules/resolve.js +61 -0
- package/dist/esm/tx/rules/resolve.js.map +7 -0
- package/dist/esm/tx/transfer-policy.d.ts +29 -0
- package/dist/esm/tx/transfer-policy.js +58 -0
- package/dist/esm/tx/transfer-policy.js.map +7 -0
- package/dist/esm/types/index.d.ts +17 -0
- package/dist/esm/types/index.js +3 -0
- package/dist/esm/types/index.js.map +7 -0
- package/dist/esm/types/kiosk.d.ts +160 -0
- package/dist/esm/types/kiosk.js +17 -0
- package/dist/esm/types/kiosk.js.map +7 -0
- package/dist/esm/types/transfer-policy.d.ts +49 -0
- package/dist/esm/types/transfer-policy.js +15 -0
- package/dist/esm/types/transfer-policy.js.map +7 -0
- package/dist/esm/utils.d.ts +51 -0
- package/dist/esm/utils.js +184 -0
- package/dist/esm/utils.js.map +7 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +52 -0
- package/src/bcs.ts +42 -0
- package/src/client/kiosk-client.ts +159 -0
- package/src/client/kiosk-transaction.ts +542 -0
- package/src/client/tp-transaction.ts +360 -0
- package/src/constants.ts +85 -0
- package/src/index.ts +10 -0
- package/src/query/kiosk.ts +190 -0
- package/src/query/transfer-policy.ts +135 -0
- package/src/tx/kiosk.ts +244 -0
- package/src/tx/personal-kiosk.ts +35 -0
- package/src/tx/rules/attach.ts +74 -0
- package/src/tx/rules/resolve.ts +87 -0
- package/src/tx/transfer-policy.ts +121 -0
- package/src/types/index.ts +25 -0
- package/src/types/kiosk.ts +179 -0
- package/src/types/transfer-policy.ts +68 -0
- package/src/utils.ts +284 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var transfer_policy_exports = {};
|
|
20
|
+
__export(transfer_policy_exports, {
|
|
21
|
+
KIOSK_LOCK_RULE: () => KIOSK_LOCK_RULE,
|
|
22
|
+
ROYALTY_RULE: () => ROYALTY_RULE,
|
|
23
|
+
TRANSFER_POLICY_CAP_TYPE: () => TRANSFER_POLICY_CAP_TYPE,
|
|
24
|
+
TRANSFER_POLICY_CREATED_EVENT: () => TRANSFER_POLICY_CREATED_EVENT,
|
|
25
|
+
TRANSFER_POLICY_MODULE: () => TRANSFER_POLICY_MODULE,
|
|
26
|
+
TRANSFER_POLICY_TYPE: () => TRANSFER_POLICY_TYPE
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(transfer_policy_exports);
|
|
29
|
+
const TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
|
|
30
|
+
const TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;
|
|
31
|
+
const TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;
|
|
32
|
+
const TRANSFER_POLICY_CAP_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicyCap`;
|
|
33
|
+
const KIOSK_LOCK_RULE = "kiosk_lock_rule::Rule";
|
|
34
|
+
const ROYALTY_RULE = "royalty_rule::Rule";
|
|
35
|
+
//# sourceMappingURL=transfer-policy.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/transfer-policy.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ObjectOwner } from '@iota/iota-sdk/client';\nimport type { TransactionBlock, TransactionObjectArgument } from '@iota/iota-sdk/transactions';\n\nimport type { ObjectArgument } from './index.js';\n\n/** The Transfer Policy module. */\nexport const TRANSFER_POLICY_MODULE = '0x2::transfer_policy';\n\n/** Name of the event emitted when a TransferPolicy for T is created. */\nexport const TRANSFER_POLICY_CREATED_EVENT = `${TRANSFER_POLICY_MODULE}::TransferPolicyCreated`;\n\n/** The Transfer Policy Type */\nexport const TRANSFER_POLICY_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicy`;\n\n/** The Transfer Policy Cap Type */\nexport const TRANSFER_POLICY_CAP_TYPE = `${TRANSFER_POLICY_MODULE}::TransferPolicyCap`;\n\n/** The Kiosk Lock Rule */\nexport const KIOSK_LOCK_RULE = 'kiosk_lock_rule::Rule';\n\n/** The Royalty rule */\nexport const ROYALTY_RULE = 'royalty_rule::Rule';\n\n/**\n * The Transfer Policy Cap in a consumable way.\n */\nexport type TransferPolicyCap = {\n policyId: string;\n policyCapId: string;\n type: string;\n};\n\n/** The `TransferPolicy` object */\nexport type TransferPolicy = {\n id: string;\n type: string;\n balance: string;\n rules: string[];\n owner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n id: string;\n};\n\n// The object a Rule resolving function accepts\n// It can accept a set of fixed fields, that are part of every purchase flow as well any extra arguments to resolve custom policies!\n// Each rule resolving function should check that the key it's seeking is in the object\n// e.g. `if(!'my_key' in ruleParams!) throw new Error(\"Can't resolve that rule!\")`\nexport type RuleResolvingParams = {\n transactionBlock: TransactionBlock;\n itemType: string;\n itemId: string;\n price: string;\n policyId: ObjectArgument;\n sellerKiosk: ObjectArgument;\n kiosk: ObjectArgument;\n kioskCap: ObjectArgument;\n transferRequest: TransactionObjectArgument;\n purchasedItem: TransactionObjectArgument;\n packageId: string;\n extraArgs: Record<string, any>; // extraParams contains more possible {key, values} to pass for custom rules.\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,yBAAyB;AAG/B,MAAM,gCAAgC,GAAG;AAGzC,MAAM,uBAAuB,GAAG;AAGhC,MAAM,2BAA2B,GAAG;AAGpC,MAAM,kBAAkB;AAGxB,MAAM,eAAe;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { DynamicFieldInfo, PaginationArguments, IotaClient, IotaObjectData, IotaObjectDataFilter, IotaObjectDataOptions, IotaObjectResponse } from '@iota/iota-sdk/client';
|
|
2
|
+
import type { Kiosk, KioskData, KioskListing, TransferPolicyCap } from './types/index.js';
|
|
3
|
+
export declare function getKioskObject(client: IotaClient, id: string): Promise<Kiosk>;
|
|
4
|
+
export declare function extractKioskData(data: DynamicFieldInfo[], listings: KioskListing[], lockedItemIds: string[], kioskId: string): KioskData;
|
|
5
|
+
/**
|
|
6
|
+
* A helper that attaches the listing prices to kiosk listings.
|
|
7
|
+
*/
|
|
8
|
+
export declare function attachListingsAndPrices(kioskData: KioskData, listings: KioskListing[], listingObjects: IotaObjectResponse[]): void;
|
|
9
|
+
/**
|
|
10
|
+
* A helper that attaches the listing prices to kiosk listings.
|
|
11
|
+
*/
|
|
12
|
+
export declare function attachObjects(kioskData: KioskData, objects: IotaObjectData[]): void;
|
|
13
|
+
/**
|
|
14
|
+
* A Helper to attach locked state to items in Kiosk Data.
|
|
15
|
+
*/
|
|
16
|
+
export declare function attachLockedItems(kioskData: KioskData, lockedItemIds: string[]): void;
|
|
17
|
+
/**
|
|
18
|
+
* A helper to fetch all DF pages.
|
|
19
|
+
* We need that to fetch the kiosk DFs consistently, until we have
|
|
20
|
+
* RPC calls that allow filtering of Type / batch fetching of spec
|
|
21
|
+
*/
|
|
22
|
+
export declare function getAllDynamicFields(client: IotaClient, parentId: string, pagination: PaginationArguments<string>): Promise<DynamicFieldInfo[]>;
|
|
23
|
+
/**
|
|
24
|
+
* A helper to fetch all objects that works with pagination.
|
|
25
|
+
* It will fetch all objects in the array, and limit it to 50/request.
|
|
26
|
+
* Requests are sent using `Promise.all`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getAllObjects(client: IotaClient, ids: string[], options: IotaObjectDataOptions, limit?: number): Promise<IotaObjectResponse[]>;
|
|
29
|
+
/**
|
|
30
|
+
* A helper to return all owned objects, with an optional filter.
|
|
31
|
+
* It parses all the pages and returns the data.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getAllOwnedObjects({ client, owner, filter, limit, options, }: {
|
|
34
|
+
client: IotaClient;
|
|
35
|
+
owner: string;
|
|
36
|
+
filter?: IotaObjectDataFilter;
|
|
37
|
+
options?: IotaObjectDataOptions;
|
|
38
|
+
limit?: number;
|
|
39
|
+
}): Promise<IotaObjectResponse[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Converts a number to basis points.
|
|
42
|
+
* Supports up to 2 decimal points.
|
|
43
|
+
* E.g 9.95 -> 995
|
|
44
|
+
* @param percentage A percentage amount in the range [0, 100] including decimals.
|
|
45
|
+
*/
|
|
46
|
+
export declare function percentageToBasisPoints(percentage: number): number;
|
|
47
|
+
/**
|
|
48
|
+
* A helper to parse a transfer policy Cap into a usable object.
|
|
49
|
+
*/
|
|
50
|
+
export declare function parseTransferPolicyCapObject(item: IotaObjectResponse): TransferPolicyCap | undefined;
|
|
51
|
+
export declare function getNormalizedRuleType(rule: string): string;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var utils_exports = {};
|
|
20
|
+
__export(utils_exports, {
|
|
21
|
+
attachListingsAndPrices: () => attachListingsAndPrices,
|
|
22
|
+
attachLockedItems: () => attachLockedItems,
|
|
23
|
+
attachObjects: () => attachObjects,
|
|
24
|
+
extractKioskData: () => extractKioskData,
|
|
25
|
+
getAllDynamicFields: () => getAllDynamicFields,
|
|
26
|
+
getAllObjects: () => getAllObjects,
|
|
27
|
+
getAllOwnedObjects: () => getAllOwnedObjects,
|
|
28
|
+
getKioskObject: () => getKioskObject,
|
|
29
|
+
getNormalizedRuleType: () => getNormalizedRuleType,
|
|
30
|
+
parseTransferPolicyCapObject: () => parseTransferPolicyCapObject,
|
|
31
|
+
percentageToBasisPoints: () => percentageToBasisPoints
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(utils_exports);
|
|
34
|
+
var import_utils = require("@iota/iota-sdk/utils");
|
|
35
|
+
var import_bcs = require("./bcs.js");
|
|
36
|
+
var import_types = require("./types/index.js");
|
|
37
|
+
const DEFAULT_QUERY_LIMIT = 50;
|
|
38
|
+
async function getKioskObject(client, id) {
|
|
39
|
+
const queryRes = await client.getObject({ id, options: { showBcs: true } });
|
|
40
|
+
if (!queryRes || queryRes.error || !queryRes.data) {
|
|
41
|
+
throw new Error(`Kiosk ${id} not found; ${queryRes.error}`);
|
|
42
|
+
}
|
|
43
|
+
if (!queryRes.data.bcs || !("bcsBytes" in queryRes.data.bcs)) {
|
|
44
|
+
throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);
|
|
45
|
+
}
|
|
46
|
+
return import_bcs.bcs.de(import_types.KIOSK_TYPE, queryRes.data.bcs.bcsBytes, "base64");
|
|
47
|
+
}
|
|
48
|
+
function extractKioskData(data, listings, lockedItemIds, kioskId) {
|
|
49
|
+
return data.reduce(
|
|
50
|
+
(acc, val) => {
|
|
51
|
+
const type = val.name.type;
|
|
52
|
+
if (type.startsWith("0x2::kiosk::Item")) {
|
|
53
|
+
acc.itemIds.push(val.objectId);
|
|
54
|
+
acc.items.push({
|
|
55
|
+
objectId: val.objectId,
|
|
56
|
+
type: val.objectType,
|
|
57
|
+
isLocked: false,
|
|
58
|
+
kioskId
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (type.startsWith("0x2::kiosk::Listing")) {
|
|
62
|
+
acc.listingIds.push(val.objectId);
|
|
63
|
+
listings.push({
|
|
64
|
+
objectId: val.name.value.id,
|
|
65
|
+
listingId: val.objectId,
|
|
66
|
+
isExclusive: val.name.value.is_exclusive
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (type.startsWith("0x2::kiosk::Lock")) {
|
|
70
|
+
lockedItemIds?.push(val.name.value.id);
|
|
71
|
+
}
|
|
72
|
+
if (type.startsWith("0x2::kiosk_extension::ExtensionKey")) {
|
|
73
|
+
acc.extensions.push({
|
|
74
|
+
objectId: val.objectId,
|
|
75
|
+
type: (0, import_utils.normalizeStructTag)((0, import_utils.parseStructTag)(val.name.type).typeParams[0])
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return acc;
|
|
79
|
+
},
|
|
80
|
+
{ items: [], itemIds: [], listingIds: [], extensions: [] }
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
function attachListingsAndPrices(kioskData, listings, listingObjects) {
|
|
84
|
+
const itemListings = listings.reduce(
|
|
85
|
+
(acc, item, idx) => {
|
|
86
|
+
acc[item.objectId] = { ...item };
|
|
87
|
+
if (listingObjects.length === 0)
|
|
88
|
+
return acc;
|
|
89
|
+
const content = listingObjects[idx].data?.content;
|
|
90
|
+
const data = content?.dataType === "moveObject" ? content?.fields : null;
|
|
91
|
+
if (!data)
|
|
92
|
+
return acc;
|
|
93
|
+
acc[item.objectId].price = data.value;
|
|
94
|
+
return acc;
|
|
95
|
+
},
|
|
96
|
+
{}
|
|
97
|
+
);
|
|
98
|
+
kioskData.items.forEach((item) => {
|
|
99
|
+
item.listing = itemListings[item.objectId] || void 0;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function attachObjects(kioskData, objects) {
|
|
103
|
+
const mapping = objects.reduce(
|
|
104
|
+
(acc, obj) => {
|
|
105
|
+
acc[obj.objectId] = obj;
|
|
106
|
+
return acc;
|
|
107
|
+
},
|
|
108
|
+
{}
|
|
109
|
+
);
|
|
110
|
+
kioskData.items.forEach((item) => {
|
|
111
|
+
item.data = mapping[item.objectId] || void 0;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
function attachLockedItems(kioskData, lockedItemIds) {
|
|
115
|
+
const lockedStatuses = lockedItemIds.reduce(
|
|
116
|
+
(acc, item) => {
|
|
117
|
+
acc[item] = true;
|
|
118
|
+
return acc;
|
|
119
|
+
},
|
|
120
|
+
{}
|
|
121
|
+
);
|
|
122
|
+
kioskData.items.forEach((item) => {
|
|
123
|
+
item.isLocked = lockedStatuses[item.objectId] || false;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async function getAllDynamicFields(client, parentId, pagination) {
|
|
127
|
+
let hasNextPage = true;
|
|
128
|
+
let cursor = void 0;
|
|
129
|
+
const data = [];
|
|
130
|
+
while (hasNextPage) {
|
|
131
|
+
const result = await client.getDynamicFields({
|
|
132
|
+
parentId,
|
|
133
|
+
limit: pagination.limit || void 0,
|
|
134
|
+
cursor
|
|
135
|
+
});
|
|
136
|
+
data.push(...result.data);
|
|
137
|
+
hasNextPage = result.hasNextPage;
|
|
138
|
+
cursor = result.nextCursor;
|
|
139
|
+
}
|
|
140
|
+
return data;
|
|
141
|
+
}
|
|
142
|
+
async function getAllObjects(client, ids, options, limit = DEFAULT_QUERY_LIMIT) {
|
|
143
|
+
const chunks = Array.from(
|
|
144
|
+
{ length: Math.ceil(ids.length / limit) },
|
|
145
|
+
(_, index) => ids.slice(index * limit, index * limit + limit)
|
|
146
|
+
);
|
|
147
|
+
const results = await Promise.all(
|
|
148
|
+
chunks.map((chunk) => {
|
|
149
|
+
return client.multiGetObjects({
|
|
150
|
+
ids: chunk,
|
|
151
|
+
options
|
|
152
|
+
});
|
|
153
|
+
})
|
|
154
|
+
);
|
|
155
|
+
return results.flat();
|
|
156
|
+
}
|
|
157
|
+
async function getAllOwnedObjects({
|
|
158
|
+
client,
|
|
159
|
+
owner,
|
|
160
|
+
filter,
|
|
161
|
+
limit = DEFAULT_QUERY_LIMIT,
|
|
162
|
+
options = { showType: true, showContent: true }
|
|
163
|
+
}) {
|
|
164
|
+
let hasNextPage = true;
|
|
165
|
+
let cursor = void 0;
|
|
166
|
+
const data = [];
|
|
167
|
+
while (hasNextPage) {
|
|
168
|
+
const result = await client.getOwnedObjects({
|
|
169
|
+
owner,
|
|
170
|
+
filter,
|
|
171
|
+
limit,
|
|
172
|
+
cursor,
|
|
173
|
+
options
|
|
174
|
+
});
|
|
175
|
+
data.push(...result.data);
|
|
176
|
+
hasNextPage = result.hasNextPage;
|
|
177
|
+
cursor = result.nextCursor;
|
|
178
|
+
}
|
|
179
|
+
return data;
|
|
180
|
+
}
|
|
181
|
+
function percentageToBasisPoints(percentage) {
|
|
182
|
+
if (percentage < 0 || percentage > 100)
|
|
183
|
+
throw new Error("Percentage needs to be in the [0,100] range.");
|
|
184
|
+
return Math.ceil(percentage * 100);
|
|
185
|
+
}
|
|
186
|
+
function parseTransferPolicyCapObject(item) {
|
|
187
|
+
const type = item?.data?.content?.type;
|
|
188
|
+
const policy = item?.data?.content?.fields?.policy_id;
|
|
189
|
+
if (!type.includes(import_types.TRANSFER_POLICY_CAP_TYPE))
|
|
190
|
+
return void 0;
|
|
191
|
+
const objectType = type.replace(import_types.TRANSFER_POLICY_CAP_TYPE + "<", "").slice(0, -1);
|
|
192
|
+
return {
|
|
193
|
+
policyId: policy,
|
|
194
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
|
|
195
|
+
policyCapId: item.data?.objectId,
|
|
196
|
+
type: objectType
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function getNormalizedRuleType(rule) {
|
|
200
|
+
const normalizedRuleAddress = rule.split("::");
|
|
201
|
+
normalizedRuleAddress[0] = (0, import_utils.normalizeIotaAddress)(normalizedRuleAddress[0]);
|
|
202
|
+
return normalizedRuleAddress.join("::");
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n DynamicFieldInfo,\n PaginationArguments,\n IotaClient,\n IotaObjectData,\n IotaObjectDataFilter,\n IotaObjectDataOptions,\n IotaObjectResponse,\n} from '@iota/iota-sdk/client';\nimport { normalizeStructTag, normalizeIotaAddress, parseStructTag } from '@iota/iota-sdk/utils';\n\nimport { bcs } from './bcs.js';\nimport type { Kiosk, KioskData, KioskListing, TransferPolicyCap } from './types/index.js';\nimport { KIOSK_TYPE, TRANSFER_POLICY_CAP_TYPE } from './types/index.js';\n\nconst DEFAULT_QUERY_LIMIT = 50;\n\nexport async function getKioskObject(client: IotaClient, id: string): Promise<Kiosk> {\n const queryRes = await client.getObject({ id, options: { showBcs: true } });\n\n if (!queryRes || queryRes.error || !queryRes.data) {\n throw new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n }\n\n if (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n }\n\n return bcs.de(KIOSK_TYPE, queryRes.data.bcs!.bcsBytes, 'base64');\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n data: DynamicFieldInfo[],\n listings: KioskListing[],\n lockedItemIds: string[],\n kioskId: string,\n): KioskData {\n return data.reduce<KioskData>(\n (acc: KioskData, val: DynamicFieldInfo) => {\n const type = val.name.type;\n\n if (type.startsWith('0x2::kiosk::Item')) {\n acc.itemIds.push(val.objectId);\n acc.items.push({\n objectId: val.objectId,\n type: val.objectType,\n isLocked: false,\n kioskId,\n });\n }\n if (type.startsWith('0x2::kiosk::Listing')) {\n acc.listingIds.push(val.objectId);\n listings.push({\n objectId: (val.name.value as { id: string }).id,\n listingId: val.objectId,\n isExclusive: (val.name.value as { is_exclusive: boolean }).is_exclusive,\n });\n }\n if (type.startsWith('0x2::kiosk::Lock')) {\n lockedItemIds?.push((val.name.value as { id: string }).id);\n }\n\n if (type.startsWith('0x2::kiosk_extension::ExtensionKey')) {\n acc.extensions.push({\n objectId: val.objectId,\n type: normalizeStructTag(parseStructTag(val.name.type).typeParams[0]),\n });\n }\n\n return acc;\n },\n { items: [], itemIds: [], listingIds: [], extensions: [] },\n );\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n kioskData: KioskData,\n listings: KioskListing[],\n listingObjects: IotaObjectResponse[],\n) {\n // map item listings as {item_id: KioskListing}\n // for easier mapping on the nex\n const itemListings = listings.reduce<Record<string, KioskListing>>(\n (acc: Record<string, KioskListing>, item, idx) => {\n acc[item.objectId] = { ...item };\n\n // return in case we don't have any listing objects.\n // that's the case when we don't have the `listingPrices` included.\n if (listingObjects.length === 0) return acc;\n\n const content = listingObjects[idx].data?.content;\n const data = content?.dataType === 'moveObject' ? content?.fields : null;\n\n if (!data) return acc;\n\n acc[item.objectId].price = (data as { value: string }).value;\n return acc;\n },\n {},\n );\n\n kioskData.items.forEach((item) => {\n item.listing = itemListings[item.objectId] || undefined;\n });\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachObjects(kioskData: KioskData, objects: IotaObjectData[]) {\n const mapping = objects.reduce<Record<string, IotaObjectData>>(\n (acc: Record<string, IotaObjectData>, obj) => {\n acc[obj.objectId] = obj;\n return acc;\n },\n {},\n );\n\n kioskData.items.forEach((item) => {\n item.data = mapping[item.objectId] || undefined;\n });\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(kioskData: KioskData, lockedItemIds: string[]) {\n // map lock status in an array of type { item_id: true }\n const lockedStatuses = lockedItemIds.reduce<Record<string, boolean>>(\n (acc: Record<string, boolean>, item: string) => {\n acc[item] = true;\n return acc;\n },\n {},\n );\n\n // parse lockedItemIds and attach their locked status.\n kioskData.items.forEach((item) => {\n item.isLocked = lockedStatuses[item.objectId] || false;\n });\n}\n\n/**\n * A helper to fetch all DF pages.\n * We need that to fetch the kiosk DFs consistently, until we have\n * RPC calls that allow filtering of Type / batch fetching of spec\n */\nexport async function getAllDynamicFields(\n client: IotaClient,\n parentId: string,\n pagination: PaginationArguments<string>,\n) {\n let hasNextPage = true;\n let cursor = undefined;\n const data: DynamicFieldInfo[] = [];\n\n while (hasNextPage) {\n const result = await client.getDynamicFields({\n parentId,\n limit: pagination.limit || undefined,\n cursor,\n });\n data.push(...result.data);\n hasNextPage = result.hasNextPage;\n cursor = result.nextCursor;\n }\n\n return data;\n}\n\n/**\n * A helper to fetch all objects that works with pagination.\n * It will fetch all objects in the array, and limit it to 50/request.\n * Requests are sent using `Promise.all`.\n */\nexport async function getAllObjects(\n client: IotaClient,\n ids: string[],\n options: IotaObjectDataOptions,\n limit: number = DEFAULT_QUERY_LIMIT,\n) {\n const chunks = Array.from({ length: Math.ceil(ids.length / limit) }, (_, index) =>\n ids.slice(index * limit, index * limit + limit),\n );\n\n const results = await Promise.all(\n chunks.map((chunk) => {\n return client.multiGetObjects({\n ids: chunk,\n options,\n });\n }),\n );\n\n return results.flat();\n}\n\n/**\n * A helper to return all owned objects, with an optional filter.\n * It parses all the pages and returns the data.\n */\nexport async function getAllOwnedObjects({\n client,\n owner,\n filter,\n limit = DEFAULT_QUERY_LIMIT,\n options = { showType: true, showContent: true },\n}: {\n client: IotaClient;\n owner: string;\n filter?: IotaObjectDataFilter;\n options?: IotaObjectDataOptions;\n limit?: number;\n}) {\n let hasNextPage = true;\n let cursor = undefined;\n const data: IotaObjectResponse[] = [];\n\n while (hasNextPage) {\n const result = await client.getOwnedObjects({\n owner,\n filter,\n limit,\n cursor,\n options,\n });\n data.push(...result.data);\n hasNextPage = result.hasNextPage;\n cursor = result.nextCursor;\n }\n\n return data;\n}\n\n/**\n * Converts a number to basis points.\n * Supports up to 2 decimal points.\n * E.g 9.95 -> 995\n * @param percentage A percentage amount in the range [0, 100] including decimals.\n */\nexport function percentageToBasisPoints(percentage: number) {\n if (percentage < 0 || percentage > 100)\n throw new Error('Percentage needs to be in the [0,100] range.');\n return Math.ceil(percentage * 100);\n}\n\n/**\n * A helper to parse a transfer policy Cap into a usable object.\n */\nexport function parseTransferPolicyCapObject(\n item: IotaObjectResponse,\n): TransferPolicyCap | undefined {\n const type = (item?.data?.content as { type: string })?.type;\n\n //@ts-expect-error Silencing error here\n const policy = item?.data?.content?.fields?.policy_id as string;\n\n if (!type.includes(TRANSFER_POLICY_CAP_TYPE)) return undefined;\n\n // Transform 0x2::transfer_policy::TransferPolicyCap<itemType> -> itemType\n const objectType = type.replace(TRANSFER_POLICY_CAP_TYPE + '<', '').slice(0, -1);\n\n return {\n policyId: policy,\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n policyCapId: item.data?.objectId!,\n type: objectType,\n };\n}\n\n// Normalizes the packageId part of a rule's type.\nexport function getNormalizedRuleType(rule: string) {\n const normalizedRuleAddress = rule.split('::');\n normalizedRuleAddress[0] = normalizeIotaAddress(normalizedRuleAddress[0]);\n return normalizedRuleAddress.join('::');\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/esm/bcs.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { bcs } from "@iota/iota-sdk/bcs";
|
|
2
|
+
import {
|
|
3
|
+
KIOSK_PURCHASE_CAP,
|
|
4
|
+
KIOSK_TYPE,
|
|
5
|
+
TRANSFER_POLICY_CREATED_EVENT,
|
|
6
|
+
TRANSFER_POLICY_TYPE
|
|
7
|
+
} from "./types/index.js";
|
|
8
|
+
bcs.registerStructType(KIOSK_TYPE, {
|
|
9
|
+
id: "address",
|
|
10
|
+
profits: "u64",
|
|
11
|
+
owner: "address",
|
|
12
|
+
itemCount: "u32",
|
|
13
|
+
allowExtensions: "bool"
|
|
14
|
+
});
|
|
15
|
+
bcs.registerStructType(KIOSK_PURCHASE_CAP, {
|
|
16
|
+
id: "address",
|
|
17
|
+
kioskId: "address",
|
|
18
|
+
itemId: "address",
|
|
19
|
+
minPrice: "u64"
|
|
20
|
+
});
|
|
21
|
+
bcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {
|
|
22
|
+
id: "address"
|
|
23
|
+
});
|
|
24
|
+
bcs.registerStructType(TRANSFER_POLICY_TYPE, {
|
|
25
|
+
id: "address",
|
|
26
|
+
balance: "u64",
|
|
27
|
+
rules: ["vector", "string"]
|
|
28
|
+
});
|
|
29
|
+
export {
|
|
30
|
+
bcs
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=bcs.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/bcs.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@iota/iota-sdk/bcs';\n\nimport {\n KIOSK_PURCHASE_CAP,\n KIOSK_TYPE,\n TRANSFER_POLICY_CREATED_EVENT,\n TRANSFER_POLICY_TYPE,\n} from './types/index.js';\n\n// Register the `Kiosk` struct for faster queries.\nbcs.registerStructType(KIOSK_TYPE, {\n id: 'address',\n profits: 'u64',\n owner: 'address',\n itemCount: 'u32',\n allowExtensions: 'bool',\n});\n\n// Register the `PurchaseCap` for faster queries.\nbcs.registerStructType(KIOSK_PURCHASE_CAP, {\n id: 'address',\n kioskId: 'address',\n itemId: 'address',\n minPrice: 'u64',\n});\n\n// Register the `TransferPolicyCreated` event data.\nbcs.registerStructType(TRANSFER_POLICY_CREATED_EVENT, {\n id: 'address',\n});\n\nbcs.registerStructType(TRANSFER_POLICY_TYPE, {\n id: 'address',\n balance: 'u64',\n rules: ['vector', 'string'],\n});\n\nexport { bcs };\n"],
|
|
5
|
+
"mappings": "AAIA,SAAS,WAAW;AAEpB;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAGP,IAAI,mBAAmB,YAAY;AAAA,EAC/B,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,iBAAiB;AACrB,CAAC;AAGD,IAAI,mBAAmB,oBAAoB;AAAA,EACvC,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AACd,CAAC;AAGD,IAAI,mBAAmB,+BAA+B;AAAA,EAClD,IAAI;AACR,CAAC;AAED,IAAI,mBAAmB,sBAAsB;AAAA,EACzC,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,OAAO,CAAC,UAAU,QAAQ;AAC9B,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { NetworkId } from '@iota/iota-sdk/client';
|
|
2
|
+
import type { IotaClient } from '@iota/iota-sdk/client';
|
|
3
|
+
import type { BaseRulePackageIds, TransferPolicyRule } from '../constants.js';
|
|
4
|
+
import type { FetchKioskOptions, KioskClientOptions, KioskData, OwnedKiosks } from '../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* A Client that allows you to interact with kiosk.
|
|
7
|
+
* Offers utilities to query kiosk, craft transactions to edit your own kiosk,
|
|
8
|
+
* purchase, manage transfer policies, create new kiosks etc.
|
|
9
|
+
* If you pass packageIds, all functionality will be managed using these packages.
|
|
10
|
+
*/
|
|
11
|
+
export declare class KioskClient {
|
|
12
|
+
client: IotaClient;
|
|
13
|
+
network: NetworkId;
|
|
14
|
+
rules: TransferPolicyRule[];
|
|
15
|
+
packageIds?: BaseRulePackageIds;
|
|
16
|
+
constructor(options: KioskClientOptions);
|
|
17
|
+
/**
|
|
18
|
+
* Get an addresses's owned kiosks.
|
|
19
|
+
* @param address The address for which we want to retrieve the kiosks.
|
|
20
|
+
* @returns An Object containing all the `kioskOwnerCap` objects as well as the kioskIds.
|
|
21
|
+
*/
|
|
22
|
+
getOwnedKiosks({ address }: {
|
|
23
|
+
address: string;
|
|
24
|
+
}): Promise<OwnedKiosks>;
|
|
25
|
+
/**
|
|
26
|
+
* Fetches the kiosk contents.
|
|
27
|
+
* @param kioskId The ID of the kiosk to fetch.
|
|
28
|
+
* @param options Optioal
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
getKiosk({ id, options, }: {
|
|
32
|
+
id: string;
|
|
33
|
+
options?: FetchKioskOptions;
|
|
34
|
+
}): Promise<KioskData>;
|
|
35
|
+
/**
|
|
36
|
+
* Fetch the extension data (if any) for a kiosk, by type
|
|
37
|
+
* @param kioskId The ID of the kiosk to lookup
|
|
38
|
+
* @param extensionType The Type of the extension (can be used from by using the type returned by `getKiosk()`)
|
|
39
|
+
*/
|
|
40
|
+
getKioskExtension({ kioskId, type }: {
|
|
41
|
+
kioskId: string;
|
|
42
|
+
type: string;
|
|
43
|
+
}): Promise<import("../types/kiosk.js").KioskExtension | null>;
|
|
44
|
+
/**
|
|
45
|
+
* Query the Transfer Policy(ies) for type `T`.
|
|
46
|
+
* @param type The Type we're querying for (E.g `0xMyAddress::hero::Hero`)
|
|
47
|
+
*/
|
|
48
|
+
getTransferPolicies({ type }: {
|
|
49
|
+
type: string;
|
|
50
|
+
}): Promise<import("../types/transfer-policy.js").TransferPolicy[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Query all the owned transfer policies for an address.
|
|
53
|
+
* Returns `TransferPolicyCap` which uncludes `policyId, policyCapId, type`.
|
|
54
|
+
* @param address The address we're searching the owned transfer policies for.
|
|
55
|
+
*/
|
|
56
|
+
getOwnedTransferPolicies({ address }: {
|
|
57
|
+
address: string;
|
|
58
|
+
}): Promise<import("../types/transfer-policy.js").TransferPolicyCap[] | undefined>;
|
|
59
|
+
/**
|
|
60
|
+
* Query the Transfer Policy Cap for type `T`, owned by `address`
|
|
61
|
+
* @param type The Type `T` for the object
|
|
62
|
+
* @param address The address that owns the cap.
|
|
63
|
+
*/
|
|
64
|
+
getOwnedTransferPoliciesByType({ type, address }: {
|
|
65
|
+
type: string;
|
|
66
|
+
address: string;
|
|
67
|
+
}): Promise<import("../types/transfer-policy.js").TransferPolicyCap[]>;
|
|
68
|
+
addRuleResolver(rule: TransferPolicyRule): void;
|
|
69
|
+
/**
|
|
70
|
+
* A convenient helper to get the packageIds for our supported ruleset,
|
|
71
|
+
* based on `kioskClient` configuration.
|
|
72
|
+
*/
|
|
73
|
+
getRulePackageId(rule: 'kioskLockRulePackageId' | 'royaltyRulePackageId' | 'personalKioskRulePackageId' | 'floorPriceRulePackageId'): string;
|
|
74
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { getNetwork } from "@iota/iota-sdk/client";
|
|
2
|
+
import { getBaseRules, rules } from "../constants.js";
|
|
3
|
+
import { fetchKiosk, fetchKioskExtension, getOwnedKiosks } from "../query/kiosk.js";
|
|
4
|
+
import {
|
|
5
|
+
queryOwnedTransferPolicies,
|
|
6
|
+
queryTransferPolicy,
|
|
7
|
+
queryTransferPolicyCapsByType
|
|
8
|
+
} from "../query/transfer-policy.js";
|
|
9
|
+
class KioskClient {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.client = options.client;
|
|
12
|
+
this.network = options.network;
|
|
13
|
+
this.rules = rules;
|
|
14
|
+
this.packageIds = options.packageIds;
|
|
15
|
+
if (options.packageIds)
|
|
16
|
+
this.rules.push(...getBaseRules(options.packageIds));
|
|
17
|
+
}
|
|
18
|
+
/// Querying
|
|
19
|
+
/**
|
|
20
|
+
* Get an addresses's owned kiosks.
|
|
21
|
+
* @param address The address for which we want to retrieve the kiosks.
|
|
22
|
+
* @returns An Object containing all the `kioskOwnerCap` objects as well as the kioskIds.
|
|
23
|
+
*/
|
|
24
|
+
async getOwnedKiosks({ address }) {
|
|
25
|
+
const personalPackageId = this.packageIds?.personalKioskRulePackageId || getNetwork(this.network).kiosk?.personalKioskRulePackageId || "";
|
|
26
|
+
return getOwnedKiosks(this.client, address, {
|
|
27
|
+
personalKioskType: personalPackageId ? `${personalPackageId}::personal_kiosk::PersonalKioskCap` : ""
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Fetches the kiosk contents.
|
|
32
|
+
* @param kioskId The ID of the kiosk to fetch.
|
|
33
|
+
* @param options Optioal
|
|
34
|
+
* @returns
|
|
35
|
+
*/
|
|
36
|
+
async getKiosk({
|
|
37
|
+
id,
|
|
38
|
+
options
|
|
39
|
+
}) {
|
|
40
|
+
return (await fetchKiosk(
|
|
41
|
+
this.client,
|
|
42
|
+
id,
|
|
43
|
+
{
|
|
44
|
+
limit: 1e3
|
|
45
|
+
},
|
|
46
|
+
options || {}
|
|
47
|
+
)).data;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Fetch the extension data (if any) for a kiosk, by type
|
|
51
|
+
* @param kioskId The ID of the kiosk to lookup
|
|
52
|
+
* @param extensionType The Type of the extension (can be used from by using the type returned by `getKiosk()`)
|
|
53
|
+
*/
|
|
54
|
+
async getKioskExtension({ kioskId, type }) {
|
|
55
|
+
return fetchKioskExtension(this.client, kioskId, type);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Query the Transfer Policy(ies) for type `T`.
|
|
59
|
+
* @param type The Type we're querying for (E.g `0xMyAddress::hero::Hero`)
|
|
60
|
+
*/
|
|
61
|
+
async getTransferPolicies({ type }) {
|
|
62
|
+
return queryTransferPolicy(this.client, type);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Query all the owned transfer policies for an address.
|
|
66
|
+
* Returns `TransferPolicyCap` which uncludes `policyId, policyCapId, type`.
|
|
67
|
+
* @param address The address we're searching the owned transfer policies for.
|
|
68
|
+
*/
|
|
69
|
+
async getOwnedTransferPolicies({ address }) {
|
|
70
|
+
return queryOwnedTransferPolicies(this.client, address);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Query the Transfer Policy Cap for type `T`, owned by `address`
|
|
74
|
+
* @param type The Type `T` for the object
|
|
75
|
+
* @param address The address that owns the cap.
|
|
76
|
+
*/
|
|
77
|
+
async getOwnedTransferPoliciesByType({ type, address }) {
|
|
78
|
+
return queryTransferPolicyCapsByType(this.client, address, type);
|
|
79
|
+
}
|
|
80
|
+
// Someone would just have to create a `kiosk-client.ts` file in their project, initialize a KioskClient
|
|
81
|
+
// and call the `addRuleResolver` function. Each rule has a `resolve` function.
|
|
82
|
+
// The resolve function is automatically called on `purchaseAndResolve` function call.
|
|
83
|
+
addRuleResolver(rule) {
|
|
84
|
+
if (this.rules.find((x) => x.rule === rule.rule))
|
|
85
|
+
throw new Error(`Rule ${rule.rule} resolver already exists.`);
|
|
86
|
+
this.rules.push(rule);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* A convenient helper to get the packageIds for our supported ruleset,
|
|
90
|
+
* based on `kioskClient` configuration.
|
|
91
|
+
*/
|
|
92
|
+
getRulePackageId(rule) {
|
|
93
|
+
const rules2 = this.packageIds || {};
|
|
94
|
+
const network = this.network;
|
|
95
|
+
const networkKiosk = getNetwork(network).kiosk;
|
|
96
|
+
if (!rules2[rule] || !networkKiosk) {
|
|
97
|
+
throw new Error(`Missing packageId for rule ${rule}`);
|
|
98
|
+
}
|
|
99
|
+
return rules2[rule] || networkKiosk[rule];
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export {
|
|
103
|
+
KioskClient
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=kiosk-client.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/client/kiosk-client.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { NetworkId } from '@iota/iota-sdk/client';\nimport { getNetwork } from '@iota/iota-sdk/client';\nimport type { IotaClient } from '@iota/iota-sdk/client';\n\nimport { getBaseRules, rules } from '../constants.js';\nimport type { BaseRulePackageIds, TransferPolicyRule } from '../constants.js';\nimport { fetchKiosk, fetchKioskExtension, getOwnedKiosks } from '../query/kiosk.js';\nimport {\n queryOwnedTransferPolicies,\n queryTransferPolicy,\n queryTransferPolicyCapsByType,\n} from '../query/transfer-policy.js';\nimport type {\n FetchKioskOptions,\n KioskClientOptions,\n KioskData,\n OwnedKiosks,\n} from '../types/index.js';\n\n/**\n * A Client that allows you to interact with kiosk.\n * Offers utilities to query kiosk, craft transactions to edit your own kiosk,\n * purchase, manage transfer policies, create new kiosks etc.\n * If you pass packageIds, all functionality will be managed using these packages.\n */\nexport class KioskClient {\n client: IotaClient;\n network: NetworkId;\n rules: TransferPolicyRule[];\n packageIds?: BaseRulePackageIds;\n\n constructor(options: KioskClientOptions) {\n this.client = options.client;\n this.network = options.network;\n this.rules = rules; // add all the default rules.\n this.packageIds = options.packageIds;\n\n // Add the custom Package Ids too on the rule list.\n // Only adds the rules that are passed in the packageId object.\n if (options.packageIds) this.rules.push(...getBaseRules(options.packageIds));\n }\n\n /// Querying\n\n /**\n * Get an addresses's owned kiosks.\n * @param address The address for which we want to retrieve the kiosks.\n * @returns An Object containing all the `kioskOwnerCap` objects as well as the kioskIds.\n */\n async getOwnedKiosks({ address }: { address: string }): Promise<OwnedKiosks> {\n const personalPackageId =\n this.packageIds?.personalKioskRulePackageId ||\n getNetwork(this.network).kiosk?.personalKioskRulePackageId ||\n '';\n\n return getOwnedKiosks(this.client, address, {\n personalKioskType: personalPackageId\n ? `${personalPackageId}::personal_kiosk::PersonalKioskCap`\n : '',\n });\n }\n\n /**\n * Fetches the kiosk contents.\n * @param kioskId The ID of the kiosk to fetch.\n * @param options Optioal\n * @returns\n */\n async getKiosk({\n id,\n options,\n }: {\n id: string;\n options?: FetchKioskOptions;\n }): Promise<KioskData> {\n return (\n await fetchKiosk(\n this.client,\n id,\n {\n limit: 1000,\n },\n options || {},\n )\n ).data;\n }\n\n /**\n * Fetch the extension data (if any) for a kiosk, by type\n * @param kioskId The ID of the kiosk to lookup\n * @param extensionType The Type of the extension (can be used from by using the type returned by `getKiosk()`)\n */\n async getKioskExtension({ kioskId, type }: { kioskId: string; type: string }) {\n return fetchKioskExtension(this.client, kioskId, type);\n }\n\n /**\n * Query the Transfer Policy(ies) for type `T`.\n * @param type The Type we're querying for (E.g `0xMyAddress::hero::Hero`)\n */\n async getTransferPolicies({ type }: { type: string }) {\n return queryTransferPolicy(this.client, type);\n }\n\n /**\n * Query all the owned transfer policies for an address.\n * Returns `TransferPolicyCap` which uncludes `policyId, policyCapId, type`.\n * @param address The address we're searching the owned transfer policies for.\n */\n async getOwnedTransferPolicies({ address }: { address: string }) {\n return queryOwnedTransferPolicies(this.client, address);\n }\n\n /**\n * Query the Transfer Policy Cap for type `T`, owned by `address`\n * @param type The Type `T` for the object\n * @param address The address that owns the cap.\n */\n async getOwnedTransferPoliciesByType({ type, address }: { type: string; address: string }) {\n return queryTransferPolicyCapsByType(this.client, address, type);\n }\n\n // Someone would just have to create a `kiosk-client.ts` file in their project, initialize a KioskClient\n // and call the `addRuleResolver` function. Each rule has a `resolve` function.\n // The resolve function is automatically called on `purchaseAndResolve` function call.\n addRuleResolver(rule: TransferPolicyRule) {\n if (this.rules.find((x) => x.rule === rule.rule))\n throw new Error(`Rule ${rule.rule} resolver already exists.`);\n this.rules.push(rule);\n }\n\n /**\n * A convenient helper to get the packageIds for our supported ruleset,\n * based on `kioskClient` configuration.\n */\n getRulePackageId(\n rule:\n | 'kioskLockRulePackageId'\n | 'royaltyRulePackageId'\n | 'personalKioskRulePackageId'\n | 'floorPriceRulePackageId',\n ) {\n const rules = this.packageIds || {};\n const network = this.network;\n\n const networkKiosk = getNetwork(network).kiosk;\n\n /// Check existence of rule based on network and throw an error if it's not found.\n if (!rules[rule] || !networkKiosk) {\n throw new Error(`Missing packageId for rule ${rule}`);\n }\n\n return rules[rule] || networkKiosk[rule];\n }\n}\n"],
|
|
5
|
+
"mappings": "AAKA,SAAS,kBAAkB;AAG3B,SAAS,cAAc,aAAa;AAEpC,SAAS,YAAY,qBAAqB,sBAAsB;AAChE;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAcA,MAAM,YAAY;AAAA,EAMrB,YAAY,SAA6B;AACrC,SAAK,SAAS,QAAQ;AACtB,SAAK,UAAU,QAAQ;AACvB,SAAK,QAAQ;AACb,SAAK,aAAa,QAAQ;AAI1B,QAAI,QAAQ;AAAY,WAAK,MAAM,KAAK,GAAG,aAAa,QAAQ,UAAU,CAAC;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,eAAe,EAAE,QAAQ,GAA8C;AACzE,UAAM,oBACF,KAAK,YAAY,8BACjB,WAAW,KAAK,OAAO,EAAE,OAAO,8BAChC;AAEJ,WAAO,eAAe,KAAK,QAAQ,SAAS;AAAA,MACxC,mBAAmB,oBACb,GAAG,wDACH;AAAA,IACV,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SAAS;AAAA,IACX;AAAA,IACA;AAAA,EACJ,GAGuB;AACnB,YACI,MAAM;AAAA,MACF,KAAK;AAAA,MACL;AAAA,MACA;AAAA,QACI,OAAO;AAAA,MACX;AAAA,MACA,WAAW,CAAC;AAAA,IAChB,GACF;AAAA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAkB,EAAE,SAAS,KAAK,GAAsC;AAC1E,WAAO,oBAAoB,KAAK,QAAQ,SAAS,IAAI;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBAAoB,EAAE,KAAK,GAAqB;AAClD,WAAO,oBAAoB,KAAK,QAAQ,IAAI;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,yBAAyB,EAAE,QAAQ,GAAwB;AAC7D,WAAO,2BAA2B,KAAK,QAAQ,OAAO;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,+BAA+B,EAAE,MAAM,QAAQ,GAAsC;AACvF,WAAO,8BAA8B,KAAK,QAAQ,SAAS,IAAI;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,MAA0B;AACtC,QAAI,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI;AAC3C,YAAM,IAAI,MAAM,QAAQ,KAAK,+BAA+B;AAChE,SAAK,MAAM,KAAK,IAAI;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBACI,MAKF;AACE,UAAMA,SAAQ,KAAK,cAAc,CAAC;AAClC,UAAM,UAAU,KAAK;AAErB,UAAM,eAAe,WAAW,OAAO,EAAE;AAGzC,QAAI,CAACA,OAAM,IAAI,KAAK,CAAC,cAAc;AAC/B,YAAM,IAAI,MAAM,8BAA8B,MAAM;AAAA,IACxD;AAEA,WAAOA,OAAM,IAAI,KAAK,aAAa,IAAI;AAAA,EAC3C;AACJ;",
|
|
6
|
+
"names": ["rules"]
|
|
7
|
+
}
|