@haneullabs/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 +1070 -0
- package/README.md +8 -0
- package/dist/cjs/bcs.d.ts +23 -0
- package/dist/cjs/bcs.js +50 -0
- package/dist/cjs/bcs.js.map +7 -0
- package/dist/cjs/client/kiosk-client.d.ts +76 -0
- package/dist/cjs/client/kiosk-client.js +123 -0
- package/dist/cjs/client/kiosk-client.js.map +7 -0
- package/dist/cjs/client/kiosk-transaction.d.ts +186 -0
- package/dist/cjs/client/kiosk-transaction.js +462 -0
- package/dist/cjs/client/kiosk-transaction.js.map +7 -0
- package/dist/cjs/client/tp-transaction.d.ts +114 -0
- package/dist/cjs/client/tp-transaction.js +307 -0
- package/dist/cjs/client/tp-transaction.js.map +7 -0
- package/dist/cjs/constants.d.ts +31 -0
- package/dist/cjs/constants.js +102 -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 +8 -0
- package/dist/cjs/query/kiosk.js +181 -0
- package/dist/cjs/query/kiosk.js.map +7 -0
- package/dist/cjs/query/transfer-policy.d.ts +29 -0
- package/dist/cjs/query/transfer-policy.js +92 -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 +109 -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 +27 -0
- package/dist/cjs/types/index.js +33 -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 +53 -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 +198 -0
- package/dist/cjs/utils.js.map +7 -0
- package/dist/esm/bcs.d.ts +23 -0
- package/dist/esm/bcs.js +35 -0
- package/dist/esm/bcs.js.map +7 -0
- package/dist/esm/client/kiosk-client.d.ts +76 -0
- package/dist/esm/client/kiosk-client.js +114 -0
- package/dist/esm/client/kiosk-client.js.map +7 -0
- package/dist/esm/client/kiosk-transaction.d.ts +186 -0
- package/dist/esm/client/kiosk-transaction.js +432 -0
- package/dist/esm/client/kiosk-transaction.js.map +7 -0
- package/dist/esm/client/tp-transaction.d.ts +114 -0
- package/dist/esm/client/tp-transaction.js +298 -0
- package/dist/esm/client/tp-transaction.js.map +7 -0
- package/dist/esm/constants.d.ts +31 -0
- package/dist/esm/constants.js +87 -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 +8 -0
- package/dist/esm/query/kiosk.js +169 -0
- package/dist/esm/query/kiosk.js.map +7 -0
- package/dist/esm/query/transfer-policy.d.ts +29 -0
- package/dist/esm/query/transfer-policy.js +76 -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 +89 -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 +27 -0
- package/dist/esm/types/index.js +12 -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 +53 -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 +183 -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 +59 -0
- package/src/bcs.ts +39 -0
- package/src/client/kiosk-client.ts +163 -0
- package/src/client/kiosk-transaction.ts +526 -0
- package/src/client/tp-transaction.ts +357 -0
- package/src/constants.ts +121 -0
- package/src/index.ts +9 -0
- package/src/query/kiosk.ts +264 -0
- package/src/query/transfer-policy.ts +134 -0
- package/src/tx/kiosk.ts +243 -0
- package/src/tx/personal-kiosk.ts +34 -0
- package/src/tx/rules/attach.ts +73 -0
- package/src/tx/rules/resolve.ts +126 -0
- package/src/tx/transfer-policy.ts +120 -0
- package/src/types/index.ts +35 -0
- package/src/types/kiosk.ts +178 -0
- package/src/types/transfer-policy.ts +71 -0
- package/src/utils.ts +286 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ObjectOwner } from '@haneullabs/haneul/client';
|
|
2
|
+
import type { Transaction, TransactionObjectArgument } from '@haneullabs/haneul/transactions';
|
|
3
|
+
import type { KioskClient } from '../client/kiosk-client.js';
|
|
4
|
+
import type { ObjectArgument } from './index.js';
|
|
5
|
+
/** The Transfer Policy module. */
|
|
6
|
+
export declare const TRANSFER_POLICY_MODULE = "0x2::transfer_policy";
|
|
7
|
+
/** Name of the event emitted when a TransferPolicy for T is created. */
|
|
8
|
+
export declare const TRANSFER_POLICY_CREATED_EVENT = "0x2::transfer_policy::TransferPolicyCreated";
|
|
9
|
+
/** The Transfer Policy Type */
|
|
10
|
+
export declare const TRANSFER_POLICY_TYPE = "0x2::transfer_policy::TransferPolicy";
|
|
11
|
+
/** The Transfer Policy Cap Type */
|
|
12
|
+
export declare const TRANSFER_POLICY_CAP_TYPE = "0x2::transfer_policy::TransferPolicyCap";
|
|
13
|
+
/** The Kiosk Lock Rule */
|
|
14
|
+
export declare const KIOSK_LOCK_RULE = "kiosk_lock_rule::Rule";
|
|
15
|
+
/** The Royalty rule */
|
|
16
|
+
export declare const ROYALTY_RULE = "royalty_rule::Rule";
|
|
17
|
+
/**
|
|
18
|
+
* The Transfer Policy Cap in a consumable way.
|
|
19
|
+
*/
|
|
20
|
+
export type TransferPolicyCap = {
|
|
21
|
+
policyId: string;
|
|
22
|
+
policyCapId: string;
|
|
23
|
+
type: 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
|
+
};
|
|
33
|
+
/** Event emitted when a TransferPolicy is created. */
|
|
34
|
+
export type TransferPolicyCreated = {
|
|
35
|
+
id: string;
|
|
36
|
+
};
|
|
37
|
+
export type RuleResolvingParams = {
|
|
38
|
+
transaction: Transaction;
|
|
39
|
+
/** @deprecated use transaction instead */
|
|
40
|
+
transactionBlock: Transaction;
|
|
41
|
+
itemType: string;
|
|
42
|
+
itemId: string;
|
|
43
|
+
price: string;
|
|
44
|
+
policyId: ObjectArgument;
|
|
45
|
+
sellerKiosk: ObjectArgument;
|
|
46
|
+
kiosk: ObjectArgument;
|
|
47
|
+
kioskCap: ObjectArgument;
|
|
48
|
+
transferRequest: TransactionObjectArgument;
|
|
49
|
+
purchasedItem: TransactionObjectArgument;
|
|
50
|
+
packageId: string;
|
|
51
|
+
extraArgs: Record<string, any>;
|
|
52
|
+
kioskClient: KioskClient;
|
|
53
|
+
};
|
|
@@ -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// SPDX-License-Identifier: Apache-2.0\n\nimport type { ObjectOwner } from '@haneullabs/haneul/client';\nimport type { Transaction, TransactionObjectArgument } from '@haneullabs/haneul/transactions';\n\nimport type { KioskClient } from '../client/kiosk-client.js';\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\tpolicyId: string;\n\tpolicyCapId: string;\n\ttype: string;\n};\n\n/** The `TransferPolicy` object */\nexport type TransferPolicy = {\n\tid: string;\n\ttype: string;\n\tbalance: string;\n\trules: string[];\n\towner: ObjectOwner;\n};\n\n/** Event emitted when a TransferPolicy is created. */\nexport type TransferPolicyCreated = {\n\tid: 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\ttransaction: Transaction;\n\t/** @deprecated use transaction instead */\n\ttransactionBlock: Transaction;\n\titemType: string;\n\titemId: string;\n\tprice: string;\n\tpolicyId: ObjectArgument;\n\tsellerKiosk: ObjectArgument;\n\tkiosk: ObjectArgument;\n\tkioskCap: ObjectArgument;\n\ttransferRequest: TransactionObjectArgument;\n\tpurchasedItem: TransactionObjectArgument;\n\tpackageId: string;\n\textraArgs: Record<string, any>; // extraParams contains more possible {key, values} to pass for custom rules.\n\tkioskClient: KioskClient;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,yBAAyB;AAG/B,MAAM,gCAAgC,GAAG,sBAAsB;AAG/D,MAAM,uBAAuB,GAAG,sBAAsB;AAGtD,MAAM,2BAA2B,GAAG,sBAAsB;AAG1D,MAAM,kBAAkB;AAGxB,MAAM,eAAe;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { DynamicFieldInfo, PaginationArguments, HaneulClient, HaneulObjectData, HaneulObjectDataFilter, HaneulObjectDataOptions, HaneulObjectResponse } from '@haneullabs/haneul/client';
|
|
2
|
+
import type { Kiosk, KioskData, KioskListing, TransferPolicyCap } from './types/index.js';
|
|
3
|
+
export declare function getKioskObject(client: HaneulClient, 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: HaneulObjectResponse[]): void;
|
|
9
|
+
/**
|
|
10
|
+
* A helper that attaches the listing prices to kiosk listings.
|
|
11
|
+
*/
|
|
12
|
+
export declare function attachObjects(kioskData: KioskData, objects: HaneulObjectData[]): 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: HaneulClient, 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: HaneulClient, ids: string[], options: HaneulObjectDataOptions, limit?: number): Promise<HaneulObjectResponse[]>;
|
|
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: HaneulClient;
|
|
35
|
+
owner: string;
|
|
36
|
+
filter?: HaneulObjectDataFilter;
|
|
37
|
+
options?: HaneulObjectDataOptions;
|
|
38
|
+
limit?: number;
|
|
39
|
+
}): Promise<HaneulObjectResponse[]>;
|
|
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: HaneulObjectResponse): TransferPolicyCap | undefined;
|
|
51
|
+
export declare function getNormalizedRuleType(rule: string): string;
|
|
@@ -0,0 +1,198 @@
|
|
|
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("@haneullabs/haneul/utils");
|
|
35
|
+
var import_bcs = require("./bcs.js");
|
|
36
|
+
var import_types = require("./types/index.js");
|
|
37
|
+
var import_utils2 = require("@haneullabs/utils");
|
|
38
|
+
const DEFAULT_QUERY_LIMIT = 50;
|
|
39
|
+
async function getKioskObject(client, id) {
|
|
40
|
+
const queryRes = await client.getObject({ id, options: { showBcs: true } });
|
|
41
|
+
if (!queryRes || queryRes.error || !queryRes.data) {
|
|
42
|
+
throw new Error(`Kiosk ${id} not found; ${queryRes.error}`);
|
|
43
|
+
}
|
|
44
|
+
if (!queryRes.data.bcs || !("bcsBytes" in queryRes.data.bcs)) {
|
|
45
|
+
throw new Error(`Invalid kiosk query: ${id}, expected object, got package`);
|
|
46
|
+
}
|
|
47
|
+
return import_bcs.KioskType.parse((0, import_utils.fromBase64)(queryRes.data.bcs.bcsBytes));
|
|
48
|
+
}
|
|
49
|
+
function extractKioskData(data, listings, lockedItemIds, kioskId) {
|
|
50
|
+
return data.reduce(
|
|
51
|
+
(acc, val) => {
|
|
52
|
+
const type = val.name.type;
|
|
53
|
+
if (type.startsWith("0x2::kiosk::Item")) {
|
|
54
|
+
acc.itemIds.push(val.objectId);
|
|
55
|
+
acc.items.push({
|
|
56
|
+
objectId: val.objectId,
|
|
57
|
+
type: val.objectType,
|
|
58
|
+
isLocked: false,
|
|
59
|
+
kioskId
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (type.startsWith("0x2::kiosk::Listing")) {
|
|
63
|
+
acc.listingIds.push(val.objectId);
|
|
64
|
+
listings.push({
|
|
65
|
+
objectId: val.name.value.id,
|
|
66
|
+
listingId: val.objectId,
|
|
67
|
+
isExclusive: val.name.value.is_exclusive
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (type.startsWith("0x2::kiosk::Lock")) {
|
|
71
|
+
lockedItemIds?.push(val.name.value.id);
|
|
72
|
+
}
|
|
73
|
+
if (type.startsWith("0x2::kiosk_extension::ExtensionKey")) {
|
|
74
|
+
acc.extensions.push({
|
|
75
|
+
objectId: val.objectId,
|
|
76
|
+
type: (0, import_utils.normalizeStructTag)((0, import_utils.parseStructTag)(val.name.type).typeParams[0])
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return acc;
|
|
80
|
+
},
|
|
81
|
+
{ items: [], itemIds: [], listingIds: [], extensions: [] }
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
function attachListingsAndPrices(kioskData, listings, listingObjects) {
|
|
85
|
+
const itemListings = listings.reduce(
|
|
86
|
+
(acc, item, idx) => {
|
|
87
|
+
acc[item.objectId] = { ...item };
|
|
88
|
+
if (listingObjects.length === 0) return acc;
|
|
89
|
+
const content = listingObjects[idx].data?.content;
|
|
90
|
+
const data = content?.dataType === "moveObject" ? content?.fields : null;
|
|
91
|
+
if (!data) return acc;
|
|
92
|
+
acc[item.objectId].price = data.value;
|
|
93
|
+
return acc;
|
|
94
|
+
},
|
|
95
|
+
{}
|
|
96
|
+
);
|
|
97
|
+
kioskData.items.forEach((item) => {
|
|
98
|
+
item.listing = itemListings[item.objectId] || void 0;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function attachObjects(kioskData, objects) {
|
|
102
|
+
const mapping = objects.reduce(
|
|
103
|
+
(acc, obj) => {
|
|
104
|
+
acc[obj.objectId] = obj;
|
|
105
|
+
return acc;
|
|
106
|
+
},
|
|
107
|
+
{}
|
|
108
|
+
);
|
|
109
|
+
kioskData.items.forEach((item) => {
|
|
110
|
+
item.data = mapping[item.objectId] || void 0;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function attachLockedItems(kioskData, lockedItemIds) {
|
|
114
|
+
const lockedStatuses = lockedItemIds.reduce(
|
|
115
|
+
(acc, item) => {
|
|
116
|
+
acc[item] = true;
|
|
117
|
+
return acc;
|
|
118
|
+
},
|
|
119
|
+
{}
|
|
120
|
+
);
|
|
121
|
+
kioskData.items.forEach((item) => {
|
|
122
|
+
item.isLocked = lockedStatuses[item.objectId] || false;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async function getAllDynamicFields(client, parentId, pagination) {
|
|
126
|
+
let hasNextPage = true;
|
|
127
|
+
let cursor = void 0;
|
|
128
|
+
const data = [];
|
|
129
|
+
while (hasNextPage) {
|
|
130
|
+
const result = await client.getDynamicFields({
|
|
131
|
+
parentId,
|
|
132
|
+
limit: pagination.limit || void 0,
|
|
133
|
+
cursor
|
|
134
|
+
});
|
|
135
|
+
data.push(...result.data);
|
|
136
|
+
hasNextPage = result.hasNextPage;
|
|
137
|
+
cursor = result.nextCursor;
|
|
138
|
+
}
|
|
139
|
+
return data;
|
|
140
|
+
}
|
|
141
|
+
async function getAllObjects(client, ids, options, limit = DEFAULT_QUERY_LIMIT) {
|
|
142
|
+
const chunks = (0, import_utils2.chunk)(ids, limit);
|
|
143
|
+
const results = await Promise.all(
|
|
144
|
+
chunks.map((chunk2) => {
|
|
145
|
+
return client.multiGetObjects({
|
|
146
|
+
ids: chunk2,
|
|
147
|
+
options
|
|
148
|
+
});
|
|
149
|
+
})
|
|
150
|
+
);
|
|
151
|
+
return results.flat();
|
|
152
|
+
}
|
|
153
|
+
async function getAllOwnedObjects({
|
|
154
|
+
client,
|
|
155
|
+
owner,
|
|
156
|
+
filter,
|
|
157
|
+
limit = DEFAULT_QUERY_LIMIT,
|
|
158
|
+
options = { showType: true, showContent: true }
|
|
159
|
+
}) {
|
|
160
|
+
let hasNextPage = true;
|
|
161
|
+
let cursor = void 0;
|
|
162
|
+
const data = [];
|
|
163
|
+
while (hasNextPage) {
|
|
164
|
+
const result = await client.getOwnedObjects({
|
|
165
|
+
owner,
|
|
166
|
+
filter,
|
|
167
|
+
limit,
|
|
168
|
+
cursor,
|
|
169
|
+
options
|
|
170
|
+
});
|
|
171
|
+
data.push(...result.data);
|
|
172
|
+
hasNextPage = result.hasNextPage;
|
|
173
|
+
cursor = result.nextCursor;
|
|
174
|
+
}
|
|
175
|
+
return data;
|
|
176
|
+
}
|
|
177
|
+
function percentageToBasisPoints(percentage) {
|
|
178
|
+
if (percentage < 0 || percentage > 100)
|
|
179
|
+
throw new Error("Percentage needs to be in the [0,100] range.");
|
|
180
|
+
return Math.ceil(percentage * 100);
|
|
181
|
+
}
|
|
182
|
+
function parseTransferPolicyCapObject(item) {
|
|
183
|
+
const type = item?.data?.content?.type;
|
|
184
|
+
const policy = item?.data?.content?.fields?.policy_id;
|
|
185
|
+
if (!type.includes(import_types.TRANSFER_POLICY_CAP_TYPE)) return void 0;
|
|
186
|
+
const objectType = type.replace(import_types.TRANSFER_POLICY_CAP_TYPE + "<", "").slice(0, -1);
|
|
187
|
+
return {
|
|
188
|
+
policyId: policy,
|
|
189
|
+
policyCapId: item.data?.objectId,
|
|
190
|
+
type: objectType
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function getNormalizedRuleType(rule) {
|
|
194
|
+
const normalizedRuleAddress = rule.split("::");
|
|
195
|
+
normalizedRuleAddress[0] = (0, import_utils.normalizeHaneulAddress)(normalizedRuleAddress[0]);
|
|
196
|
+
return normalizedRuleAddress.join("::");
|
|
197
|
+
}
|
|
198
|
+
//# 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// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n\tDynamicFieldInfo,\n\tPaginationArguments,\n\tHaneulClient,\n\tHaneulObjectData,\n\tHaneulObjectDataFilter,\n\tHaneulObjectDataOptions,\n\tHaneulObjectResponse,\n} from '@haneullabs/haneul/client';\nimport {\n\tfromBase64,\n\tnormalizeStructTag,\n\tnormalizeHaneulAddress,\n\tparseStructTag,\n} from '@haneullabs/haneul/utils';\n\nimport { KioskType } from './bcs.js';\nimport type { Kiosk, KioskData, KioskListing, TransferPolicyCap } from './types/index.js';\nimport { TRANSFER_POLICY_CAP_TYPE } from './types/index.js';\nimport { chunk } from '@haneullabs/utils';\n\nconst DEFAULT_QUERY_LIMIT = 50;\n\nexport async function getKioskObject(client: HaneulClient, id: string): Promise<Kiosk> {\n\tconst queryRes = await client.getObject({ id, options: { showBcs: true } });\n\n\tif (!queryRes || queryRes.error || !queryRes.data) {\n\t\tthrow new Error(`Kiosk ${id} not found; ${queryRes.error}`);\n\t}\n\n\tif (!queryRes.data.bcs || !('bcsBytes' in queryRes.data.bcs)) {\n\t\tthrow new Error(`Invalid kiosk query: ${id}, expected object, got package`);\n\t}\n\n\treturn KioskType.parse(fromBase64(queryRes.data.bcs!.bcsBytes));\n}\n\n// helper to extract kiosk data from dynamic fields.\nexport function extractKioskData(\n\tdata: DynamicFieldInfo[],\n\tlistings: KioskListing[],\n\tlockedItemIds: string[],\n\tkioskId: string,\n): KioskData {\n\treturn data.reduce<KioskData>(\n\t\t(acc: KioskData, val: DynamicFieldInfo) => {\n\t\t\tconst type = val.name.type;\n\n\t\t\tif (type.startsWith('0x2::kiosk::Item')) {\n\t\t\t\tacc.itemIds.push(val.objectId);\n\t\t\t\tacc.items.push({\n\t\t\t\t\tobjectId: val.objectId,\n\t\t\t\t\ttype: val.objectType,\n\t\t\t\t\tisLocked: false,\n\t\t\t\t\tkioskId,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (type.startsWith('0x2::kiosk::Listing')) {\n\t\t\t\tacc.listingIds.push(val.objectId);\n\t\t\t\tlistings.push({\n\t\t\t\t\tobjectId: (val.name.value as { id: string }).id,\n\t\t\t\t\tlistingId: val.objectId,\n\t\t\t\t\tisExclusive: (val.name.value as { is_exclusive: boolean }).is_exclusive,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (type.startsWith('0x2::kiosk::Lock')) {\n\t\t\t\tlockedItemIds?.push((val.name.value as { id: string }).id);\n\t\t\t}\n\n\t\t\tif (type.startsWith('0x2::kiosk_extension::ExtensionKey')) {\n\t\t\t\tacc.extensions.push({\n\t\t\t\t\tobjectId: val.objectId,\n\t\t\t\t\ttype: normalizeStructTag(parseStructTag(val.name.type).typeParams[0]),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t},\n\t\t{ items: [], itemIds: [], listingIds: [], extensions: [] },\n\t);\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachListingsAndPrices(\n\tkioskData: KioskData,\n\tlistings: KioskListing[],\n\tlistingObjects: HaneulObjectResponse[],\n) {\n\t// map item listings as {item_id: KioskListing}\n\t// for easier mapping on the nex\n\tconst itemListings = listings.reduce<Record<string, KioskListing>>(\n\t\t(acc: Record<string, KioskListing>, item, idx) => {\n\t\t\tacc[item.objectId] = { ...item };\n\n\t\t\t// return in case we don't have any listing objects.\n\t\t\t// that's the case when we don't have the `listingPrices` included.\n\t\t\tif (listingObjects.length === 0) return acc;\n\n\t\t\tconst content = listingObjects[idx].data?.content;\n\t\t\tconst data = content?.dataType === 'moveObject' ? content?.fields : null;\n\n\t\t\tif (!data) return acc;\n\n\t\t\tacc[item.objectId].price = (data as { value: string }).value;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\tkioskData.items.forEach((item) => {\n\t\titem.listing = itemListings[item.objectId] || undefined;\n\t});\n}\n\n/**\n * A helper that attaches the listing prices to kiosk listings.\n */\nexport function attachObjects(kioskData: KioskData, objects: HaneulObjectData[]) {\n\tconst mapping = objects.reduce<Record<string, HaneulObjectData>>(\n\t\t(acc: Record<string, HaneulObjectData>, obj) => {\n\t\t\tacc[obj.objectId] = obj;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\tkioskData.items.forEach((item) => {\n\t\titem.data = mapping[item.objectId] || undefined;\n\t});\n}\n\n/**\n * A Helper to attach locked state to items in Kiosk Data.\n */\nexport function attachLockedItems(kioskData: KioskData, lockedItemIds: string[]) {\n\t// map lock status in an array of type { item_id: true }\n\tconst lockedStatuses = lockedItemIds.reduce<Record<string, boolean>>(\n\t\t(acc: Record<string, boolean>, item: string) => {\n\t\t\tacc[item] = true;\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\t// parse lockedItemIds and attach their locked status.\n\tkioskData.items.forEach((item) => {\n\t\titem.isLocked = lockedStatuses[item.objectId] || false;\n\t});\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\tclient: HaneulClient,\n\tparentId: string,\n\tpagination: PaginationArguments<string>,\n) {\n\tlet hasNextPage = true;\n\tlet cursor = undefined;\n\tconst data: DynamicFieldInfo[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result = await client.getDynamicFields({\n\t\t\tparentId,\n\t\t\tlimit: pagination.limit || undefined,\n\t\t\tcursor,\n\t\t});\n\t\tdata.push(...result.data);\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.nextCursor;\n\t}\n\n\treturn 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\tclient: HaneulClient,\n\tids: string[],\n\toptions: HaneulObjectDataOptions,\n\tlimit: number = DEFAULT_QUERY_LIMIT,\n) {\n\tconst chunks = chunk(ids, limit);\n\n\tconst results = await Promise.all(\n\t\tchunks.map((chunk) => {\n\t\t\treturn client.multiGetObjects({\n\t\t\t\tids: chunk,\n\t\t\t\toptions,\n\t\t\t});\n\t\t}),\n\t);\n\n\treturn 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\tclient,\n\towner,\n\tfilter,\n\tlimit = DEFAULT_QUERY_LIMIT,\n\toptions = { showType: true, showContent: true },\n}: {\n\tclient: HaneulClient;\n\towner: string;\n\tfilter?: HaneulObjectDataFilter;\n\toptions?: HaneulObjectDataOptions;\n\tlimit?: number;\n}) {\n\tlet hasNextPage = true;\n\tlet cursor = undefined;\n\tconst data: HaneulObjectResponse[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result = await client.getOwnedObjects({\n\t\t\towner,\n\t\t\tfilter,\n\t\t\tlimit,\n\t\t\tcursor,\n\t\t\toptions,\n\t\t});\n\t\tdata.push(...result.data);\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.nextCursor;\n\t}\n\n\treturn 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\tif (percentage < 0 || percentage > 100)\n\t\tthrow new Error('Percentage needs to be in the [0,100] range.');\n\treturn 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\titem: HaneulObjectResponse,\n): TransferPolicyCap | undefined {\n\tconst type = (item?.data?.content as { type: string })?.type;\n\n\t//@ts-ignore-next-line\n\tconst policy = item?.data?.content?.fields?.policy_id as string;\n\n\tif (!type.includes(TRANSFER_POLICY_CAP_TYPE)) return undefined;\n\n\t// Transform 0x2::transfer_policy::TransferPolicyCap<itemType> -> itemType\n\tconst objectType = type.replace(TRANSFER_POLICY_CAP_TYPE + '<', '').slice(0, -1);\n\n\treturn {\n\t\tpolicyId: policy,\n\t\tpolicyCapId: item.data?.objectId!,\n\t\ttype: objectType,\n\t};\n}\n\n// Normalizes the packageId part of a rule's type.\nexport function getNormalizedRuleType(rule: string) {\n\tconst normalizedRuleAddress = rule.split('::');\n\tnormalizedRuleAddress[0] = normalizeHaneulAddress(normalizedRuleAddress[0]);\n\treturn normalizedRuleAddress.join('::');\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_utils", "chunk"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const KioskType: import("@haneullabs/haneul/bcs").BcsStruct<{
|
|
2
|
+
id: import("@haneullabs/haneul/bcs").BcsType<string, string | Uint8Array<ArrayBufferLike>, "bytes[32]">;
|
|
3
|
+
profits: import("@haneullabs/haneul/bcs").BcsType<string, string | number | bigint, "u64">;
|
|
4
|
+
owner: import("@haneullabs/haneul/bcs").BcsType<string, string | Uint8Array<ArrayBufferLike>, "bytes[32]">;
|
|
5
|
+
itemCount: import("@haneullabs/haneul/bcs").BcsType<number, number, "u32">;
|
|
6
|
+
allowExtensions: import("@haneullabs/haneul/bcs").BcsType<boolean, boolean, "bool">;
|
|
7
|
+
}, string>;
|
|
8
|
+
export declare const KioskPurchaseCap: import("@haneullabs/haneul/bcs").BcsStruct<{
|
|
9
|
+
id: import("@haneullabs/haneul/bcs").BcsType<string, string | Uint8Array<ArrayBufferLike>, "bytes[32]">;
|
|
10
|
+
kioskId: import("@haneullabs/haneul/bcs").BcsType<string, string | Uint8Array<ArrayBufferLike>, "bytes[32]">;
|
|
11
|
+
itemId: import("@haneullabs/haneul/bcs").BcsType<string, string | Uint8Array<ArrayBufferLike>, "bytes[32]">;
|
|
12
|
+
minPrice: import("@haneullabs/haneul/bcs").BcsType<string, string | number | bigint, "u64">;
|
|
13
|
+
}, string>;
|
|
14
|
+
export declare const TransferPolicyCreatedEvent: import("@haneullabs/haneul/bcs").BcsStruct<{
|
|
15
|
+
id: import("@haneullabs/haneul/bcs").BcsType<string, string | Uint8Array<ArrayBufferLike>, "bytes[32]">;
|
|
16
|
+
}, string>;
|
|
17
|
+
export declare const TransferPolicyType: import("@haneullabs/haneul/bcs").BcsStruct<{
|
|
18
|
+
id: import("@haneullabs/haneul/bcs").BcsType<string, string | Uint8Array<ArrayBufferLike>, "bytes[32]">;
|
|
19
|
+
balance: import("@haneullabs/haneul/bcs").BcsType<string, string | number | bigint, "u64">;
|
|
20
|
+
rules: import("@haneullabs/haneul/bcs").BcsType<string[], Iterable<string> & {
|
|
21
|
+
length: number;
|
|
22
|
+
}, string>;
|
|
23
|
+
}, string>;
|
package/dist/esm/bcs.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { bcs } from "@haneullabs/haneul/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
|
+
const KioskType = bcs.struct(KIOSK_TYPE, {
|
|
9
|
+
id: bcs.Address,
|
|
10
|
+
profits: bcs.u64(),
|
|
11
|
+
owner: bcs.Address,
|
|
12
|
+
itemCount: bcs.u32(),
|
|
13
|
+
allowExtensions: bcs.bool()
|
|
14
|
+
});
|
|
15
|
+
const KioskPurchaseCap = bcs.struct(KIOSK_PURCHASE_CAP, {
|
|
16
|
+
id: bcs.Address,
|
|
17
|
+
kioskId: bcs.Address,
|
|
18
|
+
itemId: bcs.Address,
|
|
19
|
+
minPrice: bcs.u64()
|
|
20
|
+
});
|
|
21
|
+
const TransferPolicyCreatedEvent = bcs.struct(TRANSFER_POLICY_CREATED_EVENT, {
|
|
22
|
+
id: bcs.Address
|
|
23
|
+
});
|
|
24
|
+
const TransferPolicyType = bcs.struct(TRANSFER_POLICY_TYPE, {
|
|
25
|
+
id: bcs.Address,
|
|
26
|
+
balance: bcs.u64(),
|
|
27
|
+
rules: bcs.vector(bcs.string())
|
|
28
|
+
});
|
|
29
|
+
export {
|
|
30
|
+
KioskPurchaseCap,
|
|
31
|
+
KioskType,
|
|
32
|
+
TransferPolicyCreatedEvent,
|
|
33
|
+
TransferPolicyType
|
|
34
|
+
};
|
|
35
|
+
//# 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// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@haneullabs/haneul/bcs';\n\nimport {\n\tKIOSK_PURCHASE_CAP,\n\tKIOSK_TYPE,\n\tTRANSFER_POLICY_CREATED_EVENT,\n\tTRANSFER_POLICY_TYPE,\n} from './types/index.js';\n\n// Register the `Kiosk` struct for faster queries.\nexport const KioskType = bcs.struct(KIOSK_TYPE, {\n\tid: bcs.Address,\n\tprofits: bcs.u64(),\n\towner: bcs.Address,\n\titemCount: bcs.u32(),\n\tallowExtensions: bcs.bool(),\n});\n\n// Register the `PurchaseCap` for faster queries.\nexport const KioskPurchaseCap = bcs.struct(KIOSK_PURCHASE_CAP, {\n\tid: bcs.Address,\n\tkioskId: bcs.Address,\n\titemId: bcs.Address,\n\tminPrice: bcs.u64(),\n});\n\n// Register the `TransferPolicyCreated` event data.\nexport const TransferPolicyCreatedEvent = bcs.struct(TRANSFER_POLICY_CREATED_EVENT, {\n\tid: bcs.Address,\n});\n\nexport const TransferPolicyType = bcs.struct(TRANSFER_POLICY_TYPE, {\n\tid: bcs.Address,\n\tbalance: bcs.u64(),\n\trules: bcs.vector(bcs.string()),\n});\n"],
|
|
5
|
+
"mappings": "AAGA,SAAS,WAAW;AAEpB;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAGA,MAAM,YAAY,IAAI,OAAO,YAAY;AAAA,EAC/C,IAAI,IAAI;AAAA,EACR,SAAS,IAAI,IAAI;AAAA,EACjB,OAAO,IAAI;AAAA,EACX,WAAW,IAAI,IAAI;AAAA,EACnB,iBAAiB,IAAI,KAAK;AAC3B,CAAC;AAGM,MAAM,mBAAmB,IAAI,OAAO,oBAAoB;AAAA,EAC9D,IAAI,IAAI;AAAA,EACR,SAAS,IAAI;AAAA,EACb,QAAQ,IAAI;AAAA,EACZ,UAAU,IAAI,IAAI;AACnB,CAAC;AAGM,MAAM,6BAA6B,IAAI,OAAO,+BAA+B;AAAA,EACnF,IAAI,IAAI;AACT,CAAC;AAEM,MAAM,qBAAqB,IAAI,OAAO,sBAAsB;AAAA,EAClE,IAAI,IAAI;AAAA,EACR,SAAS,IAAI,IAAI;AAAA,EACjB,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC;AAC/B,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { PaginationArguments, HaneulClient } from '@haneullabs/haneul/client';
|
|
2
|
+
import type { BaseRulePackageIds, TransferPolicyRule } from '../constants.js';
|
|
3
|
+
import { Network } from '../types/index.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: HaneulClient;
|
|
13
|
+
network: Network;
|
|
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
|
+
* @param pagination Optional pagination arguments.
|
|
21
|
+
* @returns An Object containing all the `kioskOwnerCap` objects as well as the kioskIds.
|
|
22
|
+
*/
|
|
23
|
+
getOwnedKiosks({ address, pagination, }: {
|
|
24
|
+
address: string;
|
|
25
|
+
pagination?: PaginationArguments<string>;
|
|
26
|
+
}): Promise<OwnedKiosks>;
|
|
27
|
+
/**
|
|
28
|
+
* Fetches the kiosk contents.
|
|
29
|
+
* @param id The ID of the kiosk to fetch.
|
|
30
|
+
* @param options Optional to control the fetch behavior.
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
getKiosk({ id, options }: {
|
|
34
|
+
id: string;
|
|
35
|
+
options?: FetchKioskOptions;
|
|
36
|
+
}): Promise<KioskData>;
|
|
37
|
+
/**
|
|
38
|
+
* Fetch the extension data (if any) for a kiosk, by type
|
|
39
|
+
* @param kioskId The ID of the kiosk to lookup
|
|
40
|
+
* @param extensionType The Type of the extension (can be used from by using the type returned by `getKiosk()`)
|
|
41
|
+
*/
|
|
42
|
+
getKioskExtension({ kioskId, type }: {
|
|
43
|
+
kioskId: string;
|
|
44
|
+
type: string;
|
|
45
|
+
}): Promise<import("../types/kiosk.js").KioskExtension | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Query the Transfer Policy(ies) for type `T`.
|
|
48
|
+
* @param type The Type we're querying for (E.g `0xMyAddress::hero::Hero`)
|
|
49
|
+
*/
|
|
50
|
+
getTransferPolicies({ type }: {
|
|
51
|
+
type: string;
|
|
52
|
+
}): Promise<import("../types/transfer-policy.js").TransferPolicy[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Query all the owned transfer policies for an address.
|
|
55
|
+
* Returns `TransferPolicyCap` which uncludes `policyId, policyCapId, type`.
|
|
56
|
+
* @param address The address we're searching the owned transfer policies for.
|
|
57
|
+
*/
|
|
58
|
+
getOwnedTransferPolicies({ address }: {
|
|
59
|
+
address: string;
|
|
60
|
+
}): Promise<import("../types/transfer-policy.js").TransferPolicyCap[] | undefined>;
|
|
61
|
+
/**
|
|
62
|
+
* Query the Transfer Policy Cap for type `T`, owned by `address`
|
|
63
|
+
* @param type The Type `T` for the object
|
|
64
|
+
* @param address The address that owns the cap.
|
|
65
|
+
*/
|
|
66
|
+
getOwnedTransferPoliciesByType({ type, address }: {
|
|
67
|
+
type: string;
|
|
68
|
+
address: string;
|
|
69
|
+
}): Promise<import("../types/transfer-policy.js").TransferPolicyCap[]>;
|
|
70
|
+
addRuleResolver(rule: TransferPolicyRule): void;
|
|
71
|
+
/**
|
|
72
|
+
* A convenient helper to get the packageIds for our supported ruleset,
|
|
73
|
+
* based on `kioskClient` configuration.
|
|
74
|
+
*/
|
|
75
|
+
getRulePackageId(rule: 'kioskLockRulePackageId' | 'royaltyRulePackageId' | 'personalKioskRulePackageId' | 'floorPriceRulePackageId'): string;
|
|
76
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FLOOR_PRICE_RULE_ADDRESS,
|
|
3
|
+
getBaseRules,
|
|
4
|
+
KIOSK_LOCK_RULE_ADDRESS,
|
|
5
|
+
PERSONAL_KIOSK_RULE_ADDRESS,
|
|
6
|
+
ROYALTY_RULE_ADDRESS,
|
|
7
|
+
rules
|
|
8
|
+
} from "../constants.js";
|
|
9
|
+
import { fetchKiosk, fetchKioskExtension, getOwnedKiosks } from "../query/kiosk.js";
|
|
10
|
+
import {
|
|
11
|
+
queryOwnedTransferPolicies,
|
|
12
|
+
queryTransferPolicy,
|
|
13
|
+
queryTransferPolicyCapsByType
|
|
14
|
+
} from "../query/transfer-policy.js";
|
|
15
|
+
import { Network } from "../types/index.js";
|
|
16
|
+
class KioskClient {
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.client = options.client;
|
|
19
|
+
this.network = options.network;
|
|
20
|
+
this.rules = rules;
|
|
21
|
+
this.packageIds = options.packageIds;
|
|
22
|
+
if (options.packageIds) this.rules.push(...getBaseRules(options.packageIds));
|
|
23
|
+
}
|
|
24
|
+
/// Querying
|
|
25
|
+
/**
|
|
26
|
+
* Get an addresses's owned kiosks.
|
|
27
|
+
* @param address The address for which we want to retrieve the kiosks.
|
|
28
|
+
* @param pagination Optional pagination arguments.
|
|
29
|
+
* @returns An Object containing all the `kioskOwnerCap` objects as well as the kioskIds.
|
|
30
|
+
*/
|
|
31
|
+
async getOwnedKiosks({
|
|
32
|
+
address,
|
|
33
|
+
pagination
|
|
34
|
+
}) {
|
|
35
|
+
const personalPackageId = this.packageIds?.personalKioskRulePackageId || PERSONAL_KIOSK_RULE_ADDRESS[this.network];
|
|
36
|
+
return getOwnedKiosks(this.client, address, {
|
|
37
|
+
pagination,
|
|
38
|
+
personalKioskType: personalPackageId ? `${personalPackageId}::personal_kiosk::PersonalKioskCap` : ""
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Fetches the kiosk contents.
|
|
43
|
+
* @param id The ID of the kiosk to fetch.
|
|
44
|
+
* @param options Optional to control the fetch behavior.
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
async getKiosk({ id, options }) {
|
|
48
|
+
return (await fetchKiosk(this.client, id, {}, options || {})).data;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Fetch the extension data (if any) for a kiosk, by type
|
|
52
|
+
* @param kioskId The ID of the kiosk to lookup
|
|
53
|
+
* @param extensionType The Type of the extension (can be used from by using the type returned by `getKiosk()`)
|
|
54
|
+
*/
|
|
55
|
+
async getKioskExtension({ kioskId, type }) {
|
|
56
|
+
return fetchKioskExtension(this.client, kioskId, type);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Query the Transfer Policy(ies) for type `T`.
|
|
60
|
+
* @param type The Type we're querying for (E.g `0xMyAddress::hero::Hero`)
|
|
61
|
+
*/
|
|
62
|
+
async getTransferPolicies({ type }) {
|
|
63
|
+
return queryTransferPolicy(this.client, type);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Query all the owned transfer policies for an address.
|
|
67
|
+
* Returns `TransferPolicyCap` which uncludes `policyId, policyCapId, type`.
|
|
68
|
+
* @param address The address we're searching the owned transfer policies for.
|
|
69
|
+
*/
|
|
70
|
+
async getOwnedTransferPolicies({ address }) {
|
|
71
|
+
return queryOwnedTransferPolicies(this.client, address);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Query the Transfer Policy Cap for type `T`, owned by `address`
|
|
75
|
+
* @param type The Type `T` for the object
|
|
76
|
+
* @param address The address that owns the cap.
|
|
77
|
+
*/
|
|
78
|
+
async getOwnedTransferPoliciesByType({ type, address }) {
|
|
79
|
+
return queryTransferPolicyCapsByType(this.client, address, type);
|
|
80
|
+
}
|
|
81
|
+
// Someone would just have to create a `kiosk-client.ts` file in their project, initialize a KioskClient
|
|
82
|
+
// and call the `addRuleResolver` function. Each rule has a `resolve` function.
|
|
83
|
+
// The resolve function is automatically called on `purchaseAndResolve` function call.
|
|
84
|
+
addRuleResolver(rule) {
|
|
85
|
+
if (this.rules.find((x) => x.rule === rule.rule))
|
|
86
|
+
throw new Error(`Rule ${rule.rule} resolver already exists.`);
|
|
87
|
+
this.rules.push(rule);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A convenient helper to get the packageIds for our supported ruleset,
|
|
91
|
+
* based on `kioskClient` configuration.
|
|
92
|
+
*/
|
|
93
|
+
getRulePackageId(rule) {
|
|
94
|
+
const rules2 = this.packageIds || {};
|
|
95
|
+
const network = this.network;
|
|
96
|
+
if (!rules2[rule] && network !== Network.MAINNET && network !== Network.TESTNET) {
|
|
97
|
+
throw new Error(`Missing packageId for rule ${rule}`);
|
|
98
|
+
}
|
|
99
|
+
switch (rule) {
|
|
100
|
+
case "kioskLockRulePackageId":
|
|
101
|
+
return rules2[rule] || KIOSK_LOCK_RULE_ADDRESS[network];
|
|
102
|
+
case "royaltyRulePackageId":
|
|
103
|
+
return rules2[rule] || ROYALTY_RULE_ADDRESS[network];
|
|
104
|
+
case "personalKioskRulePackageId":
|
|
105
|
+
return rules2[rule] || PERSONAL_KIOSK_RULE_ADDRESS[network];
|
|
106
|
+
case "floorPriceRulePackageId":
|
|
107
|
+
return rules2[rule] || FLOOR_PRICE_RULE_ADDRESS[network];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export {
|
|
112
|
+
KioskClient
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=kiosk-client.js.map
|