UNPKG

@tatumio/tatum-v1

Version:

Tatum API client allows browsers and Node.js clients to interact with Tatum API.

229 lines 20.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sendAddMultiTokenMinter = exports.prepareAddMultiTokenMinter = exports.transferMultiTokenBatch = exports.transferMultiToken = exports.burnMultiTokenBatch = exports.burnMultiToken = exports.mintMultiTokenBatch = exports.mintMultiToken = exports.deployMultiToken = exports.getMultiTokenMetadata = exports.getMultiTokenTransaction = exports.getMultiTokensBatchBalance = exports.getMultiTokensBalance = exports.getMultiTokenContractAddress = void 0; const tatum_1 = require("../connector/tatum"); const erc1155_abi_1 = __importDefault(require("../contracts/erc1155/erc1155_abi")); const helpers_1 = require("../helpers"); const model_1 = require("../model"); const transaction_1 = require("../transaction"); /** * For more details, see <a href="https://apidoc.tatum.io/#operation/MultiTokenGetContractAddress" target="_blank">Tatum API documentation</a> */ const getMultiTokenContractAddress = async (chain, txId) => tatum_1.get(`/v3/multitoken/address/${chain}/${txId}`); exports.getMultiTokenContractAddress = getMultiTokenContractAddress; /** * For more details, see <a href="https://apidoc.tatum.io/#operation/MultiTokenGetBalanceBatch" target="_blank">Tatum API documentation</a> */ const getMultiTokensBalance = async (chain, contractAddress, address, tokenId) => tatum_1.get(`/v3/multitoken/balance/${chain}/${contractAddress}/${address}/${tokenId}`); exports.getMultiTokensBalance = getMultiTokensBalance; /** * For more details, see <a href="https://apidoc.tatum.io/#operation/MultiTokenGetBalance" target="_blank">Tatum API documentation</a> */ const getMultiTokensBatchBalance = async (chain, contractAddress, address, tokenIds) => tatum_1.get(`/v3/multitoken/balance/batch/${chain}/${contractAddress}?address=${address}&tokenId=${tokenIds}`); exports.getMultiTokensBatchBalance = getMultiTokensBatchBalance; /** * For more details, see <a href="https://apidoc.tatum.io/#operation/MultiTokenGetTransaction" target="_blank">Tatum API documentation</a> */ const getMultiTokenTransaction = async (chain, txId) => tatum_1.get(`/v3/multitoken/transaction/${chain}/${txId}`); exports.getMultiTokenTransaction = getMultiTokenTransaction; /** * For more details, see <a href="https://apidoc.tatum.io/#operation/MultiTokenGetMetadata" target="_blank">Tatum API documentation</a> */ const getMultiTokenMetadata = async (chain, contractAddress, tokenId) => tatum_1.get(`/v3/multitoken/metadata/${chain}/${contractAddress}/${tokenId}`); exports.getMultiTokenMetadata = getMultiTokenMetadata; /** * Deploy MultiTokens (1155) contract. * @param testnet if we use testnet or not * @param body body of the request * @param provider optional provider do broadcast tx */ const deployMultiToken = async (testnet, body, provider) => { switch (body.chain) { case model_1.Currency.CELO: return transaction_1.sendCeloDeployMultiTokenTransaction(testnet, body, provider); case model_1.Currency.MATIC: return transaction_1.sendPolygonDeployMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.KLAY: return transaction_1.sendKlaytnDeployMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.ONE: return transaction_1.sendOneDeployMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.ETH: return transaction_1.sendEthDeployMultiTokenTransaction(body, provider); case model_1.Currency.BSC: return transaction_1.sendBscDeployMultiTokenTransaction(body, provider); } }; exports.deployMultiToken = deployMultiToken; /** * Mint MultiTokens (1155) * @param testnet if we use testnet or not * @param body body of the request * @param provider optional provider do broadcast tx */ const mintMultiToken = async (testnet, body, provider) => { switch (body.chain) { case model_1.Currency.CELO: return transaction_1.sendCeloMintMultiTokenTransaction(testnet, body, provider); case model_1.Currency.ETH: return transaction_1.sendEthMintMultiTokenTransaction(body, provider); case model_1.Currency.MATIC: return transaction_1.sendPolygonMintMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.KLAY: return transaction_1.sendKlaytnMintMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.ONE: return transaction_1.sendOneMintMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.BSC: return transaction_1.sendBscMintMultiTokenTransaction(body, provider); case model_1.Currency.ALGO: return transaction_1.sendAlgoCreateFractionalNFTSignedTransaction(testnet, body, provider); } }; exports.mintMultiToken = mintMultiToken; /** * Mint MultiTokens (1155) in a batch call. * @param testnet if we use testnet or not * @param body body of the request * @param provider optional provider do broadcast tx */ const mintMultiTokenBatch = async (testnet, body, provider) => { switch (body.chain) { case model_1.Currency.CELO: return transaction_1.sendCeloMintMultiTokenBatchTransaction(testnet, body, provider); case model_1.Currency.ETH: return transaction_1.sendEthMintMultiTokenBatchTransaction(body, provider); case model_1.Currency.MATIC: return transaction_1.sendPolygonMintMultiTokenBatchSignedTransaction(testnet, body, provider); case model_1.Currency.KLAY: return transaction_1.sendKlaytnMintMultiTokenBatchSignedTransaction(testnet, body, provider); case model_1.Currency.ONE: return transaction_1.sendOneMintMultiTokenBatchSignedTransaction(testnet, body, provider); case model_1.Currency.BSC: return transaction_1.sendBscMintMultiTokenBatchTransaction(body, provider); } }; exports.mintMultiTokenBatch = mintMultiTokenBatch; /** * Burn MultiTokens (1155). * @param testnet if we use testnet or not * @param body body of the request * @param provider optional provider do broadcast tx */ const burnMultiToken = async (testnet, body, provider) => { switch (body.chain) { case model_1.Currency.CELO: return transaction_1.sendCeloBurnMultiTokenTransaction(testnet, body, provider); case model_1.Currency.ETH: return transaction_1.sendEthBurnMultiTokenTransaction(body, provider); case model_1.Currency.MATIC: return transaction_1.sendPolygonBurnMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.KLAY: return transaction_1.sendKlaytnBurnMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.ONE: return transaction_1.sendOneBurnMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.BSC: return transaction_1.sendBscBurnMultiTokenTransaction(body, provider); case model_1.Currency.ALGO: return transaction_1.sendAlgoBurnFractionalNFTSignedTransaction(testnet, body, provider); } }; exports.burnMultiToken = burnMultiToken; /** * Burn MultiTokens (1155) in a batch call. * @param testnet if we use testnet or not * @param body body of the request * @param provider optional provider do broadcast tx */ const burnMultiTokenBatch = async (testnet, body, provider) => { switch (body.chain) { case model_1.Currency.CELO: return transaction_1.sendCeloBurnMultiTokenBatchTransaction(testnet, body, provider); case model_1.Currency.ETH: return transaction_1.sendEthBurnBatchMultiTokenTransaction(body, provider); case model_1.Currency.MATIC: return transaction_1.sendPolygonBurnMultiTokenBatchSignedTransaction(testnet, body, provider); case model_1.Currency.KLAY: return transaction_1.sendKlaytnBurnMultiTokenBatchSignedTransaction(testnet, body, provider); case model_1.Currency.ONE: return transaction_1.sendOneBurnMultiTokenBatchSignedTransaction(testnet, body, provider); case model_1.Currency.BSC: return transaction_1.sendBscBurnBatchMultiTokenTransaction(body, provider); } }; exports.burnMultiTokenBatch = burnMultiTokenBatch; /** * Transfer MultiTokens (1155). * @param testnet if we use testnet or not * @param body body of the request * @param provider optional provider do broadcast tx */ const transferMultiToken = async (testnet, body, provider) => { switch (body.chain) { case model_1.Currency.CELO: return transaction_1.sendCeloTransferMultiTokenTransaction(testnet, body, provider); case model_1.Currency.ETH: return transaction_1.sendEthMultiTokenTransaction(body, provider); case model_1.Currency.MATIC: return transaction_1.sendPolygonTransferMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.KLAY: return transaction_1.sendKlaytnTransferMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.ONE: return transaction_1.sendOneTransferMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.BSC: return transaction_1.sendBscMultiTokenTransaction(body, provider); case model_1.Currency.ALGO: return transaction_1.sendAlgoTransferFractionalNFTSignedTransaction(testnet, body, provider); } }; exports.transferMultiToken = transferMultiToken; /** * Transfer MultiTokens (1155) in a batch call. * @param testnet if we use testnet or not * @param body body of the request * @param provider optional provider do broadcast tx */ const transferMultiTokenBatch = async (testnet, body, provider) => { switch (body.chain) { case model_1.Currency.CELO: return transaction_1.sendCeloTransferMultiTokenBatchTransaction(testnet, body, provider); case model_1.Currency.ETH: return transaction_1.sendEthMultiTokenBatchTransaction(body, provider); case model_1.Currency.MATIC: return transaction_1.preparePolygonBatchTransferMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.KLAY: return transaction_1.prepareKlaytnBatchTransferMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.ONE: return transaction_1.prepareOneBatchTransferMultiTokenSignedTransaction(testnet, body, provider); case model_1.Currency.BSC: return transaction_1.sendBscMultiTokenBatchTransaction(body, provider); } }; exports.transferMultiTokenBatch = transferMultiTokenBatch; /** * Prepare add new minter to the MultiToken (1155) contract transaction. * @param testnet if we use testnet or not * @param body body of the add minter request * @param provider optional provider do broadcast tx */ const prepareAddMultiTokenMinter = async (testnet, body, provider) => { await tatum_1.validateBody(body, model_1.AddMinter); const params = ['0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6', body.minter]; return await helpers_1.helperPrepareSCCall(testnet, body, model_1.AddMinter, 'grantRole', params, undefined, provider, erc1155_abi_1.default); }; exports.prepareAddMultiTokenMinter = prepareAddMultiTokenMinter; /** * Add new minter to the MultiToken (1155) contract. * @param testnet if we use testnet or not * @param body body of the add minter request * @param provider optional provider do broadcast tx */ const sendAddMultiTokenMinter = async (testnet, body, provider) => { if (body.signatureId) { return await tatum_1.post(`v3/multitoken/mint/add`, body); } return helpers_1.helperBroadcastTx(body.chain, await exports.prepareAddMultiTokenMinter(testnet, body, provider)); }; exports.sendAddMultiTokenMinter = sendAddMultiTokenMinter; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXVsdGlUb2tlbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBNkQ7QUFDN0QsbUZBQW1EO0FBQ25ELHdDQUFvRTtBQUNwRSxvQ0FrQmtCO0FBQ2xCLGdEQThDd0I7QUFFeEI7O0dBRUc7QUFDSSxNQUFNLDRCQUE0QixHQUFHLEtBQUssRUFBRSxLQUFlLEVBQUUsSUFBWSxFQUF3QyxFQUFFLENBQ3hILFdBQUcsQ0FBQywwQkFBMEIsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUE7QUFEbkMsUUFBQSw0QkFBNEIsZ0NBQ087QUFFaEQ7O0dBRUc7QUFFSSxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxLQUFlLEVBQUUsZUFBdUIsRUFBRSxPQUFlLEVBQUUsT0FBZSxFQUFxQixFQUFFLENBQzNJLFdBQUcsQ0FBQywwQkFBMEIsS0FBSyxJQUFJLGVBQWUsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQTtBQURwRSxRQUFBLHFCQUFxQix5QkFDK0M7QUFFakY7O0dBRUc7QUFDSSxNQUFNLDBCQUEwQixHQUFHLEtBQUssRUFBRSxLQUFlLEVBQUUsZUFBdUIsRUFBRSxPQUFlLEVBQUUsUUFBZ0IsRUFBcUIsRUFBRSxDQUNqSixXQUFHLENBQUMsZ0NBQWdDLEtBQUssSUFBSSxlQUFlLFlBQVksT0FBTyxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUE7QUFEM0YsUUFBQSwwQkFBMEIsOEJBQ2lFO0FBR3hHOztHQUVHO0FBQ0ksTUFBTSx3QkFBd0IsR0FBRyxLQUFLLEVBQUUsS0FBZSxFQUFFLElBQVksRUFBZ0IsRUFBRSxDQUM1RixXQUFHLENBQUMsOEJBQThCLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBRHZDLFFBQUEsd0JBQXdCLDRCQUNlO0FBQ3BEOztHQUVHO0FBQ0ksTUFBTSxxQkFBcUIsR0FBRyxLQUFL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