@mysten/kiosk 0.14.6 → 1.0.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 +105 -2
- package/dist/client/kiosk-client.d.mts +126 -0
- package/dist/client/kiosk-client.d.mts.map +1 -0
- package/dist/client/kiosk-client.mjs +124 -0
- package/dist/client/kiosk-client.mjs.map +1 -0
- package/dist/client/kiosk-transaction.d.mts +236 -0
- package/dist/client/kiosk-transaction.d.mts.map +1 -0
- package/dist/client/kiosk-transaction.mjs +472 -0
- package/dist/client/kiosk-transaction.mjs.map +1 -0
- package/dist/client/tp-transaction.d.mts +139 -0
- package/dist/client/tp-transaction.d.mts.map +1 -0
- package/dist/client/tp-transaction.mjs +273 -0
- package/dist/client/tp-transaction.mjs.map +1 -0
- package/dist/constants.d.mts +42 -0
- package/dist/constants.d.mts.map +1 -0
- package/dist/constants.mjs +62 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/contracts/0x2/bag.mjs +19 -0
- package/dist/contracts/0x2/bag.mjs.map +1 -0
- package/dist/contracts/0x2/balance.mjs +20 -0
- package/dist/contracts/0x2/balance.mjs.map +1 -0
- package/dist/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs +16 -0
- package/dist/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.mjs.map +1 -0
- package/dist/contracts/0x2/kiosk.mjs +244 -0
- package/dist/contracts/0x2/kiosk.mjs.map +1 -0
- package/dist/contracts/0x2/kiosk_extension.mjs +25 -0
- package/dist/contracts/0x2/kiosk_extension.mjs.map +1 -0
- package/dist/contracts/0x2/transfer_policy.mjs +99 -0
- package/dist/contracts/0x2/transfer_policy.mjs.map +1 -0
- package/dist/contracts/0x2/vec_set.mjs +18 -0
- package/dist/contracts/0x2/vec_set.mjs.map +1 -0
- package/dist/contracts/kiosk/deps/sui/kiosk.mjs +98 -0
- package/dist/contracts/kiosk/deps/sui/kiosk.mjs.map +1 -0
- package/dist/contracts/kiosk/floor_price_rule.mjs +70 -0
- package/dist/contracts/kiosk/floor_price_rule.mjs.map +1 -0
- package/dist/contracts/kiosk/kiosk_lock_rule.mjs +72 -0
- package/dist/contracts/kiosk/kiosk_lock_rule.mjs.map +1 -0
- package/dist/contracts/kiosk/personal_kiosk.mjs +102 -0
- package/dist/contracts/kiosk/personal_kiosk.mjs.map +1 -0
- package/dist/contracts/kiosk/personal_kiosk_rule.mjs +66 -0
- package/dist/contracts/kiosk/personal_kiosk_rule.mjs.map +1 -0
- package/dist/contracts/kiosk/royalty_rule.mjs +115 -0
- package/dist/contracts/kiosk/royalty_rule.mjs.map +1 -0
- package/dist/contracts/utils/index.mjs +118 -0
- package/dist/contracts/utils/index.mjs.map +1 -0
- package/dist/index.d.mts +9 -0
- package/dist/index.mjs +9 -0
- package/dist/query/client-utils.mjs +30 -0
- package/dist/query/client-utils.mjs.map +1 -0
- package/dist/query/kiosk.mjs +154 -0
- package/dist/query/kiosk.mjs.map +1 -0
- package/dist/query/transfer-policy.mjs +110 -0
- package/dist/query/transfer-policy.mjs.map +1 -0
- package/dist/tx/kiosk.mjs +20 -0
- package/dist/tx/kiosk.mjs.map +1 -0
- package/dist/tx/rules/resolve.mjs +114 -0
- package/dist/tx/rules/resolve.mjs.map +1 -0
- package/dist/tx/transfer-policy.mjs +38 -0
- package/dist/tx/transfer-policy.mjs.map +1 -0
- package/dist/types/index.d.mts +23 -0
- package/dist/types/index.d.mts.map +1 -0
- package/dist/types/kiosk.d.mts +165 -0
- package/dist/types/kiosk.d.mts.map +1 -0
- package/dist/types/kiosk.mjs +21 -0
- package/dist/types/kiosk.mjs.map +1 -0
- package/dist/types/transfer-policy.d.mts +56 -0
- package/dist/types/transfer-policy.d.mts.map +1 -0
- package/dist/types/transfer-policy.mjs +19 -0
- package/dist/types/transfer-policy.mjs.map +1 -0
- package/dist/utils.d.mts +45 -0
- package/dist/utils.d.mts.map +1 -0
- package/dist/utils.mjs +156 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +31 -20
- package/src/client/kiosk-client.ts +42 -5
- package/src/client/kiosk-transaction.ts +144 -65
- package/src/client/tp-transaction.ts +149 -95
- package/src/constants.ts +19 -24
- package/src/contracts/0x2/accumulator.ts +24 -0
- package/src/contracts/0x2/accumulator_metadata.ts +38 -0
- package/src/contracts/0x2/accumulator_settlement.ts +14 -0
- package/src/contracts/0x2/address.ts +145 -0
- package/src/contracts/0x2/address_alias.ts +92 -0
- package/src/contracts/0x2/authenticator_state.ts +44 -0
- package/src/contracts/0x2/bag.ts +192 -0
- package/src/contracts/0x2/balance.ts +269 -0
- package/src/contracts/0x2/bcs.ts +495 -0
- package/src/contracts/0x2/bls12381.ts +717 -0
- package/src/contracts/0x2/borrow.ts +99 -0
- package/src/contracts/0x2/clock.ts +30 -0
- package/src/contracts/0x2/coin.ts +977 -0
- package/src/contracts/0x2/coin_registry.ts +874 -0
- package/src/contracts/0x2/config.ts +30 -0
- package/src/contracts/0x2/deny_list.ts +55 -0
- package/src/contracts/0x2/deps/0x0000000000000000000000000000000000000000000000000000000000000001/type_name.ts +12 -0
- package/src/contracts/0x2/derived_object.ts +95 -0
- package/src/contracts/0x2/display.ts +258 -0
- package/src/contracts/0x2/dynamic_field.ts +171 -0
- package/src/contracts/0x2/dynamic_object_field.ts +167 -0
- package/src/contracts/0x2/ecdsa_k1.ts +65 -0
- package/src/contracts/0x2/ecdsa_r1.ts +49 -0
- package/src/contracts/0x2/ecvrf.ts +29 -0
- package/src/contracts/0x2/ed25519.ts +25 -0
- package/src/contracts/0x2/event.ts +42 -0
- package/src/contracts/0x2/funds_accumulator.ts +86 -0
- package/src/contracts/0x2/groth16.ts +171 -0
- package/src/contracts/0x2/group_ops.ts +49 -0
- package/src/contracts/0x2/hash.ts +37 -0
- package/src/contracts/0x2/hex.ts +37 -0
- package/src/contracts/0x2/hmac.ts +21 -0
- package/src/contracts/0x2/kiosk.ts +797 -0
- package/src/contracts/0x2/kiosk_extension.ts +270 -0
- package/src/contracts/0x2/linked_table.ts +354 -0
- package/src/contracts/0x2/math.ts +117 -0
- package/src/contracts/0x2/nitro_attestation.ts +186 -0
- package/src/contracts/0x2/object.ts +249 -0
- package/src/contracts/0x2/object_bag.ts +210 -0
- package/src/contracts/0x2/object_table.ts +200 -0
- package/src/contracts/0x2/package.ts +414 -0
- package/src/contracts/0x2/party.ts +37 -0
- package/src/contracts/0x2/pay.ts +153 -0
- package/src/contracts/0x2/poseidon.ts +21 -0
- package/src/contracts/0x2/priority_queue.ts +139 -0
- package/src/contracts/0x2/random.ts +294 -0
- package/src/contracts/0x2/sui.ts +29 -0
- package/src/contracts/0x2/table.ts +200 -0
- package/src/contracts/0x2/table_vec.ts +232 -0
- package/src/contracts/0x2/token.ts +873 -0
- package/src/contracts/0x2/transfer.ts +216 -0
- package/src/contracts/0x2/transfer_policy.ts +400 -0
- package/src/contracts/0x2/tx_context.ts +129 -0
- package/src/contracts/0x2/types.ts +24 -0
- package/src/contracts/0x2/url.ts +77 -0
- package/src/contracts/0x2/vdf.ts +45 -0
- package/src/contracts/0x2/vec_map.ts +401 -0
- package/src/contracts/0x2/vec_set.ts +211 -0
- package/src/contracts/0x2/versioned.ts +153 -0
- package/src/contracts/0x2/zklogin_verified_id.ts +172 -0
- package/src/contracts/0x2/zklogin_verified_issuer.ts +99 -0
- package/src/contracts/kiosk/deps/sui/kiosk.ts +94 -0
- package/src/contracts/kiosk/deps/sui/object.ts +15 -0
- package/src/contracts/kiosk/floor_price_rule.ts +92 -0
- package/src/contracts/kiosk/kiosk_lock_rule.ts +97 -0
- package/src/contracts/kiosk/personal_kiosk.ts +295 -0
- package/src/contracts/kiosk/personal_kiosk_rule.ts +89 -0
- package/src/contracts/kiosk/royalty_rule.ts +144 -0
- package/src/contracts/kiosk/witness_rule.ts +92 -0
- package/src/contracts/utils/index.ts +234 -0
- package/src/query/client-utils.ts +51 -0
- package/src/query/kiosk.ts +128 -100
- package/src/query/transfer-policy.ts +112 -78
- package/src/tx/kiosk.ts +7 -231
- package/src/tx/rules/resolve.ts +97 -48
- package/src/tx/transfer-policy.ts +25 -86
- package/src/types/index.ts +3 -14
- package/src/types/kiosk.ts +10 -12
- package/src/types/transfer-policy.ts +4 -4
- package/src/utils.ts +90 -128
- package/dist/cjs/bcs.d.ts +0 -23
- package/dist/cjs/bcs.js +0 -50
- package/dist/cjs/bcs.js.map +0 -7
- package/dist/cjs/client/kiosk-client.d.ts +0 -76
- package/dist/cjs/client/kiosk-client.js +0 -123
- package/dist/cjs/client/kiosk-client.js.map +0 -7
- package/dist/cjs/client/kiosk-transaction.d.ts +0 -186
- package/dist/cjs/client/kiosk-transaction.js +0 -462
- package/dist/cjs/client/kiosk-transaction.js.map +0 -7
- package/dist/cjs/client/tp-transaction.d.ts +0 -114
- package/dist/cjs/client/tp-transaction.js +0 -307
- package/dist/cjs/client/tp-transaction.js.map +0 -7
- package/dist/cjs/constants.d.ts +0 -31
- package/dist/cjs/constants.js +0 -102
- package/dist/cjs/constants.js.map +0 -7
- package/dist/cjs/index.d.ts +0 -6
- package/dist/cjs/index.js +0 -24
- package/dist/cjs/index.js.map +0 -7
- package/dist/cjs/package.json +0 -5
- package/dist/cjs/query/kiosk.d.ts +0 -8
- package/dist/cjs/query/kiosk.js +0 -181
- package/dist/cjs/query/kiosk.js.map +0 -7
- package/dist/cjs/query/transfer-policy.d.ts +0 -29
- package/dist/cjs/query/transfer-policy.js +0 -92
- package/dist/cjs/query/transfer-policy.js.map +0 -7
- package/dist/cjs/tx/kiosk.d.ts +0 -71
- package/dist/cjs/tx/kiosk.js +0 -130
- package/dist/cjs/tx/kiosk.js.map +0 -7
- package/dist/cjs/tx/personal-kiosk.d.ts +0 -7
- package/dist/cjs/tx/personal-kiosk.js +0 -38
- package/dist/cjs/tx/personal-kiosk.js.map +0 -7
- package/dist/cjs/tx/rules/attach.d.ts +0 -7
- package/dist/cjs/tx/rules/attach.js +0 -62
- package/dist/cjs/tx/rules/attach.js.map +0 -7
- package/dist/cjs/tx/rules/resolve.d.ts +0 -15
- package/dist/cjs/tx/rules/resolve.js +0 -109
- package/dist/cjs/tx/rules/resolve.js.map +0 -7
- package/dist/cjs/tx/transfer-policy.d.ts +0 -29
- package/dist/cjs/tx/transfer-policy.js +0 -78
- package/dist/cjs/tx/transfer-policy.js.map +0 -7
- package/dist/cjs/types/index.d.ts +0 -27
- package/dist/cjs/types/index.js +0 -33
- package/dist/cjs/types/index.js.map +0 -7
- package/dist/cjs/types/kiosk.d.ts +0 -160
- package/dist/cjs/types/kiosk.js +0 -37
- package/dist/cjs/types/kiosk.js.map +0 -7
- package/dist/cjs/types/transfer-policy.d.ts +0 -53
- package/dist/cjs/types/transfer-policy.js +0 -35
- package/dist/cjs/types/transfer-policy.js.map +0 -7
- package/dist/cjs/utils.d.ts +0 -51
- package/dist/cjs/utils.js +0 -198
- package/dist/cjs/utils.js.map +0 -7
- package/dist/esm/bcs.d.ts +0 -23
- package/dist/esm/bcs.js +0 -35
- package/dist/esm/bcs.js.map +0 -7
- package/dist/esm/client/kiosk-client.d.ts +0 -76
- package/dist/esm/client/kiosk-client.js +0 -114
- package/dist/esm/client/kiosk-client.js.map +0 -7
- package/dist/esm/client/kiosk-transaction.d.ts +0 -186
- package/dist/esm/client/kiosk-transaction.js +0 -432
- package/dist/esm/client/kiosk-transaction.js.map +0 -7
- package/dist/esm/client/tp-transaction.d.ts +0 -114
- package/dist/esm/client/tp-transaction.js +0 -298
- package/dist/esm/client/tp-transaction.js.map +0 -7
- package/dist/esm/constants.d.ts +0 -31
- package/dist/esm/constants.js +0 -87
- package/dist/esm/constants.js.map +0 -7
- package/dist/esm/index.d.ts +0 -6
- package/dist/esm/index.js +0 -7
- package/dist/esm/index.js.map +0 -7
- package/dist/esm/package.json +0 -5
- package/dist/esm/query/kiosk.d.ts +0 -8
- package/dist/esm/query/kiosk.js +0 -169
- package/dist/esm/query/kiosk.js.map +0 -7
- package/dist/esm/query/transfer-policy.d.ts +0 -29
- package/dist/esm/query/transfer-policy.js +0 -76
- package/dist/esm/query/transfer-policy.js.map +0 -7
- package/dist/esm/tx/kiosk.d.ts +0 -71
- package/dist/esm/tx/kiosk.js +0 -110
- package/dist/esm/tx/kiosk.js.map +0 -7
- package/dist/esm/tx/personal-kiosk.d.ts +0 -7
- package/dist/esm/tx/personal-kiosk.js +0 -18
- package/dist/esm/tx/personal-kiosk.js.map +0 -7
- package/dist/esm/tx/rules/attach.d.ts +0 -7
- package/dist/esm/tx/rules/attach.js +0 -42
- package/dist/esm/tx/rules/attach.js.map +0 -7
- package/dist/esm/tx/rules/resolve.d.ts +0 -15
- package/dist/esm/tx/rules/resolve.js +0 -89
- package/dist/esm/tx/rules/resolve.js.map +0 -7
- package/dist/esm/tx/transfer-policy.d.ts +0 -29
- package/dist/esm/tx/transfer-policy.js +0 -58
- package/dist/esm/tx/transfer-policy.js.map +0 -7
- package/dist/esm/types/index.d.ts +0 -27
- package/dist/esm/types/index.js +0 -12
- package/dist/esm/types/index.js.map +0 -7
- package/dist/esm/types/kiosk.d.ts +0 -160
- package/dist/esm/types/kiosk.js +0 -17
- package/dist/esm/types/kiosk.js.map +0 -7
- package/dist/esm/types/transfer-policy.d.ts +0 -53
- package/dist/esm/types/transfer-policy.js +0 -15
- package/dist/esm/types/transfer-policy.js.map +0 -7
- package/dist/esm/utils.d.ts +0 -51
- package/dist/esm/utils.js +0 -183
- package/dist/esm/utils.js.map +0 -7
- package/dist/tsconfig.esm.tsbuildinfo +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/bcs.ts +0 -39
- package/src/tx/personal-kiosk.ts +0 -34
- package/src/tx/rules/attach.ts +0 -73
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["SUI_FRAMEWORK_ADDRESS","val"],"sources":["../../../src/contracts/utils/index.ts"],"sourcesContent":["import {\n\tbcs,\n\tBcsType,\n\tTypeTag,\n\tTypeTagSerializer,\n\tBcsStruct,\n\tBcsEnum,\n\tBcsTuple,\n} from '@mysten/sui/bcs';\nimport { normalizeSuiAddress } from '@mysten/sui/utils';\nimport { TransactionArgument, isArgument } from '@mysten/sui/transactions';\nimport { ClientWithCoreApi, SuiClientTypes } from '@mysten/sui/client';\n\nconst MOVE_STDLIB_ADDRESS = normalizeSuiAddress('0x1');\nconst SUI_FRAMEWORK_ADDRESS = normalizeSuiAddress('0x2');\n\nexport type RawTransactionArgument<T> = T | TransactionArgument;\n\nexport interface GetOptions<\n\tInclude extends Omit<SuiClientTypes.ObjectInclude, 'content'> = {},\n> extends SuiClientTypes.GetObjectOptions<Include> {\n\tclient: ClientWithCoreApi;\n}\n\nexport interface GetManyOptions<\n\tInclude extends Omit<SuiClientTypes.ObjectInclude, 'content'> = {},\n> extends SuiClientTypes.GetObjectsOptions<Include> {\n\tclient: ClientWithCoreApi;\n}\n\nexport function getPureBcsSchema(typeTag: string | TypeTag): BcsType<any> | null {\n\tconst parsedTag = typeof typeTag === 'string' ? TypeTagSerializer.parseFromStr(typeTag) : typeTag;\n\n\tif ('u8' in parsedTag) {\n\t\treturn bcs.U8;\n\t} else if ('u16' in parsedTag) {\n\t\treturn bcs.U16;\n\t} else if ('u32' in parsedTag) {\n\t\treturn bcs.U32;\n\t} else if ('u64' in parsedTag) {\n\t\treturn bcs.U64;\n\t} else if ('u128' in parsedTag) {\n\t\treturn bcs.U128;\n\t} else if ('u256' in parsedTag) {\n\t\treturn bcs.U256;\n\t} else if ('address' in parsedTag) {\n\t\treturn bcs.Address;\n\t} else if ('bool' in parsedTag) {\n\t\treturn bcs.Bool;\n\t} else if ('vector' in parsedTag) {\n\t\tconst type = getPureBcsSchema(parsedTag.vector);\n\t\treturn type ? bcs.vector(type) : null;\n\t} else if ('struct' in parsedTag) {\n\t\tconst structTag = parsedTag.struct;\n\t\tconst pkg = normalizeSuiAddress(structTag.address);\n\n\t\tif (pkg === MOVE_STDLIB_ADDRESS) {\n\t\t\tif (\n\t\t\t\t(structTag.module === 'ascii' || structTag.module === 'string') &&\n\t\t\t\tstructTag.name === 'String'\n\t\t\t) {\n\t\t\t\treturn bcs.String;\n\t\t\t}\n\n\t\t\tif (structTag.module === 'option' && structTag.name === 'Option') {\n\t\t\t\tconst type = getPureBcsSchema(structTag.typeParams[0]);\n\t\t\t\treturn type ? bcs.option(type) : null;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tpkg === SUI_FRAMEWORK_ADDRESS &&\n\t\t\tstructTag.module === 'object' &&\n\t\t\t(structTag.name === 'ID' || structTag.name === 'UID')\n\t\t) {\n\t\t\treturn bcs.Address;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function normalizeMoveArguments(\n\targs: unknown[] | object,\n\targTypes: readonly (string | null)[],\n\tparameterNames?: string[],\n) {\n\tconst argLen = Array.isArray(args) ? args.length : Object.keys(args).length;\n\tif (parameterNames && argLen !== parameterNames.length) {\n\t\tthrow new Error(\n\t\t\t`Invalid number of arguments, expected ${parameterNames.length}, got ${argLen}`,\n\t\t);\n\t}\n\n\tconst normalizedArgs: TransactionArgument[] = [];\n\n\tlet index = 0;\n\tfor (const [i, argType] of argTypes.entries()) {\n\t\tif (argType === '0x2::clock::Clock') {\n\t\t\tnormalizedArgs.push((tx) => tx.object.clock());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === '0x2::random::Random') {\n\t\t\tnormalizedArgs.push((tx) => tx.object.random());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === '0x2::deny_list::DenyList') {\n\t\t\tnormalizedArgs.push((tx) => tx.object.denyList());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === '0x3::sui_system::SuiSystemState') {\n\t\t\tnormalizedArgs.push((tx) => tx.object.system());\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet arg;\n\t\tif (Array.isArray(args)) {\n\t\t\tif (index >= args.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid number of arguments, expected at least ${index + 1}, got ${args.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\targ = args[index];\n\t\t} else {\n\t\t\tif (!parameterNames) {\n\t\t\t\tthrow new Error(`Expected arguments to be passed as an array`);\n\t\t\t}\n\t\t\tconst name = parameterNames[index];\n\t\t\targ = args[name as keyof typeof args];\n\n\t\t\tif (arg === undefined) {\n\t\t\t\tthrow new Error(`Parameter ${name} is required`);\n\t\t\t}\n\t\t}\n\n\t\tindex += 1;\n\n\t\tif (typeof arg === 'function' || isArgument(arg)) {\n\t\t\tnormalizedArgs.push(arg as TransactionArgument);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst type = argTypes[i];\n\t\tconst bcsType = type === null ? null : getPureBcsSchema(type);\n\n\t\tif (bcsType) {\n\t\t\tconst bytes = bcsType.serialize(arg as never);\n\t\t\tnormalizedArgs.push((tx) => tx.pure(bytes));\n\t\t\tcontinue;\n\t\t} else if (typeof arg === 'string') {\n\t\t\tnormalizedArgs.push((tx) => tx.object(arg));\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(`Invalid argument ${stringify(arg)} for type ${type}`);\n\t}\n\n\treturn normalizedArgs;\n}\n\nexport class MoveStruct<\n\tT extends Record<string, BcsType<any>>,\n\tconst Name extends string = string,\n> extends BcsStruct<T, Name> {\n\tasync get<Include extends Omit<SuiClientTypes.ObjectInclude, 'content' | 'json'> = {}>({\n\t\tobjectId,\n\t\t...options\n\t}: GetOptions<Include>): Promise<\n\t\tSuiClientTypes.Object<Include & { content: true; json: true }> & {\n\t\t\tjson: BcsStruct<T>['$inferType'];\n\t\t}\n\t> {\n\t\tconst [res] = await this.getMany<Include>({\n\t\t\t...options,\n\t\t\tobjectIds: [objectId],\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tasync getMany<Include extends Omit<SuiClientTypes.ObjectInclude, 'content' | 'json'> = {}>({\n\t\tclient,\n\t\t...options\n\t}: GetManyOptions<Include>): Promise<\n\t\tArray<\n\t\t\tSuiClientTypes.Object<Include & { content: true; json: true }> & {\n\t\t\t\tjson: BcsStruct<T>['$inferType'];\n\t\t\t}\n\t\t>\n\t> {\n\t\tconst response = (await client.core.getObjects({\n\t\t\t...options,\n\t\t\tinclude: {\n\t\t\t\t...options.include,\n\t\t\t\tcontent: true,\n\t\t\t},\n\t\t})) as SuiClientTypes.GetObjectsResponse<Include & { content: true }>;\n\n\t\treturn response.objects.map((obj) => {\n\t\t\tif (obj instanceof Error) {\n\t\t\t\tthrow obj;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...obj,\n\t\t\t\tjson: this.parse(obj.content),\n\t\t\t};\n\t\t});\n\t}\n}\n\nexport class MoveEnum<\n\tT extends Record<string, BcsType<any> | null>,\n\tconst Name extends string,\n> extends BcsEnum<T, Name> {}\n\nexport class MoveTuple<\n\tT extends readonly BcsType<any>[],\n\tconst Name extends string,\n> extends BcsTuple<T, Name> {}\n\nfunction stringify(val: unknown) {\n\tif (typeof val === 'object') {\n\t\treturn JSON.stringify(val, (val: unknown) => val);\n\t}\n\tif (typeof val === 'bigint') {\n\t\treturn val.toString();\n\t}\n\n\treturn val;\n}\n"],"mappings":"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"}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
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";
|
|
3
|
+
import { KioskClient, KioskExtensionOptions, kiosk } from "./client/kiosk-client.mjs";
|
|
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";
|
|
7
|
+
import { TransferPolicyBaseParams, TransferPolicyTransaction, TransferPolicyTransactionParams } from "./client/tp-transaction.mjs";
|
|
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 };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getKioskObject, getNormalizedRuleType, percentageToBasisPoints } from "./utils.mjs";
|
|
2
|
+
import { KIOSK_ITEM, KIOSK_LISTING, KIOSK_LOCK, KIOSK_MODULE, KIOSK_OWNER_CAP, KIOSK_PURCHASE_CAP, KIOSK_TYPE } from "./types/kiosk.mjs";
|
|
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
|
+
import { FLOOR_PRICE_RULE_ADDRESS, KIOSK_LOCK_RULE_ADDRESS, PERSONAL_KIOSK_RULE_ADDRESS, ROYALTY_RULE_ADDRESS, getBaseRules, mainnetRules, rules, testnetRules } from "./constants.mjs";
|
|
5
|
+
import { KioskClient, kiosk } from "./client/kiosk-client.mjs";
|
|
6
|
+
import { TransferPolicyTransaction } from "./client/tp-transaction.mjs";
|
|
7
|
+
import { KioskTransaction } from "./client/kiosk-transaction.mjs";
|
|
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 };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { graphql } from "@mysten/sui/graphql/schema";
|
|
2
|
+
import { isSuiGraphQLClient } from "@mysten/sui/graphql";
|
|
3
|
+
import { isSuiJsonRpcClient } from "@mysten/sui/jsonRpc";
|
|
4
|
+
|
|
5
|
+
//#region src/query/client-utils.ts
|
|
6
|
+
async function queryEvents(client, eventType) {
|
|
7
|
+
if (isSuiGraphQLClient(client)) {
|
|
8
|
+
const query = graphql(`
|
|
9
|
+
query QueryEvents($eventType: String!) {
|
|
10
|
+
events(filter: { eventType: $eventType }, first: 50) {
|
|
11
|
+
nodes {
|
|
12
|
+
contents {
|
|
13
|
+
json
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
`);
|
|
19
|
+
return (await client.query({
|
|
20
|
+
query,
|
|
21
|
+
variables: { eventType }
|
|
22
|
+
})).data?.events?.nodes.map((event) => ({ json: event.contents?.json })) ?? [];
|
|
23
|
+
}
|
|
24
|
+
if (isSuiJsonRpcClient(client)) return (await client.queryEvents({ query: { MoveEventType: eventType } })).data?.map((d) => ({ json: d.parsedJson })) ?? [];
|
|
25
|
+
throw new Error("Event querying is not supported by this client type. JSON-RPC and GraphQL clients support event querying, but gRPC does not. Please use a JSON-RPC or GraphQL client, or provide the required IDs directly.");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
export { queryEvents };
|
|
30
|
+
//# sourceMappingURL=client-utils.mjs.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { attachListingsAndPrices, attachLockedItems, attachObjects, extractKioskData, getAllDynamicFields, getAllObjects, getKioskObject } from "../utils.mjs";
|
|
2
|
+
import { KIOSK_OWNER_CAP } from "../types/kiosk.mjs";
|
|
3
|
+
import { Extension, ExtensionKey } from "../contracts/0x2/kiosk_extension.mjs";
|
|
4
|
+
import { PersonalKioskCap } from "../contracts/kiosk/personal_kiosk.mjs";
|
|
5
|
+
import { isValidSuiAddress } from "@mysten/sui/utils";
|
|
6
|
+
|
|
7
|
+
//#region src/query/kiosk.ts
|
|
8
|
+
async function fetchKiosk(client, kioskId, pagination, options) {
|
|
9
|
+
const data = await getAllDynamicFields(client, kioskId, pagination);
|
|
10
|
+
const listings = [];
|
|
11
|
+
const lockedItemIds = [];
|
|
12
|
+
const kioskData = extractKioskData(data, listings, lockedItemIds, kioskId);
|
|
13
|
+
const [kiosk, listingObjects, items] = await Promise.all([
|
|
14
|
+
options.withKioskFields ? getKioskObject(client, kioskId) : Promise.resolve(void 0),
|
|
15
|
+
options.withListingPrices ? getAllObjects(client, kioskData.listingIds) : Promise.resolve([]),
|
|
16
|
+
options.withObjects ? getAllObjects(client, kioskData.itemIds) : Promise.resolve([])
|
|
17
|
+
]);
|
|
18
|
+
if (options.withKioskFields) kioskData.kiosk = kiosk;
|
|
19
|
+
attachListingsAndPrices(kioskData, listings, listingObjects);
|
|
20
|
+
attachLockedItems(kioskData, lockedItemIds);
|
|
21
|
+
attachObjects(kioskData, items);
|
|
22
|
+
return {
|
|
23
|
+
data: kioskData,
|
|
24
|
+
nextCursor: null,
|
|
25
|
+
hasNextPage: false
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A function to fetch all the user's kiosk Caps
|
|
30
|
+
* And a list of the kiosk address ids.
|
|
31
|
+
* Returns a list of `kioskOwnerCapIds` and `kioskIds`.
|
|
32
|
+
* Extra options allow pagination.
|
|
33
|
+
*/
|
|
34
|
+
const DEFAULT_PAGE_SIZE = 50;
|
|
35
|
+
const PERSON_KIOSK_CURSOR = "personal";
|
|
36
|
+
const OWNED_KIOSKS_CURSOR = "owned";
|
|
37
|
+
async function getOwnedKiosks(client, address, options) {
|
|
38
|
+
if (!isValidSuiAddress(address)) return {
|
|
39
|
+
nextCursor: null,
|
|
40
|
+
hasNextPage: false,
|
|
41
|
+
kioskOwnerCaps: [],
|
|
42
|
+
kioskIds: []
|
|
43
|
+
};
|
|
44
|
+
const limit = options?.pagination?.limit ?? DEFAULT_PAGE_SIZE;
|
|
45
|
+
const [cursorType, cursor] = options?.pagination?.cursor?.split(":") ?? [PERSON_KIOSK_CURSOR, null];
|
|
46
|
+
if (options?.personalKioskType && cursorType === PERSON_KIOSK_CURSOR) {
|
|
47
|
+
const personalResult = await client.core.listOwnedObjects({
|
|
48
|
+
owner: address,
|
|
49
|
+
type: options.personalKioskType,
|
|
50
|
+
cursor,
|
|
51
|
+
limit,
|
|
52
|
+
include: { content: true }
|
|
53
|
+
});
|
|
54
|
+
const personalKioskResponse = formatOwnedKioskResponse({
|
|
55
|
+
data: personalResult.objects.filter((obj) => !(obj instanceof Error)).map((obj) => {
|
|
56
|
+
return {
|
|
57
|
+
obj,
|
|
58
|
+
kioskId: PersonalKioskCap.parse(obj.content).cap?.for
|
|
59
|
+
};
|
|
60
|
+
}).filter((item) => item.kioskId !== void 0),
|
|
61
|
+
hasNextPage: personalResult.hasNextPage,
|
|
62
|
+
nextCursor: personalResult.cursor
|
|
63
|
+
}, PERSON_KIOSK_CURSOR);
|
|
64
|
+
if (personalKioskResponse.hasNextPage) return personalKioskResponse;
|
|
65
|
+
const remainingLimit = limit - personalKioskResponse.kioskOwnerCaps.length;
|
|
66
|
+
if (remainingLimit < 1) return {
|
|
67
|
+
nextCursor: `${OWNED_KIOSKS_CURSOR}:`,
|
|
68
|
+
hasNextPage: true,
|
|
69
|
+
kioskOwnerCaps: personalKioskResponse.kioskOwnerCaps,
|
|
70
|
+
kioskIds: personalKioskResponse.kioskIds
|
|
71
|
+
};
|
|
72
|
+
const ownedResult = await client.core.listOwnedObjects({
|
|
73
|
+
owner: address,
|
|
74
|
+
type: KIOSK_OWNER_CAP,
|
|
75
|
+
cursor: null,
|
|
76
|
+
limit: remainingLimit,
|
|
77
|
+
include: { content: true }
|
|
78
|
+
});
|
|
79
|
+
const { KioskOwnerCap: KioskOwnerCapParser$1 } = await import("../contracts/0x2/kiosk.mjs");
|
|
80
|
+
const ownedKiosksResponse = formatOwnedKioskResponse({
|
|
81
|
+
data: ownedResult.objects.filter((obj) => !(obj instanceof Error)).map((obj) => {
|
|
82
|
+
return {
|
|
83
|
+
obj,
|
|
84
|
+
kioskId: KioskOwnerCapParser$1.parse(obj.content).for
|
|
85
|
+
};
|
|
86
|
+
}).filter((item) => item.kioskId !== void 0),
|
|
87
|
+
hasNextPage: ownedResult.hasNextPage,
|
|
88
|
+
nextCursor: ownedResult.cursor
|
|
89
|
+
}, OWNED_KIOSKS_CURSOR);
|
|
90
|
+
return {
|
|
91
|
+
nextCursor: ownedKiosksResponse.nextCursor,
|
|
92
|
+
hasNextPage: ownedKiosksResponse.hasNextPage,
|
|
93
|
+
kioskOwnerCaps: [...personalKioskResponse.kioskOwnerCaps, ...ownedKiosksResponse.kioskOwnerCaps],
|
|
94
|
+
kioskIds: [...personalKioskResponse.kioskIds, ...ownedKiosksResponse.kioskIds]
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const result = await client.core.listOwnedObjects({
|
|
98
|
+
owner: address,
|
|
99
|
+
type: KIOSK_OWNER_CAP,
|
|
100
|
+
cursor: cursor || null,
|
|
101
|
+
limit,
|
|
102
|
+
include: { content: true }
|
|
103
|
+
});
|
|
104
|
+
const { KioskOwnerCap: KioskOwnerCapParser } = await import("../contracts/0x2/kiosk.mjs");
|
|
105
|
+
return formatOwnedKioskResponse({
|
|
106
|
+
data: result.objects.filter((obj) => !(obj instanceof Error)).map((obj) => {
|
|
107
|
+
return {
|
|
108
|
+
obj,
|
|
109
|
+
kioskId: KioskOwnerCapParser.parse(obj.content).for
|
|
110
|
+
};
|
|
111
|
+
}).filter((item) => item.kioskId !== void 0),
|
|
112
|
+
hasNextPage: result.hasNextPage,
|
|
113
|
+
nextCursor: result.cursor
|
|
114
|
+
}, OWNED_KIOSKS_CURSOR);
|
|
115
|
+
}
|
|
116
|
+
function formatOwnedKioskResponse(response, cursorType) {
|
|
117
|
+
const { data, hasNextPage, nextCursor } = response;
|
|
118
|
+
return {
|
|
119
|
+
nextCursor: nextCursor ? `${cursorType}:${nextCursor}` : nextCursor,
|
|
120
|
+
hasNextPage,
|
|
121
|
+
kioskOwnerCaps: data.map((item) => {
|
|
122
|
+
return {
|
|
123
|
+
isPersonal: item.obj.type?.includes("PersonalKioskCap") || false,
|
|
124
|
+
digest: item.obj.digest,
|
|
125
|
+
version: item.obj.version,
|
|
126
|
+
objectId: item.obj.objectId,
|
|
127
|
+
kioskId: item.kioskId
|
|
128
|
+
};
|
|
129
|
+
}),
|
|
130
|
+
kioskIds: data.map((item) => item.kioskId)
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
async function fetchKioskExtension(client, kioskId, extensionType) {
|
|
134
|
+
const { dynamicField } = await client.core.getDynamicField({
|
|
135
|
+
parentId: kioskId,
|
|
136
|
+
name: {
|
|
137
|
+
type: `0x2::kiosk_extension::ExtensionKey<${extensionType}>`,
|
|
138
|
+
bcs: ExtensionKey.serialize({ dummy_field: false }).toBytes()
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
const extension = Extension.parse(dynamicField.value.bcs);
|
|
142
|
+
return {
|
|
143
|
+
objectId: dynamicField.fieldId,
|
|
144
|
+
type: extensionType,
|
|
145
|
+
isEnabled: extension.is_enabled,
|
|
146
|
+
permissions: extension.permissions.toString(),
|
|
147
|
+
storageId: extension.storage.id,
|
|
148
|
+
storageSize: Number(extension.storage.size)
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
//#endregion
|
|
153
|
+
export { fetchKiosk, fetchKioskExtension, getOwnedKiosks };
|
|
154
|
+
//# sourceMappingURL=kiosk.mjs.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
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
|
+
import { queryEvents } from "./client-utils.mjs";
|
|
4
|
+
import { isValidSuiAddress } from "@mysten/sui/utils";
|
|
5
|
+
|
|
6
|
+
//#region src/query/transfer-policy.ts
|
|
7
|
+
/**
|
|
8
|
+
* Searches the `TransferPolicy`-s for the given type. The search is performed via
|
|
9
|
+
* the `TransferPolicyCreated` event. The policy can either be owned or shared,
|
|
10
|
+
* and the caller needs to filter the results accordingly (ie single owner can not
|
|
11
|
+
* be accessed by anyone but the owner).
|
|
12
|
+
*
|
|
13
|
+
* This method requires event querying support (JSON-RPC or GraphQL clients).
|
|
14
|
+
* gRPC clients do not support event querying and will throw an error.
|
|
15
|
+
*
|
|
16
|
+
* @param client - The Sui client (must support event querying)
|
|
17
|
+
* @param type - The type of the asset (e.g., "0x123::nft::NFT")
|
|
18
|
+
* @throws Error if the client doesn't support event querying
|
|
19
|
+
*/
|
|
20
|
+
async function queryTransferPolicy(client, type) {
|
|
21
|
+
const search = (await queryEvents(client, `${TRANSFER_POLICY_CREATED_EVENT}<${type}>`)).map((event) => event.json);
|
|
22
|
+
const { objects } = await client.core.getObjects({
|
|
23
|
+
objectIds: search.map((policy) => policy.id),
|
|
24
|
+
include: { content: true }
|
|
25
|
+
});
|
|
26
|
+
return objects.filter((obj) => !(obj instanceof Error) && obj.content).map((obj) => {
|
|
27
|
+
if (obj instanceof Error) throw obj;
|
|
28
|
+
if (!obj.content) throw new Error(`Invalid policy: ${obj.objectId}, expected object with content`);
|
|
29
|
+
const parsed = TransferPolicy.parse(obj.content);
|
|
30
|
+
return {
|
|
31
|
+
id: obj.objectId,
|
|
32
|
+
type: `${TRANSFER_POLICY_TYPE}<${type}>`,
|
|
33
|
+
owner: obj.owner,
|
|
34
|
+
rules: parsed.rules.contents.map((rule) => rule.name),
|
|
35
|
+
balance: parsed.balance.value.toString()
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Fetches all TransferPolicyCap objects owned by an address for a specific type.
|
|
41
|
+
*
|
|
42
|
+
* @param client - The Sui client
|
|
43
|
+
* @param address - The owner address
|
|
44
|
+
* @param type - The type of the asset
|
|
45
|
+
* @returns Array of TransferPolicyCap objects
|
|
46
|
+
*/
|
|
47
|
+
async function queryTransferPolicyCapsByType(client, address, type) {
|
|
48
|
+
if (!isValidSuiAddress(address)) return [];
|
|
49
|
+
const policies = [];
|
|
50
|
+
let hasNextPage = true;
|
|
51
|
+
let cursor = null;
|
|
52
|
+
while (hasNextPage) {
|
|
53
|
+
const result = await client.core.listOwnedObjects({
|
|
54
|
+
owner: address,
|
|
55
|
+
type: `${TRANSFER_POLICY_CAP_TYPE}<${type}>`,
|
|
56
|
+
cursor,
|
|
57
|
+
limit: 50,
|
|
58
|
+
include: { content: true }
|
|
59
|
+
});
|
|
60
|
+
for (const obj of result.objects) if (obj.content) policies.push({
|
|
61
|
+
policyId: TransferPolicyCap.parse(obj.content).policy_id,
|
|
62
|
+
policyCapId: obj.objectId,
|
|
63
|
+
type
|
|
64
|
+
});
|
|
65
|
+
hasNextPage = result.hasNextPage;
|
|
66
|
+
cursor = result.cursor;
|
|
67
|
+
}
|
|
68
|
+
return policies;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fetches all TransferPolicyCap objects owned by an address (all types).
|
|
72
|
+
*
|
|
73
|
+
* Uses struct-level filtering (without type parameters) to efficiently query
|
|
74
|
+
* only TransferPolicyCap objects. This matches all generic instantiations
|
|
75
|
+
* (e.g., TransferPolicyCap<T> for any T) and is supported natively by all clients.
|
|
76
|
+
*
|
|
77
|
+
* @param client - The Sui client
|
|
78
|
+
* @param address - The owner address
|
|
79
|
+
* @returns Array of TransferPolicyCap objects or undefined if address is invalid
|
|
80
|
+
*/
|
|
81
|
+
async function queryOwnedTransferPolicies(client, address) {
|
|
82
|
+
if (!isValidSuiAddress(address)) return;
|
|
83
|
+
let hasNextPage = true;
|
|
84
|
+
let cursor = null;
|
|
85
|
+
const policies = [];
|
|
86
|
+
while (hasNextPage) {
|
|
87
|
+
const result = await client.core.listOwnedObjects({
|
|
88
|
+
owner: address,
|
|
89
|
+
type: TRANSFER_POLICY_CAP_TYPE,
|
|
90
|
+
cursor,
|
|
91
|
+
limit: 50,
|
|
92
|
+
include: { content: true }
|
|
93
|
+
});
|
|
94
|
+
for (const obj of result.objects) if (obj.content) {
|
|
95
|
+
const objectType = obj.type.replace(`${TRANSFER_POLICY_CAP_TYPE}<`, "").slice(0, -1);
|
|
96
|
+
policies.push({
|
|
97
|
+
policyId: TransferPolicyCap.parse(obj.content).policy_id,
|
|
98
|
+
policyCapId: obj.objectId,
|
|
99
|
+
type: objectType
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
hasNextPage = result.hasNextPage;
|
|
103
|
+
cursor = result.cursor;
|
|
104
|
+
}
|
|
105
|
+
return policies;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
//#endregion
|
|
109
|
+
export { queryOwnedTransferPolicies, queryTransferPolicy, queryTransferPolicyCapsByType };
|
|
110
|
+
//# sourceMappingURL=transfer-policy.mjs.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { _new } from "../contracts/0x2/kiosk.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/tx/kiosk.ts
|
|
4
|
+
/**
|
|
5
|
+
* Calls the `kiosk::new()` function and shares the kiosk.
|
|
6
|
+
* Returns the `kioskOwnerCap` object.
|
|
7
|
+
*/
|
|
8
|
+
function createKioskAndShare(tx) {
|
|
9
|
+
const [kioskObj, kioskOwnerCap] = tx.add(_new({}));
|
|
10
|
+
tx.moveCall({
|
|
11
|
+
target: "0x2::transfer::public_share_object",
|
|
12
|
+
arguments: [kioskObj],
|
|
13
|
+
typeArguments: ["0x2::kiosk::Kiosk"]
|
|
14
|
+
});
|
|
15
|
+
return kioskOwnerCap;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { createKioskAndShare };
|
|
20
|
+
//# sourceMappingURL=kiosk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiosk.mjs","names":["kiosk._new"],"sources":["../../src/tx/kiosk.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Transaction, TransactionObjectArgument } from '@mysten/sui/transactions';\nimport * as kiosk from '../contracts/0x2/kiosk.js';\n\n/**\n * Calls the `kiosk::new()` function and shares the kiosk.\n * Returns the `kioskOwnerCap` object.\n */\nexport function createKioskAndShare(tx: Transaction): TransactionObjectArgument {\n\tconst [kioskObj, kioskOwnerCap] = tx.add(kiosk._new({}));\n\ttx.moveCall({\n\t\ttarget: '0x2::transfer::public_share_object',\n\t\targuments: [kioskObj],\n\t\ttypeArguments: ['0x2::kiosk::Kiosk'],\n\t});\n\treturn kioskOwnerCap;\n}\n"],"mappings":";;;;;;;AAUA,SAAgB,oBAAoB,IAA4C;CAC/E,MAAM,CAAC,UAAU,iBAAiB,GAAG,IAAIA,KAAW,EAAE,CAAC,CAAC;AACxD,IAAG,SAAS;EACX,QAAQ;EACR,WAAW,CAAC,SAAS;EACrB,eAAe,CAAC,oBAAoB;EACpC,CAAC;AACF,QAAO"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { lock } from "../../contracts/0x2/kiosk.mjs";
|
|
2
|
+
import { feeAmount, pay } from "../../contracts/kiosk/royalty_rule.mjs";
|
|
3
|
+
import { prove } from "../../contracts/kiosk/kiosk_lock_rule.mjs";
|
|
4
|
+
import { prove as prove$1 } from "../../contracts/kiosk/personal_kiosk_rule.mjs";
|
|
5
|
+
import { prove as prove$2 } from "../../contracts/kiosk/floor_price_rule.mjs";
|
|
6
|
+
import { bcs } from "@mysten/sui/bcs";
|
|
7
|
+
import { normalizeSuiAddress } from "@mysten/sui/utils";
|
|
8
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
9
|
+
|
|
10
|
+
//#region src/tx/rules/resolve.ts
|
|
11
|
+
/**
|
|
12
|
+
* A helper to resolve the royalty rule.
|
|
13
|
+
*/
|
|
14
|
+
async function resolveRoyaltyRule(params) {
|
|
15
|
+
const { transaction: tx, itemType, price, packageId, transferRequest, policyId, kioskClient } = params;
|
|
16
|
+
const feeTx = new Transaction();
|
|
17
|
+
feeTx.add(feeAmount({
|
|
18
|
+
package: packageId,
|
|
19
|
+
arguments: {
|
|
20
|
+
policy: feeTx.object(policyId),
|
|
21
|
+
paid: BigInt(price || "0")
|
|
22
|
+
},
|
|
23
|
+
typeArguments: [itemType]
|
|
24
|
+
}));
|
|
25
|
+
const policyObj = tx.object(policyId);
|
|
26
|
+
let amount = null;
|
|
27
|
+
try {
|
|
28
|
+
feeTx.setSender(tx.getData().sender || normalizeSuiAddress("0x0"));
|
|
29
|
+
const txBytes = await feeTx.build({ client: kioskClient.client });
|
|
30
|
+
const result = await kioskClient.client.core.simulateTransaction({
|
|
31
|
+
transaction: txBytes,
|
|
32
|
+
include: { commandResults: true }
|
|
33
|
+
});
|
|
34
|
+
if (result.commandResults && result.commandResults.length > 0) {
|
|
35
|
+
const returnedAmount = result.commandResults[0]?.returnValues?.[0]?.bcs;
|
|
36
|
+
if (returnedAmount) amount = BigInt(bcs.U64.parse(returnedAmount));
|
|
37
|
+
}
|
|
38
|
+
} catch {}
|
|
39
|
+
if (!amount) [amount] = tx.add(feeAmount({
|
|
40
|
+
package: packageId,
|
|
41
|
+
arguments: {
|
|
42
|
+
policy: policyObj,
|
|
43
|
+
paid: BigInt(price || "0")
|
|
44
|
+
},
|
|
45
|
+
typeArguments: [itemType]
|
|
46
|
+
}));
|
|
47
|
+
const feeCoin = tx.splitCoins(tx.gas, [amount]);
|
|
48
|
+
tx.add(pay({
|
|
49
|
+
package: packageId,
|
|
50
|
+
arguments: {
|
|
51
|
+
policy: policyObj,
|
|
52
|
+
request: transferRequest,
|
|
53
|
+
payment: feeCoin
|
|
54
|
+
},
|
|
55
|
+
typeArguments: [itemType]
|
|
56
|
+
}));
|
|
57
|
+
}
|
|
58
|
+
function resolveKioskLockRule(params) {
|
|
59
|
+
const { transaction: tx, packageId, itemType, kiosk: kioskId, kioskCap, policyId, purchasedItem, transferRequest } = params;
|
|
60
|
+
if (!kioskId || !kioskCap) throw new Error("Missing Owned Kiosk or Owned Kiosk Cap");
|
|
61
|
+
tx.add(lock({
|
|
62
|
+
arguments: [
|
|
63
|
+
kioskId,
|
|
64
|
+
kioskCap,
|
|
65
|
+
policyId,
|
|
66
|
+
purchasedItem
|
|
67
|
+
],
|
|
68
|
+
typeArguments: [itemType]
|
|
69
|
+
}));
|
|
70
|
+
tx.add(prove({
|
|
71
|
+
package: packageId,
|
|
72
|
+
arguments: {
|
|
73
|
+
request: transferRequest,
|
|
74
|
+
kiosk: tx.object(kioskId)
|
|
75
|
+
},
|
|
76
|
+
typeArguments: [itemType]
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A helper to resolve the personalKioskRule.
|
|
81
|
+
* @param params
|
|
82
|
+
*/
|
|
83
|
+
function resolvePersonalKioskRule(params) {
|
|
84
|
+
const { transaction: tx, packageId, itemType, kiosk, transferRequest } = params;
|
|
85
|
+
if (!kiosk) throw new Error("Missing owned Kiosk.");
|
|
86
|
+
tx.add(prove$1({
|
|
87
|
+
package: packageId,
|
|
88
|
+
arguments: {
|
|
89
|
+
kiosk: tx.object(kiosk),
|
|
90
|
+
request: transferRequest
|
|
91
|
+
},
|
|
92
|
+
typeArguments: [itemType]
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* A helper to resolve the floor price rule.
|
|
97
|
+
* The floor price rule verifies that the paid amount meets the minimum price.
|
|
98
|
+
* @param params
|
|
99
|
+
*/
|
|
100
|
+
function resolveFloorPriceRule(params) {
|
|
101
|
+
const { transaction: tx, packageId, itemType, policyId, transferRequest } = params;
|
|
102
|
+
tx.add(prove$2({
|
|
103
|
+
package: packageId,
|
|
104
|
+
arguments: {
|
|
105
|
+
policy: tx.object(policyId),
|
|
106
|
+
request: transferRequest
|
|
107
|
+
},
|
|
108
|
+
typeArguments: [itemType]
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
//#endregion
|
|
113
|
+
export { resolveFloorPriceRule, resolveKioskLockRule, resolvePersonalKioskRule, resolveRoyaltyRule };
|
|
114
|
+
//# sourceMappingURL=resolve.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.mjs","names":["royaltyRule.feeAmount","royaltyRule.pay","kiosk.lock","kioskLockRule.prove","personalKioskRule.prove","floorPriceRule.prove"],"sources":["../../../src/tx/rules/resolve.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TransactionArgument } from '@mysten/sui/transactions';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { bcs } from '@mysten/sui/bcs';\nimport { normalizeSuiAddress } from '@mysten/sui/utils';\n\nimport type { RuleResolvingParams } from '../../types/index.js';\nimport * as kiosk from '../../contracts/0x2/kiosk.js';\nimport * as royaltyRule from '../../contracts/kiosk/royalty_rule.js';\nimport * as kioskLockRule from '../../contracts/kiosk/kiosk_lock_rule.js';\nimport * as personalKioskRule from '../../contracts/kiosk/personal_kiosk_rule.js';\nimport * as floorPriceRule from '../../contracts/kiosk/floor_price_rule.js';\n/**\n * A helper to resolve the royalty rule.\n */\nexport async function resolveRoyaltyRule(params: RuleResolvingParams) {\n\tconst {\n\t\ttransaction: tx,\n\t\titemType,\n\t\tprice,\n\t\tpackageId,\n\t\ttransferRequest,\n\t\tpolicyId,\n\t\tkioskClient,\n\t} = params;\n\n\t// We attempt to resolve the fee amount outside of the PTB so that the split amount is known before the transaction is sent.\n\t// This improves the display of the transaction within the wallet.\n\n\tconst feeTx = new Transaction();\n\n\t// calculates the amount\n\tfeeTx.add(\n\t\troyaltyRule.feeAmount({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: feeTx.object(policyId),\n\t\t\t\tpaid: BigInt(price || '0'),\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\tconst policyObj = tx.object(policyId);\n\n\tlet amount: TransactionArgument | bigint | null = null;\n\n\ttry {\n\t\tfeeTx.setSender(tx.getData().sender || normalizeSuiAddress('0x0'));\n\t\tconst txBytes = await feeTx.build({ client: kioskClient.client });\n\n\t\tconst result = await kioskClient.client.core.simulateTransaction({\n\t\t\ttransaction: txBytes,\n\t\t\tinclude: { commandResults: true },\n\t\t});\n\n\t\tif (result.commandResults && result.commandResults.length > 0) {\n\t\t\tconst returnedAmount = result.commandResults[0]?.returnValues?.[0]?.bcs;\n\t\t\tif (returnedAmount) {\n\t\t\t\tamount = BigInt(bcs.U64.parse(returnedAmount));\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// If simulate fails, fall back to resolving within the PTB\n\t}\n\n\t// We were not able to calculate the amount outside of the transaction, so fall back to resolving it within the PTB\n\tif (!amount) {\n\t\t[amount] = tx.add(\n\t\t\troyaltyRule.feeAmount({\n\t\t\t\tpackage: packageId,\n\t\t\t\targuments: {\n\t\t\t\t\tpolicy: policyObj,\n\t\t\t\t\tpaid: BigInt(price || '0'),\n\t\t\t\t},\n\t\t\t\ttypeArguments: [itemType],\n\t\t\t}),\n\t\t);\n\t}\n\n\t// splits the coin.\n\tconst feeCoin = tx.splitCoins(tx.gas, [amount]);\n\n\t// pays the policy\n\ttx.add(\n\t\troyaltyRule.pay({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: policyObj,\n\t\t\t\trequest: transferRequest,\n\t\t\t\tpayment: feeCoin,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\nexport function resolveKioskLockRule(params: RuleResolvingParams) {\n\tconst {\n\t\ttransaction: tx,\n\t\tpackageId,\n\t\titemType,\n\t\tkiosk: kioskId,\n\t\tkioskCap,\n\t\tpolicyId,\n\t\tpurchasedItem,\n\t\ttransferRequest,\n\t} = params;\n\n\tif (!kioskId || !kioskCap) throw new Error('Missing Owned Kiosk or Owned Kiosk Cap');\n\n\ttx.add(\n\t\tkiosk.lock({\n\t\t\targuments: [kioskId, kioskCap, policyId, purchasedItem],\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\t// proves that the item is locked in the kiosk to the TP.\n\ttx.add(\n\t\tkioskLockRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\trequest: transferRequest,\n\t\t\t\tkiosk: tx.object(kioskId),\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\n/**\n * A helper to resolve the personalKioskRule.\n * @param params\n */\nexport function resolvePersonalKioskRule(params: RuleResolvingParams) {\n\tconst { transaction: tx, packageId, itemType, kiosk, transferRequest } = params;\n\n\tif (!kiosk) throw new Error('Missing owned Kiosk.');\n\n\t// proves that the destination kiosk is personal.\n\ttx.add(\n\t\tpersonalKioskRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tkiosk: tx.object(kiosk),\n\t\t\t\trequest: transferRequest,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n\n/**\n * A helper to resolve the floor price rule.\n * The floor price rule verifies that the paid amount meets the minimum price.\n * @param params\n */\nexport function resolveFloorPriceRule(params: RuleResolvingParams) {\n\tconst { transaction: tx, packageId, itemType, policyId, transferRequest } = params;\n\n\t// proves that the paid amount meets the floor price requirement\n\ttx.add(\n\t\tfloorPriceRule.prove({\n\t\t\tpackage: packageId,\n\t\t\targuments: {\n\t\t\t\tpolicy: tx.object(policyId),\n\t\t\t\trequest: transferRequest,\n\t\t\t},\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,eAAsB,mBAAmB,QAA6B;CACrE,MAAM,EACL,aAAa,IACb,UACA,OACA,WACA,iBACA,UACA,gBACG;CAKJ,MAAM,QAAQ,IAAI,aAAa;AAG/B,OAAM,IACLA,UAAsB;EACrB,SAAS;EACT,WAAW;GACV,QAAQ,MAAM,OAAO,SAAS;GAC9B,MAAM,OAAO,SAAS,IAAI;GAC1B;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;CAED,MAAM,YAAY,GAAG,OAAO,SAAS;CAErC,IAAI,SAA8C;AAElD,KAAI;AACH,QAAM,UAAU,GAAG,SAAS,CAAC,UAAU,oBAAoB,MAAM,CAAC;EAClE,MAAM,UAAU,MAAM,MAAM,MAAM,EAAE,QAAQ,YAAY,QAAQ,CAAC;EAEjE,MAAM,SAAS,MAAM,YAAY,OAAO,KAAK,oBAAoB;GAChE,aAAa;GACb,SAAS,EAAE,gBAAgB,MAAM;GACjC,CAAC;AAEF,MAAI,OAAO,kBAAkB,OAAO,eAAe,SAAS,GAAG;GAC9D,MAAM,iBAAiB,OAAO,eAAe,IAAI,eAAe,IAAI;AACpE,OAAI,eACH,UAAS,OAAO,IAAI,IAAI,MAAM,eAAe,CAAC;;SAGzC;AAKR,KAAI,CAAC,OACJ,EAAC,UAAU,GAAG,IACbA,UAAsB;EACrB,SAAS;EACT,WAAW;GACV,QAAQ;GACR,MAAM,OAAO,SAAS,IAAI;GAC1B;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;CAIF,MAAM,UAAU,GAAG,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC;AAG/C,IAAG,IACFC,IAAgB;EACf,SAAS;EACT,WAAW;GACV,QAAQ;GACR,SAAS;GACT,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;AAGF,SAAgB,qBAAqB,QAA6B;CACjE,MAAM,EACL,aAAa,IACb,WACA,UACA,OAAO,SACP,UACA,UACA,eACA,oBACG;AAEJ,KAAI,CAAC,WAAW,CAAC,SAAU,OAAM,IAAI,MAAM,yCAAyC;AAEpF,IAAG,IACFC,KAAW;EACV,WAAW;GAAC;GAAS;GAAU;GAAU;GAAc;EACvD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;AAGD,IAAG,IACFC,MAAoB;EACnB,SAAS;EACT,WAAW;GACV,SAAS;GACT,OAAO,GAAG,OAAO,QAAQ;GACzB;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;;;;;AAOF,SAAgB,yBAAyB,QAA6B;CACrE,MAAM,EAAE,aAAa,IAAI,WAAW,UAAU,OAAO,oBAAoB;AAEzE,KAAI,CAAC,MAAO,OAAM,IAAI,MAAM,uBAAuB;AAGnD,IAAG,IACFC,QAAwB;EACvB,SAAS;EACT,WAAW;GACV,OAAO,GAAG,OAAO,MAAM;GACvB,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;;;;;;;AAQF,SAAgB,sBAAsB,QAA6B;CAClE,MAAM,EAAE,aAAa,IAAI,WAAW,UAAU,UAAU,oBAAoB;AAG5E,IAAG,IACFC,QAAqB;EACpB,SAAS;EACT,WAAW;GACV,QAAQ,GAAG,OAAO,SAAS;GAC3B,SAAS;GACT;EACD,eAAe,CAAC,SAAS;EACzB,CAAC,CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { _new, withdraw } from "../contracts/0x2/transfer_policy.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/tx/transfer-policy.ts
|
|
4
|
+
/**
|
|
5
|
+
* Call the `transfer_policy::new` function to create a new transfer policy.
|
|
6
|
+
* Returns `transferPolicyCap`
|
|
7
|
+
*/
|
|
8
|
+
function createTransferPolicy(tx, itemType, publisher) {
|
|
9
|
+
const [policy, policyCap] = tx.add(_new({
|
|
10
|
+
arguments: [publisher],
|
|
11
|
+
typeArguments: [itemType]
|
|
12
|
+
}));
|
|
13
|
+
tx.moveCall({
|
|
14
|
+
target: "0x2::transfer::public_share_object",
|
|
15
|
+
arguments: [policy],
|
|
16
|
+
typeArguments: [`0x2::transfer_policy::TransferPolicy<${itemType}>`]
|
|
17
|
+
});
|
|
18
|
+
return policyCap;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.
|
|
22
|
+
*/
|
|
23
|
+
function withdrawFromPolicy(tx, itemType, policy, policyCap, amount) {
|
|
24
|
+
const amountArg = amount ? typeof amount === "string" ? BigInt(amount) : amount : null;
|
|
25
|
+
const [profits] = tx.add(withdraw({
|
|
26
|
+
arguments: [
|
|
27
|
+
policy,
|
|
28
|
+
policyCap,
|
|
29
|
+
amountArg
|
|
30
|
+
],
|
|
31
|
+
typeArguments: [itemType]
|
|
32
|
+
}));
|
|
33
|
+
return profits;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { createTransferPolicy, withdrawFromPolicy };
|
|
38
|
+
//# sourceMappingURL=transfer-policy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer-policy.mjs","names":["transferPolicy._new","transferPolicy.withdraw"],"sources":["../../src/tx/transfer-policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Transaction, TransactionObjectArgument } from '@mysten/sui/transactions';\n\nimport type { ObjectArgument } from '../types/index.js';\nimport * as transferPolicy from '../contracts/0x2/transfer_policy.js';\n\n/**\n * Call the `transfer_policy::new` function to create a new transfer policy.\n * Returns `transferPolicyCap`\n */\nexport function createTransferPolicy(\n\ttx: Transaction,\n\titemType: string,\n\tpublisher: ObjectArgument,\n): TransactionObjectArgument {\n\tconst [policy, policyCap] = tx.add(\n\t\ttransferPolicy._new({\n\t\t\targuments: [publisher],\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\ttx.moveCall({\n\t\ttarget: '0x2::transfer::public_share_object',\n\t\targuments: [policy],\n\t\ttypeArguments: [`0x2::transfer_policy::TransferPolicy<${itemType}>`],\n\t});\n\n\treturn policyCap;\n}\n\n/**\n * Call the `transfer_policy::withdraw` function to withdraw profits from a transfer policy.\n */\nexport function withdrawFromPolicy(\n\ttx: Transaction,\n\titemType: string,\n\tpolicy: ObjectArgument,\n\tpolicyCap: ObjectArgument,\n\tamount?: string | bigint | null,\n): TransactionObjectArgument {\n\t// Convert string to bigint if needed for the generated function\n\tconst amountArg: bigint | null = amount\n\t\t? typeof amount === 'string'\n\t\t\t? BigInt(amount)\n\t\t\t: amount\n\t\t: null;\n\n\tconst [profits] = tx.add(\n\t\ttransferPolicy.withdraw({\n\t\t\targuments: [policy, policyCap, amountArg],\n\t\t\ttypeArguments: [itemType],\n\t\t}),\n\t);\n\n\treturn profits;\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,qBACf,IACA,UACA,WAC4B;CAC5B,MAAM,CAAC,QAAQ,aAAa,GAAG,IAC9BA,KAAoB;EACnB,WAAW,CAAC,UAAU;EACtB,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;AAED,IAAG,SAAS;EACX,QAAQ;EACR,WAAW,CAAC,OAAO;EACnB,eAAe,CAAC,wCAAwC,SAAS,GAAG;EACpE,CAAC;AAEF,QAAO;;;;;AAMR,SAAgB,mBACf,IACA,UACA,QACA,WACA,QAC4B;CAE5B,MAAM,YAA2B,SAC9B,OAAO,WAAW,WACjB,OAAO,OAAO,GACd,SACD;CAEH,MAAM,CAAC,WAAW,GAAG,IACpBC,SAAwB;EACvB,WAAW;GAAC;GAAQ;GAAW;GAAU;EACzC,eAAe,CAAC,SAAS;EACzB,CAAC,CACF;AAED,QAAO"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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";
|
|
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
|
+
import { TransactionObjectArgument } from "@mysten/sui/transactions";
|
|
5
|
+
import { ClientWithCoreApi, SuiClientTypes } from "@mysten/sui/client";
|
|
6
|
+
|
|
7
|
+
//#region src/types/index.d.ts
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* A valid argument for any of the Kiosk functions.
|
|
11
|
+
*/
|
|
12
|
+
type ObjectArgument = string | TransactionObjectArgument;
|
|
13
|
+
/**
|
|
14
|
+
* The Client Options for Both KioskClient & TransferPolicyManager.
|
|
15
|
+
*/
|
|
16
|
+
type KioskClientOptions = {
|
|
17
|
+
client: ClientWithCoreApi;
|
|
18
|
+
network: SuiClientTypes.Network;
|
|
19
|
+
packageIds?: BaseRulePackageIds;
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
export { KioskClientOptions, ObjectArgument };
|
|
23
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +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"}
|