@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
229 lines • 20.9 kB
JavaScript
"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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