@mysten/kiosk 1.0.1 → 1.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @mysten/kiosk
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d9133f1: Add display to kiosk items
8
+
3
9
  ## 1.0.1
4
10
 
5
11
  ### Patch Changes
@@ -1,9 +1,9 @@
1
1
  import { BaseRulePackageIds, TransferPolicyRule } from "../constants.mjs";
2
2
  import { FetchKioskOptions, KioskData, KioskExtension, OwnedKiosks } from "../types/kiosk.mjs";
3
3
  import { TransferPolicy, TransferPolicyCap } from "../types/transfer-policy.mjs";
4
- import { KioskClientOptions } from "../types/index.mjs";
4
+ import { KioskClientOptions, KioskCompatibleClient } from "../types/index.mjs";
5
5
  import { PaginationArguments } from "@mysten/sui/jsonRpc";
6
- import { ClientWithCoreApi, SuiClientTypes } from "@mysten/sui/client";
6
+ import { SuiClientTypes } from "@mysten/sui/client";
7
7
 
8
8
  //#region src/client/kiosk-client.d.ts
9
9
  type KioskExtensionOptions<Name extends string = 'kiosk'> = {
@@ -31,7 +31,7 @@ declare function kiosk<const Name extends string = 'kiosk'>({
31
31
  packageIds
32
32
  }?: KioskExtensionOptions<Name>): {
33
33
  name: Name;
34
- register: (client: ClientWithCoreApi) => KioskClient;
34
+ register: (client: KioskCompatibleClient) => KioskClient;
35
35
  };
36
36
  /**
37
37
  * A Client that allows you to interact with kiosk.
@@ -40,7 +40,7 @@ declare function kiosk<const Name extends string = 'kiosk'>({
40
40
  * If you pass packageIds, all functionality will be managed using these packages.
41
41
  */
42
42
  declare class KioskClient {
43
- client: ClientWithCoreApi;
43
+ client: KioskCompatibleClient;
44
44
  network: SuiClientTypes.Network;
45
45
  rules: TransferPolicyRule[];
46
46
  packageIds?: BaseRulePackageIds;
@@ -1 +1 @@
1
- {"version":3,"file":"kiosk-client.d.mts","names":[],"sources":["../../src/client/kiosk-client.ts"],"sourcesContent":[],"mappings":";;;;;;;;KA4BY;SACJ;eACM;;AAFd;AAqBA;;;;;;;;;AAsBA;;;;;;AA0BE,iBAhDc,KAgDd,CAAA,mBAAA,MAAA,GAAA,OAAA,CAAA,CAAA;EAAA,IAAA;EAAA;AAAA,CAAA,CAAA,EA7CC,qBA6CD,CA7CuB,IA6CvB,CAAA,CAAA,EAAA;EACA,IAAA,MAAA;EAGa,QAAA,EAAA,CAAA,MAAA,EA9CM,iBA8CN,EAAA,GA9CuB,WA8CvB;CACF;;;;;;;AA2Bc,cA1Dd,WAAA,CA0Dc;EAAS,MAAA,EAzD3B,iBAyD2B;EAAI,OAAA,EAxD9B,cAAA,CAAe,OAwDe;EAAqC,KAAA,EAvDrE,kBAuDqE,EAAA;EAQhD,UAAA,CAAA,EA9Df,kBA8De;EAAI,WAAA,CAAA,OAAA,EA5DX,kBA4DW;EAAoB;;;;;;EAkBA,cAAA,CAAA;IAAA,OAAA;IAAA;EAOZ,CAPY,EAAA;IAAqC,OAAA,EAAA,MAAA;IAOnE,UAAA,CAAA,EA7DR,mBA6DQ,CAAA,MAAA,CAAA;EAAkB,CAAA,CAAA,EA5DpC,OA4DoC,CA5D5B,WA4D4B,CAAA;;;;;;;;;;;;cA1CgB;MAAsB,QAAQ;;;;;;;;;;;;MASV,QAArC,cAAA;;;;;;;;;MAQa,QAApB,cAAA;;;;;;;;;;MAS+B,QAAvB,iBAAA;;;;;;;;;;;;MASiD,QAArC,iBAAA;wBAO9B"}
1
+ {"version":3,"file":"kiosk-client.d.mts","names":[],"sources":["../../src/client/kiosk-client.ts"],"sourcesContent":[],"mappings":";;;;;;;;KA6BY;SACJ;eACM;;AAFd;AAqBA;;;;;;;;;AAsBA;;;;;;AA0BE,iBAhDc,KAgDd,CAAA,mBAAA,MAAA,GAAA,OAAA,CAAA,CAAA;EAAA,IAAA;EAAA;AAAA,CAAA,CAAA,EA7CC,qBA6CD,CA7CuB,IA6CvB,CAAA,CAAA,EAAA;EACA,IAAA,MAAA;EAGa,QAAA,EAAA,CAAA,MAAA,EA9CM,qBA8CN,EAAA,GA9C2B,WA8C3B;CACF;;;;;;;AA2Bc,cA1Dd,WAAA,CA0Dc;EAAS,MAAA,EAzD3B,qBAyD2B;EAAI,OAAA,EAxD9B,cAAA,CAAe,OAwDe;EAAqC,KAAA,EAvDrE,kBAuDqE,EAAA;EAQhD,UAAA,CAAA,EA9Df,kBA8De;EAAI,WAAA,CAAA,OAAA,EA5DX,kBA4DW;EAAoB;;;;;;EAkBA,cAAA,CAAA;IAAA,OAAA;IAAA;EAOZ,CAPY,EAAA;IAAqC,OAAA,EAAA,MAAA;IAOnE,UAAA,CAAA,EA7DR,mBA6DQ,CAAA,MAAA,CAAA;EAAkB,CAAA,CAAA,EA5DpC,OA4DoC,CA5D5B,WA4D4B,CAAA;;;;;;;;;;;;cA1CgB;MAAsB,QAAQ;;;;;;;;;;;;MASV,QAArC,cAAA;;;;;;;;;MAQa,QAApB,cAAA;;;;;;;;;;MAS+B,QAAvB,iBAAA;;;;;;;;;;;;MASiD,QAArC,iBAAA;wBAO9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"kiosk-client.mjs","names":["rules"],"sources":["../../src/client/kiosk-client.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PaginationArguments } from '@mysten/sui/jsonRpc';\nimport type { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client';\n\nimport {\n\tFLOOR_PRICE_RULE_ADDRESS,\n\tgetBaseRules,\n\tKIOSK_LOCK_RULE_ADDRESS,\n\tPERSONAL_KIOSK_RULE_ADDRESS,\n\tROYALTY_RULE_ADDRESS,\n\trules,\n} from '../constants.js';\nimport type { BaseRulePackageIds, TransferPolicyRule } from '../constants.js';\nimport { fetchKiosk, fetchKioskExtension, getOwnedKiosks } from '../query/kiosk.js';\nimport {\n\tqueryOwnedTransferPolicies,\n\tqueryTransferPolicy,\n\tqueryTransferPolicyCapsByType,\n} from '../query/transfer-policy.js';\nimport type {\n\tFetchKioskOptions,\n\tKioskClientOptions,\n\tKioskData,\n\tOwnedKiosks,\n} from '../types/index.js';\n\nexport type KioskExtensionOptions<Name extends string = 'kiosk'> = {\n\tname?: Name;\n\tpackageIds?: BaseRulePackageIds;\n};\n\n/**\n * Creates a kiosk client extension that can be used with `client.$extend()`.\n *\n * @example\n * ```ts\n * import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';\n * import { kiosk } from '@mysten/kiosk';\n *\n * const client = new SuiJsonRpcClient({\n * url: getJsonRpcFullnodeUrl('mainnet'),\n * network: 'mainnet',\n * }).$extend(kiosk());\n *\n * const ownedKiosks = await client.kiosk.getOwnedKiosks({ address: '0x...' });\n * ```\n */\nexport function kiosk<const Name extends string = 'kiosk'>({\n\tname = 'kiosk' as Name,\n\tpackageIds,\n}: KioskExtensionOptions<Name> = {}) {\n\treturn {\n\t\tname,\n\t\tregister: (client: ClientWithCoreApi) => {\n\t\t\treturn new KioskClient({\n\t\t\t\tclient,\n\t\t\t\tnetwork: client.network,\n\t\t\t\tpackageIds,\n\t\t\t});\n\t\t},\n\t};\n}\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\tclient: ClientWithCoreApi;\n\tnetwork: SuiClientTypes.Network;\n\trules: TransferPolicyRule[];\n\tpackageIds?: BaseRulePackageIds;\n\n\tconstructor(options: KioskClientOptions) {\n\t\tthis.client = options.client;\n\t\tthis.network = options.network;\n\t\tthis.rules = rules; // add all the default rules.\n\t\tthis.packageIds = options.packageIds;\n\n\t\t// Add the custom Package Ids too on the rule list.\n\t\t// Only adds the rules that are passed in the packageId object.\n\t\tif (options.packageIds) this.rules.push(...getBaseRules(options.packageIds));\n\t}\n\n\t/// Querying\n\n\t/**\n\t * Get an addresses's owned kiosks.\n\t * @param address The address for which we want to retrieve the kiosks.\n\t * @param pagination Optional pagination arguments.\n\t * @returns An Object containing all the `kioskOwnerCap` objects as well as the kioskIds.\n\t */\n\tasync getOwnedKiosks({\n\t\taddress,\n\t\tpagination,\n\t}: {\n\t\taddress: string;\n\t\tpagination?: PaginationArguments<string>;\n\t}): Promise<OwnedKiosks> {\n\t\tconst personalPackageId =\n\t\t\tthis.packageIds?.personalKioskRulePackageId || PERSONAL_KIOSK_RULE_ADDRESS[this.network];\n\n\t\treturn getOwnedKiosks(this.client, address, {\n\t\t\tpagination,\n\t\t\tpersonalKioskType: personalPackageId\n\t\t\t\t? `${personalPackageId}::personal_kiosk::PersonalKioskCap`\n\t\t\t\t: '',\n\t\t});\n\t}\n\n\t/**\n\t * Fetches the kiosk contents.\n\t * @param id The ID of the kiosk to fetch.\n\t * @param options Optional to control the fetch behavior.\n\t * @returns\n\t */\n\tasync getKiosk({ id, options }: { id: string; options?: FetchKioskOptions }): Promise<KioskData> {\n\t\treturn (await fetchKiosk(this.client, id, {}, options || {})).data;\n\t}\n\n\t/**\n\t * Fetch the extension data (if any) for a kiosk, by type\n\t * @param kioskId The ID of the kiosk to lookup\n\t * @param extensionType The Type of the extension (can be used from by using the type returned by `getKiosk()`)\n\t */\n\tasync getKioskExtension({ kioskId, type }: { kioskId: string; type: string }) {\n\t\treturn fetchKioskExtension(this.client, kioskId, type);\n\t}\n\n\t/**\n\t * Query the Transfer Policy(ies) for type `T`.\n\t * @param type The Type we're querying for (E.g `0xMyAddress::hero::Hero`)\n\t */\n\tasync getTransferPolicies({ type }: { type: string }) {\n\t\treturn queryTransferPolicy(this.client, type);\n\t}\n\n\t/**\n\t * Query all the owned transfer policies for an address.\n\t * Returns `TransferPolicyCap` which uncludes `policyId, policyCapId, type`.\n\t * @param address The address we're searching the owned transfer policies for.\n\t */\n\tasync getOwnedTransferPolicies({ address }: { address: string }) {\n\t\treturn queryOwnedTransferPolicies(this.client, address);\n\t}\n\n\t/**\n\t * Query the Transfer Policy Cap for type `T`, owned by `address`\n\t * @param type The Type `T` for the object\n\t * @param address The address that owns the cap.\n\t */\n\tasync getOwnedTransferPoliciesByType({ type, address }: { type: string; address: string }) {\n\t\treturn queryTransferPolicyCapsByType(this.client, address, type);\n\t}\n\n\t// Someone would just have to create a `kiosk-client.ts` file in their project, initialize a KioskClient\n\t// and call the `addRuleResolver` function. Each rule has a `resolve` function.\n\t// The resolve function is automatically called on `purchaseAndResolve` function call.\n\taddRuleResolver(rule: TransferPolicyRule) {\n\t\tif (this.rules.find((x) => x.rule === rule.rule))\n\t\t\tthrow new Error(`Rule ${rule.rule} resolver already exists.`);\n\t\tthis.rules.push(rule);\n\t}\n\n\t/**\n\t * A convenient helper to get the packageIds for our supported ruleset,\n\t * based on `kioskClient` configuration.\n\t */\n\tgetRulePackageId(\n\t\trule:\n\t\t\t| 'kioskLockRulePackageId'\n\t\t\t| 'royaltyRulePackageId'\n\t\t\t| 'personalKioskRulePackageId'\n\t\t\t| 'floorPriceRulePackageId',\n\t) {\n\t\tconst rules = this.packageIds || {};\n\t\tconst network = this.network;\n\n\t\t/// Check existence of rule based on network and throw an error if it's not found.\n\t\t/// We always have a fallback for testnet or mainnet.\n\t\tif (!rules[rule] && network !== 'mainnet' && network !== 'testnet') {\n\t\t\tthrow new Error(`Missing packageId for rule ${rule}`);\n\t\t}\n\n\t\tswitch (rule) {\n\t\t\tcase 'kioskLockRulePackageId':\n\t\t\t\treturn rules[rule] || KIOSK_LOCK_RULE_ADDRESS[network];\n\t\t\tcase 'royaltyRulePackageId':\n\t\t\t\treturn rules[rule] || ROYALTY_RULE_ADDRESS[network];\n\t\t\tcase 'personalKioskRulePackageId':\n\t\t\t\treturn rules[rule] || PERSONAL_KIOSK_RULE_ADDRESS[network];\n\t\t\tcase 'floorPriceRulePackageId':\n\t\t\t\treturn rules[rule] || FLOOR_PRICE_RULE_ADDRESS[network];\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiDA,SAAgB,MAA2C,EAC1D,OAAO,SACP,eACgC,EAAE,EAAE;AACpC,QAAO;EACN;EACA,WAAW,WAA8B;AACxC,UAAO,IAAI,YAAY;IACtB;IACA,SAAS,OAAO;IAChB;IACA,CAAC;;EAEH;;;;;;;;AASF,IAAa,cAAb,MAAyB;CAMxB,YAAY,SAA6B;AACxC,OAAK,SAAS,QAAQ;AACtB,OAAK,UAAU,QAAQ;AACvB,OAAK,QAAQ;AACb,OAAK,aAAa,QAAQ;AAI1B,MAAI,QAAQ,WAAY,MAAK,MAAM,KAAK,GAAG,aAAa,QAAQ,WAAW,CAAC;;;;;;;;CAW7E,MAAM,eAAe,EACpB,SACA,cAIwB;EACxB,MAAM,oBACL,KAAK,YAAY,8BAA8B,4BAA4B,KAAK;AAEjF,SAAO,eAAe,KAAK,QAAQ,SAAS;GAC3C;GACA,mBAAmB,oBAChB,GAAG,kBAAkB,sCACrB;GACH,CAAC;;;;;;;;CASH,MAAM,SAAS,EAAE,IAAI,WAA4E;AAChG,UAAQ,MAAM,WAAW,KAAK,QAAQ,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;;;;;;;CAQ/D,MAAM,kBAAkB,EAAE,SAAS,QAA2C;AAC7E,SAAO,oBAAoB,KAAK,QAAQ,SAAS,KAAK;;;;;;CAOvD,MAAM,oBAAoB,EAAE,QAA0B;AACrD,SAAO,oBAAoB,KAAK,QAAQ,KAAK;;;;;;;CAQ9C,MAAM,yBAAyB,EAAE,WAAgC;AAChE,SAAO,2BAA2B,KAAK,QAAQ,QAAQ;;;;;;;CAQxD,MAAM,+BAA+B,EAAE,MAAM,WAA8C;AAC1F,SAAO,8BAA8B,KAAK,QAAQ,SAAS,KAAK;;CAMjE,gBAAgB,MAA0B;AACzC,MAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,KAAK,KAAK,CAC/C,OAAM,IAAI,MAAM,QAAQ,KAAK,KAAK,2BAA2B;AAC9D,OAAK,MAAM,KAAK,KAAK;;;;;;CAOtB,iBACC,MAKC;EACD,MAAMA,UAAQ,KAAK,cAAc,EAAE;EACnC,MAAM,UAAU,KAAK;AAIrB,MAAI,CAACA,QAAM,SAAS,YAAY,aAAa,YAAY,UACxD,OAAM,IAAI,MAAM,8BAA8B,OAAO;AAGtD,UAAQ,MAAR;GACC,KAAK,yBACJ,QAAOA,QAAM,SAAS,wBAAwB;GAC/C,KAAK,uBACJ,QAAOA,QAAM,SAAS,qBAAqB;GAC5C,KAAK,6BACJ,QAAOA,QAAM,SAAS,4BAA4B;GACnD,KAAK,0BACJ,QAAOA,QAAM,SAAS,yBAAyB"}
1
+ {"version":3,"file":"kiosk-client.mjs","names":["rules"],"sources":["../../src/client/kiosk-client.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PaginationArguments } from '@mysten/sui/jsonRpc';\nimport type { SuiClientTypes } from '@mysten/sui/client';\n\nimport {\n\tFLOOR_PRICE_RULE_ADDRESS,\n\tgetBaseRules,\n\tKIOSK_LOCK_RULE_ADDRESS,\n\tPERSONAL_KIOSK_RULE_ADDRESS,\n\tROYALTY_RULE_ADDRESS,\n\trules,\n} from '../constants.js';\nimport type { BaseRulePackageIds, TransferPolicyRule } from '../constants.js';\nimport { fetchKiosk, fetchKioskExtension, getOwnedKiosks } from '../query/kiosk.js';\nimport {\n\tqueryOwnedTransferPolicies,\n\tqueryTransferPolicy,\n\tqueryTransferPolicyCapsByType,\n} from '../query/transfer-policy.js';\nimport type {\n\tFetchKioskOptions,\n\tKioskClientOptions,\n\tKioskCompatibleClient,\n\tKioskData,\n\tOwnedKiosks,\n} from '../types/index.js';\n\nexport type KioskExtensionOptions<Name extends string = 'kiosk'> = {\n\tname?: Name;\n\tpackageIds?: BaseRulePackageIds;\n};\n\n/**\n * Creates a kiosk client extension that can be used with `client.$extend()`.\n *\n * @example\n * ```ts\n * import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';\n * import { kiosk } from '@mysten/kiosk';\n *\n * const client = new SuiJsonRpcClient({\n * url: getJsonRpcFullnodeUrl('mainnet'),\n * network: 'mainnet',\n * }).$extend(kiosk());\n *\n * const ownedKiosks = await client.kiosk.getOwnedKiosks({ address: '0x...' });\n * ```\n */\nexport function kiosk<const Name extends string = 'kiosk'>({\n\tname = 'kiosk' as Name,\n\tpackageIds,\n}: KioskExtensionOptions<Name> = {}) {\n\treturn {\n\t\tname,\n\t\tregister: (client: KioskCompatibleClient) => {\n\t\t\treturn new KioskClient({\n\t\t\t\tclient,\n\t\t\t\tnetwork: client.network,\n\t\t\t\tpackageIds,\n\t\t\t});\n\t\t},\n\t};\n}\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\tclient: KioskCompatibleClient;\n\tnetwork: SuiClientTypes.Network;\n\trules: TransferPolicyRule[];\n\tpackageIds?: BaseRulePackageIds;\n\n\tconstructor(options: KioskClientOptions) {\n\t\tthis.client = options.client;\n\t\tthis.network = options.network;\n\t\tthis.rules = rules; // add all the default rules.\n\t\tthis.packageIds = options.packageIds;\n\n\t\t// Add the custom Package Ids too on the rule list.\n\t\t// Only adds the rules that are passed in the packageId object.\n\t\tif (options.packageIds) this.rules.push(...getBaseRules(options.packageIds));\n\t}\n\n\t/// Querying\n\n\t/**\n\t * Get an addresses's owned kiosks.\n\t * @param address The address for which we want to retrieve the kiosks.\n\t * @param pagination Optional pagination arguments.\n\t * @returns An Object containing all the `kioskOwnerCap` objects as well as the kioskIds.\n\t */\n\tasync getOwnedKiosks({\n\t\taddress,\n\t\tpagination,\n\t}: {\n\t\taddress: string;\n\t\tpagination?: PaginationArguments<string>;\n\t}): Promise<OwnedKiosks> {\n\t\tconst personalPackageId =\n\t\t\tthis.packageIds?.personalKioskRulePackageId || PERSONAL_KIOSK_RULE_ADDRESS[this.network];\n\n\t\treturn getOwnedKiosks(this.client, address, {\n\t\t\tpagination,\n\t\t\tpersonalKioskType: personalPackageId\n\t\t\t\t? `${personalPackageId}::personal_kiosk::PersonalKioskCap`\n\t\t\t\t: '',\n\t\t});\n\t}\n\n\t/**\n\t * Fetches the kiosk contents.\n\t * @param id The ID of the kiosk to fetch.\n\t * @param options Optional to control the fetch behavior.\n\t * @returns\n\t */\n\tasync getKiosk({ id, options }: { id: string; options?: FetchKioskOptions }): Promise<KioskData> {\n\t\treturn (await fetchKiosk(this.client, id, {}, options || {})).data;\n\t}\n\n\t/**\n\t * Fetch the extension data (if any) for a kiosk, by type\n\t * @param kioskId The ID of the kiosk to lookup\n\t * @param extensionType The Type of the extension (can be used from by using the type returned by `getKiosk()`)\n\t */\n\tasync getKioskExtension({ kioskId, type }: { kioskId: string; type: string }) {\n\t\treturn fetchKioskExtension(this.client, kioskId, type);\n\t}\n\n\t/**\n\t * Query the Transfer Policy(ies) for type `T`.\n\t * @param type The Type we're querying for (E.g `0xMyAddress::hero::Hero`)\n\t */\n\tasync getTransferPolicies({ type }: { type: string }) {\n\t\treturn queryTransferPolicy(this.client, type);\n\t}\n\n\t/**\n\t * Query all the owned transfer policies for an address.\n\t * Returns `TransferPolicyCap` which uncludes `policyId, policyCapId, type`.\n\t * @param address The address we're searching the owned transfer policies for.\n\t */\n\tasync getOwnedTransferPolicies({ address }: { address: string }) {\n\t\treturn queryOwnedTransferPolicies(this.client, address);\n\t}\n\n\t/**\n\t * Query the Transfer Policy Cap for type `T`, owned by `address`\n\t * @param type The Type `T` for the object\n\t * @param address The address that owns the cap.\n\t */\n\tasync getOwnedTransferPoliciesByType({ type, address }: { type: string; address: string }) {\n\t\treturn queryTransferPolicyCapsByType(this.client, address, type);\n\t}\n\n\t// Someone would just have to create a `kiosk-client.ts` file in their project, initialize a KioskClient\n\t// and call the `addRuleResolver` function. Each rule has a `resolve` function.\n\t// The resolve function is automatically called on `purchaseAndResolve` function call.\n\taddRuleResolver(rule: TransferPolicyRule) {\n\t\tif (this.rules.find((x) => x.rule === rule.rule))\n\t\t\tthrow new Error(`Rule ${rule.rule} resolver already exists.`);\n\t\tthis.rules.push(rule);\n\t}\n\n\t/**\n\t * A convenient helper to get the packageIds for our supported ruleset,\n\t * based on `kioskClient` configuration.\n\t */\n\tgetRulePackageId(\n\t\trule:\n\t\t\t| 'kioskLockRulePackageId'\n\t\t\t| 'royaltyRulePackageId'\n\t\t\t| 'personalKioskRulePackageId'\n\t\t\t| 'floorPriceRulePackageId',\n\t) {\n\t\tconst rules = this.packageIds || {};\n\t\tconst network = this.network;\n\n\t\t/// Check existence of rule based on network and throw an error if it's not found.\n\t\t/// We always have a fallback for testnet or mainnet.\n\t\tif (!rules[rule] && network !== 'mainnet' && network !== 'testnet') {\n\t\t\tthrow new Error(`Missing packageId for rule ${rule}`);\n\t\t}\n\n\t\tswitch (rule) {\n\t\t\tcase 'kioskLockRulePackageId':\n\t\t\t\treturn rules[rule] || KIOSK_LOCK_RULE_ADDRESS[network];\n\t\t\tcase 'royaltyRulePackageId':\n\t\t\t\treturn rules[rule] || ROYALTY_RULE_ADDRESS[network];\n\t\t\tcase 'personalKioskRulePackageId':\n\t\t\t\treturn rules[rule] || PERSONAL_KIOSK_RULE_ADDRESS[network];\n\t\t\tcase 'floorPriceRulePackageId':\n\t\t\t\treturn rules[rule] || FLOOR_PRICE_RULE_ADDRESS[network];\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkDA,SAAgB,MAA2C,EAC1D,OAAO,SACP,eACgC,EAAE,EAAE;AACpC,QAAO;EACN;EACA,WAAW,WAAkC;AAC5C,UAAO,IAAI,YAAY;IACtB;IACA,SAAS,OAAO;IAChB;IACA,CAAC;;EAEH;;;;;;;;AASF,IAAa,cAAb,MAAyB;CAMxB,YAAY,SAA6B;AACxC,OAAK,SAAS,QAAQ;AACtB,OAAK,UAAU,QAAQ;AACvB,OAAK,QAAQ;AACb,OAAK,aAAa,QAAQ;AAI1B,MAAI,QAAQ,WAAY,MAAK,MAAM,KAAK,GAAG,aAAa,QAAQ,WAAW,CAAC;;;;;;;;CAW7E,MAAM,eAAe,EACpB,SACA,cAIwB;EACxB,MAAM,oBACL,KAAK,YAAY,8BAA8B,4BAA4B,KAAK;AAEjF,SAAO,eAAe,KAAK,QAAQ,SAAS;GAC3C;GACA,mBAAmB,oBAChB,GAAG,kBAAkB,sCACrB;GACH,CAAC;;;;;;;;CASH,MAAM,SAAS,EAAE,IAAI,WAA4E;AAChG,UAAQ,MAAM,WAAW,KAAK,QAAQ,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;;;;;;;CAQ/D,MAAM,kBAAkB,EAAE,SAAS,QAA2C;AAC7E,SAAO,oBAAoB,KAAK,QAAQ,SAAS,KAAK;;;;;;CAOvD,MAAM,oBAAoB,EAAE,QAA0B;AACrD,SAAO,oBAAoB,KAAK,QAAQ,KAAK;;;;;;;CAQ9C,MAAM,yBAAyB,EAAE,WAAgC;AAChE,SAAO,2BAA2B,KAAK,QAAQ,QAAQ;;;;;;;CAQxD,MAAM,+BAA+B,EAAE,MAAM,WAA8C;AAC1F,SAAO,8BAA8B,KAAK,QAAQ,SAAS,KAAK;;CAMjE,gBAAgB,MAA0B;AACzC,MAAI,KAAK,MAAM,MAAM,MAAM,EAAE,SAAS,KAAK,KAAK,CAC/C,OAAM,IAAI,MAAM,QAAQ,KAAK,KAAK,2BAA2B;AAC9D,OAAK,MAAM,KAAK,KAAK;;;;;;CAOtB,iBACC,MAKC;EACD,MAAMA,UAAQ,KAAK,cAAc,EAAE;EACnC,MAAM,UAAU,KAAK;AAIrB,MAAI,CAACA,QAAM,SAAS,YAAY,aAAa,YAAY,UACxD,OAAM,IAAI,MAAM,8BAA8B,OAAO;AAGtD,UAAQ,MAAR;GACC,KAAK,yBACJ,QAAOA,QAAM,SAAS,wBAAwB;GAC/C,KAAK,uBACJ,QAAOA,QAAM,SAAS,qBAAqB;GAC5C,KAAK,6BACJ,QAAOA,QAAM,SAAS,4BAA4B;GACnD,KAAK,0BACJ,QAAOA,QAAM,SAAS,yBAAyB"}
@@ -240,5 +240,5 @@ function returnVal(options) {
240
240
  }
241
241
 
242
242
  //#endregion
243
- export { Kiosk, KioskOwnerCap, Listing, Lock, _new, borrowVal, delist, list, lock, place, placeAndList, purchase, returnVal, take, withdraw };
243
+ export { Item, Kiosk, KioskOwnerCap, Listing, Lock, _new, borrowVal, delist, list, lock, place, placeAndList, purchase, returnVal, take, withdraw };
244
244
  //# sourceMappingURL=kiosk.mjs.map
package/dist/index.d.mts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BaseRulePackageIds, FLOOR_PRICE_RULE_ADDRESS, KIOSK_LOCK_RULE_ADDRESS, PERSONAL_KIOSK_RULE_ADDRESS, ROYALTY_RULE_ADDRESS, TransferPolicyRule, getBaseRules, mainnetRules, rules, testnetRules } from "./constants.mjs";
2
- import { FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskData, KioskExtension, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, OwnedKiosks, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions } from "./types/kiosk.mjs";
2
+ import { FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskData, KioskDisplay, KioskExtension, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, ObjectWithDisplay, OwnedKiosks, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions } from "./types/kiosk.mjs";
3
3
  import { KioskClient, KioskExtensionOptions, kiosk } from "./client/kiosk-client.mjs";
4
4
  import { KIOSK_LOCK_RULE, ROYALTY_RULE, RuleResolvingParams, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicy, TransferPolicyCap, TransferPolicyCreated } from "./types/transfer-policy.mjs";
5
- import { KioskClientOptions, ObjectArgument } from "./types/index.mjs";
6
- import { DynamicFieldInfo, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getKioskObject, getNormalizedRuleType, percentageToBasisPoints } from "./utils.mjs";
5
+ import { KioskClientOptions, KioskCompatibleClient, ObjectArgument } from "./types/index.mjs";
6
+ import { DynamicFieldInfo, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getKioskObject, getNormalizedRuleType, percentageToBasisPoints } from "./utils.mjs";
7
7
  import { TransferPolicyBaseParams, TransferPolicyTransaction, TransferPolicyTransactionParams } from "./client/tp-transaction.mjs";
8
8
  import { KioskTransaction, KioskTransactionParams } from "./client/kiosk-transaction.mjs";
9
- export { BaseRulePackageIds, DynamicFieldInfo, FLOOR_PRICE_RULE_ADDRESS, FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_LOCK_RULE, KIOSK_LOCK_RULE_ADDRESS, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskClient, KioskClientOptions, KioskData, KioskExtension, KioskExtensionOptions, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, KioskTransaction, KioskTransactionParams, ObjectArgument, OwnedKiosks, PERSONAL_KIOSK_RULE_ADDRESS, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions, ROYALTY_RULE, ROYALTY_RULE_ADDRESS, RuleResolvingParams, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicy, TransferPolicyBaseParams, TransferPolicyCap, TransferPolicyCreated, TransferPolicyRule, TransferPolicyTransaction, TransferPolicyTransactionParams, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getBaseRules, getKioskObject, getNormalizedRuleType, kiosk, mainnetRules, percentageToBasisPoints, rules, testnetRules };
9
+ export { BaseRulePackageIds, DynamicFieldInfo, FLOOR_PRICE_RULE_ADDRESS, FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_LOCK_RULE, KIOSK_LOCK_RULE_ADDRESS, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskClient, KioskClientOptions, KioskCompatibleClient, KioskData, KioskDisplay, KioskExtension, KioskExtensionOptions, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, KioskTransaction, KioskTransactionParams, ObjectArgument, ObjectWithDisplay, OwnedKiosks, PERSONAL_KIOSK_RULE_ADDRESS, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions, ROYALTY_RULE, ROYALTY_RULE_ADDRESS, RuleResolvingParams, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicy, TransferPolicyBaseParams, TransferPolicyCap, TransferPolicyCreated, TransferPolicyRule, TransferPolicyTransaction, TransferPolicyTransactionParams, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getBaseRules, getKioskObject, getNormalizedRuleType, kiosk, mainnetRules, percentageToBasisPoints, rules, testnetRules };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getKioskObject, getNormalizedRuleType, percentageToBasisPoints } from "./utils.mjs";
1
+ import { attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getKioskObject, getNormalizedRuleType, percentageToBasisPoints } from "./utils.mjs";
2
2
  import { KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE } from "./types/kiosk.mjs";
3
3
  import { KIOSK_LOCK_RULE, ROYALTY_RULE, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE } from "./types/transfer-policy.mjs";
4
4
  import { FLOOR_PRICE_RULE_ADDRESS, KIOSK_LOCK_RULE_ADDRESS, PERSONAL_KIOSK_RULE_ADDRESS, ROYALTY_RULE_ADDRESS, getBaseRules, mainnetRules, rules, testnetRules } from "./constants.mjs";
@@ -6,4 +6,4 @@ import { KioskClient, kiosk } from "./client/kiosk-client.mjs";
6
6
  import { TransferPolicyTransaction } from "./client/tp-transaction.mjs";
7
7
  import { KioskTransaction } from "./client/kiosk-transaction.mjs";
8
8
 
9
- export { FLOOR_PRICE_RULE_ADDRESS, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_LOCK_RULE, KIOSK_LOCK_RULE_ADDRESS, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, KioskClient, KioskTransaction, PERSONAL_KIOSK_RULE_ADDRESS, ROYALTY_RULE, ROYALTY_RULE_ADDRESS, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicyTransaction, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getBaseRules, getKioskObject, getNormalizedRuleType, kiosk, mainnetRules, percentageToBasisPoints, rules, testnetRules };
9
+ export { FLOOR_PRICE_RULE_ADDRESS, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_LOCK_RULE, KIOSK_LOCK_RULE_ADDRESS, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, KioskClient, KioskTransaction, PERSONAL_KIOSK_RULE_ADDRESS, ROYALTY_RULE, ROYALTY_RULE_ADDRESS, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicyTransaction, attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getBaseRules, getKioskObject, getNormalizedRuleType, kiosk, mainnetRules, percentageToBasisPoints, rules, testnetRules };
@@ -1,8 +1,193 @@
1
+ import { normalizeStructTag } from "@mysten/sui/utils";
1
2
  import { graphql } from "@mysten/sui/graphql/schema";
2
3
  import { isSuiGraphQLClient } from "@mysten/sui/graphql";
3
4
  import { isSuiJsonRpcClient } from "@mysten/sui/jsonRpc";
5
+ import { chunk, fromBase64 } from "@mysten/utils";
4
6
 
5
7
  //#region src/query/client-utils.ts
8
+ const DEFAULT_QUERY_LIMIT = 50;
9
+ const FetchObjectsWithDisplayQuery = graphql(`
10
+ query FetchObjectsWithDisplay($objectKeys: [ObjectKey!]!) {
11
+ multiGetObjects(keys: $objectKeys) {
12
+ address
13
+ digest
14
+ version
15
+ asMoveObject {
16
+ contents {
17
+ bcs
18
+ type {
19
+ repr
20
+ }
21
+ display {
22
+ output
23
+ errors
24
+ }
25
+ }
26
+ }
27
+ asMovePackage {
28
+ __typename
29
+ }
30
+ owner {
31
+ __typename
32
+ ... on AddressOwner {
33
+ address {
34
+ address
35
+ }
36
+ }
37
+ ... on ObjectOwner {
38
+ address {
39
+ address
40
+ }
41
+ }
42
+ ... on Shared {
43
+ initialSharedVersion
44
+ }
45
+ ... on ConsensusAddressOwner {
46
+ startVersion
47
+ address {
48
+ address
49
+ }
50
+ }
51
+ }
52
+ previousTransaction {
53
+ digest
54
+ }
55
+ }
56
+ }
57
+ `);
58
+ async function getAllObjects(client, ids) {
59
+ if (ids.length === 0) return [];
60
+ const chunks = chunk(ids, DEFAULT_QUERY_LIMIT);
61
+ const results = [];
62
+ if (isSuiGraphQLClient(client)) {
63
+ for (const batch of chunks) {
64
+ const { data } = await client.query({
65
+ query: FetchObjectsWithDisplayQuery,
66
+ variables: { objectKeys: batch.map((address) => ({ address })) }
67
+ });
68
+ if (data?.multiGetObjects) for (const obj of data.multiGetObjects) {
69
+ if (!obj) continue;
70
+ let type;
71
+ if (obj.asMovePackage) type = "package";
72
+ else if (obj.asMoveObject?.contents?.type?.repr) type = obj.asMoveObject.contents.type.repr;
73
+ else type = "";
74
+ const bcsContent = obj.asMoveObject?.contents?.bcs ? fromBase64(obj.asMoveObject.contents.bcs) : void 0;
75
+ const displayData = obj.asMoveObject?.contents?.display;
76
+ const display = displayData ? {
77
+ data: displayData.output ?? null,
78
+ error: displayData.errors ? JSON.stringify(displayData.errors) : null
79
+ } : void 0;
80
+ results.push({
81
+ objectId: obj.address,
82
+ version: obj.version?.toString(),
83
+ digest: obj.digest,
84
+ type,
85
+ content: bcsContent,
86
+ owner: mapGraphQLOwner(obj.owner),
87
+ previousTransaction: obj.previousTransaction?.digest ?? null,
88
+ objectBcs: void 0,
89
+ json: void 0,
90
+ display
91
+ });
92
+ }
93
+ }
94
+ return results;
95
+ }
96
+ if (isSuiJsonRpcClient(client)) {
97
+ for (const batch of chunks) {
98
+ const responses = await client.multiGetObjects({
99
+ ids: batch,
100
+ options: {
101
+ showDisplay: true,
102
+ showBcs: true,
103
+ showType: true,
104
+ showOwner: true,
105
+ showPreviousTransaction: true
106
+ }
107
+ });
108
+ for (const resp of responses) {
109
+ if (!resp.data) continue;
110
+ const obj = resp.data;
111
+ const bcsContent = obj.bcs?.dataType === "moveObject" ? fromBase64(obj.bcs.bcsBytes) : void 0;
112
+ const type = obj.type && obj.type.includes("::") ? normalizeStructTag(obj.type) : obj.type ?? "";
113
+ const display = obj.display ? {
114
+ data: obj.display.data ?? null,
115
+ error: obj.display.error ? JSON.stringify(obj.display.error) : null
116
+ } : void 0;
117
+ results.push({
118
+ objectId: obj.objectId,
119
+ version: obj.version,
120
+ digest: obj.digest,
121
+ type,
122
+ content: bcsContent,
123
+ owner: parseJsonRpcOwner(obj.owner),
124
+ previousTransaction: obj.previousTransaction ?? null,
125
+ objectBcs: void 0,
126
+ json: void 0,
127
+ display
128
+ });
129
+ }
130
+ }
131
+ return results;
132
+ }
133
+ throw new Error("Object fetching requires a JSON-RPC or GraphQL client. gRPC clients are not supported by the kiosk SDK.");
134
+ }
135
+ function parseJsonRpcOwner(owner) {
136
+ if (owner === "Immutable") return {
137
+ $kind: "Immutable",
138
+ Immutable: true
139
+ };
140
+ const ownerObj = owner;
141
+ if ("ConsensusAddressOwner" in ownerObj) return {
142
+ $kind: "ConsensusAddressOwner",
143
+ ConsensusAddressOwner: {
144
+ owner: ownerObj.ConsensusAddressOwner.owner,
145
+ startVersion: ownerObj.ConsensusAddressOwner.start_version
146
+ }
147
+ };
148
+ if ("AddressOwner" in ownerObj) return {
149
+ $kind: "AddressOwner",
150
+ AddressOwner: ownerObj.AddressOwner
151
+ };
152
+ if ("ObjectOwner" in ownerObj) return {
153
+ $kind: "ObjectOwner",
154
+ ObjectOwner: ownerObj.ObjectOwner
155
+ };
156
+ if ("Shared" in ownerObj) return {
157
+ $kind: "Shared",
158
+ Shared: { initialSharedVersion: ownerObj.Shared.initial_shared_version }
159
+ };
160
+ throw new Error(`Unknown owner type: ${JSON.stringify(owner)}`);
161
+ }
162
+ function mapGraphQLOwner(owner) {
163
+ const o = owner;
164
+ switch (o.__typename) {
165
+ case "AddressOwner": return {
166
+ $kind: "AddressOwner",
167
+ AddressOwner: o.address?.address
168
+ };
169
+ case "ObjectOwner": return {
170
+ $kind: "ObjectOwner",
171
+ ObjectOwner: o.address?.address
172
+ };
173
+ case "Immutable": return {
174
+ $kind: "Immutable",
175
+ Immutable: true
176
+ };
177
+ case "Shared": return {
178
+ $kind: "Shared",
179
+ Shared: { initialSharedVersion: String(o.initialSharedVersion) }
180
+ };
181
+ case "ConsensusAddressOwner": return {
182
+ $kind: "ConsensusAddressOwner",
183
+ ConsensusAddressOwner: {
184
+ owner: o.address?.address,
185
+ startVersion: String(o.startVersion)
186
+ }
187
+ };
188
+ default: throw new Error(`Unknown GraphQL owner type: ${o.__typename}`);
189
+ }
190
+ }
6
191
  async function queryEvents(client, eventType) {
7
192
  if (isSuiGraphQLClient(client)) {
8
193
  const query = graphql(`
@@ -26,5 +211,5 @@ async function queryEvents(client, eventType) {
26
211
  }
27
212
 
28
213
  //#endregion
29
- export { queryEvents };
214
+ export { getAllObjects, queryEvents };
30
215
  //# sourceMappingURL=client-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-utils.mjs","names":[],"sources":["../../src/query/client-utils.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ClientWithCoreApi } from '@mysten/sui/client';\nimport { graphql } from '@mysten/sui/graphql/schema';\nimport { isSuiGraphQLClient } from '@mysten/sui/graphql';\nimport { isSuiJsonRpcClient } from '@mysten/sui/jsonRpc';\n\nexport async function queryEvents(\n\tclient: ClientWithCoreApi,\n\teventType: string,\n): Promise<{ json: unknown }[]> {\n\tif (isSuiGraphQLClient(client)) {\n\t\tconst query = graphql(`\n\t\t\tquery QueryEvents($eventType: String!) {\n\t\t\t\tevents(filter: { eventType: $eventType }, first: 50) {\n\t\t\t\t\tnodes {\n\t\t\t\t\t\tcontents {\n\t\t\t\t\t\t\tjson\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t`);\n\n\t\tconst result = await client.query({\n\t\t\tquery,\n\t\t\tvariables: { eventType },\n\t\t});\n\n\t\treturn (\n\t\t\tresult.data?.events?.nodes.map((event) => ({\n\t\t\t\tjson: event.contents?.json,\n\t\t\t})) ?? []\n\t\t);\n\t}\n\n\tif (isSuiJsonRpcClient(client)) {\n\t\tconst events = await client.queryEvents({\n\t\t\tquery: { MoveEventType: eventType },\n\t\t});\n\n\t\treturn events.data?.map((d) => ({ json: d.parsedJson })) ?? [];\n\t}\n\n\tthrow new Error(\n\t\t'Event querying is not supported by this client type. ' +\n\t\t\t'JSON-RPC and GraphQL clients support event querying, but gRPC does not. ' +\n\t\t\t'Please use a JSON-RPC or GraphQL client, or provide the required IDs directly.',\n\t);\n}\n"],"mappings":";;;;;AAQA,eAAsB,YACrB,QACA,WAC+B;AAC/B,KAAI,mBAAmB,OAAO,EAAE;EAC/B,MAAM,QAAQ,QAAQ;;;;;;;;;;IAUpB;AAOF,UALe,MAAM,OAAO,MAAM;GACjC;GACA,WAAW,EAAE,WAAW;GACxB,CAAC,EAGM,MAAM,QAAQ,MAAM,KAAK,WAAW,EAC1C,MAAM,MAAM,UAAU,MACtB,EAAE,IAAI,EAAE;;AAIX,KAAI,mBAAmB,OAAO,CAK7B,SAJe,MAAM,OAAO,YAAY,EACvC,OAAO,EAAE,eAAe,WAAW,EACnC,CAAC,EAEY,MAAM,KAAK,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE;AAG/D,OAAM,IAAI,MACT,8MAGA"}
1
+ {"version":3,"file":"client-utils.mjs","names":[],"sources":["../../src/query/client-utils.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { SuiClientTypes } from '@mysten/sui/client';\nimport { graphql } from '@mysten/sui/graphql/schema';\nimport { isSuiGraphQLClient } from '@mysten/sui/graphql';\nimport { isSuiJsonRpcClient } from '@mysten/sui/jsonRpc';\nimport { normalizeStructTag } from '@mysten/sui/utils';\nimport { chunk, fromBase64 } from '@mysten/utils';\n\nimport type { KioskDisplay, ObjectWithDisplay } from '../types/kiosk.js';\nimport type { KioskCompatibleClient } from '../types/index.js';\n\nconst DEFAULT_QUERY_LIMIT = 50;\n\nconst FetchObjectsWithDisplayQuery = graphql(`\n\tquery FetchObjectsWithDisplay($objectKeys: [ObjectKey!]!) {\n\t\tmultiGetObjects(keys: $objectKeys) {\n\t\t\taddress\n\t\t\tdigest\n\t\t\tversion\n\t\t\tasMoveObject {\n\t\t\t\tcontents {\n\t\t\t\t\tbcs\n\t\t\t\t\ttype {\n\t\t\t\t\t\trepr\n\t\t\t\t\t}\n\t\t\t\t\tdisplay {\n\t\t\t\t\t\toutput\n\t\t\t\t\t\terrors\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tasMovePackage {\n\t\t\t\t__typename\n\t\t\t}\n\t\t\towner {\n\t\t\t\t__typename\n\t\t\t\t... on AddressOwner {\n\t\t\t\t\taddress {\n\t\t\t\t\t\taddress\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t... on ObjectOwner {\n\t\t\t\t\taddress {\n\t\t\t\t\t\taddress\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t... on Shared {\n\t\t\t\t\tinitialSharedVersion\n\t\t\t\t}\n\t\t\t\t... on ConsensusAddressOwner {\n\t\t\t\t\tstartVersion\n\t\t\t\t\taddress {\n\t\t\t\t\t\taddress\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpreviousTransaction {\n\t\t\t\tdigest\n\t\t\t}\n\t\t}\n\t}\n`);\n\nexport async function getAllObjects(\n\tclient: KioskCompatibleClient,\n\tids: string[],\n): Promise<ObjectWithDisplay[]> {\n\tif (ids.length === 0) return [];\n\n\tconst chunks = chunk(ids, DEFAULT_QUERY_LIMIT);\n\tconst results: ObjectWithDisplay[] = [];\n\n\tif (isSuiGraphQLClient(client)) {\n\t\tfor (const batch of chunks) {\n\t\t\tconst { data } = await client.query({\n\t\t\t\tquery: FetchObjectsWithDisplayQuery,\n\t\t\t\tvariables: {\n\t\t\t\t\tobjectKeys: batch.map((address) => ({ address })),\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (data?.multiGetObjects) {\n\t\t\t\tfor (const obj of data.multiGetObjects) {\n\t\t\t\t\tif (!obj) continue;\n\n\t\t\t\t\tlet type: string;\n\t\t\t\t\tif (obj.asMovePackage) {\n\t\t\t\t\t\ttype = 'package';\n\t\t\t\t\t} else if (obj.asMoveObject?.contents?.type?.repr) {\n\t\t\t\t\t\ttype = obj.asMoveObject.contents.type.repr;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = '';\n\t\t\t\t\t}\n\n\t\t\t\t\tconst bcsContent = obj.asMoveObject?.contents?.bcs\n\t\t\t\t\t\t? fromBase64(obj.asMoveObject.contents.bcs)\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tconst displayData = obj.asMoveObject?.contents?.display;\n\t\t\t\t\tconst display: KioskDisplay | undefined = displayData\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tdata: (displayData.output as Record<string, string> | null) ?? null,\n\t\t\t\t\t\t\t\terror: displayData.errors ? JSON.stringify(displayData.errors) : null,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tresults.push({\n\t\t\t\t\t\tobjectId: obj.address,\n\t\t\t\t\t\tversion: obj.version?.toString()!,\n\t\t\t\t\t\tdigest: obj.digest!,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tcontent: bcsContent!,\n\t\t\t\t\t\towner: mapGraphQLOwner(obj.owner!),\n\t\t\t\t\t\tpreviousTransaction: (obj.previousTransaction?.digest ?? null)!,\n\t\t\t\t\t\tobjectBcs: undefined,\n\t\t\t\t\t\tjson: undefined,\n\t\t\t\t\t\tdisplay,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tif (isSuiJsonRpcClient(client)) {\n\t\tfor (const batch of chunks) {\n\t\t\tconst responses = await client.multiGetObjects({\n\t\t\t\tids: batch,\n\t\t\t\toptions: {\n\t\t\t\t\tshowDisplay: true,\n\t\t\t\t\tshowBcs: true,\n\t\t\t\t\tshowType: true,\n\t\t\t\t\tshowOwner: true,\n\t\t\t\t\tshowPreviousTransaction: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tfor (const resp of responses) {\n\t\t\t\tif (!resp.data) continue;\n\t\t\t\tconst obj = resp.data;\n\n\t\t\t\tconst bcsContent =\n\t\t\t\t\tobj.bcs?.dataType === 'moveObject' ? fromBase64(obj.bcs.bcsBytes) : undefined;\n\n\t\t\t\tconst type =\n\t\t\t\t\tobj.type && obj.type.includes('::') ? normalizeStructTag(obj.type) : (obj.type ?? '');\n\n\t\t\t\tconst display: KioskDisplay | undefined = obj.display\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tdata: obj.display.data ?? null,\n\t\t\t\t\t\t\terror: obj.display.error ? JSON.stringify(obj.display.error) : null,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined;\n\n\t\t\t\tresults.push({\n\t\t\t\t\tobjectId: obj.objectId,\n\t\t\t\t\tversion: obj.version,\n\t\t\t\t\tdigest: obj.digest,\n\t\t\t\t\ttype,\n\t\t\t\t\tcontent: bcsContent!,\n\t\t\t\t\towner: parseJsonRpcOwner(obj.owner!),\n\t\t\t\t\tpreviousTransaction: (obj.previousTransaction ?? null)!,\n\t\t\t\t\tobjectBcs: undefined,\n\t\t\t\t\tjson: undefined,\n\t\t\t\t\tdisplay,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn results;\n\t}\n\n\tthrow new Error(\n\t\t'Object fetching requires a JSON-RPC or GraphQL client. ' +\n\t\t\t'gRPC clients are not supported by the kiosk SDK.',\n\t);\n}\n\nfunction parseJsonRpcOwner(owner: NonNullable<unknown>): SuiClientTypes.ObjectOwner {\n\tif (owner === 'Immutable') {\n\t\treturn { $kind: 'Immutable', Immutable: true } as SuiClientTypes.ObjectOwner;\n\t}\n\n\tconst ownerObj = owner as Record<string, any>;\n\n\tif ('ConsensusAddressOwner' in ownerObj) {\n\t\treturn {\n\t\t\t$kind: 'ConsensusAddressOwner',\n\t\t\tConsensusAddressOwner: {\n\t\t\t\towner: ownerObj.ConsensusAddressOwner.owner,\n\t\t\t\tstartVersion: ownerObj.ConsensusAddressOwner.start_version,\n\t\t\t},\n\t\t} as SuiClientTypes.ObjectOwner;\n\t}\n\n\tif ('AddressOwner' in ownerObj) {\n\t\treturn {\n\t\t\t$kind: 'AddressOwner',\n\t\t\tAddressOwner: ownerObj.AddressOwner,\n\t\t} as SuiClientTypes.ObjectOwner;\n\t}\n\n\tif ('ObjectOwner' in ownerObj) {\n\t\treturn {\n\t\t\t$kind: 'ObjectOwner',\n\t\t\tObjectOwner: ownerObj.ObjectOwner,\n\t\t} as SuiClientTypes.ObjectOwner;\n\t}\n\n\tif ('Shared' in ownerObj) {\n\t\treturn {\n\t\t\t$kind: 'Shared',\n\t\t\tShared: {\n\t\t\t\tinitialSharedVersion: ownerObj.Shared.initial_shared_version,\n\t\t\t},\n\t\t} as SuiClientTypes.ObjectOwner;\n\t}\n\n\tthrow new Error(`Unknown owner type: ${JSON.stringify(owner)}`);\n}\n\nfunction mapGraphQLOwner(\n\towner: NonNullable<unknown> & { __typename?: string },\n): SuiClientTypes.ObjectOwner {\n\tconst o = owner as Record<string, any>;\n\tswitch (o.__typename) {\n\t\tcase 'AddressOwner':\n\t\t\treturn {\n\t\t\t\t$kind: 'AddressOwner',\n\t\t\t\tAddressOwner: o.address?.address!,\n\t\t\t} as SuiClientTypes.ObjectOwner;\n\t\tcase 'ObjectOwner':\n\t\t\treturn {\n\t\t\t\t$kind: 'ObjectOwner',\n\t\t\t\tObjectOwner: o.address?.address!,\n\t\t\t} as SuiClientTypes.ObjectOwner;\n\t\tcase 'Immutable':\n\t\t\treturn { $kind: 'Immutable', Immutable: true } as SuiClientTypes.ObjectOwner;\n\t\tcase 'Shared':\n\t\t\treturn {\n\t\t\t\t$kind: 'Shared',\n\t\t\t\tShared: { initialSharedVersion: String(o.initialSharedVersion) },\n\t\t\t} as SuiClientTypes.ObjectOwner;\n\t\tcase 'ConsensusAddressOwner':\n\t\t\treturn {\n\t\t\t\t$kind: 'ConsensusAddressOwner',\n\t\t\t\tConsensusAddressOwner: {\n\t\t\t\t\towner: o.address?.address!,\n\t\t\t\t\tstartVersion: String(o.startVersion),\n\t\t\t\t},\n\t\t\t} as SuiClientTypes.ObjectOwner;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown GraphQL owner type: ${o.__typename}`);\n\t}\n}\n\nexport async function queryEvents(\n\tclient: KioskCompatibleClient,\n\teventType: string,\n): Promise<{ json: unknown }[]> {\n\tif (isSuiGraphQLClient(client)) {\n\t\tconst query = graphql(`\n\t\t\tquery QueryEvents($eventType: String!) {\n\t\t\t\tevents(filter: { eventType: $eventType }, first: 50) {\n\t\t\t\t\tnodes {\n\t\t\t\t\t\tcontents {\n\t\t\t\t\t\t\tjson\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t`);\n\n\t\tconst result = await client.query({\n\t\t\tquery,\n\t\t\tvariables: { eventType },\n\t\t});\n\n\t\treturn (\n\t\t\tresult.data?.events?.nodes.map((event) => ({\n\t\t\t\tjson: event.contents?.json,\n\t\t\t})) ?? []\n\t\t);\n\t}\n\n\tif (isSuiJsonRpcClient(client)) {\n\t\tconst events = await client.queryEvents({\n\t\t\tquery: { MoveEventType: eventType },\n\t\t});\n\n\t\treturn events.data?.map((d) => ({ json: d.parsedJson })) ?? [];\n\t}\n\n\tthrow new Error(\n\t\t'Event querying is not supported by this client type. ' +\n\t\t\t'JSON-RPC and GraphQL clients support event querying, but gRPC does not. ' +\n\t\t\t'Please use a JSON-RPC or GraphQL client, or provide the required IDs directly.',\n\t);\n}\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getKioskObject } from "../utils.mjs";
1
+ import { attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getKioskObject } from "../utils.mjs";
2
2
  import { KIOSK_OWNER_CAP } from "../types/kiosk.mjs";
3
3
  import { Extension, ExtensionKey } from "../contracts/0x2/kiosk_extension.mjs";
4
+ import { getAllObjects } from "./client-utils.mjs";
4
5
  import { PersonalKioskCap } from "../contracts/kiosk/personal_kiosk.mjs";
5
6
  import { isValidSuiAddress } from "@mysten/sui/utils";
6
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"kiosk.mjs","names":["KioskOwnerCapParser"],"sources":["../../src/query/kiosk.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PaginationArguments } from '@mysten/sui/jsonRpc';\nimport type { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client';\nimport { isValidSuiAddress } from '@mysten/sui/utils';\n\nimport { Extension, ExtensionKey } from '../contracts/0x2/kiosk_extension.js';\nimport type {\n\tFetchKioskOptions,\n\tKioskExtension,\n\tKioskListing,\n\tOwnedKiosks,\n\tPagedKioskData,\n} from '../types/index.js';\nimport { KIOSK_OWNER_CAP } from '../types/index.js';\nimport {\n\tattachListingsAndPrices,\n\tattachLockedItems,\n\tattachObjects,\n\textractKioskData,\n\tgetAllDynamicFields,\n\tgetAllObjects,\n\tgetKioskObject,\n} from '../utils.js';\nimport { PersonalKioskCap } from '../contracts/kiosk/personal_kiosk.js';\n\nexport async function fetchKiosk(\n\tclient: ClientWithCoreApi,\n\tkioskId: string,\n\tpagination: PaginationArguments<string>,\n\toptions: FetchKioskOptions,\n): Promise<PagedKioskData> {\n\t// TODO: Replace the `getAllDynamicFields` with a paginated\n\t// response, once we have better RPC support for\n\t// type filtering & batch fetching.\n\t// This can't work with pagination currently.\n\tconst data = await getAllDynamicFields(client, kioskId, pagination);\n\n\tconst listings: KioskListing[] = [];\n\tconst lockedItemIds: string[] = [];\n\n\t// extracted kiosk data.\n\tconst kioskData = extractKioskData(data, listings, lockedItemIds, kioskId);\n\n\t// split the fetching in two queries as we are most likely passing different options for each kind.\n\t// For items, we usually seek the Display.\n\t// For listings we usually seek the DF value (price) / exclusivity.\n\tconst [kiosk, listingObjects, items] = await Promise.all([\n\t\toptions.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),\n\t\toptions.withListingPrices ? getAllObjects(client, kioskData.listingIds) : Promise.resolve([]),\n\t\toptions.withObjects ? getAllObjects(client, kioskData.itemIds) : Promise.resolve([]),\n\t]);\n\n\tif (options.withKioskFields) kioskData.kiosk = kiosk;\n\t// attach items listings. IF we have `options.withListingPrices === true`, it will also attach the prices.\n\tattachListingsAndPrices(kioskData, listings, listingObjects);\n\t// add `locked` status to items that are locked.\n\tattachLockedItems(kioskData, lockedItemIds);\n\n\t// Attach the objects for the queried items.\n\tattachObjects(kioskData, items);\n\n\treturn {\n\t\tdata: kioskData,\n\t\tnextCursor: null,\n\t\thasNextPage: false,\n\t};\n}\n\n/**\n * A function to fetch all the user's kiosk Caps\n * And a list of the kiosk address ids.\n * Returns a list of `kioskOwnerCapIds` and `kioskIds`.\n * Extra options allow pagination.\n */\n\nconst DEFAULT_PAGE_SIZE = 50;\nconst PERSON_KIOSK_CURSOR = 'personal';\nconst OWNED_KIOSKS_CURSOR = 'owned';\nexport async function getOwnedKiosks(\n\tclient: ClientWithCoreApi,\n\taddress: string,\n\toptions?: {\n\t\tpagination?: PaginationArguments<string>;\n\t\tpersonalKioskType: string;\n\t},\n): Promise<OwnedKiosks> {\n\t// TODO: this should throw an error, but I am not going to change it right now incase it breaks existing code.\n\tif (!isValidSuiAddress(address)) {\n\t\treturn {\n\t\t\tnextCursor: null,\n\t\t\thasNextPage: false,\n\t\t\tkioskOwnerCaps: [],\n\t\t\tkioskIds: [],\n\t\t};\n\t}\n\n\tconst limit = options?.pagination?.limit ?? DEFAULT_PAGE_SIZE;\n\tconst [cursorType, cursor] = options?.pagination?.cursor?.split(':') ?? [\n\t\tPERSON_KIOSK_CURSOR,\n\t\tnull,\n\t];\n\n\tif (options?.personalKioskType && cursorType === PERSON_KIOSK_CURSOR) {\n\t\tconst personalResult = await client.core.listOwnedObjects({\n\t\t\towner: address,\n\t\t\ttype: options.personalKioskType,\n\t\t\tcursor,\n\t\t\tlimit,\n\t\t\tinclude: {\n\t\t\t\tcontent: true,\n\t\t\t},\n\t\t});\n\n\t\tconst personalKioskData = personalResult.objects\n\t\t\t.filter((obj) => !(obj instanceof Error))\n\t\t\t.map((obj) => {\n\t\t\t\treturn { obj, kioskId: PersonalKioskCap.parse(obj.content).cap?.for };\n\t\t\t})\n\t\t\t.filter(\n\t\t\t\t(\n\t\t\t\t\titem,\n\t\t\t\t): item is {\n\t\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\t\tkioskId: string;\n\t\t\t\t} => item.kioskId !== undefined,\n\t\t\t);\n\n\t\tconst personalKioskResponse = formatOwnedKioskResponse(\n\t\t\t{\n\t\t\t\tdata: personalKioskData,\n\t\t\t\thasNextPage: personalResult.hasNextPage,\n\t\t\t\tnextCursor: personalResult.cursor,\n\t\t\t},\n\t\t\tPERSON_KIOSK_CURSOR,\n\t\t);\n\n\t\tif (personalKioskResponse.hasNextPage) {\n\t\t\treturn personalKioskResponse;\n\t\t}\n\n\t\tconst remainingLimit = limit - personalKioskResponse.kioskOwnerCaps.length;\n\n\t\t// If we have all personal kiosks, but don't have space for the owned kiosks\n\t\t// we need to start loading owned kiosks for the next page, but don't have a real cursor\n\t\tif (remainingLimit < 1) {\n\t\t\treturn {\n\t\t\t\tnextCursor: `${OWNED_KIOSKS_CURSOR}:`,\n\t\t\t\thasNextPage: true,\n\t\t\t\tkioskOwnerCaps: personalKioskResponse.kioskOwnerCaps,\n\t\t\t\tkioskIds: personalKioskResponse.kioskIds,\n\t\t\t};\n\t\t}\n\n\t\tconst ownedResult = await client.core.listOwnedObjects({\n\t\t\towner: address,\n\t\t\ttype: KIOSK_OWNER_CAP,\n\t\t\tcursor: null,\n\t\t\tlimit: remainingLimit,\n\t\t\tinclude: {\n\t\t\t\tcontent: true,\n\t\t\t},\n\t\t});\n\n\t\tconst { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');\n\n\t\tconst ownedKioskData = ownedResult.objects\n\t\t\t.filter((obj) => !(obj instanceof Error))\n\t\t\t.map((obj) => {\n\t\t\t\treturn { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };\n\t\t\t})\n\t\t\t.filter(\n\t\t\t\t(\n\t\t\t\t\titem,\n\t\t\t\t): item is {\n\t\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\t\tkioskId: string;\n\t\t\t\t} => item.kioskId !== undefined,\n\t\t\t);\n\n\t\tconst ownedKiosksResponse = formatOwnedKioskResponse(\n\t\t\t{\n\t\t\t\tdata: ownedKioskData,\n\t\t\t\thasNextPage: ownedResult.hasNextPage,\n\t\t\t\tnextCursor: ownedResult.cursor,\n\t\t\t},\n\t\t\tOWNED_KIOSKS_CURSOR,\n\t\t);\n\n\t\treturn {\n\t\t\tnextCursor: ownedKiosksResponse.nextCursor,\n\t\t\thasNextPage: ownedKiosksResponse.hasNextPage,\n\t\t\tkioskOwnerCaps: [\n\t\t\t\t...personalKioskResponse.kioskOwnerCaps,\n\t\t\t\t...ownedKiosksResponse.kioskOwnerCaps,\n\t\t\t],\n\t\t\tkioskIds: [...personalKioskResponse.kioskIds, ...ownedKiosksResponse.kioskIds],\n\t\t};\n\t}\n\n\tconst result = await client.core.listOwnedObjects({\n\t\towner: address,\n\t\ttype: KIOSK_OWNER_CAP,\n\t\tcursor: cursor || null,\n\t\tlimit,\n\t\tinclude: {\n\t\t\tcontent: true,\n\t\t},\n\t});\n\n\tconst { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');\n\n\tconst ownedKioskData = result.objects\n\t\t.filter((obj) => !(obj instanceof Error))\n\t\t.map((obj) => {\n\t\t\treturn { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };\n\t\t})\n\t\t.filter(\n\t\t\t(\n\t\t\t\titem,\n\t\t\t): item is {\n\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\tkioskId: string;\n\t\t\t} => item.kioskId !== undefined,\n\t\t);\n\n\treturn formatOwnedKioskResponse(\n\t\t{\n\t\t\tdata: ownedKioskData,\n\t\t\thasNextPage: result.hasNextPage,\n\t\t\tnextCursor: result.cursor,\n\t\t},\n\t\tOWNED_KIOSKS_CURSOR,\n\t);\n}\n\nfunction formatOwnedKioskResponse(\n\tresponse: {\n\t\tdata: {\n\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\tkioskId: string;\n\t\t}[];\n\t\thasNextPage: boolean;\n\t\tnextCursor: string | null;\n\t},\n\tcursorType: string,\n): OwnedKiosks {\n\tconst { data, hasNextPage, nextCursor } = response;\n\n\treturn {\n\t\tnextCursor: nextCursor ? `${cursorType}:${nextCursor}` : nextCursor,\n\t\thasNextPage,\n\t\tkioskOwnerCaps: data.map((item) => {\n\t\t\tconst isPersonal = item.obj.type?.includes('PersonalKioskCap') || false;\n\t\t\treturn {\n\t\t\t\tisPersonal,\n\t\t\t\tdigest: item.obj.digest,\n\t\t\t\tversion: item.obj.version,\n\t\t\t\tobjectId: item.obj.objectId,\n\t\t\t\tkioskId: item.kioskId,\n\t\t\t};\n\t\t}),\n\t\tkioskIds: data.map((item) => item.kioskId),\n\t};\n}\n\n// Get a kiosk extension data for a given kioskId and extensionType.\nexport async function fetchKioskExtension(\n\tclient: ClientWithCoreApi,\n\tkioskId: string,\n\textensionType: string,\n): Promise<KioskExtension | null> {\n\tconst { dynamicField } = await client.core.getDynamicField({\n\t\tparentId: kioskId,\n\t\tname: {\n\t\t\ttype: `0x2::kiosk_extension::ExtensionKey<${extensionType}>`,\n\t\t\tbcs: ExtensionKey.serialize({ dummy_field: false }).toBytes(),\n\t\t},\n\t});\n\n\tconst extension = Extension.parse(dynamicField.value.bcs);\n\n\treturn {\n\t\tobjectId: dynamicField.fieldId,\n\t\ttype: extensionType,\n\t\tisEnabled: extension.is_enabled,\n\t\tpermissions: extension.permissions.toString(),\n\t\tstorageId: extension.storage.id,\n\t\tstorageSize: Number(extension.storage.size),\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kiosk.mjs","names":["KioskOwnerCapParser"],"sources":["../../src/query/kiosk.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PaginationArguments } from '@mysten/sui/jsonRpc';\nimport type { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client';\nimport { isValidSuiAddress } from '@mysten/sui/utils';\n\nimport { Extension, ExtensionKey } from '../contracts/0x2/kiosk_extension.js';\nimport type {\n\tFetchKioskOptions,\n\tKioskCompatibleClient,\n\tKioskExtension,\n\tKioskListing,\n\tOwnedKiosks,\n\tPagedKioskData,\n} from '../types/index.js';\nimport { KIOSK_OWNER_CAP } from '../types/index.js';\nimport {\n\tattachListingsAndPrices,\n\tattachLockedItems,\n\tattachObjects,\n\textractKioskData,\n\tgetAllDynamicFields,\n\tgetKioskObject,\n} from '../utils.js';\nimport { getAllObjects } from './client-utils.js';\nimport { PersonalKioskCap } from '../contracts/kiosk/personal_kiosk.js';\n\nexport async function fetchKiosk(\n\tclient: KioskCompatibleClient,\n\tkioskId: string,\n\tpagination: PaginationArguments<string>,\n\toptions: FetchKioskOptions,\n): Promise<PagedKioskData> {\n\t// TODO: Replace the `getAllDynamicFields` with a paginated\n\t// response, once we have better RPC support for\n\t// type filtering & batch fetching.\n\t// This can't work with pagination currently.\n\tconst data = await getAllDynamicFields(client, kioskId, pagination);\n\n\tconst listings: KioskListing[] = [];\n\tconst lockedItemIds: string[] = [];\n\n\t// extracted kiosk data.\n\tconst kioskData = extractKioskData(data, listings, lockedItemIds, kioskId);\n\n\t// split the fetching in two queries as we are most likely passing different options for each kind.\n\t// For items, we usually seek the Display.\n\t// For listings we usually seek the DF value (price) / exclusivity.\n\tconst [kiosk, listingObjects, items] = await Promise.all([\n\t\toptions.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(undefined),\n\t\toptions.withListingPrices ? getAllObjects(client, kioskData.listingIds) : Promise.resolve([]),\n\t\toptions.withObjects ? getAllObjects(client, kioskData.itemIds) : Promise.resolve([]),\n\t]);\n\n\tif (options.withKioskFields) kioskData.kiosk = kiosk;\n\t// attach items listings. IF we have `options.withListingPrices === true`, it will also attach the prices.\n\tattachListingsAndPrices(kioskData, listings, listingObjects);\n\t// add `locked` status to items that are locked.\n\tattachLockedItems(kioskData, lockedItemIds);\n\n\t// Attach the objects for the queried items.\n\tattachObjects(kioskData, items);\n\n\treturn {\n\t\tdata: kioskData,\n\t\tnextCursor: null,\n\t\thasNextPage: false,\n\t};\n}\n\n/**\n * A function to fetch all the user's kiosk Caps\n * And a list of the kiosk address ids.\n * Returns a list of `kioskOwnerCapIds` and `kioskIds`.\n * Extra options allow pagination.\n */\n\nconst DEFAULT_PAGE_SIZE = 50;\nconst PERSON_KIOSK_CURSOR = 'personal';\nconst OWNED_KIOSKS_CURSOR = 'owned';\nexport async function getOwnedKiosks(\n\tclient: ClientWithCoreApi,\n\taddress: string,\n\toptions?: {\n\t\tpagination?: PaginationArguments<string>;\n\t\tpersonalKioskType: string;\n\t},\n): Promise<OwnedKiosks> {\n\t// TODO: this should throw an error, but I am not going to change it right now incase it breaks existing code.\n\tif (!isValidSuiAddress(address)) {\n\t\treturn {\n\t\t\tnextCursor: null,\n\t\t\thasNextPage: false,\n\t\t\tkioskOwnerCaps: [],\n\t\t\tkioskIds: [],\n\t\t};\n\t}\n\n\tconst limit = options?.pagination?.limit ?? DEFAULT_PAGE_SIZE;\n\tconst [cursorType, cursor] = options?.pagination?.cursor?.split(':') ?? [\n\t\tPERSON_KIOSK_CURSOR,\n\t\tnull,\n\t];\n\n\tif (options?.personalKioskType && cursorType === PERSON_KIOSK_CURSOR) {\n\t\tconst personalResult = await client.core.listOwnedObjects({\n\t\t\towner: address,\n\t\t\ttype: options.personalKioskType,\n\t\t\tcursor,\n\t\t\tlimit,\n\t\t\tinclude: {\n\t\t\t\tcontent: true,\n\t\t\t},\n\t\t});\n\n\t\tconst personalKioskData = personalResult.objects\n\t\t\t.filter((obj) => !(obj instanceof Error))\n\t\t\t.map((obj) => {\n\t\t\t\treturn { obj, kioskId: PersonalKioskCap.parse(obj.content).cap?.for };\n\t\t\t})\n\t\t\t.filter(\n\t\t\t\t(\n\t\t\t\t\titem,\n\t\t\t\t): item is {\n\t\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\t\tkioskId: string;\n\t\t\t\t} => item.kioskId !== undefined,\n\t\t\t);\n\n\t\tconst personalKioskResponse = formatOwnedKioskResponse(\n\t\t\t{\n\t\t\t\tdata: personalKioskData,\n\t\t\t\thasNextPage: personalResult.hasNextPage,\n\t\t\t\tnextCursor: personalResult.cursor,\n\t\t\t},\n\t\t\tPERSON_KIOSK_CURSOR,\n\t\t);\n\n\t\tif (personalKioskResponse.hasNextPage) {\n\t\t\treturn personalKioskResponse;\n\t\t}\n\n\t\tconst remainingLimit = limit - personalKioskResponse.kioskOwnerCaps.length;\n\n\t\t// If we have all personal kiosks, but don't have space for the owned kiosks\n\t\t// we need to start loading owned kiosks for the next page, but don't have a real cursor\n\t\tif (remainingLimit < 1) {\n\t\t\treturn {\n\t\t\t\tnextCursor: `${OWNED_KIOSKS_CURSOR}:`,\n\t\t\t\thasNextPage: true,\n\t\t\t\tkioskOwnerCaps: personalKioskResponse.kioskOwnerCaps,\n\t\t\t\tkioskIds: personalKioskResponse.kioskIds,\n\t\t\t};\n\t\t}\n\n\t\tconst ownedResult = await client.core.listOwnedObjects({\n\t\t\towner: address,\n\t\t\ttype: KIOSK_OWNER_CAP,\n\t\t\tcursor: null,\n\t\t\tlimit: remainingLimit,\n\t\t\tinclude: {\n\t\t\t\tcontent: true,\n\t\t\t},\n\t\t});\n\n\t\tconst { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');\n\n\t\tconst ownedKioskData = ownedResult.objects\n\t\t\t.filter((obj) => !(obj instanceof Error))\n\t\t\t.map((obj) => {\n\t\t\t\treturn { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };\n\t\t\t})\n\t\t\t.filter(\n\t\t\t\t(\n\t\t\t\t\titem,\n\t\t\t\t): item is {\n\t\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\t\tkioskId: string;\n\t\t\t\t} => item.kioskId !== undefined,\n\t\t\t);\n\n\t\tconst ownedKiosksResponse = formatOwnedKioskResponse(\n\t\t\t{\n\t\t\t\tdata: ownedKioskData,\n\t\t\t\thasNextPage: ownedResult.hasNextPage,\n\t\t\t\tnextCursor: ownedResult.cursor,\n\t\t\t},\n\t\t\tOWNED_KIOSKS_CURSOR,\n\t\t);\n\n\t\treturn {\n\t\t\tnextCursor: ownedKiosksResponse.nextCursor,\n\t\t\thasNextPage: ownedKiosksResponse.hasNextPage,\n\t\t\tkioskOwnerCaps: [\n\t\t\t\t...personalKioskResponse.kioskOwnerCaps,\n\t\t\t\t...ownedKiosksResponse.kioskOwnerCaps,\n\t\t\t],\n\t\t\tkioskIds: [...personalKioskResponse.kioskIds, ...ownedKiosksResponse.kioskIds],\n\t\t};\n\t}\n\n\tconst result = await client.core.listOwnedObjects({\n\t\towner: address,\n\t\ttype: KIOSK_OWNER_CAP,\n\t\tcursor: cursor || null,\n\t\tlimit,\n\t\tinclude: {\n\t\t\tcontent: true,\n\t\t},\n\t});\n\n\tconst { KioskOwnerCap: KioskOwnerCapParser } = await import('../contracts/0x2/kiosk.js');\n\n\tconst ownedKioskData = result.objects\n\t\t.filter((obj) => !(obj instanceof Error))\n\t\t.map((obj) => {\n\t\t\treturn { obj, kioskId: KioskOwnerCapParser.parse(obj.content).for };\n\t\t})\n\t\t.filter(\n\t\t\t(\n\t\t\t\titem,\n\t\t\t): item is {\n\t\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\t\tkioskId: string;\n\t\t\t} => item.kioskId !== undefined,\n\t\t);\n\n\treturn formatOwnedKioskResponse(\n\t\t{\n\t\t\tdata: ownedKioskData,\n\t\t\thasNextPage: result.hasNextPage,\n\t\t\tnextCursor: result.cursor,\n\t\t},\n\t\tOWNED_KIOSKS_CURSOR,\n\t);\n}\n\nfunction formatOwnedKioskResponse(\n\tresponse: {\n\t\tdata: {\n\t\t\tobj: SuiClientTypes.Object<{ content: true }>;\n\t\t\tkioskId: string;\n\t\t}[];\n\t\thasNextPage: boolean;\n\t\tnextCursor: string | null;\n\t},\n\tcursorType: string,\n): OwnedKiosks {\n\tconst { data, hasNextPage, nextCursor } = response;\n\n\treturn {\n\t\tnextCursor: nextCursor ? `${cursorType}:${nextCursor}` : nextCursor,\n\t\thasNextPage,\n\t\tkioskOwnerCaps: data.map((item) => {\n\t\t\tconst isPersonal = item.obj.type?.includes('PersonalKioskCap') || false;\n\t\t\treturn {\n\t\t\t\tisPersonal,\n\t\t\t\tdigest: item.obj.digest,\n\t\t\t\tversion: item.obj.version,\n\t\t\t\tobjectId: item.obj.objectId,\n\t\t\t\tkioskId: item.kioskId,\n\t\t\t};\n\t\t}),\n\t\tkioskIds: data.map((item) => item.kioskId),\n\t};\n}\n\n// Get a kiosk extension data for a given kioskId and extensionType.\nexport async function fetchKioskExtension(\n\tclient: ClientWithCoreApi,\n\tkioskId: string,\n\textensionType: string,\n): Promise<KioskExtension | null> {\n\tconst { dynamicField } = await client.core.getDynamicField({\n\t\tparentId: kioskId,\n\t\tname: {\n\t\t\ttype: `0x2::kiosk_extension::ExtensionKey<${extensionType}>`,\n\t\t\tbcs: ExtensionKey.serialize({ dummy_field: false }).toBytes(),\n\t\t},\n\t});\n\n\tconst extension = Extension.parse(dynamicField.value.bcs);\n\n\treturn {\n\t\tobjectId: dynamicField.fieldId,\n\t\ttype: extensionType,\n\t\tisEnabled: extension.is_enabled,\n\t\tpermissions: extension.permissions.toString(),\n\t\tstorageId: extension.storage.id,\n\t\tstorageSize: Number(extension.storage.size),\n\t};\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_TYPE } from "../types/transfer-policy.mjs";
2
- import { TransferPolicy, TransferPolicyCap } from "../contracts/0x2/transfer_policy.mjs";
3
2
  import { queryEvents } from "./client-utils.mjs";
3
+ import { TransferPolicy, TransferPolicyCap } from "../contracts/0x2/transfer_policy.mjs";
4
4
  import { isValidSuiAddress } from "@mysten/sui/utils";
5
5
 
6
6
  //#region src/query/transfer-policy.ts
@@ -1 +1 @@
1
- {"version":3,"file":"transfer-policy.mjs","names":["TransferPolicyStruct","TransferPolicyCapStruct"],"sources":["../../src/query/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isValidSuiAddress } from '@mysten/sui/utils';\nimport type { ClientWithCoreApi } from '@mysten/sui/client';\n\nimport {\n\tTransferPolicyCap as TransferPolicyCapStruct,\n\tTransferPolicy as TransferPolicyStruct,\n} from '../contracts/0x2/transfer_policy.js';\nimport type { TransferPolicy, TransferPolicyCap } from '../types/index.js';\nimport {\n\tTRANSFER_POLICY_CAP_TYPE,\n\tTRANSFER_POLICY_CREATED_EVENT,\n\tTRANSFER_POLICY_TYPE,\n} from '../types/index.js';\nimport { queryEvents } from './client-utils.js';\n\n/**\n * Searches the `TransferPolicy`-s for the given type. The search is performed via\n * the `TransferPolicyCreated` event. The policy can either be owned or shared,\n * and the caller needs to filter the results accordingly (ie single owner can not\n * be accessed by anyone but the owner).\n *\n * This method requires event querying support (JSON-RPC or GraphQL clients).\n * gRPC clients do not support event querying and will throw an error.\n *\n * @param client - The Sui client (must support event querying)\n * @param type - The type of the asset (e.g., \"0x123::nft::NFT\")\n * @throws Error if the client doesn't support event querying\n */\nexport async function queryTransferPolicy(\n\tclient: ClientWithCoreApi,\n\ttype: string,\n): Promise<TransferPolicy[]> {\n\tconst data = await queryEvents(client, `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n\n\tconst search = data.map((event) => event.json as { id: string });\n\n\tconst { objects } = await client.core.getObjects({\n\t\tobjectIds: search.map((policy: { id: string }) => policy.id),\n\t\tinclude: { content: true },\n\t});\n\n\treturn objects\n\t\t.filter((obj) => !(obj instanceof Error) && obj.content)\n\t\t.map((obj) => {\n\t\t\tif (obj instanceof Error) {\n\t\t\t\tthrow obj;\n\t\t\t}\n\n\t\t\tif (!obj.content) {\n\t\t\t\tthrow new Error(`Invalid policy: ${obj.objectId}, expected object with content`);\n\t\t\t}\n\n\t\t\tconst parsed = TransferPolicyStruct.parse(obj.content);\n\n\t\t\treturn {\n\t\t\t\tid: obj.objectId,\n\t\t\t\ttype: `${TRANSFER_POLICY_TYPE}<${type}>`,\n\t\t\t\towner: obj.owner,\n\t\t\t\trules: parsed.rules.contents.map((rule) => rule.name),\n\t\t\t\tbalance: parsed.balance.value.toString(),\n\t\t\t} as TransferPolicy;\n\t\t});\n}\n\n/**\n * Fetches all TransferPolicyCap objects owned by an address for a specific type.\n *\n * @param client - The Sui client\n * @param address - The owner address\n * @param type - The type of the asset\n * @returns Array of TransferPolicyCap objects\n */\nexport async function queryTransferPolicyCapsByType(\n\tclient: ClientWithCoreApi,\n\taddress: string,\n\ttype: string,\n): Promise<TransferPolicyCap[]> {\n\tif (!isValidSuiAddress(address)) return [];\n\n\tconst policies = [];\n\tlet hasNextPage = true;\n\tlet cursor: string | null = null;\n\n\twhile (hasNextPage) {\n\t\tconst result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =\n\t\t\tawait client.core.listOwnedObjects({\n\t\t\t\towner: address,\n\t\t\t\ttype: `${TRANSFER_POLICY_CAP_TYPE}<${type}>`,\n\t\t\t\tcursor,\n\t\t\t\tlimit: 50,\n\t\t\t\tinclude: {\n\t\t\t\t\tcontent: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\tfor (const obj of result.objects) {\n\t\t\tif (obj.content) {\n\t\t\t\tpolicies.push({\n\t\t\t\t\tpolicyId: TransferPolicyCapStruct.parse(obj.content).policy_id,\n\t\t\t\t\tpolicyCapId: obj.objectId,\n\t\t\t\t\ttype,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.cursor;\n\t}\n\n\treturn policies;\n}\n\n/**\n * Fetches all TransferPolicyCap objects owned by an address (all types).\n *\n * Uses struct-level filtering (without type parameters) to efficiently query\n * only TransferPolicyCap objects. This matches all generic instantiations\n * (e.g., TransferPolicyCap<T> for any T) and is supported natively by all clients.\n *\n * @param client - The Sui client\n * @param address - The owner address\n * @returns Array of TransferPolicyCap objects or undefined if address is invalid\n */\nexport async function queryOwnedTransferPolicies(\n\tclient: ClientWithCoreApi,\n\taddress: string,\n): Promise<TransferPolicyCap[] | undefined> {\n\tif (!isValidSuiAddress(address)) return;\n\n\tlet hasNextPage = true;\n\tlet cursor: string | null = null;\n\tconst policies: TransferPolicyCap[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =\n\t\t\tawait client.core.listOwnedObjects({\n\t\t\t\towner: address,\n\t\t\t\ttype: TRANSFER_POLICY_CAP_TYPE,\n\t\t\t\tcursor,\n\t\t\t\tlimit: 50,\n\t\t\t\tinclude: {\n\t\t\t\t\tcontent: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\t// All results are TransferPolicyCap objects, extract the type parameter\n\t\tfor (const obj of result.objects) {\n\t\t\tif (obj.content) {\n\t\t\t\t// Extract the type parameter T from \"0x2::transfer_policy::TransferPolicyCap<T>\"\n\t\t\t\tconst objectType = obj.type!.replace(`${TRANSFER_POLICY_CAP_TYPE}<`, '').slice(0, -1);\n\n\t\t\t\tpolicies.push({\n\t\t\t\t\tpolicyId: TransferPolicyCapStruct.parse(obj.content).policy_id,\n\t\t\t\t\tpolicyCapId: obj.objectId,\n\t\t\t\t\ttype: objectType,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.cursor;\n\t}\n\n\treturn policies;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA+BA,eAAsB,oBACrB,QACA,MAC4B;CAG5B,MAAM,UAFO,MAAM,YAAY,QAAQ,GAAG,8BAA8B,GAAG,KAAK,GAAG,EAE/D,KAAK,UAAU,MAAM,KAAuB;CAEhE,MAAM,EAAE,YAAY,MAAM,OAAO,KAAK,WAAW;EAChD,WAAW,OAAO,KAAK,WAA2B,OAAO,GAAG;EAC5D,SAAS,EAAE,SAAS,MAAM;EAC1B,CAAC;AAEF,QAAO,QACL,QAAQ,QAAQ,EAAE,eAAe,UAAU,IAAI,QAAQ,CACvD,KAAK,QAAQ;AACb,MAAI,eAAe,MAClB,OAAM;AAGP,MAAI,CAAC,IAAI,QACR,OAAM,IAAI,MAAM,mBAAmB,IAAI,SAAS,gCAAgC;EAGjF,MAAM,SAASA,eAAqB,MAAM,IAAI,QAAQ;AAEtD,SAAO;GACN,IAAI,IAAI;GACR,MAAM,GAAG,qBAAqB,GAAG,KAAK;GACtC,OAAO,IAAI;GACX,OAAO,OAAO,MAAM,SAAS,KAAK,SAAS,KAAK,KAAK;GACrD,SAAS,OAAO,QAAQ,MAAM,UAAU;GACxC;GACA;;;;;;;;;;AAWJ,eAAsB,8BACrB,QACA,SACA,MAC+B;AAC/B,KAAI,CAAC,kBAAkB,QAAQ,CAAE,QAAO,EAAE;CAE1C,MAAM,WAAW,EAAE;CACnB,IAAI,cAAc;CAClB,IAAI,SAAwB;AAE5B,QAAO,aAAa;EACnB,MAAM,SACL,MAAM,OAAO,KAAK,iBAAiB;GAClC,OAAO;GACP,MAAM,GAAG,yBAAyB,GAAG,KAAK;GAC1C;GACA,OAAO;GACP,SAAS,EACR,SAAS,MACT;GACD,CAAC;AAEH,OAAK,MAAM,OAAO,OAAO,QACxB,KAAI,IAAI,QACP,UAAS,KAAK;GACb,UAAUC,kBAAwB,MAAM,IAAI,QAAQ,CAAC;GACrD,aAAa,IAAI;GACjB;GACA,CAAC;AAIJ,gBAAc,OAAO;AACrB,WAAS,OAAO;;AAGjB,QAAO;;;;;;;;;;;;;AAcR,eAAsB,2BACrB,QACA,SAC2C;AAC3C,KAAI,CAAC,kBAAkB,QAAQ,CAAE;CAEjC,IAAI,cAAc;CAClB,IAAI,SAAwB;CAC5B,MAAM,WAAgC,EAAE;AAExC,QAAO,aAAa;EACnB,MAAM,SACL,MAAM,OAAO,KAAK,iBAAiB;GAClC,OAAO;GACP,MAAM;GACN;GACA,OAAO;GACP,SAAS,EACR,SAAS,MACT;GACD,CAAC;AAGH,OAAK,MAAM,OAAO,OAAO,QACxB,KAAI,IAAI,SAAS;GAEhB,MAAM,aAAa,IAAI,KAAM,QAAQ,GAAG,yBAAyB,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;AAErF,YAAS,KAAK;IACb,UAAUA,kBAAwB,MAAM,IAAI,QAAQ,CAAC;IACrD,aAAa,IAAI;IACjB,MAAM;IACN,CAAC;;AAIJ,gBAAc,OAAO;AACrB,WAAS,OAAO;;AAGjB,QAAO"}
1
+ {"version":3,"file":"transfer-policy.mjs","names":["TransferPolicyStruct","TransferPolicyCapStruct"],"sources":["../../src/query/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isValidSuiAddress } from '@mysten/sui/utils';\n\nimport {\n\tTransferPolicyCap as TransferPolicyCapStruct,\n\tTransferPolicy as TransferPolicyStruct,\n} from '../contracts/0x2/transfer_policy.js';\nimport type { KioskCompatibleClient, TransferPolicy, TransferPolicyCap } from '../types/index.js';\nimport {\n\tTRANSFER_POLICY_CAP_TYPE,\n\tTRANSFER_POLICY_CREATED_EVENT,\n\tTRANSFER_POLICY_TYPE,\n} from '../types/index.js';\nimport { queryEvents } from './client-utils.js';\n\n/**\n * Searches the `TransferPolicy`-s for the given type. The search is performed via\n * the `TransferPolicyCreated` event. The policy can either be owned or shared,\n * and the caller needs to filter the results accordingly (ie single owner can not\n * be accessed by anyone but the owner).\n *\n * This method requires event querying support (JSON-RPC or GraphQL clients).\n * gRPC clients do not support event querying and will throw an error.\n *\n * @param client - The Sui client (must support event querying)\n * @param type - The type of the asset (e.g., \"0x123::nft::NFT\")\n * @throws Error if the client doesn't support event querying\n */\nexport async function queryTransferPolicy(\n\tclient: KioskCompatibleClient,\n\ttype: string,\n): Promise<TransferPolicy[]> {\n\tconst data = await queryEvents(client, `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`);\n\n\tconst search = data.map((event) => event.json as { id: string });\n\n\tconst { objects } = await client.core.getObjects({\n\t\tobjectIds: search.map((policy: { id: string }) => policy.id),\n\t\tinclude: { content: true },\n\t});\n\n\treturn objects\n\t\t.filter((obj) => !(obj instanceof Error) && obj.content)\n\t\t.map((obj) => {\n\t\t\tif (obj instanceof Error) {\n\t\t\t\tthrow obj;\n\t\t\t}\n\n\t\t\tif (!obj.content) {\n\t\t\t\tthrow new Error(`Invalid policy: ${obj.objectId}, expected object with content`);\n\t\t\t}\n\n\t\t\tconst parsed = TransferPolicyStruct.parse(obj.content);\n\n\t\t\treturn {\n\t\t\t\tid: obj.objectId,\n\t\t\t\ttype: `${TRANSFER_POLICY_TYPE}<${type}>`,\n\t\t\t\towner: obj.owner,\n\t\t\t\trules: parsed.rules.contents.map((rule) => rule.name),\n\t\t\t\tbalance: parsed.balance.value.toString(),\n\t\t\t} as TransferPolicy;\n\t\t});\n}\n\n/**\n * Fetches all TransferPolicyCap objects owned by an address for a specific type.\n *\n * @param client - The Sui client\n * @param address - The owner address\n * @param type - The type of the asset\n * @returns Array of TransferPolicyCap objects\n */\nexport async function queryTransferPolicyCapsByType(\n\tclient: KioskCompatibleClient,\n\taddress: string,\n\ttype: string,\n): Promise<TransferPolicyCap[]> {\n\tif (!isValidSuiAddress(address)) return [];\n\n\tconst policies = [];\n\tlet hasNextPage = true;\n\tlet cursor: string | null = null;\n\n\twhile (hasNextPage) {\n\t\tconst result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =\n\t\t\tawait client.core.listOwnedObjects({\n\t\t\t\towner: address,\n\t\t\t\ttype: `${TRANSFER_POLICY_CAP_TYPE}<${type}>`,\n\t\t\t\tcursor,\n\t\t\t\tlimit: 50,\n\t\t\t\tinclude: {\n\t\t\t\t\tcontent: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\tfor (const obj of result.objects) {\n\t\t\tif (obj.content) {\n\t\t\t\tpolicies.push({\n\t\t\t\t\tpolicyId: TransferPolicyCapStruct.parse(obj.content).policy_id,\n\t\t\t\t\tpolicyCapId: obj.objectId,\n\t\t\t\t\ttype,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.cursor;\n\t}\n\n\treturn policies;\n}\n\n/**\n * Fetches all TransferPolicyCap objects owned by an address (all types).\n *\n * Uses struct-level filtering (without type parameters) to efficiently query\n * only TransferPolicyCap objects. This matches all generic instantiations\n * (e.g., TransferPolicyCap<T> for any T) and is supported natively by all clients.\n *\n * @param client - The Sui client\n * @param address - The owner address\n * @returns Array of TransferPolicyCap objects or undefined if address is invalid\n */\nexport async function queryOwnedTransferPolicies(\n\tclient: KioskCompatibleClient,\n\taddress: string,\n): Promise<TransferPolicyCap[] | undefined> {\n\tif (!isValidSuiAddress(address)) return;\n\n\tlet hasNextPage = true;\n\tlet cursor: string | null = null;\n\tconst policies: TransferPolicyCap[] = [];\n\n\twhile (hasNextPage) {\n\t\tconst result: Awaited<ReturnType<typeof client.core.listOwnedObjects>> =\n\t\t\tawait client.core.listOwnedObjects({\n\t\t\t\towner: address,\n\t\t\t\ttype: TRANSFER_POLICY_CAP_TYPE,\n\t\t\t\tcursor,\n\t\t\t\tlimit: 50,\n\t\t\t\tinclude: {\n\t\t\t\t\tcontent: true,\n\t\t\t\t},\n\t\t\t});\n\n\t\t// All results are TransferPolicyCap objects, extract the type parameter\n\t\tfor (const obj of result.objects) {\n\t\t\tif (obj.content) {\n\t\t\t\t// Extract the type parameter T from \"0x2::transfer_policy::TransferPolicyCap<T>\"\n\t\t\t\tconst objectType = obj.type!.replace(`${TRANSFER_POLICY_CAP_TYPE}<`, '').slice(0, -1);\n\n\t\t\t\tpolicies.push({\n\t\t\t\t\tpolicyId: TransferPolicyCapStruct.parse(obj.content).policy_id,\n\t\t\t\t\tpolicyCapId: obj.objectId,\n\t\t\t\t\ttype: objectType,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\thasNextPage = result.hasNextPage;\n\t\tcursor = result.cursor;\n\t}\n\n\treturn policies;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA8BA,eAAsB,oBACrB,QACA,MAC4B;CAG5B,MAAM,UAFO,MAAM,YAAY,QAAQ,GAAG,8BAA8B,GAAG,KAAK,GAAG,EAE/D,KAAK,UAAU,MAAM,KAAuB;CAEhE,MAAM,EAAE,YAAY,MAAM,OAAO,KAAK,WAAW;EAChD,WAAW,OAAO,KAAK,WAA2B,OAAO,GAAG;EAC5D,SAAS,EAAE,SAAS,MAAM;EAC1B,CAAC;AAEF,QAAO,QACL,QAAQ,QAAQ,EAAE,eAAe,UAAU,IAAI,QAAQ,CACvD,KAAK,QAAQ;AACb,MAAI,eAAe,MAClB,OAAM;AAGP,MAAI,CAAC,IAAI,QACR,OAAM,IAAI,MAAM,mBAAmB,IAAI,SAAS,gCAAgC;EAGjF,MAAM,SAASA,eAAqB,MAAM,IAAI,QAAQ;AAEtD,SAAO;GACN,IAAI,IAAI;GACR,MAAM,GAAG,qBAAqB,GAAG,KAAK;GACtC,OAAO,IAAI;GACX,OAAO,OAAO,MAAM,SAAS,KAAK,SAAS,KAAK,KAAK;GACrD,SAAS,OAAO,QAAQ,MAAM,UAAU;GACxC;GACA;;;;;;;;;;AAWJ,eAAsB,8BACrB,QACA,SACA,MAC+B;AAC/B,KAAI,CAAC,kBAAkB,QAAQ,CAAE,QAAO,EAAE;CAE1C,MAAM,WAAW,EAAE;CACnB,IAAI,cAAc;CAClB,IAAI,SAAwB;AAE5B,QAAO,aAAa;EACnB,MAAM,SACL,MAAM,OAAO,KAAK,iBAAiB;GAClC,OAAO;GACP,MAAM,GAAG,yBAAyB,GAAG,KAAK;GAC1C;GACA,OAAO;GACP,SAAS,EACR,SAAS,MACT;GACD,CAAC;AAEH,OAAK,MAAM,OAAO,OAAO,QACxB,KAAI,IAAI,QACP,UAAS,KAAK;GACb,UAAUC,kBAAwB,MAAM,IAAI,QAAQ,CAAC;GACrD,aAAa,IAAI;GACjB;GACA,CAAC;AAIJ,gBAAc,OAAO;AACrB,WAAS,OAAO;;AAGjB,QAAO;;;;;;;;;;;;;AAcR,eAAsB,2BACrB,QACA,SAC2C;AAC3C,KAAI,CAAC,kBAAkB,QAAQ,CAAE;CAEjC,IAAI,cAAc;CAClB,IAAI,SAAwB;CAC5B,MAAM,WAAgC,EAAE;AAExC,QAAO,aAAa;EACnB,MAAM,SACL,MAAM,OAAO,KAAK,iBAAiB;GAClC,OAAO;GACP,MAAM;GACN;GACA,OAAO;GACP,SAAS,EACR,SAAS,MACT;GACD,CAAC;AAGH,OAAK,MAAM,OAAO,OAAO,QACxB,KAAI,IAAI,SAAS;GAEhB,MAAM,aAAa,IAAI,KAAM,QAAQ,GAAG,yBAAyB,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;AAErF,YAAS,KAAK;IACb,UAAUA,kBAAwB,MAAM,IAAI,QAAQ,CAAC;IACrD,aAAa,IAAI;IACjB,MAAM;IACN,CAAC;;AAIJ,gBAAc,OAAO;AACrB,WAAS,OAAO;;AAGjB,QAAO"}
@@ -1,8 +1,10 @@
1
1
  import { BaseRulePackageIds } from "../constants.mjs";
2
- import { FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskData, KioskExtension, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, OwnedKiosks, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions } from "./kiosk.mjs";
2
+ import { FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskData, KioskDisplay, KioskExtension, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, ObjectWithDisplay, OwnedKiosks, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions } from "./kiosk.mjs";
3
3
  import { KIOSK_LOCK_RULE, ROYALTY_RULE, RuleResolvingParams, TRANSFER_POLICY_CAP_TYPE, TRANSFER_POLICY_CREATED_EVENT, TRANSFER_POLICY_MODULE, TRANSFER_POLICY_TYPE, TransferPolicy, TransferPolicyCap, TransferPolicyCreated } from "./transfer-policy.mjs";
4
4
  import { TransactionObjectArgument } from "@mysten/sui/transactions";
5
- import { ClientWithCoreApi, SuiClientTypes } from "@mysten/sui/client";
5
+ import { SuiGraphQLClient } from "@mysten/sui/graphql";
6
+ import { SuiJsonRpcClient } from "@mysten/sui/jsonRpc";
7
+ import { SuiClientTypes } from "@mysten/sui/client";
6
8
 
7
9
  //#region src/types/index.d.ts
8
10
 
@@ -14,10 +16,11 @@ type ObjectArgument = string | TransactionObjectArgument;
14
16
  * The Client Options for Both KioskClient & TransferPolicyManager.
15
17
  */
16
18
  type KioskClientOptions = {
17
- client: ClientWithCoreApi;
19
+ client: KioskCompatibleClient;
18
20
  network: SuiClientTypes.Network;
19
21
  packageIds?: BaseRulePackageIds;
20
22
  };
23
+ type KioskCompatibleClient = SuiJsonRpcClient | SuiGraphQLClient;
21
24
  //#endregion
22
- export { KioskClientOptions, ObjectArgument };
25
+ export { KioskClientOptions, KioskCompatibleClient, ObjectArgument };
23
26
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/types/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;AAcA;AAKY,KALA,cAAA,GAKkB,MAAA,GALQ,yBAKR;;;;AAGE,KAHpB,kBAAA,GAGoB;UAFvB;WACC,cAAA,CAAe;eACX"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/types/index.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;AAgBA;AAKY,KALA,cAAA,GAKkB,MAAA,GALQ,yBAKR;;;;AAGE,KAHpB,kBAAA,GAGoB;EAGpB,MAAA,EALH,qBAKwB;WAJvB,cAAA,CAAe;eACX;;KAGF,qBAAA,GAAwB,mBAAmB"}
@@ -71,6 +71,16 @@ type KioskListing = {
71
71
  listingId: string;
72
72
  price?: string;
73
73
  };
74
+ type KioskDisplay = {
75
+ data: Record<string, string> | null;
76
+ error: string | null;
77
+ };
78
+ type ObjectWithDisplay = SuiClientTypes.Object<{
79
+ content: true;
80
+ previousTransaction: true;
81
+ }> & {
82
+ display?: KioskDisplay;
83
+ };
74
84
  /**
75
85
  * A dynamic field `Item { ID }` attached to the Kiosk.
76
86
  * Holds an Item `T`. The type of the item is known upfront.
@@ -86,8 +96,8 @@ type KioskItem = {
86
96
  listing?: KioskListing;
87
97
  /** The ID of the kiosk the item is placed in */
88
98
  kioskId: string;
89
- /** Optional Kiosk Data (core API object) */
90
- data?: SuiClientTypes.Object;
99
+ /** Optional object data with display metadata */
100
+ data?: ObjectWithDisplay;
91
101
  };
92
102
  /** The overview type returned from `getKiosk` */
93
103
  type KioskExtensionOverview = {
@@ -161,5 +171,5 @@ type Price = {
161
171
  price: string | bigint;
162
172
  };
163
173
  //#endregion
164
- export { FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskData, KioskExtension, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, OwnedKiosks, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions };
174
+ export { FetchKioskOptions, ItemId, ItemReference, ItemValue, KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE, Kiosk, KioskData, KioskDisplay, KioskExtension, KioskExtensionOverview, KioskItem, KioskListing, KioskOwnerCap, ObjectWithDisplay, OwnedKiosks, PagedKioskData, Price, PurchaseAndResolvePoliciesResponse, PurchaseCap, PurchaseOptionalParams, PurchaseOptions };
165
175
  //# sourceMappingURL=kiosk.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kiosk.d.mts","names":[],"sources":["../../src/types/kiosk.ts"],"sourcesContent":[],"mappings":";;;;;;cAWa,YAAA;AAAb;AAGa,cAAA,UAAA,GAAU,kFAAA;AAGvB;AAGa,cAHA,eAAA,GAGU,0FAAA;AAGvB;AAGa,cANA,UAAA,GAMU,iFAAA;AAGvB;AAKY,cAXC,aAAA,GAWI,oFAAA;AAWjB;AAWY,cA9BC,UAAA,GA8BD,iFACc;AAS1B;AASY,cA9CC,kBAAA,GA8CW,wFAAA;AAmBxB;AAgBA;AASA;AAWY,KAhGA,KAAA,GAgGS;EACb,EAAA,EAAA,MAAA;EAGC,OAAA,EAAA,MAAA;EACI,KAAA,EAAA,MAAA;EAAsB,SAAA,EAAA,MAAA;EAGvB,eAAA,EAAc,OAAA;AAM1B,CAAA;AASA;AAOA;AAQA;AAIY,KA/HA,WAAA,GA+HM;EACN,EAAA,EAAA,MAAA;EACA,OAAA,EAAA,MAAS;EACT,MAAA,EAAK,MAAA;;;;;;;KAvHL,kCAAA;QACL;;;;;;;;KASK,sBAAA;eACE;kBACG;;;;;;KAOL,YAAA;;;;;;;;;;;;;;;;;;KAmBA,SAAA;;;;;;;;YAQD;;;;SAIH,cAAA,CAAe;;;KAIX,sBAAA;;;;;;;;;KASA,cAAA,GAAiB;;;;;;;;;;KAWjB,SAAA;SACJ;;;UAGC;cACI;;KAGD,cAAA;QACL;;;;KAKK,iBAAA;;;;;;;;KASA,WAAA;kBACK;;;;;KAML,aAAA;;;;;;;KAQA,eAAA;cACC;;KAGD,MAAA;;;;KACA,aAAA;;QAA0C;;KAC1C,SAAA;;QAAsC;;KACtC,KAAA"}
1
+ {"version":3,"file":"kiosk.d.mts","names":[],"sources":["../../src/types/kiosk.ts"],"sourcesContent":[],"mappings":";;;;;;cAWa,YAAA;AAAb;AAGa,cAAA,UAAA,GAAU,kFAAA;AAGvB;AAGa,cAHA,eAAA,GAGU,0FAAA;AAGvB;AAGa,cANA,UAAA,GAMU,iFAAA;AAGvB;AAKY,cAXC,aAAA,GAWI,oFAAA;AAWjB;AAWY,cA9BC,UAAA,GA8BD,iFACc;AAS1B;AASY,cA9CC,kBAAA,GA8CW,wFAAA;AAexB;AAKA;AAWA;AAgBY,KAxFA,KAAA,GAwFA;EASA,EAAA,EAAA,MAAA;EAWA,OAAA,EAAA,MAAS;EACb,KAAA,EAAA,MAAA;EAGC,SAAA,EAAA,MAAA;EACI,eAAA,EAAA,OAAA;CAAsB;AAGnC;AAMA;AASA;AAOY,KA/HA,WAAA,GA+Ha;EAQb,EAAA,EAAA,MAAA;EAIA,OAAA,EAAM,MAAA;EACN,MAAA,EAAA,MAAA;EACA,QAAA,EAAA,MAAS;AACrB,CAAA;;;;;KAnIY,kCAAA;QACL;;;;;;;;KASK,sBAAA;eACE;kBACG;;;;;;KAOL,YAAA;;;;;;;;;;;;;;KAeA,YAAA;QACL;;;KAIK,iBAAA,GAAoB,cAAA,CAAe;;;;YAIpC;;;;;;KAOC,SAAA;;;;;;;;YAQD;;;;SAIH;;;KAII,sBAAA;;;;;;;;;KASA,cAAA,GAAiB;;;;;;;;;;KAWjB,SAAA;SACJ;;;UAGC;cACI;;KAGD,cAAA;QACL;;;;KAKK,iBAAA;;;;;;;;KASA,WAAA;kBACK;;;;;KAML,aAAA;;;;;;;KAQA,eAAA;cACC;;KAGD,MAAA;;;;KACA,aAAA;;QAA0C;;KAC1C,SAAA;;QAAsC;;KACtC,KAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"kiosk.mjs","names":[],"sources":["../../src/types/kiosk.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TransactionArgument } from '@mysten/sui/transactions';\nimport { SuiClientTypes } from '@mysten/sui/client';\n\nimport type { ObjectArgument } from './index.js';\n\nimport { SUI_FRAMEWORK_ADDRESS } from '@mysten/sui/utils';\n\n/** The Kiosk module. */\nexport const KIOSK_MODULE = `${SUI_FRAMEWORK_ADDRESS}::kiosk`;\n\n/** The Kiosk type. */\nexport const KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;\n\n/** The Kiosk Owner Cap Type */\nexport const KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;\n\n/** The Kiosk Item Type */\nexport const KIOSK_ITEM = `${KIOSK_MODULE}::Item`;\n\n/** The Kiosk Listing Type */\nexport const KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;\n\n/** The Kiosk Lock Type */\nexport const KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;\n\n/** The Kiosk PurchaseCap type */\nexport const KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;\n\n/**\n * The Kiosk object fields (for BCS queries).\n */\nexport type Kiosk = {\n\tid: string;\n\tprofits: string;\n\towner: string;\n\titemCount: number;\n\tallowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n\tid: string;\n\tkioskId: string;\n\titemId: string;\n\tminPrice: string;\n};\n\n/**\n * The response type of a successful purchase flow.\n * Returns the item, and a `canTransfer` param.\n */\nexport type PurchaseAndResolvePoliciesResponse = {\n\titem: TransactionArgument;\n\tcanTransfer: boolean;\n};\n\n/**\n * Optional parameters for `purchaseAndResolvePolicies` flow.\n * This gives us the chance to extend the function in further releases\n * without introducing more breaking changes.\n */\nexport type PurchaseOptionalParams = {\n\townedKiosk?: ObjectArgument;\n\townedKioskCap?: ObjectArgument;\n};\n\n/**\n * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.\n * Holds a `u64` value - the price of the item.\n */\nexport type KioskListing = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/**\n\t * Whether or not there's a `PurchaseCap` issued. `true` means that\n\t * the listing is controlled by some logic and can't be purchased directly.\n\t *\n\t * TODO: consider renaming the field for better indication.\n\t */\n\tisExclusive: boolean;\n\t/** The ID of the listing */\n\tlistingId: string;\n\tprice?: string;\n};\n\n/**\n * A dynamic field `Item { ID }` attached to the Kiosk.\n * Holds an Item `T`. The type of the item is known upfront.\n */\nexport type KioskItem = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/** The type of the Item */\n\ttype: string;\n\t/** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n\tisLocked: boolean;\n\t/** Optional listing */\n\tlisting?: KioskListing;\n\t/** The ID of the kiosk the item is placed in */\n\tkioskId: string;\n\t/** Optional Kiosk Data (core API object) */\n\tdata?: SuiClientTypes.Object;\n};\n\n/** The overview type returned from `getKiosk` */\nexport type KioskExtensionOverview = {\n\t/** The ID of the extension's DF */\n\tobjectId: string;\n\t/** The inner type of the Extension */\n\ttype: string;\n};\n/**\n * Hold the KioskExtension data\n */\nexport type KioskExtension = KioskExtensionOverview & {\n\t/** These fields are only there if we have `withExtensions` flag */\n\tisEnabled: boolean;\n\tpermissions: string;\n\tstorageId: string;\n\tstorageSize: number;\n};\n\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n\titems: KioskItem[];\n\titemIds: string[];\n\tlistingIds: string[];\n\tkiosk?: Kiosk;\n\textensions: KioskExtensionOverview[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n\tdata: KioskData;\n\tnextCursor: string | null | undefined;\n\thasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n\t/** Include the base kiosk object, which includes the profits, the owner and the base fields. */\n\twithKioskFields?: boolean;\n\t/** Include the listing prices. */\n\twithListingPrices?: boolean;\n\t/** Include the objects for the Items in the kiosk. */\n\twithObjects?: boolean;\n};\n\nexport type OwnedKiosks = {\n\tkioskOwnerCaps: KioskOwnerCap[];\n\tkioskIds: string[];\n\tnextCursor: string | null;\n\thasNextPage: boolean;\n};\n\nexport type KioskOwnerCap = {\n\tisPersonal?: boolean;\n\tobjectId: string;\n\tkioskId: string;\n\tdigest: string;\n\tversion: string;\n};\n\nexport type PurchaseOptions = {\n\textraArgs?: Record<string, any>;\n};\n\nexport type ItemId = { itemType: string; itemId: string };\nexport type ItemReference = { itemType: string; item: ObjectArgument };\nexport type ItemValue = { itemType: string; item: TransactionArgument };\nexport type Price = { price: string | bigint };\n"],"mappings":";;;;AAWA,MAAa,eAAe,GAAG,sBAAsB;;AAGrD,MAAa,aAAa,GAAG,aAAa;;AAG1C,MAAa,kBAAkB,GAAG,aAAa;;AAG/C,MAAa,aAAa,GAAG,aAAa;;AAG1C,MAAa,gBAAgB,GAAG,aAAa;;AAG7C,MAAa,aAAa,GAAG,aAAa;;AAG1C,MAAa,qBAAqB,GAAG,aAAa"}
1
+ {"version":3,"file":"kiosk.mjs","names":[],"sources":["../../src/types/kiosk.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TransactionArgument } from '@mysten/sui/transactions';\n\nimport type { ObjectArgument } from './index.js';\n\nimport { SUI_FRAMEWORK_ADDRESS } from '@mysten/sui/utils';\nimport { SuiClientTypes } from '@mysten/sui/client';\n\n/** The Kiosk module. */\nexport const KIOSK_MODULE = `${SUI_FRAMEWORK_ADDRESS}::kiosk`;\n\n/** The Kiosk type. */\nexport const KIOSK_TYPE = `${KIOSK_MODULE}::Kiosk`;\n\n/** The Kiosk Owner Cap Type */\nexport const KIOSK_OWNER_CAP = `${KIOSK_MODULE}::KioskOwnerCap`;\n\n/** The Kiosk Item Type */\nexport const KIOSK_ITEM = `${KIOSK_MODULE}::Item`;\n\n/** The Kiosk Listing Type */\nexport const KIOSK_LISTING = `${KIOSK_MODULE}::Listing`;\n\n/** The Kiosk Lock Type */\nexport const KIOSK_LOCK = `${KIOSK_MODULE}::Lock`;\n\n/** The Kiosk PurchaseCap type */\nexport const KIOSK_PURCHASE_CAP = `${KIOSK_MODULE}::PurchaseCap`;\n\n/**\n * The Kiosk object fields (for BCS queries).\n */\nexport type Kiosk = {\n\tid: string;\n\tprofits: string;\n\towner: string;\n\titemCount: number;\n\tallowExtensions: boolean;\n};\n\n/**\n * PurchaseCap object fields (for BCS queries).\n */\nexport type PurchaseCap = {\n\tid: string;\n\tkioskId: string;\n\titemId: string;\n\tminPrice: string;\n};\n\n/**\n * The response type of a successful purchase flow.\n * Returns the item, and a `canTransfer` param.\n */\nexport type PurchaseAndResolvePoliciesResponse = {\n\titem: TransactionArgument;\n\tcanTransfer: boolean;\n};\n\n/**\n * Optional parameters for `purchaseAndResolvePolicies` flow.\n * This gives us the chance to extend the function in further releases\n * without introducing more breaking changes.\n */\nexport type PurchaseOptionalParams = {\n\townedKiosk?: ObjectArgument;\n\townedKioskCap?: ObjectArgument;\n};\n\n/**\n * A dynamic field `Listing { ID, isExclusive }` attached to the Kiosk.\n * Holds a `u64` value - the price of the item.\n */\nexport type KioskListing = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/**\n\t * Whether or not there's a `PurchaseCap` issued. `true` means that\n\t * the listing is controlled by some logic and can't be purchased directly.\n\t *\n\t * TODO: consider renaming the field for better indication.\n\t */\n\tisExclusive: boolean;\n\t/** The ID of the listing */\n\tlistingId: string;\n\tprice?: string;\n};\n\nexport type KioskDisplay = {\n\tdata: Record<string, string> | null;\n\terror: string | null;\n};\n\nexport type ObjectWithDisplay = SuiClientTypes.Object<{\n\tcontent: true;\n\tpreviousTransaction: true;\n}> & {\n\tdisplay?: KioskDisplay;\n};\n\n/**\n * A dynamic field `Item { ID }` attached to the Kiosk.\n * Holds an Item `T`. The type of the item is known upfront.\n */\nexport type KioskItem = {\n\t/** The ID of the Item */\n\tobjectId: string;\n\t/** The type of the Item */\n\ttype: string;\n\t/** Whether the item is Locked (there must be a `Lock` Dynamic Field) */\n\tisLocked: boolean;\n\t/** Optional listing */\n\tlisting?: KioskListing;\n\t/** The ID of the kiosk the item is placed in */\n\tkioskId: string;\n\t/** Optional object data with display metadata */\n\tdata?: ObjectWithDisplay;\n};\n\n/** The overview type returned from `getKiosk` */\nexport type KioskExtensionOverview = {\n\t/** The ID of the extension's DF */\n\tobjectId: string;\n\t/** The inner type of the Extension */\n\ttype: string;\n};\n/**\n * Hold the KioskExtension data\n */\nexport type KioskExtension = KioskExtensionOverview & {\n\t/** These fields are only there if we have `withExtensions` flag */\n\tisEnabled: boolean;\n\tpermissions: string;\n\tstorageId: string;\n\tstorageSize: number;\n};\n\n/**\n * Aggregated data from the Kiosk.\n */\nexport type KioskData = {\n\titems: KioskItem[];\n\titemIds: string[];\n\tlistingIds: string[];\n\tkiosk?: Kiosk;\n\textensions: KioskExtensionOverview[]; // type will be defined on later versions of the SDK.\n};\n\nexport type PagedKioskData = {\n\tdata: KioskData;\n\tnextCursor: string | null | undefined;\n\thasNextPage: boolean;\n};\n\nexport type FetchKioskOptions = {\n\t/** Include the base kiosk object, which includes the profits, the owner and the base fields. */\n\twithKioskFields?: boolean;\n\t/** Include the listing prices. */\n\twithListingPrices?: boolean;\n\t/** Include the objects for the Items in the kiosk. */\n\twithObjects?: boolean;\n};\n\nexport type OwnedKiosks = {\n\tkioskOwnerCaps: KioskOwnerCap[];\n\tkioskIds: string[];\n\tnextCursor: string | null;\n\thasNextPage: boolean;\n};\n\nexport type KioskOwnerCap = {\n\tisPersonal?: boolean;\n\tobjectId: string;\n\tkioskId: string;\n\tdigest: string;\n\tversion: string;\n};\n\nexport type PurchaseOptions = {\n\textraArgs?: Record<string, any>;\n};\n\nexport type ItemId = { itemType: string; itemId: string };\nexport type ItemReference = { itemType: string; item: ObjectArgument };\nexport type ItemValue = { itemType: string; item: TransactionArgument };\nexport type Price = { price: string | bigint };\n"],"mappings":";;;;AAWA,MAAa,eAAe,GAAG,sBAAsB;;AAGrD,MAAa,aAAa,GAAG,aAAa;;AAG1C,MAAa,kBAAkB,GAAG,aAAa;;AAG/C,MAAa,aAAa,GAAG,aAAa;;AAG1C,MAAa,gBAAgB,GAAG,aAAa;;AAG7C,MAAa,aAAa,GAAG,aAAa;;AAG1C,MAAa,qBAAqB,GAAG,aAAa"}