UNPKG

@harmony-js/core

Version:

harmony core package

227 lines 9.46 kB
"use strict"; /** * @packageDocumentation * @module harmony-core */ Object.defineProperty(exports, "__esModule", { value: true }); exports.HarmonyExtension = exports.ExtensionType = void 0; var tslib_1 = require("tslib"); var network_1 = require("@harmony-js/network"); var crypto = tslib_1.__importStar(require("@harmony-js/crypto")); var utils = tslib_1.__importStar(require("@harmony-js/utils")); var transaction_1 = require("@harmony-js/transaction"); var blockchain_1 = require("./blockchain"); var contract_1 = require("@harmony-js/contract"); /** @hidden */ var ExtensionType; (function (ExtensionType) { ExtensionType["MathWallet"] = "MathWallet"; ExtensionType["OneWallet"] = "OneWallet"; })(ExtensionType = exports.ExtensionType || (exports.ExtensionType = {})); var HarmonyExtension = /** @class */ (function () { /** * Create an blockchain instance support wallet injection * * @param wallet could be MathWallet or OneWallet instance * @param config (optional), using default `Chain_Id` and `Chain_Type` * * @example * ```javascript * // Using Mathwallet instance * export const initEx = async() => { * hmyEx = new HarmonyExtension(window.harmony); * } * // Using OneWallet instance * export const initEx = async() => { * hmyEx = new HarmonyExtension(window.onewallet); * } * ``` */ function HarmonyExtension(wallet, config) { if (config === void 0) { config = { chainId: utils.defaultConfig.Default.Chain_ID, chainType: utils.defaultConfig.Default.Chain_Type, }; } this.extensionType = null; this.wallet = wallet; // check if it is mathwallet or onewallet this.isExtension(this.wallet); if (wallet.messenger) { this.provider = wallet.messenger.provider; this.messenger = wallet.messenger; } else { this.provider = new network_1.Provider(config.chainUrl || wallet.network.chain_url).provider; this.messenger = new network_1.Messenger(this.provider, config.chainType, config.chainId); } this.wallet.messenger = this.messenger; this.blockchain = new blockchain_1.Blockchain(this.messenger); this.transactions = new transaction_1.TransactionFactory(this.messenger); this.contracts = new contract_1.ContractFactory(this.wallet); this.crypto = crypto; this.utils = utils; } /** * Will change the provider for its module. * * @param provider a valid provider, you can replace it with your own working node * * @example * ```javascript * const tmp = hmyEx.setProvider('http://localhost:9500'); * ``` */ HarmonyExtension.prototype.setProvider = function (provider) { this.provider = new network_1.Provider(provider).provider; this.messenger.setProvider(this.provider); this.setMessenger(this.messenger); }; /** * Change the Shard ID * * @example * ``` * hmyEx.setShardID(2); * ``` */ HarmonyExtension.prototype.setShardID = function (shardID) { this.defaultShardID = shardID; this.messenger.setDefaultShardID(this.defaultShardID); this.setMessenger(this.messenger); }; HarmonyExtension.prototype.isExtension = function (wallet) { var _this = this; var isExtension = false; this.extensionType = null; if (wallet.isMathWallet || wallet.isOneWallet) { isExtension = true; if (wallet.isMathWallet) this.extensionType = ExtensionType.MathWallet; else this.extensionType = ExtensionType.OneWallet; // remake signTransaction of MathWallet or OneWallet var signTransaction_1 = this.wallet.signTransaction; this.wallet.signTransaction = function (transaction, updateNonce, encodeMode, blockNumber) { if (updateNonce === void 0) { updateNonce = true; } if (encodeMode === void 0) { encodeMode = 'rlp'; } if (blockNumber === void 0) { blockNumber = 'latest'; } return tslib_1.__awaiter(_this, void 0, void 0, function () { var extensionAccount, nonce; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.wallet.getAccount()]; case 1: extensionAccount = _a.sent(); if (!updateNonce) return [3 /*break*/, 3]; return [4 /*yield*/, this.messenger.send(network_1.RPCMethod.GetAccountNonce, [crypto.getAddress(extensionAccount.address).checksum, blockNumber], this.messenger.chainPrefix, typeof transaction.txParams.shardID === 'string' ? Number.parseInt(transaction.txParams.shardID, 10) : transaction.txParams.shardID)]; case 2: nonce = _a.sent(); transaction.setParams(tslib_1.__assign(tslib_1.__assign({}, transaction.txParams), { from: crypto.getAddress(extensionAccount.address).bech32, nonce: Number.parseInt(utils.isHex(nonce.result.toString()) ? utils.hexToNumber(nonce.result.toString()) : nonce.result.toString(), 10) })); return [3 /*break*/, 4]; case 3: transaction.setParams(tslib_1.__assign(tslib_1.__assign({}, transaction.txParams), { from: crypto.getAddress(extensionAccount.address).bech32 })); _a.label = 4; case 4: return [2 /*return*/, signTransaction_1(transaction, false, encodeMode, blockNumber)]; } }); }); }; } if (!isExtension) { throw new Error('Extension is not found'); } return; }; /** * Get the wallet account * * @example * ```javascript * const account = hmyEx.login(); * console.log(account); * ``` */ HarmonyExtension.prototype.login = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var account; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.wallet.getAccount()]; case 1: account = _a.sent(); // Use address return [2 /*return*/, account]; } }); }); }; /** * Log out the wallet account * * @example * ```javascript * hmyEx.logout(); * ``` */ HarmonyExtension.prototype.logout = function () { return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.wallet.forgetIdentity()]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; /** * Set the sharding Structure * * @param shardingStructures The array of information of sharding structures * * @example * ```javascript * hmyEx.shardingStructures([ * {"current":true,"http":"http://127.0.0.1:9500", * "shardID":0,"ws":"ws://127.0.0.1:9800"}, * {"current":false,"http":"http://127.0.0.1:9501", * "shardID":1,"ws":"ws://127.0.0.1:9801"} * ]); * ``` */ HarmonyExtension.prototype.shardingStructures = function (shardingStructures) { var e_1, _a; try { for (var shardingStructures_1 = tslib_1.__values(shardingStructures), shardingStructures_1_1 = shardingStructures_1.next(); !shardingStructures_1_1.done; shardingStructures_1_1 = shardingStructures_1.next()) { var shard = shardingStructures_1_1.value; var shardID = typeof shard.shardID === 'string' ? Number.parseInt(shard.shardID, 10) : shard.shardID; this.messenger.shardProviders.set(shardID, { current: shard.current !== undefined ? shard.current : false, shardID: shardID, http: shard.http, ws: shard.ws, }); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (shardingStructures_1_1 && !shardingStructures_1_1.done && (_a = shardingStructures_1.return)) _a.call(shardingStructures_1); } finally { if (e_1) throw e_1.error; } } this.setMessenger(this.messenger); }; /**@ignore*/ HarmonyExtension.prototype.setMessenger = function (messenger) { this.blockchain.setMessenger(messenger); this.wallet.messenger = messenger; this.transactions.setMessenger(messenger); }; return HarmonyExtension; }()); exports.HarmonyExtension = HarmonyExtension; //# sourceMappingURL=harmonyExtension.js.map