@tradeport/sui-trading-sdk 0.4.15 → 0.4.16
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/dist/index.js +383 -216
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +383 -216
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/helpers/hasTransferPolicyRules.ts +4 -2
- package/src/helpers/kiosk/getKioskIdFromKioskTx.ts +21 -0
- package/src/helpers/kiosk/lockNftInsideKioskIfNotLocked.ts +2 -8
- package/src/helpers/kiosk/takeAndBorrowNftFromKiosk.ts +50 -0
- package/src/helpers/kiosk/takeLockedNftFromKiosk.ts +77 -0
- package/src/methods/acceptCollectionBid/addAcceptCollectionBIdTxs.ts +22 -8
- package/src/methods/listNfts/addListTxs.ts +13 -5
- package/src/methods/listNfts/addRelistTxs.ts +6 -4
- package/src/methods/listNfts/listNfts.ts +3 -1
- package/src/methods/migrateNftsFromUnsharedToSharedKiosks/migrateNftsFromUnsharedToSharedKiosks.ts +1 -0
- package/src/methods/transferNfts/transferNfts.ts +35 -0
- package/src/methods/unlistListings/addUnlistListingTxs.ts +22 -0
package/dist/index.js
CHANGED
|
@@ -1319,7 +1319,10 @@ var hasPersonalKioskRule = (transferPolicies) => getNativeKioskTransferPolicies(
|
|
|
1319
1319
|
);
|
|
1320
1320
|
|
|
1321
1321
|
// src/helpers/hasTransferPolicyRules.ts
|
|
1322
|
-
var hasNativeKioskTransferPolicyRules = (transferPolicies) =>
|
|
1322
|
+
var hasNativeKioskTransferPolicyRules = (transferPolicies) => {
|
|
1323
|
+
const nativeKioskTransferPolicies = getNativeKioskTransferPolicies(transferPolicies);
|
|
1324
|
+
return nativeKioskTransferPolicies?.some((policy) => policy?.rules?.length > 0);
|
|
1325
|
+
};
|
|
1323
1326
|
|
|
1324
1327
|
// src/helpers/isSIngleBid.ts
|
|
1325
1328
|
var isSingleBid = (bidType) => {
|
|
@@ -1561,211 +1564,16 @@ var kioskTxWrapper = async ({
|
|
|
1561
1564
|
}
|
|
1562
1565
|
};
|
|
1563
1566
|
|
|
1564
|
-
// src/helpers/
|
|
1565
|
-
var
|
|
1566
|
-
tx.moveCall({
|
|
1567
|
-
target: "0x6f42ec2355fcda5ebeee2399d901ae9f71cb214e640a45a0007f1f1cdf9f7b5e::transfer_allowlist::confirm_transfer",
|
|
1568
|
-
arguments: [tx.object(sharedObjects?.allowList), tx.object(transferRequest)],
|
|
1569
|
-
typeArguments: [nftType]
|
|
1570
|
-
});
|
|
1571
|
-
if (sharedObjects?.royaltyStrategy) {
|
|
1572
|
-
tx.moveCall({
|
|
1573
|
-
target: "0x6f42ec2355fcda5ebeee2399d901ae9f71cb214e640a45a0007f1f1cdf9f7b5e::royalty_strategy_bps::confirm_transfer",
|
|
1574
|
-
arguments: [tx.object(sharedObjects?.royaltyStrategy), tx.object(transferRequest)],
|
|
1575
|
-
typeArguments: [nftType, "0x2::sui::SUI"]
|
|
1576
|
-
});
|
|
1577
|
-
}
|
|
1578
|
-
tx.moveCall({
|
|
1579
|
-
target: "0xadf32ebafc587cc86e1e56e59f7b17c7e8cbeb3315193be63c6f73157d4e88b9::transfer_request::confirm",
|
|
1580
|
-
arguments: [tx.object(transferRequest), tx.object(sharedObjects?.transferPolicy)],
|
|
1581
|
-
typeArguments: [nftType, "0x2::sui::SUI"]
|
|
1582
|
-
});
|
|
1583
|
-
};
|
|
1584
|
-
|
|
1585
|
-
// src/helpers/originByte/depositNftIntoOBKiosk.ts
|
|
1586
|
-
var depositItemIntoOBKiosk = ({ tx, kiosk, nftTokenId, nftType }) => {
|
|
1587
|
-
tx.moveCall({
|
|
1588
|
-
target: "0x2678c98fe23173eebea384509464eb81b1f3035a57419cb46d025000c337451a::ob_kiosk::deposit",
|
|
1589
|
-
arguments: [tx.object(kiosk), tx.object(nftTokenId)],
|
|
1590
|
-
typeArguments: [nftType]
|
|
1591
|
-
});
|
|
1592
|
-
};
|
|
1593
|
-
|
|
1594
|
-
// src/helpers/originByte/createOBKiosk.ts
|
|
1595
|
-
var createOBKiosk = async ({ tx, createMethod = "new" }) => {
|
|
1596
|
-
const [kiosk] = tx.moveCall({
|
|
1597
|
-
target: `0x2678c98fe23173eebea384509464eb81b1f3035a57419cb46d025000c337451a::ob_kiosk::${createMethod}`,
|
|
1598
|
-
arguments: [],
|
|
1599
|
-
typeArguments: []
|
|
1600
|
-
});
|
|
1601
|
-
return [kiosk];
|
|
1602
|
-
};
|
|
1603
|
-
|
|
1604
|
-
// src/graphql/queries/fetchWalletKiosks.ts
|
|
1605
|
-
var import_graphql_request10 = require("graphql-request");
|
|
1606
|
-
var fetchWalletKiosks = import_graphql_request10.gql`
|
|
1607
|
-
query fetchWalletKiosks($wallet: String!) {
|
|
1608
|
-
kiosks: kiosks_by_owner_address(owner_address: $wallet) {
|
|
1609
|
-
id
|
|
1610
|
-
is_origin_byte
|
|
1611
|
-
is_personal
|
|
1612
|
-
owner_address
|
|
1613
|
-
profits
|
|
1614
|
-
is_shared
|
|
1615
|
-
}
|
|
1616
|
-
}
|
|
1617
|
-
`;
|
|
1618
|
-
|
|
1619
|
-
// src/helpers/originByte/getOBKiosk.ts
|
|
1620
|
-
var getOBKiosk = async (wallet) => {
|
|
1621
|
-
const res = await gqlChainRequest({
|
|
1622
|
-
chain: "sui",
|
|
1623
|
-
query: fetchWalletKiosks,
|
|
1624
|
-
variables: { wallet: addLeadingZerosAfter0x(wallet) }
|
|
1625
|
-
});
|
|
1626
|
-
return res?.kiosks?.filter((kiosk) => kiosk?.is_origin_byte && kiosk?.is_shared)?.[0]?.id;
|
|
1627
|
-
};
|
|
1628
|
-
|
|
1629
|
-
// src/helpers/originByte/getOrCreateOBKiosk.ts
|
|
1630
|
-
var getOrCreateOBKiosk = async ({
|
|
1631
|
-
tx,
|
|
1632
|
-
address,
|
|
1633
|
-
kioskToUseIfExists,
|
|
1634
|
-
createMethod
|
|
1635
|
-
}) => {
|
|
1636
|
-
if (kioskToUseIfExists) {
|
|
1637
|
-
return {
|
|
1638
|
-
kiosk: kioskToUseIfExists,
|
|
1639
|
-
isNewKiosk: false
|
|
1640
|
-
};
|
|
1641
|
-
}
|
|
1642
|
-
const existingKiosk = await getOBKiosk(address);
|
|
1643
|
-
if (existingKiosk) {
|
|
1644
|
-
return {
|
|
1645
|
-
kiosk: existingKiosk,
|
|
1646
|
-
isNewKiosk: false
|
|
1647
|
-
};
|
|
1648
|
-
}
|
|
1649
|
-
const [newKiosk] = await createOBKiosk({ tx, createMethod });
|
|
1650
|
-
return {
|
|
1651
|
-
kiosk: newKiosk,
|
|
1652
|
-
isNewKiosk: true
|
|
1653
|
-
};
|
|
1654
|
-
};
|
|
1655
|
-
|
|
1656
|
-
// src/helpers/originByte/isOriginByteBid.ts
|
|
1657
|
-
var isOriginByteBid = (bidType) => bidType === ORIGIN_BYTE_BID_NONCE_TYPE || bidType === "0x2::Kiosk::Kiosk" || bidType === "0x2::kiosk::Kiosk";
|
|
1658
|
-
|
|
1659
|
-
// src/helpers/originByte/isOriginByteCollection.ts
|
|
1660
|
-
var isOriginByteCollection = (transferPolicies) => {
|
|
1661
|
-
const hasOriginBytePolicies = transferPolicies?.filter((policy) => policy?.is_origin_byte)?.length > 0;
|
|
1662
|
-
const hasNonOriginBytePoliciesWithRules = transferPolicies?.filter((policy) => !policy?.is_origin_byte)?.some((policy) => policy?.rules?.length > 0);
|
|
1663
|
-
return Boolean(hasOriginBytePolicies && !hasNonOriginBytePoliciesWithRules);
|
|
1664
|
-
};
|
|
1665
|
-
|
|
1666
|
-
// src/helpers/originByte/shareOriginByteKiosk.ts
|
|
1667
|
-
var shareOriginByteKiosk = async ({ tx, kiosk }) => {
|
|
1668
|
-
tx.moveCall({
|
|
1669
|
-
target: "0x2::transfer::public_share_object",
|
|
1670
|
-
arguments: [tx.object(kiosk)],
|
|
1671
|
-
typeArguments: ["0x2::kiosk::Kiosk"]
|
|
1672
|
-
});
|
|
1673
|
-
};
|
|
1674
|
-
|
|
1675
|
-
// src/helpers/rpc/getObjectType.ts
|
|
1676
|
-
var import_utils2 = require("@mysten/sui/utils");
|
|
1677
|
-
var getObjectType = async ({
|
|
1678
|
-
suiClient,
|
|
1679
|
-
objectId
|
|
1680
|
-
}) => {
|
|
1681
|
-
const normalizedObjectId = objectId.startsWith("0x") ? addLeadingZerosAfter0x(objectId) : objectId;
|
|
1682
|
-
if ((0, import_utils2.isValidSuiObjectId)(normalizedObjectId)) {
|
|
1683
|
-
const res = await suiClient.getObject({ id: normalizedObjectId, options: { showType: true } });
|
|
1684
|
-
return res.data.type;
|
|
1685
|
-
}
|
|
1686
|
-
return "";
|
|
1687
|
-
};
|
|
1688
|
-
|
|
1689
|
-
// src/methods/acceptNftBids/addAcceptNftBidTxs.ts
|
|
1690
|
-
var import_utils3 = require("@mysten/sui/utils");
|
|
1691
|
-
|
|
1692
|
-
// src/graphql/queries/fetchMultibidById.ts
|
|
1693
|
-
var import_graphql_request11 = require("graphql-request");
|
|
1694
|
-
var fetchMultibidChainIdById = import_graphql_request11.gql`
|
|
1695
|
-
query fetchMultibidById($multiBidId: uuid!) {
|
|
1696
|
-
multi_bids(where: { id: { _eq: $multiBidId } }) {
|
|
1697
|
-
chain_id
|
|
1698
|
-
cancelled_at
|
|
1699
|
-
}
|
|
1700
|
-
}
|
|
1701
|
-
`;
|
|
1702
|
-
|
|
1703
|
-
// src/helpers/kiosk/lockNftInsideKioskIfNotLocked.ts
|
|
1704
|
-
var lockNftInsideKioskIfNotLocked = async ({
|
|
1705
|
-
tx,
|
|
1706
|
-
kioskClient,
|
|
1567
|
+
// src/helpers/kiosk/getKioskIdFromKioskTx.ts
|
|
1568
|
+
var getKioskIdFromKioskTx = ({
|
|
1707
1569
|
kioskTx,
|
|
1708
|
-
|
|
1709
|
-
nftType,
|
|
1710
|
-
transferPolicyId
|
|
1570
|
+
tx
|
|
1711
1571
|
}) => {
|
|
1712
|
-
if (lockNftInsideKioskIfKioskCreatedInThisTx({ tx, kioskTx, nftTokenId, nftType, transferPolicyId })) {
|
|
1713
|
-
return;
|
|
1714
|
-
}
|
|
1715
1572
|
const kioskId = "value" in kioskTx.kiosk ? kioskTx.kiosk.value : "Input" in kioskTx.kiosk ? tx.blockData.inputs[kioskTx.kiosk.Input].value : (() => {
|
|
1716
1573
|
throw new Error("Invalid kiosk transaction structure");
|
|
1717
1574
|
})();
|
|
1718
|
-
|
|
1719
|
-
const nftInKiosk = res.items.find((i) => i.objectId === nftTokenId);
|
|
1720
|
-
let takeFromKiosk = true;
|
|
1721
|
-
if (!nftInKiosk) {
|
|
1722
|
-
const result = await kioskClient.client.getObject({
|
|
1723
|
-
id: nftTokenId,
|
|
1724
|
-
options: { showOwner: true }
|
|
1725
|
-
});
|
|
1726
|
-
if (result.data.owner.AddressOwner) {
|
|
1727
|
-
takeFromKiosk = false;
|
|
1728
|
-
} else {
|
|
1729
|
-
throw new Error(`NFT ${nftTokenId} is not found in kiosk ${kioskId}`);
|
|
1730
|
-
}
|
|
1731
|
-
}
|
|
1732
|
-
if (!nftInKiosk?.isLocked) {
|
|
1733
|
-
let takenNftId;
|
|
1734
|
-
if (takeFromKiosk) {
|
|
1735
|
-
const takenNft = kioskTx.take({
|
|
1736
|
-
itemId: nftTokenId,
|
|
1737
|
-
itemType: nftType
|
|
1738
|
-
});
|
|
1739
|
-
takenNftId = "value" in takenNft ? takenNft.value : takenNft;
|
|
1740
|
-
}
|
|
1741
|
-
kioskTx.lock({
|
|
1742
|
-
itemId: takenNftId ?? nftTokenId,
|
|
1743
|
-
itemType: nftType,
|
|
1744
|
-
policy: transferPolicyId
|
|
1745
|
-
});
|
|
1746
|
-
}
|
|
1575
|
+
return kioskId;
|
|
1747
1576
|
};
|
|
1748
|
-
function lockNftInsideKioskIfKioskCreatedInThisTx({
|
|
1749
|
-
tx,
|
|
1750
|
-
kioskTx,
|
|
1751
|
-
nftTokenId,
|
|
1752
|
-
nftType,
|
|
1753
|
-
transferPolicyId
|
|
1754
|
-
}) {
|
|
1755
|
-
if (Array.isArray(kioskTx.kiosk.NestedResult)) {
|
|
1756
|
-
const transaction = tx.blockData.transactions[kioskTx.kiosk.NestedResult[0]];
|
|
1757
|
-
if (transaction.target === "0x0000000000000000000000000000000000000000000000000000000000000002::kiosk::new" || transaction.target === "0x0000000000000000000000000000000000000000000000000000000000000002::personal_kiosk::new") {
|
|
1758
|
-
kioskTx.lock({
|
|
1759
|
-
itemId: nftTokenId,
|
|
1760
|
-
itemType: nftType,
|
|
1761
|
-
policy: transferPolicyId
|
|
1762
|
-
});
|
|
1763
|
-
return true;
|
|
1764
|
-
}
|
|
1765
|
-
throw new Error(`Unsupported kiosk move call ${transaction.target}`);
|
|
1766
|
-
}
|
|
1767
|
-
return false;
|
|
1768
|
-
}
|
|
1769
1577
|
|
|
1770
1578
|
// src/helpers/kiosk/resolveTransferPolicies.ts
|
|
1771
1579
|
var import_kiosk4 = require("@mysten/kiosk");
|
|
@@ -2069,6 +1877,302 @@ var resolveTransferPolicies = async ({
|
|
|
2069
1877
|
}
|
|
2070
1878
|
};
|
|
2071
1879
|
|
|
1880
|
+
// src/helpers/kiosk/takeLockedNftFromKiosk.ts
|
|
1881
|
+
var takeLockedNftFromKiosk = async ({
|
|
1882
|
+
tx,
|
|
1883
|
+
transferPolicies,
|
|
1884
|
+
suiClient,
|
|
1885
|
+
kioskTx,
|
|
1886
|
+
kioskClient,
|
|
1887
|
+
nftTokenId,
|
|
1888
|
+
nftType,
|
|
1889
|
+
kioskOwner
|
|
1890
|
+
}) => {
|
|
1891
|
+
const transferPolicy = getNativeKioskTransferPolicies(transferPolicies)?.at(0);
|
|
1892
|
+
const hasFloorPriceRule = transferPolicy?.rules?.some(
|
|
1893
|
+
(rule) => rule.type === "floor_price_rule"
|
|
1894
|
+
);
|
|
1895
|
+
if (hasFloorPriceRule) {
|
|
1896
|
+
throw new Error("Cannot take locked NFT from kiosk with a minimum floor price rule");
|
|
1897
|
+
}
|
|
1898
|
+
const [purchase_cap] = tx.moveCall({
|
|
1899
|
+
target: "0x2::kiosk::list_with_purchase_cap",
|
|
1900
|
+
arguments: [
|
|
1901
|
+
tx.object("value" in kioskTx.kiosk ? kioskTx.kiosk.value : kioskTx.kiosk),
|
|
1902
|
+
tx.object("value" in kioskTx.kioskCap ? kioskTx.kioskCap.value : kioskTx.kioskCap),
|
|
1903
|
+
tx.pure.address(nftTokenId),
|
|
1904
|
+
tx.pure.u64(0)
|
|
1905
|
+
],
|
|
1906
|
+
typeArguments: [nftType]
|
|
1907
|
+
});
|
|
1908
|
+
const [zeroCoin] = tx.moveCall({
|
|
1909
|
+
target: "0x2::coin::zero",
|
|
1910
|
+
arguments: [],
|
|
1911
|
+
typeArguments: ["0x2::sui::SUI"]
|
|
1912
|
+
});
|
|
1913
|
+
const [nft, transferRequest] = tx.moveCall({
|
|
1914
|
+
target: "0x2::kiosk::purchase_with_cap",
|
|
1915
|
+
arguments: [
|
|
1916
|
+
tx.object("value" in kioskTx.kiosk ? kioskTx.kiosk.value : kioskTx.kiosk),
|
|
1917
|
+
purchase_cap,
|
|
1918
|
+
zeroCoin
|
|
1919
|
+
],
|
|
1920
|
+
typeArguments: [nftType]
|
|
1921
|
+
});
|
|
1922
|
+
await resolveTransferPolicies({
|
|
1923
|
+
tx,
|
|
1924
|
+
transferPolicies,
|
|
1925
|
+
suiClient,
|
|
1926
|
+
walletAddress: kioskOwner,
|
|
1927
|
+
kioskTx,
|
|
1928
|
+
kioskClient,
|
|
1929
|
+
nftType,
|
|
1930
|
+
price: "0",
|
|
1931
|
+
transferRequest,
|
|
1932
|
+
shouldSkipKioskLocking: true
|
|
1933
|
+
});
|
|
1934
|
+
return nft;
|
|
1935
|
+
};
|
|
1936
|
+
|
|
1937
|
+
// src/helpers/kiosk/takeAndBorrowNftFromKiosk.ts
|
|
1938
|
+
var takeAndBorrowNftFromKiosk = async ({
|
|
1939
|
+
tx,
|
|
1940
|
+
transferPolicies,
|
|
1941
|
+
kioskTx,
|
|
1942
|
+
kioskClient,
|
|
1943
|
+
nftTokenId,
|
|
1944
|
+
nftType,
|
|
1945
|
+
suiClient,
|
|
1946
|
+
kioskOwner
|
|
1947
|
+
}) => {
|
|
1948
|
+
const kioskId = getKioskIdFromKioskTx({ kioskTx, tx });
|
|
1949
|
+
const res = await kioskClient.getKiosk({ id: kioskId });
|
|
1950
|
+
const nftInKiosk = res.items.find((i) => i.objectId === nftTokenId);
|
|
1951
|
+
let borrowedNft = null;
|
|
1952
|
+
if (nftInKiosk?.isLocked) {
|
|
1953
|
+
borrowedNft = await takeLockedNftFromKiosk({
|
|
1954
|
+
tx,
|
|
1955
|
+
transferPolicies,
|
|
1956
|
+
kioskTx,
|
|
1957
|
+
nftTokenId,
|
|
1958
|
+
nftType,
|
|
1959
|
+
suiClient,
|
|
1960
|
+
kioskClient,
|
|
1961
|
+
kioskOwner
|
|
1962
|
+
});
|
|
1963
|
+
} else {
|
|
1964
|
+
borrowedNft = kioskTx.take({
|
|
1965
|
+
itemId: nftTokenId,
|
|
1966
|
+
itemType: nftType
|
|
1967
|
+
});
|
|
1968
|
+
}
|
|
1969
|
+
return borrowedNft;
|
|
1970
|
+
};
|
|
1971
|
+
|
|
1972
|
+
// src/helpers/originByte/confirmOBTranfer.ts
|
|
1973
|
+
var confirmOBTranfer = ({ tx, sharedObjects, transferRequest, nftType }) => {
|
|
1974
|
+
tx.moveCall({
|
|
1975
|
+
target: "0x6f42ec2355fcda5ebeee2399d901ae9f71cb214e640a45a0007f1f1cdf9f7b5e::transfer_allowlist::confirm_transfer",
|
|
1976
|
+
arguments: [tx.object(sharedObjects?.allowList), tx.object(transferRequest)],
|
|
1977
|
+
typeArguments: [nftType]
|
|
1978
|
+
});
|
|
1979
|
+
if (sharedObjects?.royaltyStrategy) {
|
|
1980
|
+
tx.moveCall({
|
|
1981
|
+
target: "0x6f42ec2355fcda5ebeee2399d901ae9f71cb214e640a45a0007f1f1cdf9f7b5e::royalty_strategy_bps::confirm_transfer",
|
|
1982
|
+
arguments: [tx.object(sharedObjects?.royaltyStrategy), tx.object(transferRequest)],
|
|
1983
|
+
typeArguments: [nftType, "0x2::sui::SUI"]
|
|
1984
|
+
});
|
|
1985
|
+
}
|
|
1986
|
+
tx.moveCall({
|
|
1987
|
+
target: "0xadf32ebafc587cc86e1e56e59f7b17c7e8cbeb3315193be63c6f73157d4e88b9::transfer_request::confirm",
|
|
1988
|
+
arguments: [tx.object(transferRequest), tx.object(sharedObjects?.transferPolicy)],
|
|
1989
|
+
typeArguments: [nftType, "0x2::sui::SUI"]
|
|
1990
|
+
});
|
|
1991
|
+
};
|
|
1992
|
+
|
|
1993
|
+
// src/helpers/originByte/depositNftIntoOBKiosk.ts
|
|
1994
|
+
var depositItemIntoOBKiosk = ({ tx, kiosk, nftTokenId, nftType }) => {
|
|
1995
|
+
tx.moveCall({
|
|
1996
|
+
target: "0x2678c98fe23173eebea384509464eb81b1f3035a57419cb46d025000c337451a::ob_kiosk::deposit",
|
|
1997
|
+
arguments: [tx.object(kiosk), tx.object(nftTokenId)],
|
|
1998
|
+
typeArguments: [nftType]
|
|
1999
|
+
});
|
|
2000
|
+
};
|
|
2001
|
+
|
|
2002
|
+
// src/helpers/originByte/createOBKiosk.ts
|
|
2003
|
+
var createOBKiosk = async ({ tx, createMethod = "new" }) => {
|
|
2004
|
+
const [kiosk] = tx.moveCall({
|
|
2005
|
+
target: `0x2678c98fe23173eebea384509464eb81b1f3035a57419cb46d025000c337451a::ob_kiosk::${createMethod}`,
|
|
2006
|
+
arguments: [],
|
|
2007
|
+
typeArguments: []
|
|
2008
|
+
});
|
|
2009
|
+
return [kiosk];
|
|
2010
|
+
};
|
|
2011
|
+
|
|
2012
|
+
// src/graphql/queries/fetchWalletKiosks.ts
|
|
2013
|
+
var import_graphql_request10 = require("graphql-request");
|
|
2014
|
+
var fetchWalletKiosks = import_graphql_request10.gql`
|
|
2015
|
+
query fetchWalletKiosks($wallet: String!) {
|
|
2016
|
+
kiosks: kiosks_by_owner_address(owner_address: $wallet) {
|
|
2017
|
+
id
|
|
2018
|
+
is_origin_byte
|
|
2019
|
+
is_personal
|
|
2020
|
+
owner_address
|
|
2021
|
+
profits
|
|
2022
|
+
is_shared
|
|
2023
|
+
}
|
|
2024
|
+
}
|
|
2025
|
+
`;
|
|
2026
|
+
|
|
2027
|
+
// src/helpers/originByte/getOBKiosk.ts
|
|
2028
|
+
var getOBKiosk = async (wallet) => {
|
|
2029
|
+
const res = await gqlChainRequest({
|
|
2030
|
+
chain: "sui",
|
|
2031
|
+
query: fetchWalletKiosks,
|
|
2032
|
+
variables: { wallet: addLeadingZerosAfter0x(wallet) }
|
|
2033
|
+
});
|
|
2034
|
+
return res?.kiosks?.filter((kiosk) => kiosk?.is_origin_byte && kiosk?.is_shared)?.[0]?.id;
|
|
2035
|
+
};
|
|
2036
|
+
|
|
2037
|
+
// src/helpers/originByte/getOrCreateOBKiosk.ts
|
|
2038
|
+
var getOrCreateOBKiosk = async ({
|
|
2039
|
+
tx,
|
|
2040
|
+
address,
|
|
2041
|
+
kioskToUseIfExists,
|
|
2042
|
+
createMethod
|
|
2043
|
+
}) => {
|
|
2044
|
+
if (kioskToUseIfExists) {
|
|
2045
|
+
return {
|
|
2046
|
+
kiosk: kioskToUseIfExists,
|
|
2047
|
+
isNewKiosk: false
|
|
2048
|
+
};
|
|
2049
|
+
}
|
|
2050
|
+
const existingKiosk = await getOBKiosk(address);
|
|
2051
|
+
if (existingKiosk) {
|
|
2052
|
+
return {
|
|
2053
|
+
kiosk: existingKiosk,
|
|
2054
|
+
isNewKiosk: false
|
|
2055
|
+
};
|
|
2056
|
+
}
|
|
2057
|
+
const [newKiosk] = await createOBKiosk({ tx, createMethod });
|
|
2058
|
+
return {
|
|
2059
|
+
kiosk: newKiosk,
|
|
2060
|
+
isNewKiosk: true
|
|
2061
|
+
};
|
|
2062
|
+
};
|
|
2063
|
+
|
|
2064
|
+
// src/helpers/originByte/isOriginByteBid.ts
|
|
2065
|
+
var isOriginByteBid = (bidType) => bidType === ORIGIN_BYTE_BID_NONCE_TYPE || bidType === "0x2::Kiosk::Kiosk" || bidType === "0x2::kiosk::Kiosk";
|
|
2066
|
+
|
|
2067
|
+
// src/helpers/originByte/isOriginByteCollection.ts
|
|
2068
|
+
var isOriginByteCollection = (transferPolicies) => {
|
|
2069
|
+
const hasOriginBytePolicies = transferPolicies?.filter((policy) => policy?.is_origin_byte)?.length > 0;
|
|
2070
|
+
const hasNonOriginBytePoliciesWithRules = transferPolicies?.filter((policy) => !policy?.is_origin_byte)?.some((policy) => policy?.rules?.length > 0);
|
|
2071
|
+
return Boolean(hasOriginBytePolicies && !hasNonOriginBytePoliciesWithRules);
|
|
2072
|
+
};
|
|
2073
|
+
|
|
2074
|
+
// src/helpers/originByte/shareOriginByteKiosk.ts
|
|
2075
|
+
var shareOriginByteKiosk = async ({ tx, kiosk }) => {
|
|
2076
|
+
tx.moveCall({
|
|
2077
|
+
target: "0x2::transfer::public_share_object",
|
|
2078
|
+
arguments: [tx.object(kiosk)],
|
|
2079
|
+
typeArguments: ["0x2::kiosk::Kiosk"]
|
|
2080
|
+
});
|
|
2081
|
+
};
|
|
2082
|
+
|
|
2083
|
+
// src/helpers/rpc/getObjectType.ts
|
|
2084
|
+
var import_utils2 = require("@mysten/sui/utils");
|
|
2085
|
+
var getObjectType = async ({
|
|
2086
|
+
suiClient,
|
|
2087
|
+
objectId
|
|
2088
|
+
}) => {
|
|
2089
|
+
const normalizedObjectId = objectId.startsWith("0x") ? addLeadingZerosAfter0x(objectId) : objectId;
|
|
2090
|
+
if ((0, import_utils2.isValidSuiObjectId)(normalizedObjectId)) {
|
|
2091
|
+
const res = await suiClient.getObject({ id: normalizedObjectId, options: { showType: true } });
|
|
2092
|
+
return res.data.type;
|
|
2093
|
+
}
|
|
2094
|
+
return "";
|
|
2095
|
+
};
|
|
2096
|
+
|
|
2097
|
+
// src/methods/acceptNftBids/addAcceptNftBidTxs.ts
|
|
2098
|
+
var import_utils3 = require("@mysten/sui/utils");
|
|
2099
|
+
|
|
2100
|
+
// src/graphql/queries/fetchMultibidById.ts
|
|
2101
|
+
var import_graphql_request11 = require("graphql-request");
|
|
2102
|
+
var fetchMultibidChainIdById = import_graphql_request11.gql`
|
|
2103
|
+
query fetchMultibidById($multiBidId: uuid!) {
|
|
2104
|
+
multi_bids(where: { id: { _eq: $multiBidId } }) {
|
|
2105
|
+
chain_id
|
|
2106
|
+
cancelled_at
|
|
2107
|
+
}
|
|
2108
|
+
}
|
|
2109
|
+
`;
|
|
2110
|
+
|
|
2111
|
+
// src/helpers/kiosk/lockNftInsideKioskIfNotLocked.ts
|
|
2112
|
+
var lockNftInsideKioskIfNotLocked = async ({
|
|
2113
|
+
tx,
|
|
2114
|
+
kioskClient,
|
|
2115
|
+
kioskTx,
|
|
2116
|
+
nftTokenId,
|
|
2117
|
+
nftType,
|
|
2118
|
+
transferPolicyId
|
|
2119
|
+
}) => {
|
|
2120
|
+
if (lockNftInsideKioskIfKioskCreatedInThisTx({ tx, kioskTx, nftTokenId, nftType, transferPolicyId })) {
|
|
2121
|
+
return;
|
|
2122
|
+
}
|
|
2123
|
+
const kioskId = getKioskIdFromKioskTx({ kioskTx, tx });
|
|
2124
|
+
const res = await kioskClient.getKiosk({ id: kioskId });
|
|
2125
|
+
const nftInKiosk = res.items.find((i) => i.objectId === nftTokenId);
|
|
2126
|
+
let takeFromKiosk = true;
|
|
2127
|
+
if (!nftInKiosk) {
|
|
2128
|
+
const result = await kioskClient.client.getObject({
|
|
2129
|
+
id: nftTokenId,
|
|
2130
|
+
options: { showOwner: true }
|
|
2131
|
+
});
|
|
2132
|
+
if (result.data.owner.AddressOwner) {
|
|
2133
|
+
takeFromKiosk = false;
|
|
2134
|
+
} else {
|
|
2135
|
+
throw new Error(`NFT ${nftTokenId} is not found in kiosk ${kioskId}`);
|
|
2136
|
+
}
|
|
2137
|
+
}
|
|
2138
|
+
if (!nftInKiosk?.isLocked) {
|
|
2139
|
+
let takenNftId;
|
|
2140
|
+
if (takeFromKiosk) {
|
|
2141
|
+
const takenNft = kioskTx.take({
|
|
2142
|
+
itemId: nftTokenId,
|
|
2143
|
+
itemType: nftType
|
|
2144
|
+
});
|
|
2145
|
+
takenNftId = "value" in takenNft ? takenNft.value : takenNft;
|
|
2146
|
+
}
|
|
2147
|
+
kioskTx.lock({
|
|
2148
|
+
itemId: takenNftId ?? nftTokenId,
|
|
2149
|
+
itemType: nftType,
|
|
2150
|
+
policy: transferPolicyId
|
|
2151
|
+
});
|
|
2152
|
+
}
|
|
2153
|
+
};
|
|
2154
|
+
function lockNftInsideKioskIfKioskCreatedInThisTx({
|
|
2155
|
+
tx,
|
|
2156
|
+
kioskTx,
|
|
2157
|
+
nftTokenId,
|
|
2158
|
+
nftType,
|
|
2159
|
+
transferPolicyId
|
|
2160
|
+
}) {
|
|
2161
|
+
if (Array.isArray(kioskTx.kiosk.NestedResult)) {
|
|
2162
|
+
const transaction = tx.blockData.transactions[kioskTx.kiosk.NestedResult[0]];
|
|
2163
|
+
if (transaction.target === "0x0000000000000000000000000000000000000000000000000000000000000002::kiosk::new" || transaction.target === "0x0000000000000000000000000000000000000000000000000000000000000002::personal_kiosk::new") {
|
|
2164
|
+
kioskTx.lock({
|
|
2165
|
+
itemId: nftTokenId,
|
|
2166
|
+
itemType: nftType,
|
|
2167
|
+
policy: transferPolicyId
|
|
2168
|
+
});
|
|
2169
|
+
return true;
|
|
2170
|
+
}
|
|
2171
|
+
throw new Error(`Unsupported kiosk move call ${transaction.target}`);
|
|
2172
|
+
}
|
|
2173
|
+
return false;
|
|
2174
|
+
}
|
|
2175
|
+
|
|
2072
2176
|
// src/helpers/originByte/getOBBidderKiosk.ts
|
|
2073
2177
|
var getOBBidderKiosk = async ({
|
|
2074
2178
|
suiClient,
|
|
@@ -2553,6 +2657,22 @@ async function addTradePortUnlistTxHandler(txData) {
|
|
|
2553
2657
|
...txData,
|
|
2554
2658
|
kioskTx
|
|
2555
2659
|
});
|
|
2660
|
+
if (!hasNativeKioskTransferPolicyRules(txData?.transferPolicies)) {
|
|
2661
|
+
const borrowedItem = await takeAndBorrowNftFromKiosk({
|
|
2662
|
+
tx: txData?.tx,
|
|
2663
|
+
transferPolicies: txData?.transferPolicies,
|
|
2664
|
+
kioskTx,
|
|
2665
|
+
kioskClient: txData?.kioskClient,
|
|
2666
|
+
nftTokenId: txData?.nftTokenId,
|
|
2667
|
+
nftType: txData?.nftType,
|
|
2668
|
+
suiClient: txData?.suiClient,
|
|
2669
|
+
kioskOwner: txData?.seller
|
|
2670
|
+
});
|
|
2671
|
+
txData?.tx.transferObjects(
|
|
2672
|
+
[txData?.tx.object(borrowedItem)],
|
|
2673
|
+
txData?.tx.pure.address(addLeadingZerosAfter0x(txData?.seller))
|
|
2674
|
+
);
|
|
2675
|
+
}
|
|
2556
2676
|
}
|
|
2557
2677
|
});
|
|
2558
2678
|
}
|
|
@@ -2818,11 +2938,17 @@ async function addTradePortAcceptCollectionBidTxHandler(txData) {
|
|
|
2818
2938
|
kiosk: txData?.sellerKiosk,
|
|
2819
2939
|
shouldAssertNftInSharedKiosk: true,
|
|
2820
2940
|
async runCommands(kioskTx) {
|
|
2821
|
-
const
|
|
2822
|
-
|
|
2823
|
-
|
|
2941
|
+
const borrowedItem = await takeAndBorrowNftFromKiosk({
|
|
2942
|
+
tx: txData?.tx,
|
|
2943
|
+
transferPolicies: txData?.transferPolicies,
|
|
2944
|
+
kioskTx,
|
|
2945
|
+
kioskClient: txData?.kioskClient,
|
|
2946
|
+
nftTokenId: txData?.nftTokenId,
|
|
2947
|
+
nftType: txData?.nftType,
|
|
2948
|
+
suiClient: txData?.suiClient,
|
|
2949
|
+
kioskOwner: txData?.seller
|
|
2824
2950
|
});
|
|
2825
|
-
addTradeportAcceptCollectionBidTx({ ...txData, itemTakenOutOfNativeKiosk:
|
|
2951
|
+
addTradeportAcceptCollectionBidTx({ ...txData, itemTakenOutOfNativeKiosk: borrowedItem });
|
|
2826
2952
|
}
|
|
2827
2953
|
});
|
|
2828
2954
|
}
|
|
@@ -2900,11 +3026,17 @@ async function addBluemoveAcceptCollectionBidTxHandler(txData) {
|
|
|
2900
3026
|
kiosk: txData?.sellerKiosk,
|
|
2901
3027
|
shouldAssertNftInSharedKiosk: true,
|
|
2902
3028
|
async runCommands(kioskTx) {
|
|
2903
|
-
const
|
|
2904
|
-
|
|
2905
|
-
|
|
3029
|
+
const borrowedItem = await takeAndBorrowNftFromKiosk({
|
|
3030
|
+
tx: txData?.tx,
|
|
3031
|
+
transferPolicies: txData?.transferPolicies,
|
|
3032
|
+
kioskTx,
|
|
3033
|
+
kioskClient: txData?.kioskClient,
|
|
3034
|
+
nftTokenId: txData?.nftTokenId,
|
|
3035
|
+
nftType: txData?.nftType,
|
|
3036
|
+
suiClient: txData?.suiClient,
|
|
3037
|
+
kioskOwner: txData?.itemOwner
|
|
2906
3038
|
});
|
|
2907
|
-
addBluemoveAcceptCollectionBidTx({ ...txData, itemTakenOutOfNativeKiosk:
|
|
3039
|
+
addBluemoveAcceptCollectionBidTx({ ...txData, itemTakenOutOfNativeKiosk: borrowedItem });
|
|
2908
3040
|
}
|
|
2909
3041
|
});
|
|
2910
3042
|
}
|
|
@@ -5153,9 +5285,15 @@ async function addTradePortListTxHandler(txData) {
|
|
|
5153
5285
|
kiosk: txData?.sellerKiosk,
|
|
5154
5286
|
shouldAssertNftInSharedKiosk: true,
|
|
5155
5287
|
async runCommands(kioskTx) {
|
|
5156
|
-
const borrowedItem =
|
|
5157
|
-
|
|
5158
|
-
|
|
5288
|
+
const borrowedItem = await takeAndBorrowNftFromKiosk({
|
|
5289
|
+
tx: txData?.tx,
|
|
5290
|
+
transferPolicies: txData?.transferPolicies,
|
|
5291
|
+
kioskTx,
|
|
5292
|
+
kioskClient: txData?.kioskClient,
|
|
5293
|
+
nftTokenId: txData?.nftTokenId,
|
|
5294
|
+
nftType: txData?.nftType,
|
|
5295
|
+
suiClient: txData?.suiClient,
|
|
5296
|
+
kioskOwner: txData?.seller
|
|
5159
5297
|
});
|
|
5160
5298
|
addTradePortListTx({ ...txData, borrowedItem });
|
|
5161
5299
|
}
|
|
@@ -5176,7 +5314,7 @@ async function addTradePortListTxHandler(txData) {
|
|
|
5176
5314
|
}
|
|
5177
5315
|
});
|
|
5178
5316
|
}
|
|
5179
|
-
if (!txData?.sellerKiosk &&
|
|
5317
|
+
if (!txData?.sellerKiosk && hasNativeKioskTransferPolicyRules(txData?.transferPolicies)) {
|
|
5180
5318
|
return kioskTxWrapper({
|
|
5181
5319
|
tx: txData?.tx,
|
|
5182
5320
|
kioskClient: txData?.kioskClient,
|
|
@@ -5219,22 +5357,22 @@ function addTradePortRelistTx({
|
|
|
5219
5357
|
});
|
|
5220
5358
|
}
|
|
5221
5359
|
function addBlueMoveRelistTx(txData) {
|
|
5222
|
-
const { tx, nftTokenId, nftType, listPrice } = txData;
|
|
5360
|
+
const { tx, nftTokenId, nftType, listPrice, suiClient } = txData;
|
|
5223
5361
|
const borrowedItem = tx.moveCall({
|
|
5224
5362
|
target: "0xd5dd28cc24009752905689b2ba2bf90bfc8de4549b9123f93519bb8ba9bf9981::marketplace::delist",
|
|
5225
5363
|
arguments: [tx.object(BLUEMOVE_MARKET_CONFIG_OBJECT), tx.pure.address(nftTokenId)],
|
|
5226
5364
|
typeArguments: [nftType, nftType]
|
|
5227
5365
|
});
|
|
5228
|
-
addTradePortListTx({ ...txData, listPrice, borrowedItem });
|
|
5366
|
+
addTradePortListTx({ ...txData, listPrice, borrowedItem, suiClient });
|
|
5229
5367
|
}
|
|
5230
5368
|
function addTocenRelistTx(txData) {
|
|
5231
|
-
const { tx, nftTokenId, nftType, listPrice } = txData;
|
|
5369
|
+
const { tx, nftTokenId, nftType, listPrice, suiClient } = txData;
|
|
5232
5370
|
const borrowedItem = tx.moveCall({
|
|
5233
5371
|
target: "0x3605d91c559e80cf8fdeabae9abaccb0bc38f96eac0b32bf47e95a9159a5277f::tocen_marketplace::delist",
|
|
5234
5372
|
arguments: [tx.object(TOCEN_MARKETPLACE_OBJECT), tx.pure.address(nftTokenId)],
|
|
5235
5373
|
typeArguments: [nftType]
|
|
5236
5374
|
});
|
|
5237
|
-
addTradePortListTx({ ...txData, listPrice, borrowedItem });
|
|
5375
|
+
addTradePortListTx({ ...txData, listPrice, borrowedItem, suiClient });
|
|
5238
5376
|
}
|
|
5239
5377
|
|
|
5240
5378
|
// src/methods/relistNft/relistNft.ts
|
|
@@ -5365,6 +5503,7 @@ var listNfts = async ({ nfts, walletAddress }, context) => {
|
|
|
5365
5503
|
} else {
|
|
5366
5504
|
const listTxData = {
|
|
5367
5505
|
tx,
|
|
5506
|
+
suiClient: context.suiClient,
|
|
5368
5507
|
kioskClient: context.kioskClient,
|
|
5369
5508
|
transferPolicies,
|
|
5370
5509
|
seller: walletAddress,
|
|
@@ -5710,6 +5849,7 @@ async function migrateNftsFromUnsharedToSharedKiosks({ walletAddress, max = 50 }
|
|
|
5710
5849
|
tx,
|
|
5711
5850
|
kioskTx,
|
|
5712
5851
|
kioskClient: context?.kioskClient,
|
|
5852
|
+
suiClient: context?.suiClient,
|
|
5713
5853
|
senderKiosk: unsharedNativeKiosk,
|
|
5714
5854
|
senderAddress: walletAddress,
|
|
5715
5855
|
recipientAddress: walletAddress,
|
|
@@ -6414,6 +6554,7 @@ var transferNfts = async ({ nftIds, recipientAddress, walletAddress }, context)
|
|
|
6414
6554
|
const transferPolicies = nft?.collection?.chain_state?.transfer_policies;
|
|
6415
6555
|
const txData = {
|
|
6416
6556
|
tx,
|
|
6557
|
+
suiClient: context.suiClient,
|
|
6417
6558
|
kioskClient: context.kioskClient,
|
|
6418
6559
|
nftType,
|
|
6419
6560
|
nftTokenId: nft?.token_id,
|
|
@@ -6422,6 +6563,32 @@ var transferNfts = async ({ nftIds, recipientAddress, walletAddress }, context)
|
|
|
6422
6563
|
recipientAddress,
|
|
6423
6564
|
transferPolicies
|
|
6424
6565
|
};
|
|
6566
|
+
if (txData?.senderKiosk && !hasNativeKioskTransferPolicyRules(txData?.transferPolicies)) {
|
|
6567
|
+
await kioskTxWrapper({
|
|
6568
|
+
tx: txData?.tx,
|
|
6569
|
+
kioskClient: txData?.kioskClient,
|
|
6570
|
+
kioskOwner: txData?.senderAddress,
|
|
6571
|
+
kiosk: txData?.senderKiosk,
|
|
6572
|
+
shouldAssertNftInSharedKiosk: true,
|
|
6573
|
+
async runCommands(kioskTx) {
|
|
6574
|
+
const borrowedItem = await takeAndBorrowNftFromKiosk({
|
|
6575
|
+
tx: txData?.tx,
|
|
6576
|
+
transferPolicies: txData?.transferPolicies,
|
|
6577
|
+
kioskTx,
|
|
6578
|
+
kioskClient: txData?.kioskClient,
|
|
6579
|
+
nftTokenId: txData?.nftTokenId,
|
|
6580
|
+
nftType: txData?.nftType,
|
|
6581
|
+
suiClient: txData?.suiClient,
|
|
6582
|
+
kioskOwner: txData?.senderAddress
|
|
6583
|
+
});
|
|
6584
|
+
tx.transferObjects(
|
|
6585
|
+
[tx.object(borrowedItem)],
|
|
6586
|
+
tx.pure.address(addLeadingZerosAfter0x(recipientAddress))
|
|
6587
|
+
);
|
|
6588
|
+
}
|
|
6589
|
+
});
|
|
6590
|
+
continue;
|
|
6591
|
+
}
|
|
6425
6592
|
if (!txData.senderKiosk) {
|
|
6426
6593
|
tx.transferObjects(
|
|
6427
6594
|
[tx.object(txData.nftTokenId)],
|